mirror of
				https://github.com/pbatard/rufus.git
				synced 2024-08-14 23:57:05 +00:00 
			
		
		
		
	[iso] upgrade libcdio track and sector handling
* From latest git version of libcdio
This commit is contained in:
		
							parent
							
								
									d3238d7210
								
							
						
					
					
						commit
						b0e131e5e4
					
				
					 5 changed files with 179 additions and 165 deletions
				
			
		|  | @ -15,7 +15,7 @@ | |||
|     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | ||||
| */ | ||||
| 
 | ||||
| /** \file track.h 
 | ||||
| /** \file track.h
 | ||||
|  *  \brief  The top-level header for track-related libcdio calls. | ||||
|  */ | ||||
| #ifndef CDIO_TRACK_H_ | ||||
|  | @ -27,7 +27,7 @@ extern "C" { | |||
| 
 | ||||
|   /*! Printable tags for track_format_t enumeration.  */ | ||||
|   extern const char *track_format2str[6]; | ||||
|    | ||||
| 
 | ||||
|   typedef enum  { | ||||
|     TRACK_FORMAT_AUDIO,   /**< Audio track, e.g. CD-DA */ | ||||
|     TRACK_FORMAT_CDI,     /**< CD-i. How this is different from DATA below? */ | ||||
|  | @ -40,9 +40,9 @@ extern "C" { | |||
|   } track_format_t; | ||||
| 
 | ||||
|   typedef enum { | ||||
|     CDIO_TRACK_FLAG_FALSE,  | ||||
|     CDIO_TRACK_FLAG_TRUE,  | ||||
|     CDIO_TRACK_FLAG_ERROR,  | ||||
|     CDIO_TRACK_FLAG_FALSE, | ||||
|     CDIO_TRACK_FLAG_TRUE, | ||||
|     CDIO_TRACK_FLAG_ERROR, | ||||
|     CDIO_TRACK_FLAG_UNKNOWN | ||||
|   } track_flag_t; | ||||
| 
 | ||||
|  | @ -54,7 +54,7 @@ extern "C" { | |||
|                                    implemented or -1 for error. | ||||
|                               */ | ||||
|   } track_flags_t; | ||||
|      | ||||
| 
 | ||||
|   /*! The leadout track is always 0xAA, regardless of # of tracks on
 | ||||
|     disc, or what value may be used internally. For example although | ||||
|     OS X uses a different value for the lead-out track internally than | ||||
|  | @ -71,7 +71,7 @@ extern "C" { | |||
|     CDIO_CDROM_LBA           = 0x01, /**< "logical block": first frame is #0 */ | ||||
|     CDIO_CDROM_MSF           = 0x02, /**< "minute-second-frame": binary, not
 | ||||
|                                         BCD here! */ | ||||
|     CDIO_CDROM_DATA_TRACK    = 0x04,  | ||||
|     CDIO_CDROM_DATA_TRACK    = 0x04, | ||||
|     CDIO_CDROM_CDI_TRACK     = 0x10, | ||||
|     CDIO_CDROM_XA_TRACK      = 0x20, | ||||
|     CDIO_CD_MAX_TRACKS       =   99, /**< Largest CD track number */ | ||||
|  | @ -79,10 +79,10 @@ extern "C" { | |||
|     CDIO_INVALID_TRACK       = 0xFF, /**<  Constant for invalid track number */ | ||||
| 
 | ||||
|    } cdio_track_enums; | ||||
|    | ||||
| 
 | ||||
| #define CDIO_CD_MIN_TRACK_NO  1 /**< Smallest CD track number */ | ||||
|    | ||||
|   /*! track modes (Table 350) 
 | ||||
| 
 | ||||
|   /*! track modes (Table 350)
 | ||||
|     reference: MMC-3 draft revsion - 10g | ||||
|   */ | ||||
|   typedef enum { | ||||
|  | @ -95,26 +95,26 @@ extern "C" { | |||
|     MODE2_FORM_MIX,             /**< 2336 byte block length */ | ||||
|     MODE2_RAW                   /**< 2352 byte block length */ | ||||
|   } trackmode_t; | ||||
|    | ||||
|   /*!
 | ||||
|     Get the number of the first track.  | ||||
| 
 | ||||
|     @return the track number or CDIO_INVALID_TRACK  | ||||
|   /*!
 | ||||
|     Get the number of the first track. | ||||
| 
 | ||||
|     @return the track number or CDIO_INVALID_TRACK | ||||
|     on error. | ||||
|   */ | ||||
|   track_t cdio_get_first_track_num(const CdIo_t *p_cdio); | ||||
|    | ||||
| 
 | ||||
|   /*!
 | ||||
|     Return the last track number. | ||||
|     CDIO_INVALID_TRACK is returned on error. | ||||
|   */ | ||||
|   track_t cdio_get_last_track_num (const CdIo_t *p_cdio); | ||||
|    | ||||
| 
 | ||||
| 
 | ||||
|   /*! Find the track which contains lsn.
 | ||||
|     CDIO_INVALID_TRACK is returned if the lsn outside of the CD or | ||||
|     if there was some error.  | ||||
|      | ||||
|     if there was some error. | ||||
| 
 | ||||
|     If the lsn is before the pregap of the first track 0 is returned. | ||||
|     Otherwise we return the track that spans the lsn. | ||||
|   */ | ||||
|  | @ -125,37 +125,37 @@ extern "C" { | |||
|       Not meaningful if track is not an audio track. | ||||
|   */ | ||||
|   int cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track); | ||||
|    | ||||
| 
 | ||||
|   /*! Return copy protection status on a track. Is this meaningful
 | ||||
|       if not an audio track? | ||||
|    */ | ||||
|   track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio,  | ||||
|   track_flag_t cdio_get_track_copy_permit(const CdIo_t *p_cdio, | ||||
|                                           track_t i_track); | ||||
|    | ||||
|   /*!  
 | ||||
|     Get the format (audio, mode2, mode1) of track.  | ||||
| 
 | ||||
|   /*!
 | ||||
|     Get the format (audio, mode2, mode1) of track. | ||||
|   */ | ||||
|   track_format_t cdio_get_track_format(const CdIo_t *p_cdio, track_t i_track); | ||||
|    | ||||
| 
 | ||||
|   /*!
 | ||||
|     Return true if we have XA data (green, mode2 form1) or | ||||
|     XA data (green, mode2 form2). That is track begins: | ||||
|     sync - header - subheader | ||||
|     12     4      -  8 | ||||
|      | ||||
| 
 | ||||
|     FIXME: there's gotta be a better design for this and get_track_format? | ||||
|   */ | ||||
|   bool cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track); | ||||
|      | ||||
|   /*!  
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Return the ending LSN for track number | ||||
|     i_track in cdio.  CDIO_INVALID_LSN is returned on error. | ||||
|   */ | ||||
|   lsn_t cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track); | ||||
| 
 | ||||
|   /*!  
 | ||||
|   /*!
 | ||||
|     Get the starting LBA for track number | ||||
|     i_track in p_cdio.  Track numbers usually start at something  | ||||
|     i_track in p_cdio.  Track numbers usually start at something | ||||
|     greater than 0, usually 1. | ||||
| 
 | ||||
|     The "leadout" track is specified either by | ||||
|  | @ -166,10 +166,10 @@ extern "C" { | |||
|     @return the starting LBA or CDIO_INVALID_LBA on error. | ||||
|   */ | ||||
|   lba_t cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track); | ||||
|    | ||||
|   /*!  
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Return the starting LSN for track number | ||||
|     i_track in p_cdio.  Track numbers usually start at something  | ||||
|     i_track in p_cdio.  Track numbers usually start at something | ||||
|     greater than 0, usually 1. | ||||
| 
 | ||||
|     The "leadout" track is specified either by | ||||
|  | @ -181,9 +181,9 @@ extern "C" { | |||
|   */ | ||||
|   lsn_t cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track); | ||||
| 
 | ||||
|   /*!  
 | ||||
|   /*!
 | ||||
|     Return the starting LBA for the pregap for track number | ||||
|     i_track in p_cdio.  Track numbers usually start at something  | ||||
|     i_track in p_cdio.  Track numbers usually start at something | ||||
|     greater than 0, usually 1. | ||||
| 
 | ||||
|     @param p_cdio object to get information from | ||||
|  | @ -192,9 +192,9 @@ extern "C" { | |||
|   */ | ||||
|   lba_t cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track); | ||||
| 
 | ||||
|   /*!  
 | ||||
|   /*!
 | ||||
|     Return the starting LSN for the pregap for track number | ||||
|     i_track in p_cdio.  Track numbers usually start at something  | ||||
|     i_track in p_cdio.  Track numbers usually start at something | ||||
|     greater than 0, usually 1. | ||||
| 
 | ||||
|     @param p_cdio object to get information from | ||||
|  | @ -216,30 +216,30 @@ extern "C" { | |||
| 
 | ||||
|   */ | ||||
|   char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track); | ||||
|    | ||||
|   /*!  
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Return the starting MSF (minutes/secs/frames) for track number | ||||
|     i_track in p_cdio.  Track numbers usually start at something  | ||||
|     i_track in p_cdio.  Track numbers usually start at something | ||||
|     greater than 0, usually 1. | ||||
| 
 | ||||
|     The "leadout" track is specified either by | ||||
|     using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1. | ||||
|      | ||||
| 
 | ||||
|     @return true if things worked or false if there is no track entry. | ||||
|   */ | ||||
|   bool cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track,  | ||||
|   bool cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track, | ||||
|                           /*out*/ msf_t *msf); | ||||
|    | ||||
|   /*! Get linear preemphasis status on an audio track 
 | ||||
| 
 | ||||
|   /*! Get linear preemphasis status on an audio track
 | ||||
|       This is not meaningful if not an audio track? | ||||
|    */ | ||||
|   track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio, | ||||
|                                           track_t i_track); | ||||
|    | ||||
|   /*!  
 | ||||
| 
 | ||||
|   /*!
 | ||||
|     Get the number of sectors between this track an the next.  This | ||||
|     includes any pregap sectors before the start of the next track. | ||||
|     Track numbers usually start at something  | ||||
|     Track numbers usually start at something | ||||
|     greater than 0, usually 1. | ||||
| 
 | ||||
|     @return the number of sectors or 0 if there is an error. | ||||
|  |  | |||
|  | @ -27,7 +27,7 @@ | |||
| 
 | ||||
| #include <time.h> | ||||
| 
 | ||||
| #if defined(__MINGW32__) && !defined(__MINGW64__) | ||||
| #if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) | ||||
| struct timespec { | ||||
|   time_t  tv_sec;   /* Seconds */ | ||||
|   long    tv_nsec;  /* Nanoseconds */ | ||||
|  |  | |||
|  | @ -41,21 +41,21 @@ static const char _rcsid[] = "$Id: sector.c,v 1.5 2005/02/06 04:20:25 rocky Exp | |||
| 
 | ||||
| /*! String of bytes used to identify the beginning of a Mode 1 or
 | ||||
|   Mode 2 sector. */ | ||||
| const uint8_t CDIO_SECTOR_SYNC_HEADER[CDIO_CD_SYNC_SIZE] =  | ||||
| const uint8_t CDIO_SECTOR_SYNC_HEADER[CDIO_CD_SYNC_SIZE] = | ||||
|   {0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0}; | ||||
| 
 | ||||
| /* Variables to hold debugger-helping enumerations */ | ||||
| enum cdio_cd_enums; | ||||
| enum m2_sector_enums; | ||||
|        | ||||
| 
 | ||||
| lba_t | ||||
| cdio_lba_to_lsn (lba_t lba) | ||||
| { | ||||
|   if (CDIO_INVALID_LBA     == lba) return CDIO_INVALID_LSN; | ||||
|   return lba - CDIO_PREGAP_SECTORS;  | ||||
|   return lba - CDIO_PREGAP_SECTORS; | ||||
| } | ||||
| 
 | ||||
| /* 
 | ||||
| /*
 | ||||
|    The below is adapted from cdparanoia code which claims it is | ||||
|    straight from the MMC3 spec. | ||||
| */ | ||||
|  | @ -64,7 +64,7 @@ void | |||
| cdio_lsn_to_msf (lsn_t lsn, msf_t *msf) | ||||
| { | ||||
|   int m, s, f; | ||||
|    | ||||
| 
 | ||||
|   cdio_assert (msf != 0); | ||||
| 
 | ||||
|   if ( lsn >= -CDIO_PREGAP_SECTORS ){ | ||||
|  | @ -81,17 +81,17 @@ cdio_lsn_to_msf (lsn_t lsn, msf_t *msf) | |||
|     f    = lsn + CDIO_CD_MAX_LSN; | ||||
|   } | ||||
| 
 | ||||
|   if (m > 99) { | ||||
|   if (m > 6) { | ||||
|     cdio_warn ("number of minutes (%d) truncated to 99.", m); | ||||
|     m = 99; | ||||
|     m = 6; | ||||
|   } | ||||
|    | ||||
| 
 | ||||
|   msf->m = cdio_to_bcd8 (m); | ||||
|   msf->s = cdio_to_bcd8 (s); | ||||
|   msf->f = cdio_to_bcd8 (f); | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert an LBA into a string representation of the MSF. | ||||
|   \warning cdio_lba_to_msf_str returns new allocated string */ | ||||
| char * | ||||
|  | @ -108,7 +108,7 @@ cdio_lba_to_msf_str (lba_t lba) | |||
|   } | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert an LSN into the corresponding LBA. | ||||
|   CDIO_INVALID_LBA is returned if there is an error. | ||||
| */ | ||||
|  | @ -116,10 +116,10 @@ lba_t | |||
| cdio_lsn_to_lba (lsn_t lsn) | ||||
| { | ||||
|   if (CDIO_INVALID_LSN  == lsn) return CDIO_INVALID_LBA; | ||||
|   return lsn + CDIO_PREGAP_SECTORS;  | ||||
|   return lsn + CDIO_PREGAP_SECTORS; | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert an LBA into the corresponding MSF. | ||||
| */ | ||||
| void | ||||
|  | @ -129,7 +129,7 @@ cdio_lba_to_msf (lba_t lba, msf_t *msf) | |||
|   cdio_lsn_to_msf(cdio_lba_to_lsn(lba), msf); | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert a MSF into the corresponding LBA. | ||||
|   CDIO_INVALID_LBA is returned if there is an error. | ||||
| */ | ||||
|  | @ -145,13 +145,13 @@ cdio_msf_to_lba (const msf_t *msf) | |||
| 
 | ||||
|   lba += cdio_from_bcd8 (msf->s); | ||||
|   lba *= CDIO_CD_FRAMES_PER_SEC; | ||||
|    | ||||
| 
 | ||||
|   lba += cdio_from_bcd8 (msf->f); | ||||
| 
 | ||||
|   return lba; | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert a MSF into the corresponding LSN. | ||||
|   CDIO_INVALID_LSN is returned if there is an error. | ||||
| */ | ||||
|  | @ -161,32 +161,32 @@ cdio_msf_to_lsn (const msf_t *msf) | |||
|   return cdio_lba_to_lsn(cdio_msf_to_lba (msf)); | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert an LBA into a string representation of the MSF. | ||||
|   \warning cdio_lba_to_msf_str returns new allocated string */ | ||||
| char * | ||||
| cdio_msf_to_str (const msf_t *msf) | ||||
| { | ||||
|   char buf[16]; | ||||
|    | ||||
| 
 | ||||
|   snprintf (buf, sizeof (buf), "%2.2x:%2.2x:%2.2x", msf->m, msf->s, msf->f); | ||||
|   return strdup (buf); | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Convert a MSF - broken out as 3 integer components into the | ||||
|   corresponding LBA.   | ||||
|   corresponding LBA. | ||||
|   CDIO_INVALID_LBA is returned if there is an error. | ||||
| */ | ||||
| lba_t | ||||
| cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds,  | ||||
| cdio_msf3_to_lba (unsigned int minutes, unsigned int seconds, | ||||
|                   unsigned int frames) | ||||
| { | ||||
|   return ((minutes * CDIO_CD_SECS_PER_MIN + seconds) * CDIO_CD_FRAMES_PER_SEC  | ||||
|   return ((minutes * CDIO_CD_SECS_PER_MIN + seconds) * CDIO_CD_FRAMES_PER_SEC | ||||
| 	  + frames); | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Convert a string of the form MM:SS:FF into the corresponding LBA. | ||||
|   CDIO_INVALID_LBA is returned if there is an error. | ||||
| */ | ||||
|  | @ -196,10 +196,10 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | |||
|   int psz_field; | ||||
|   lba_t ret; | ||||
|   unsigned char c; | ||||
|    | ||||
| 
 | ||||
|   if (0 == strcmp (psz_mmssff, "0")) | ||||
|     return 0; | ||||
|    | ||||
| 
 | ||||
|   c = *psz_mmssff++; | ||||
|   if(c >= '0' && c <= '9') | ||||
|     psz_field = (c - '0'); | ||||
|  | @ -211,9 +211,9 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | |||
|     else | ||||
|       return CDIO_INVALID_LBA; | ||||
|   } | ||||
|    | ||||
| 
 | ||||
|   ret = cdio_msf3_to_lba (psz_field, 0, 0); | ||||
|    | ||||
| 
 | ||||
|   c = *psz_mmssff++; | ||||
|   if(c >= '0' && c <= '9') | ||||
|     psz_field = (c - '0'); | ||||
|  | @ -229,12 +229,12 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | |||
|     else | ||||
|       return CDIO_INVALID_LBA; | ||||
|   } | ||||
|    | ||||
| 
 | ||||
|   if(psz_field >= CDIO_CD_SECS_PER_MIN) | ||||
|     return CDIO_INVALID_LBA; | ||||
|    | ||||
| 
 | ||||
|   ret += cdio_msf3_to_lba (0, psz_field, 0); | ||||
|    | ||||
| 
 | ||||
|   c = *psz_mmssff++; | ||||
|   if (isdigit(c)) | ||||
|     psz_field = (c - '0'); | ||||
|  | @ -248,20 +248,20 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | |||
|     else | ||||
|       return CDIO_INVALID_LBA; | ||||
|   } | ||||
|    | ||||
| 
 | ||||
|   if('\0' != c) | ||||
|     return CDIO_INVALID_LBA; | ||||
|    | ||||
| 
 | ||||
|   if(psz_field >= CDIO_CD_FRAMES_PER_SEC) | ||||
|     return CDIO_INVALID_LBA; | ||||
|    | ||||
| 
 | ||||
|   ret += psz_field; | ||||
|    | ||||
| 
 | ||||
|   return ret; | ||||
| } | ||||
| 
 | ||||
|  | ||||
| /* 
 | ||||
| /*
 | ||||
|  * Local variables: | ||||
|  *  c-file-style: "gnu" | ||||
|  *  tab-width: 8 | ||||
|  |  | |||
|  | @ -1,5 +1,5 @@ | |||
| /*
 | ||||
|   Copyright (C) 2003, 2004, 2005, 2008, 2011, 2012  | ||||
|   Copyright (C) 2003-2005, 2008, 2011-2013 | ||||
|   Rocky Bernstein <rocky@gnu.org> | ||||
|   Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> | ||||
| 
 | ||||
|  | @ -25,13 +25,13 @@ | |||
| 
 | ||||
| #ifdef HAVE_STDBOOL_H | ||||
| # include <stdbool.h> | ||||
| #endif  | ||||
| #endif | ||||
| 
 | ||||
| #include <cdio/cdio.h> | ||||
| #include <cdio/logging.h> | ||||
| #include "cdio_private.h" | ||||
| 
 | ||||
| const char *track_format2str[6] =  | ||||
| const char *track_format2str[6] = | ||||
|   { | ||||
|     "audio", "CD-i", "XA", "data", "PSX", "error" | ||||
|   }; | ||||
|  | @ -40,7 +40,7 @@ const char *track_format2str[6] = | |||
| enum cdio_track_enums; | ||||
| 
 | ||||
| /*!
 | ||||
|   Return the number of the first track.  | ||||
|   Return the number of the first track. | ||||
|   CDIO_INVALID_TRACK is returned on error. | ||||
| */ | ||||
| track_t | ||||
|  | @ -50,7 +50,7 @@ cdio_get_first_track_num(const CdIo_t *p_cdio) | |||
|     cdio_info("Null CdIo object passed\n"); | ||||
|     return CDIO_INVALID_TRACK; | ||||
|   } | ||||
|    | ||||
| 
 | ||||
| 
 | ||||
|   if (p_cdio->op.get_first_track_num) { | ||||
|     return p_cdio->op.get_first_track_num (p_cdio->env); | ||||
|  | @ -74,9 +74,9 @@ cdio_get_last_track_num (const CdIo_t *p_cdio) | |||
|   { | ||||
|     const track_t i_first_track = cdio_get_first_track_num(p_cdio); | ||||
|     if ( CDIO_INVALID_TRACK != i_first_track ) { | ||||
|       const track_t i_tracks = cdio_get_num_tracks(p_cdio); | ||||
|       if ( CDIO_INVALID_TRACK != i_tracks )  | ||||
| 	return i_first_track + i_tracks - 1; | ||||
|       const track_t u_tracks = cdio_get_num_tracks(p_cdio); | ||||
|       if ( CDIO_INVALID_TRACK != u_tracks ) | ||||
| 	return i_first_track + u_tracks - 1; | ||||
|     } | ||||
|     return CDIO_INVALID_TRACK; | ||||
|   } | ||||
|  | @ -87,19 +87,21 @@ cdio_get_last_track_num (const CdIo_t *p_cdio) | |||
|   Not meaningful if track is not an audio track. | ||||
| */ | ||||
| int | ||||
| cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_channels(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   track_t u_last_track; | ||||
|   if (NULL == p_cdio) { | ||||
|     cdio_info("Null CdIo object passed\n"); | ||||
|     return -1; | ||||
|   } | ||||
|   if (i_track > CDIO_CD_MAX_TRACKS) { | ||||
|   u_last_track = cdio_get_last_track_num(p_cdio); | ||||
|   if (u_track > u_last_track) { | ||||
|      cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n", | ||||
|               i_track, CDIO_CD_MAX_TRACKS); | ||||
|               u_track, u_last_track); | ||||
|      return -1; | ||||
|   } | ||||
|   if (p_cdio->op.get_track_channels) { | ||||
|     return p_cdio->op.get_track_channels (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_channels (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return -2; | ||||
|   } | ||||
|  | @ -109,44 +111,44 @@ cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track) | |||
|   if not an audio track? | ||||
| */ | ||||
| track_flag_t | ||||
| cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   if (p_cdio->op.get_track_copy_permit) { | ||||
|     return p_cdio->op.get_track_copy_permit (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_copy_permit (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return CDIO_TRACK_FLAG_UNKNOWN; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
|   Get format of track.  | ||||
| /*!
 | ||||
|   Get format of track. | ||||
| */ | ||||
| track_format_t | ||||
| cdio_get_track_format(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_format(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   if (!p_cdio) return TRACK_FORMAT_ERROR; | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_format) { | ||||
|     return p_cdio->op.get_track_format (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_format (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return TRACK_FORMAT_ERROR; | ||||
|   } | ||||
| } | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the Joliet level recognized for p_cdio. | ||||
| */ | ||||
| uint8_t  | ||||
| uint8_t | ||||
| cdio_get_joliet_level(const CdIo_t *p_cdio) | ||||
| { | ||||
|   if (!p_cdio) return 0; | ||||
|   { | ||||
|     const generic_img_private_t *p_env  | ||||
|     const generic_img_private_t *p_env | ||||
|       = (generic_img_private_t *) (p_cdio->env); | ||||
|     return p_env->i_joliet_level; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*! 
 | ||||
| /*!
 | ||||
|   Return the number of tracks in the current medium. | ||||
|   CDIO_INVALID_TRACK is returned on error. | ||||
| */ | ||||
|  | @ -164,8 +166,8 @@ cdio_get_num_tracks (const CdIo_t *p_cdio) | |||
| 
 | ||||
| /*! Find the track which contans lsn.
 | ||||
|     CDIO_INVALID_TRACK is returned if the lsn outside of the CD or | ||||
|     if there was some error.  | ||||
|      | ||||
|     if there was some error. | ||||
| 
 | ||||
|     If the lsn is before the pregap of the first track 0 is returned. | ||||
|     Otherwise we return the track that spans the lsn. | ||||
| */ | ||||
|  | @ -173,18 +175,19 @@ track_t | |||
| cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | ||||
| { | ||||
|   if (!p_cdio) return CDIO_INVALID_TRACK; | ||||
|    | ||||
| 
 | ||||
|   { | ||||
|     track_t i_low_track   = cdio_get_first_track_num(p_cdio); | ||||
|     track_t i_high_track  = cdio_get_last_track_num(p_cdio)+1; /* LEADOUT */ | ||||
|     track_t i_high_track  = cdio_get_last_track_num(p_cdio)+1; | ||||
|     track_t i_lead_track  = i_high_track; | ||||
| 
 | ||||
|     if (CDIO_INVALID_TRACK == i_low_track  | ||||
|     if (CDIO_INVALID_TRACK == i_low_track | ||||
| 	|| CDIO_INVALID_TRACK == i_high_track ) return CDIO_INVALID_TRACK; | ||||
|      | ||||
| 
 | ||||
|     if (lsn < cdio_get_track_lsn(p_cdio, i_low_track)) | ||||
|       return 0; /* We're in the pre-gap of first track */ | ||||
| 
 | ||||
|     if (lsn > cdio_get_track_lsn(p_cdio, i_high_track)) | ||||
|     if (lsn > cdio_get_track_lsn(p_cdio, CDIO_CDROM_LEADOUT_TRACK)) | ||||
|       return CDIO_INVALID_TRACK; /* We're beyond the end. */ | ||||
| 
 | ||||
|     do { | ||||
|  | @ -194,8 +197,14 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | |||
|       if (lsn >= i_mid_lsn) i_low_track  = i_mid + 1; | ||||
|     } while ( i_low_track <= i_high_track ); | ||||
| 
 | ||||
|     return (i_low_track > i_high_track + 1)  | ||||
|       ? i_high_track + 1 : i_high_track; | ||||
|     if (i_low_track > i_high_track + 1) { | ||||
| 	i_high_track++; | ||||
|     } | ||||
|     if (i_high_track == i_lead_track ) { | ||||
| 	return CDIO_CDROM_LEADOUT_TRACK; | ||||
|     } else { | ||||
| 	return i_high_track; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | @ -204,24 +213,24 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | |||
|   XA data (green, mode2 form2). That is track begins: | ||||
|   sync - header - subheader | ||||
|   12     4      -  8 | ||||
|    | ||||
| 
 | ||||
|   FIXME: there's gotta be a better design for this and get_track_format? | ||||
| */ | ||||
| bool | ||||
| cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_green(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   if (p_cdio == NULL) { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_green) { | ||||
|     return p_cdio->op.get_track_green (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_green (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return false; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the starting LBA for track number | ||||
|   track_num in cdio.  Tracks numbers start at 1. | ||||
|   The "leadout" track is specified either by | ||||
|  | @ -229,7 +238,7 @@ cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track) | |||
|   CDIO_INVALID_LBA is returned on error. | ||||
| */ | ||||
| lba_t | ||||
| cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_lba(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   if (NULL == p_cdio) { | ||||
|     cdio_info("Null CdIo object passed\n"); | ||||
|  | @ -237,42 +246,45 @@ cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track) | |||
|   } | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_lba) { | ||||
|     return p_cdio->op.get_track_lba (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_lba (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     msf_t msf; | ||||
|     if (p_cdio->op.get_track_msf)  | ||||
|       if (cdio_get_track_msf(p_cdio, i_track, &msf)) | ||||
|     if (p_cdio->op.get_track_msf) | ||||
|       if (cdio_get_track_msf(p_cdio, u_track, &msf)) | ||||
|         return cdio_msf_to_lba(&msf); | ||||
|     return CDIO_INVALID_LBA; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the starting LSN for track number | ||||
|   i_track in cdio.  Tracks numbers start at 1. | ||||
|   u_track in cdio.  Tracks numbers start at 1. | ||||
|   The "leadout" track is specified either by | ||||
|   using i_track LEADOUT_TRACK or the total tracks+1. | ||||
|   using u_track LEADOUT_TRACK or the total tracks+1. | ||||
|   CDIO_INVALID_LSN is returned on error. | ||||
| */ | ||||
| lsn_t | ||||
| cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_lsn(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   /*track_t u_last_track; */ | ||||
|   if (NULL == p_cdio) { | ||||
|     cdio_info("Null CdIo object passed\n"); | ||||
|     return CDIO_INVALID_LSN; | ||||
|   } | ||||
|   if (i_track > CDIO_CD_MAX_TRACKS && i_track != CDIO_CDROM_LEADOUT_TRACK) { | ||||
|   /*
 | ||||
|   u_last_track = cdio_get_last_track_num(p_cdio); | ||||
|   if (u_track > u_last_track && u_track != CDIO_CDROM_LEADOUT_TRACK) { | ||||
|      cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n", | ||||
|               i_track, CDIO_CD_MAX_TRACKS); | ||||
|               u_track, u_last_track); | ||||
|      return CDIO_INVALID_LSN; | ||||
|   } | ||||
| 
 | ||||
|   */ | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_lba) { | ||||
|     return cdio_lba_to_lsn(p_cdio->op.get_track_lba (p_cdio->env, i_track)); | ||||
|     return cdio_lba_to_lsn(p_cdio->op.get_track_lba (p_cdio->env, u_track)); | ||||
|   } else { | ||||
|     msf_t msf; | ||||
|     if (cdio_get_track_msf(p_cdio, i_track, &msf)) | ||||
|     if (cdio_get_track_msf(p_cdio, u_track, &msf)) | ||||
|       return cdio_msf_to_lsn(&msf); | ||||
|     return CDIO_INVALID_LSN; | ||||
|   } | ||||
|  | @ -280,39 +292,41 @@ cdio_get_track_lsn(const CdIo_t *p_cdio, track_t i_track) | |||
| 
 | ||||
| /*!
 | ||||
|   Return the International Standard Recording Code (ISRC) for track number | ||||
|   i_track in p_cdio.  Track numbers start at 1. | ||||
|   u_track in p_cdio.  Track numbers start at 1. | ||||
| 
 | ||||
|   Note: string is malloc'd so caller has to free() the returned | ||||
|   string when done with it. | ||||
| */ | ||||
| char * | ||||
| cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_isrc (const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   track_t u_last_track; | ||||
|   if (NULL == p_cdio) { | ||||
|     cdio_info("Null CdIo object passed\n"); | ||||
|     return NULL; | ||||
|   } | ||||
| 
 | ||||
|   if (i_track > CDIO_CD_MAX_TRACKS) { | ||||
|   u_last_track = cdio_get_last_track_num(p_cdio); | ||||
|   if (u_track > u_last_track) { | ||||
|      cdio_log(CDIO_LOG_WARN, "Number of tracks exceeds maximum (%d vs. %d)\n", | ||||
|               i_track, CDIO_CD_MAX_TRACKS); | ||||
|               u_track, u_last_track); | ||||
|      return NULL; | ||||
|   } | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_isrc) { | ||||
|     return p_cdio->op.get_track_isrc (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_isrc (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return NULL; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the starting LBA for the pregap for track number | ||||
|   i_track in cdio.  Track numbers start at 1. | ||||
|   u_track in cdio.  Track numbers start at 1. | ||||
|   CDIO_INVALID_LBA is returned on error. | ||||
| */ | ||||
| lba_t | ||||
| cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   if (NULL == p_cdio) { | ||||
|     cdio_info("Null CdIo object passed\n"); | ||||
|  | @ -320,53 +334,53 @@ cdio_get_track_pregap_lba(const CdIo_t *p_cdio, track_t i_track) | |||
|   } | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_pregap_lba) { | ||||
|     return p_cdio->op.get_track_pregap_lba (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_pregap_lba (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return CDIO_INVALID_LBA; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the starting LSN for the pregap for track number | ||||
|   i_track in cdio.  Track numbers start at 1. | ||||
|   u_track in cdio.  Track numbers start at 1. | ||||
|   CDIO_INVALID_LSN is returned on error. | ||||
| */ | ||||
| lsn_t | ||||
| cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_pregap_lsn(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   return cdio_lba_to_lsn(cdio_get_track_pregap_lba(p_cdio, i_track)); | ||||
|   return cdio_lba_to_lsn(cdio_get_track_pregap_lba(p_cdio, u_track)); | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the ending LSN for track number | ||||
|   i_track in cdio.  CDIO_INVALID_LSN is returned on error. | ||||
|   u_track in cdio.  CDIO_INVALID_LSN is returned on error. | ||||
| */ | ||||
| lsn_t | ||||
| cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   lsn_t lsn = cdio_get_track_lsn(p_cdio, i_track+1); | ||||
|   lsn_t lsn = cdio_get_track_lsn(p_cdio, u_track+1); | ||||
| 
 | ||||
|   if (CDIO_INVALID_LSN == lsn) return CDIO_INVALID_LSN; | ||||
|   /* Safe, we've always the leadout. */ | ||||
|   return lsn - 1; | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the starting MSF (minutes/secs/frames) for track number | ||||
|   i_track in cdio.  Track numbers start at 1. | ||||
|   u_track in cdio.  Track numbers start at 1. | ||||
|   The "leadout" track is specified either by | ||||
|   using i_track LEADOUT_TRACK or the total tracks+1. | ||||
|   using u_track LEADOUT_TRACK or the total tracks+1. | ||||
|   False is returned if there is no track entry. | ||||
| */ | ||||
| bool | ||||
| cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track, /*out*/ msf_t *msf) | ||||
| cdio_get_track_msf(const CdIo_t *p_cdio, track_t u_track, /*out*/ msf_t *msf) | ||||
| { | ||||
|   if (!p_cdio) return false; | ||||
| 
 | ||||
|   if (p_cdio->op.get_track_msf) { | ||||
|     return p_cdio->op.get_track_msf (p_cdio->env, i_track, msf); | ||||
|     return p_cdio->op.get_track_msf (p_cdio->env, u_track, msf); | ||||
|   } else if (p_cdio->op.get_track_lba) { | ||||
|     lba_t lba = p_cdio->op.get_track_lba (p_cdio->env, i_track); | ||||
|     lba_t lba = p_cdio->op.get_track_lba (p_cdio->env, u_track); | ||||
|     if (lba  == CDIO_INVALID_LBA) return false; | ||||
|     cdio_lba_to_msf(lba, msf); | ||||
|     return true; | ||||
|  | @ -379,28 +393,28 @@ cdio_get_track_msf(const CdIo_t *p_cdio, track_t i_track, /*out*/ msf_t *msf) | |||
|   if not an audio track? | ||||
| */ | ||||
| track_flag_t | ||||
| cdio_get_track_preemphasis(const CdIo *p_cdio, track_t i_track) | ||||
| cdio_get_track_preemphasis(const CdIo *p_cdio, track_t u_track) | ||||
| { | ||||
|   if (p_cdio->op.get_track_preemphasis) { | ||||
|     return p_cdio->op.get_track_preemphasis (p_cdio->env, i_track); | ||||
|     return p_cdio->op.get_track_preemphasis (p_cdio->env, u_track); | ||||
|   } else { | ||||
|     return CDIO_TRACK_FLAG_UNKNOWN; | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /*!  
 | ||||
| /*!
 | ||||
|   Return the number of sectors between this track an the next.  This | ||||
|   includes any pregap sectors before the start of the next track. | ||||
|   Tracks start at 1. | ||||
|   0 is returned if there is an error. | ||||
| */ | ||||
| unsigned int | ||||
| cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t i_track) | ||||
| cdio_get_track_sec_count(const CdIo_t *p_cdio, track_t u_track) | ||||
| { | ||||
|   const track_t i_tracks = cdio_get_num_tracks(p_cdio); | ||||
|   const track_t u_tracks = cdio_get_num_tracks(p_cdio); | ||||
| 
 | ||||
|   if (i_track >=1 && i_track <= i_tracks)  | ||||
|     return ( cdio_get_track_lba(p_cdio, i_track+1)  | ||||
|              - cdio_get_track_lba(p_cdio, i_track) ); | ||||
|   if (u_track >=1 && u_track <= u_tracks) | ||||
|     return ( cdio_get_track_lba(p_cdio, u_track+1) | ||||
|              - cdio_get_track_lba(p_cdio, u_track) ); | ||||
|   return 0; | ||||
| } | ||||
|  |  | |||
							
								
								
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							
							
						
						
									
										10
									
								
								src/rufus.rc
									
										
									
									
									
								
							|  | @ -30,7 +30,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_NEUTRAL | |||
| IDD_DIALOG DIALOGEX 12, 12, 206, 329 | ||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||
| EXSTYLE WS_EX_APPWINDOW | ||||
| CAPTION "Rufus v1.3.3.246" | ||||
| CAPTION "Rufus v1.3.3.247" | ||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||
| BEGIN | ||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,291,50,14 | ||||
|  | @ -276,8 +276,8 @@ END | |||
| // | ||||
| 
 | ||||
| VS_VERSION_INFO VERSIONINFO | ||||
|  FILEVERSION 1,3,3,246 | ||||
|  PRODUCTVERSION 1,3,3,246 | ||||
|  FILEVERSION 1,3,3,247 | ||||
|  PRODUCTVERSION 1,3,3,247 | ||||
|  FILEFLAGSMASK 0x3fL | ||||
| #ifdef _DEBUG | ||||
|  FILEFLAGS 0x1L | ||||
|  | @ -294,13 +294,13 @@ BEGIN | |||
|         BEGIN | ||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||
|             VALUE "FileDescription", "Rufus" | ||||
|             VALUE "FileVersion", "1.3.3.246" | ||||
|             VALUE "FileVersion", "1.3.3.247" | ||||
|             VALUE "InternalName", "Rufus" | ||||
|             VALUE "LegalCopyright", "(c) 2011-2013 Pete Batard (GPL v3)" | ||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||
|             VALUE "OriginalFilename", "rufus.exe" | ||||
|             VALUE "ProductName", "Rufus" | ||||
|             VALUE "ProductVersion", "1.3.3.246" | ||||
|             VALUE "ProductVersion", "1.3.3.247" | ||||
|         END | ||||
|     END | ||||
|     BLOCK "VarFileInfo" | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue