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/>.
 |     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. |  *  \brief  The top-level header for track-related libcdio calls. | ||||||
|  */ |  */ | ||||||
| #ifndef CDIO_TRACK_H_ | #ifndef CDIO_TRACK_H_ | ||||||
|  | @ -27,7 +27,7 @@ extern "C" { | ||||||
| 
 | 
 | ||||||
|   /*! Printable tags for track_format_t enumeration.  */ |   /*! Printable tags for track_format_t enumeration.  */ | ||||||
|   extern const char *track_format2str[6]; |   extern const char *track_format2str[6]; | ||||||
|    | 
 | ||||||
|   typedef enum  { |   typedef enum  { | ||||||
|     TRACK_FORMAT_AUDIO,   /**< Audio track, e.g. CD-DA */ |     TRACK_FORMAT_AUDIO,   /**< Audio track, e.g. CD-DA */ | ||||||
|     TRACK_FORMAT_CDI,     /**< CD-i. How this is different from DATA below? */ |     TRACK_FORMAT_CDI,     /**< CD-i. How this is different from DATA below? */ | ||||||
|  | @ -40,9 +40,9 @@ extern "C" { | ||||||
|   } track_format_t; |   } track_format_t; | ||||||
| 
 | 
 | ||||||
|   typedef enum { |   typedef enum { | ||||||
|     CDIO_TRACK_FLAG_FALSE,  |     CDIO_TRACK_FLAG_FALSE, | ||||||
|     CDIO_TRACK_FLAG_TRUE,  |     CDIO_TRACK_FLAG_TRUE, | ||||||
|     CDIO_TRACK_FLAG_ERROR,  |     CDIO_TRACK_FLAG_ERROR, | ||||||
|     CDIO_TRACK_FLAG_UNKNOWN |     CDIO_TRACK_FLAG_UNKNOWN | ||||||
|   } track_flag_t; |   } track_flag_t; | ||||||
| 
 | 
 | ||||||
|  | @ -54,7 +54,7 @@ extern "C" { | ||||||
|                                    implemented or -1 for error. |                                    implemented or -1 for error. | ||||||
|                               */ |                               */ | ||||||
|   } track_flags_t; |   } track_flags_t; | ||||||
|      | 
 | ||||||
|   /*! The leadout track is always 0xAA, regardless of # of tracks on
 |   /*! The leadout track is always 0xAA, regardless of # of tracks on
 | ||||||
|     disc, or what value may be used internally. For example although |     disc, or what value may be used internally. For example although | ||||||
|     OS X uses a different value for the lead-out track internally than |     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_LBA           = 0x01, /**< "logical block": first frame is #0 */ | ||||||
|     CDIO_CDROM_MSF           = 0x02, /**< "minute-second-frame": binary, not
 |     CDIO_CDROM_MSF           = 0x02, /**< "minute-second-frame": binary, not
 | ||||||
|                                         BCD here! */ |                                         BCD here! */ | ||||||
|     CDIO_CDROM_DATA_TRACK    = 0x04,  |     CDIO_CDROM_DATA_TRACK    = 0x04, | ||||||
|     CDIO_CDROM_CDI_TRACK     = 0x10, |     CDIO_CDROM_CDI_TRACK     = 0x10, | ||||||
|     CDIO_CDROM_XA_TRACK      = 0x20, |     CDIO_CDROM_XA_TRACK      = 0x20, | ||||||
|     CDIO_CD_MAX_TRACKS       =   99, /**< Largest CD track number */ |     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_INVALID_TRACK       = 0xFF, /**<  Constant for invalid track number */ | ||||||
| 
 | 
 | ||||||
|    } cdio_track_enums; |    } cdio_track_enums; | ||||||
|    | 
 | ||||||
| #define CDIO_CD_MIN_TRACK_NO  1 /**< Smallest CD track number */ | #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 |     reference: MMC-3 draft revsion - 10g | ||||||
|   */ |   */ | ||||||
|   typedef enum { |   typedef enum { | ||||||
|  | @ -95,26 +95,26 @@ extern "C" { | ||||||
|     MODE2_FORM_MIX,             /**< 2336 byte block length */ |     MODE2_FORM_MIX,             /**< 2336 byte block length */ | ||||||
|     MODE2_RAW                   /**< 2352 byte block length */ |     MODE2_RAW                   /**< 2352 byte block length */ | ||||||
|   } trackmode_t; |   } 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. |     on error. | ||||||
|   */ |   */ | ||||||
|   track_t cdio_get_first_track_num(const CdIo_t *p_cdio); |   track_t cdio_get_first_track_num(const CdIo_t *p_cdio); | ||||||
|    | 
 | ||||||
|   /*!
 |   /*!
 | ||||||
|     Return the last track number. |     Return the last track number. | ||||||
|     CDIO_INVALID_TRACK is returned on error. |     CDIO_INVALID_TRACK is returned on error. | ||||||
|   */ |   */ | ||||||
|   track_t cdio_get_last_track_num (const CdIo_t *p_cdio); |   track_t cdio_get_last_track_num (const CdIo_t *p_cdio); | ||||||
|    | 
 | ||||||
| 
 | 
 | ||||||
|   /*! Find the track which contains lsn.
 |   /*! Find the track which contains lsn.
 | ||||||
|     CDIO_INVALID_TRACK is returned if the lsn outside of the CD or |     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. |     If the lsn is before the pregap of the first track 0 is returned. | ||||||
|     Otherwise we return the track that spans the lsn. |     Otherwise we return the track that spans the lsn. | ||||||
|   */ |   */ | ||||||
|  | @ -125,37 +125,37 @@ extern "C" { | ||||||
|       Not meaningful if track is not an audio track. |       Not meaningful if track is not an audio track. | ||||||
|   */ |   */ | ||||||
|   int cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_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
 |   /*! Return copy protection status on a track. Is this meaningful
 | ||||||
|       if not an audio track? |       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); |                                           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); |   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 |     Return true if we have XA data (green, mode2 form1) or | ||||||
|     XA data (green, mode2 form2). That is track begins: |     XA data (green, mode2 form2). That is track begins: | ||||||
|     sync - header - subheader |     sync - header - subheader | ||||||
|     12     4      -  8 |     12     4      -  8 | ||||||
|      | 
 | ||||||
|     FIXME: there's gotta be a better design for this and get_track_format? |     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); |   bool cdio_get_track_green(const CdIo_t *p_cdio, track_t i_track); | ||||||
|      | 
 | ||||||
|   /*!  
 |   /*!
 | ||||||
|     Return the ending LSN for track number |     Return the ending LSN for track number | ||||||
|     i_track in cdio.  CDIO_INVALID_LSN is returned on error. |     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); |   lsn_t cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track); | ||||||
| 
 | 
 | ||||||
|   /*!  
 |   /*!
 | ||||||
|     Get the starting LBA for track number |     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. |     greater than 0, usually 1. | ||||||
| 
 | 
 | ||||||
|     The "leadout" track is specified either by |     The "leadout" track is specified either by | ||||||
|  | @ -166,10 +166,10 @@ extern "C" { | ||||||
|     @return the starting LBA or CDIO_INVALID_LBA on error. |     @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); |   lba_t cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track); | ||||||
|    | 
 | ||||||
|   /*!  
 |   /*!
 | ||||||
|     Return the starting LSN for track number |     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. |     greater than 0, usually 1. | ||||||
| 
 | 
 | ||||||
|     The "leadout" track is specified either by |     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); |   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 |     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. |     greater than 0, usually 1. | ||||||
| 
 | 
 | ||||||
|     @param p_cdio object to get information from |     @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); |   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 |     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. |     greater than 0, usually 1. | ||||||
| 
 | 
 | ||||||
|     @param p_cdio object to get information from |     @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); |   char * cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track); | ||||||
|    | 
 | ||||||
|   /*!  
 |   /*!
 | ||||||
|     Return the starting MSF (minutes/secs/frames) for track number |     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. |     greater than 0, usually 1. | ||||||
| 
 | 
 | ||||||
|     The "leadout" track is specified either by |     The "leadout" track is specified either by | ||||||
|     using i_track CDIO_CDROM_LEADOUT_TRACK or the total tracks+1. |     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. |     @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); |                           /*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? |       This is not meaningful if not an audio track? | ||||||
|    */ |    */ | ||||||
|   track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio, |   track_flag_t cdio_get_track_preemphasis(const CdIo_t *p_cdio, | ||||||
|                                           track_t i_track); |                                           track_t i_track); | ||||||
|    | 
 | ||||||
|   /*!  
 |   /*!
 | ||||||
|     Get the number of sectors between this track an the next.  This |     Get the number of sectors between this track an the next.  This | ||||||
|     includes any pregap sectors before the start of the next track. |     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. |     greater than 0, usually 1. | ||||||
| 
 | 
 | ||||||
|     @return the number of sectors or 0 if there is an error. |     @return the number of sectors or 0 if there is an error. | ||||||
|  |  | ||||||
|  | @ -27,7 +27,7 @@ | ||||||
| 
 | 
 | ||||||
| #include <time.h> | #include <time.h> | ||||||
| 
 | 
 | ||||||
| #if defined(__MINGW32__) && !defined(__MINGW64__) | #if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) | ||||||
| struct timespec { | struct timespec { | ||||||
|   time_t  tv_sec;   /* Seconds */ |   time_t  tv_sec;   /* Seconds */ | ||||||
|   long    tv_nsec;  /* Nanoseconds */ |   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
 | /*! String of bytes used to identify the beginning of a Mode 1 or
 | ||||||
|   Mode 2 sector. */ |   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}; |   {0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0}; | ||||||
| 
 | 
 | ||||||
| /* Variables to hold debugger-helping enumerations */ | /* Variables to hold debugger-helping enumerations */ | ||||||
| enum cdio_cd_enums; | enum cdio_cd_enums; | ||||||
| enum m2_sector_enums; | enum m2_sector_enums; | ||||||
|        | 
 | ||||||
| lba_t | lba_t | ||||||
| cdio_lba_to_lsn (lba_t lba) | cdio_lba_to_lsn (lba_t lba) | ||||||
| { | { | ||||||
|   if (CDIO_INVALID_LBA     == lba) return CDIO_INVALID_LSN; |   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 |    The below is adapted from cdparanoia code which claims it is | ||||||
|    straight from the MMC3 spec. |    straight from the MMC3 spec. | ||||||
| */ | */ | ||||||
|  | @ -64,7 +64,7 @@ void | ||||||
| cdio_lsn_to_msf (lsn_t lsn, msf_t *msf) | cdio_lsn_to_msf (lsn_t lsn, msf_t *msf) | ||||||
| { | { | ||||||
|   int m, s, f; |   int m, s, f; | ||||||
|    | 
 | ||||||
|   cdio_assert (msf != 0); |   cdio_assert (msf != 0); | ||||||
| 
 | 
 | ||||||
|   if ( lsn >= -CDIO_PREGAP_SECTORS ){ |   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; |     f    = lsn + CDIO_CD_MAX_LSN; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if (m > 99) { |   if (m > 6) { | ||||||
|     cdio_warn ("number of minutes (%d) truncated to 99.", m); |     cdio_warn ("number of minutes (%d) truncated to 99.", m); | ||||||
|     m = 99; |     m = 6; | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
|   msf->m = cdio_to_bcd8 (m); |   msf->m = cdio_to_bcd8 (m); | ||||||
|   msf->s = cdio_to_bcd8 (s); |   msf->s = cdio_to_bcd8 (s); | ||||||
|   msf->f = cdio_to_bcd8 (f); |   msf->f = cdio_to_bcd8 (f); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Convert an LBA into a string representation of the MSF. |   Convert an LBA into a string representation of the MSF. | ||||||
|   \warning cdio_lba_to_msf_str returns new allocated string */ |   \warning cdio_lba_to_msf_str returns new allocated string */ | ||||||
| char * | char * | ||||||
|  | @ -108,7 +108,7 @@ cdio_lba_to_msf_str (lba_t lba) | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Convert an LSN into the corresponding LBA. |   Convert an LSN into the corresponding LBA. | ||||||
|   CDIO_INVALID_LBA is returned if there is an error. |   CDIO_INVALID_LBA is returned if there is an error. | ||||||
| */ | */ | ||||||
|  | @ -116,10 +116,10 @@ lba_t | ||||||
| cdio_lsn_to_lba (lsn_t lsn) | cdio_lsn_to_lba (lsn_t lsn) | ||||||
| { | { | ||||||
|   if (CDIO_INVALID_LSN  == lsn) return CDIO_INVALID_LBA; |   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. |   Convert an LBA into the corresponding MSF. | ||||||
| */ | */ | ||||||
| void | 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); |   cdio_lsn_to_msf(cdio_lba_to_lsn(lba), msf); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Convert a MSF into the corresponding LBA. |   Convert a MSF into the corresponding LBA. | ||||||
|   CDIO_INVALID_LBA is returned if there is an error. |   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_from_bcd8 (msf->s); | ||||||
|   lba *= CDIO_CD_FRAMES_PER_SEC; |   lba *= CDIO_CD_FRAMES_PER_SEC; | ||||||
|    | 
 | ||||||
|   lba += cdio_from_bcd8 (msf->f); |   lba += cdio_from_bcd8 (msf->f); | ||||||
| 
 | 
 | ||||||
|   return lba; |   return lba; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Convert a MSF into the corresponding LSN. |   Convert a MSF into the corresponding LSN. | ||||||
|   CDIO_INVALID_LSN is returned if there is an error. |   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)); |   return cdio_lba_to_lsn(cdio_msf_to_lba (msf)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Convert an LBA into a string representation of the MSF. |   Convert an LBA into a string representation of the MSF. | ||||||
|   \warning cdio_lba_to_msf_str returns new allocated string */ |   \warning cdio_lba_to_msf_str returns new allocated string */ | ||||||
| char * | char * | ||||||
| cdio_msf_to_str (const msf_t *msf) | cdio_msf_to_str (const msf_t *msf) | ||||||
| { | { | ||||||
|   char buf[16]; |   char buf[16]; | ||||||
|    | 
 | ||||||
|   snprintf (buf, sizeof (buf), "%2.2x:%2.2x:%2.2x", msf->m, msf->s, msf->f); |   snprintf (buf, sizeof (buf), "%2.2x:%2.2x:%2.2x", msf->m, msf->s, msf->f); | ||||||
|   return strdup (buf); |   return strdup (buf); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Convert a MSF - broken out as 3 integer components into the |   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. |   CDIO_INVALID_LBA is returned if there is an error. | ||||||
| */ | */ | ||||||
| lba_t | 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) |                   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); | 	  + frames); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Convert a string of the form MM:SS:FF into the corresponding LBA. |   Convert a string of the form MM:SS:FF into the corresponding LBA. | ||||||
|   CDIO_INVALID_LBA is returned if there is an error. |   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; |   int psz_field; | ||||||
|   lba_t ret; |   lba_t ret; | ||||||
|   unsigned char c; |   unsigned char c; | ||||||
|    | 
 | ||||||
|   if (0 == strcmp (psz_mmssff, "0")) |   if (0 == strcmp (psz_mmssff, "0")) | ||||||
|     return 0; |     return 0; | ||||||
|    | 
 | ||||||
|   c = *psz_mmssff++; |   c = *psz_mmssff++; | ||||||
|   if(c >= '0' && c <= '9') |   if(c >= '0' && c <= '9') | ||||||
|     psz_field = (c - '0'); |     psz_field = (c - '0'); | ||||||
|  | @ -211,9 +211,9 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | ||||||
|     else |     else | ||||||
|       return CDIO_INVALID_LBA; |       return CDIO_INVALID_LBA; | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
|   ret = cdio_msf3_to_lba (psz_field, 0, 0); |   ret = cdio_msf3_to_lba (psz_field, 0, 0); | ||||||
|    | 
 | ||||||
|   c = *psz_mmssff++; |   c = *psz_mmssff++; | ||||||
|   if(c >= '0' && c <= '9') |   if(c >= '0' && c <= '9') | ||||||
|     psz_field = (c - '0'); |     psz_field = (c - '0'); | ||||||
|  | @ -229,12 +229,12 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | ||||||
|     else |     else | ||||||
|       return CDIO_INVALID_LBA; |       return CDIO_INVALID_LBA; | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
|   if(psz_field >= CDIO_CD_SECS_PER_MIN) |   if(psz_field >= CDIO_CD_SECS_PER_MIN) | ||||||
|     return CDIO_INVALID_LBA; |     return CDIO_INVALID_LBA; | ||||||
|    | 
 | ||||||
|   ret += cdio_msf3_to_lba (0, psz_field, 0); |   ret += cdio_msf3_to_lba (0, psz_field, 0); | ||||||
|    | 
 | ||||||
|   c = *psz_mmssff++; |   c = *psz_mmssff++; | ||||||
|   if (isdigit(c)) |   if (isdigit(c)) | ||||||
|     psz_field = (c - '0'); |     psz_field = (c - '0'); | ||||||
|  | @ -248,20 +248,20 @@ cdio_mmssff_to_lba (const char *psz_mmssff) | ||||||
|     else |     else | ||||||
|       return CDIO_INVALID_LBA; |       return CDIO_INVALID_LBA; | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
|   if('\0' != c) |   if('\0' != c) | ||||||
|     return CDIO_INVALID_LBA; |     return CDIO_INVALID_LBA; | ||||||
|    | 
 | ||||||
|   if(psz_field >= CDIO_CD_FRAMES_PER_SEC) |   if(psz_field >= CDIO_CD_FRAMES_PER_SEC) | ||||||
|     return CDIO_INVALID_LBA; |     return CDIO_INVALID_LBA; | ||||||
|    | 
 | ||||||
|   ret += psz_field; |   ret += psz_field; | ||||||
|    | 
 | ||||||
|   return ret; |   return ret; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
| /* 
 | /*
 | ||||||
|  * Local variables: |  * Local variables: | ||||||
|  *  c-file-style: "gnu" |  *  c-file-style: "gnu" | ||||||
|  *  tab-width: 8 |  *  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> |   Rocky Bernstein <rocky@gnu.org> | ||||||
|   Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> |   Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> | ||||||
| 
 | 
 | ||||||
|  | @ -25,13 +25,13 @@ | ||||||
| 
 | 
 | ||||||
| #ifdef HAVE_STDBOOL_H | #ifdef HAVE_STDBOOL_H | ||||||
| # include <stdbool.h> | # include <stdbool.h> | ||||||
| #endif  | #endif | ||||||
| 
 | 
 | ||||||
| #include <cdio/cdio.h> | #include <cdio/cdio.h> | ||||||
| #include <cdio/logging.h> | #include <cdio/logging.h> | ||||||
| #include "cdio_private.h" | #include "cdio_private.h" | ||||||
| 
 | 
 | ||||||
| const char *track_format2str[6] =  | const char *track_format2str[6] = | ||||||
|   { |   { | ||||||
|     "audio", "CD-i", "XA", "data", "PSX", "error" |     "audio", "CD-i", "XA", "data", "PSX", "error" | ||||||
|   }; |   }; | ||||||
|  | @ -40,7 +40,7 @@ const char *track_format2str[6] = | ||||||
| enum cdio_track_enums; | 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. |   CDIO_INVALID_TRACK is returned on error. | ||||||
| */ | */ | ||||||
| track_t | track_t | ||||||
|  | @ -50,7 +50,7 @@ cdio_get_first_track_num(const CdIo_t *p_cdio) | ||||||
|     cdio_info("Null CdIo object passed\n"); |     cdio_info("Null CdIo object passed\n"); | ||||||
|     return CDIO_INVALID_TRACK; |     return CDIO_INVALID_TRACK; | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
| 
 | 
 | ||||||
|   if (p_cdio->op.get_first_track_num) { |   if (p_cdio->op.get_first_track_num) { | ||||||
|     return p_cdio->op.get_first_track_num (p_cdio->env); |     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); |     const track_t i_first_track = cdio_get_first_track_num(p_cdio); | ||||||
|     if ( CDIO_INVALID_TRACK != i_first_track ) { |     if ( CDIO_INVALID_TRACK != i_first_track ) { | ||||||
|       const track_t i_tracks = cdio_get_num_tracks(p_cdio); |       const track_t u_tracks = cdio_get_num_tracks(p_cdio); | ||||||
|       if ( CDIO_INVALID_TRACK != i_tracks )  |       if ( CDIO_INVALID_TRACK != u_tracks ) | ||||||
| 	return i_first_track + i_tracks - 1; | 	return i_first_track + u_tracks - 1; | ||||||
|     } |     } | ||||||
|     return CDIO_INVALID_TRACK; |     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. |   Not meaningful if track is not an audio track. | ||||||
| */ | */ | ||||||
| int | 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) { |   if (NULL == p_cdio) { | ||||||
|     cdio_info("Null CdIo object passed\n"); |     cdio_info("Null CdIo object passed\n"); | ||||||
|     return -1; |     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", |      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; |      return -1; | ||||||
|   } |   } | ||||||
|   if (p_cdio->op.get_track_channels) { |   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 { |   } else { | ||||||
|     return -2; |     return -2; | ||||||
|   } |   } | ||||||
|  | @ -109,44 +111,44 @@ cdio_get_track_channels(const CdIo_t *p_cdio, track_t i_track) | ||||||
|   if not an audio track? |   if not an audio track? | ||||||
| */ | */ | ||||||
| track_flag_t | 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) { |   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 { |   } else { | ||||||
|     return CDIO_TRACK_FLAG_UNKNOWN; |     return CDIO_TRACK_FLAG_UNKNOWN; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Get format of track.  |   Get format of track. | ||||||
| */ | */ | ||||||
| track_format_t | 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) return TRACK_FORMAT_ERROR; | ||||||
| 
 | 
 | ||||||
|   if (p_cdio->op.get_track_format) { |   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 { |   } else { | ||||||
|     return TRACK_FORMAT_ERROR; |     return TRACK_FORMAT_ERROR; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the Joliet level recognized for p_cdio. |   Return the Joliet level recognized for p_cdio. | ||||||
| */ | */ | ||||||
| uint8_t  | uint8_t | ||||||
| cdio_get_joliet_level(const CdIo_t *p_cdio) | cdio_get_joliet_level(const CdIo_t *p_cdio) | ||||||
| { | { | ||||||
|   if (!p_cdio) return 0; |   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); |       = (generic_img_private_t *) (p_cdio->env); | ||||||
|     return p_env->i_joliet_level; |     return p_env->i_joliet_level; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*! 
 | /*!
 | ||||||
|   Return the number of tracks in the current medium. |   Return the number of tracks in the current medium. | ||||||
|   CDIO_INVALID_TRACK is returned on error. |   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.
 | /*! Find the track which contans lsn.
 | ||||||
|     CDIO_INVALID_TRACK is returned if the lsn outside of the CD or |     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. |     If the lsn is before the pregap of the first track 0 is returned. | ||||||
|     Otherwise we return the track that spans the lsn. |     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) | cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | ||||||
| { | { | ||||||
|   if (!p_cdio) return CDIO_INVALID_TRACK; |   if (!p_cdio) return CDIO_INVALID_TRACK; | ||||||
|    | 
 | ||||||
|   { |   { | ||||||
|     track_t i_low_track   = cdio_get_first_track_num(p_cdio); |     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; | 	|| CDIO_INVALID_TRACK == i_high_track ) return CDIO_INVALID_TRACK; | ||||||
|      | 
 | ||||||
|     if (lsn < cdio_get_track_lsn(p_cdio, i_low_track)) |     if (lsn < cdio_get_track_lsn(p_cdio, i_low_track)) | ||||||
|       return 0; /* We're in the pre-gap of first 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. */ |       return CDIO_INVALID_TRACK; /* We're beyond the end. */ | ||||||
| 
 | 
 | ||||||
|     do { |     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; |       if (lsn >= i_mid_lsn) i_low_track  = i_mid + 1; | ||||||
|     } while ( i_low_track <= i_high_track ); |     } while ( i_low_track <= i_high_track ); | ||||||
| 
 | 
 | ||||||
|     return (i_low_track > i_high_track + 1)  |     if (i_low_track > i_high_track + 1) { | ||||||
|       ? i_high_track + 1 : i_high_track; | 	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: |   XA data (green, mode2 form2). That is track begins: | ||||||
|   sync - header - subheader |   sync - header - subheader | ||||||
|   12     4      -  8 |   12     4      -  8 | ||||||
|    | 
 | ||||||
|   FIXME: there's gotta be a better design for this and get_track_format? |   FIXME: there's gotta be a better design for this and get_track_format? | ||||||
| */ | */ | ||||||
| bool | 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) { |   if (p_cdio == NULL) { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if (p_cdio->op.get_track_green) { |   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 { |   } else { | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the starting LBA for track number |   Return the starting LBA for track number | ||||||
|   track_num in cdio.  Tracks numbers start at 1. |   track_num in cdio.  Tracks numbers start at 1. | ||||||
|   The "leadout" track is specified either by |   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. |   CDIO_INVALID_LBA is returned on error. | ||||||
| */ | */ | ||||||
| lba_t | 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) { |   if (NULL == p_cdio) { | ||||||
|     cdio_info("Null CdIo object passed\n"); |     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) { |   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 { |   } else { | ||||||
|     msf_t msf; |     msf_t msf; | ||||||
|     if (p_cdio->op.get_track_msf)  |     if (p_cdio->op.get_track_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_lba(&msf); |         return cdio_msf_to_lba(&msf); | ||||||
|     return CDIO_INVALID_LBA; |     return CDIO_INVALID_LBA; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the starting LSN for track number |   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 |   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. |   CDIO_INVALID_LSN is returned on error. | ||||||
| */ | */ | ||||||
| lsn_t | 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) { |   if (NULL == p_cdio) { | ||||||
|     cdio_info("Null CdIo object passed\n"); |     cdio_info("Null CdIo object passed\n"); | ||||||
|     return CDIO_INVALID_LSN; |     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", |      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; |      return CDIO_INVALID_LSN; | ||||||
|   } |   } | ||||||
| 
 |   */ | ||||||
| 
 | 
 | ||||||
|   if (p_cdio->op.get_track_lba) { |   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 { |   } else { | ||||||
|     msf_t msf; |     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_msf_to_lsn(&msf); | ||||||
|     return CDIO_INVALID_LSN; |     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 |   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 |   Note: string is malloc'd so caller has to free() the returned | ||||||
|   string when done with it. |   string when done with it. | ||||||
| */ | */ | ||||||
| char * | 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) { |   if (NULL == p_cdio) { | ||||||
|     cdio_info("Null CdIo object passed\n"); |     cdio_info("Null CdIo object passed\n"); | ||||||
|     return NULL; |     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", |      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; |      return NULL; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   if (p_cdio->op.get_track_isrc) { |   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 { |   } else { | ||||||
|     return NULL; |     return NULL; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the starting LBA for the pregap for track number |   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. |   CDIO_INVALID_LBA is returned on error. | ||||||
| */ | */ | ||||||
| lba_t | 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) { |   if (NULL == p_cdio) { | ||||||
|     cdio_info("Null CdIo object passed\n"); |     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) { |   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 { |   } else { | ||||||
|     return CDIO_INVALID_LBA; |     return CDIO_INVALID_LBA; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the starting LSN for the pregap for track number |   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. |   CDIO_INVALID_LSN is returned on error. | ||||||
| */ | */ | ||||||
| lsn_t | 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 |   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 | 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; |   if (CDIO_INVALID_LSN == lsn) return CDIO_INVALID_LSN; | ||||||
|   /* Safe, we've always the leadout. */ |   /* Safe, we've always the leadout. */ | ||||||
|   return lsn - 1; |   return lsn - 1; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the starting MSF (minutes/secs/frames) for track number |   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 |   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. |   False is returned if there is no track entry. | ||||||
| */ | */ | ||||||
| bool | 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) return false; | ||||||
| 
 | 
 | ||||||
|   if (p_cdio->op.get_track_msf) { |   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) { |   } 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; |     if (lba  == CDIO_INVALID_LBA) return false; | ||||||
|     cdio_lba_to_msf(lba, msf); |     cdio_lba_to_msf(lba, msf); | ||||||
|     return true; |     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? |   if not an audio track? | ||||||
| */ | */ | ||||||
| track_flag_t | 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) { |   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 { |   } else { | ||||||
|     return CDIO_TRACK_FLAG_UNKNOWN; |     return CDIO_TRACK_FLAG_UNKNOWN; | ||||||
|   } |   } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /*!  
 | /*!
 | ||||||
|   Return the number of sectors between this track an the next.  This |   Return the number of sectors between this track an the next.  This | ||||||
|   includes any pregap sectors before the start of the next track. |   includes any pregap sectors before the start of the next track. | ||||||
|   Tracks start at 1. |   Tracks start at 1. | ||||||
|   0 is returned if there is an error. |   0 is returned if there is an error. | ||||||
| */ | */ | ||||||
| unsigned int | 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)  |   if (u_track >=1 && u_track <= u_tracks) | ||||||
|     return ( cdio_get_track_lba(p_cdio, i_track+1)  |     return ( cdio_get_track_lba(p_cdio, u_track+1) | ||||||
|              - cdio_get_track_lba(p_cdio, i_track) ); |              - cdio_get_track_lba(p_cdio, u_track) ); | ||||||
|   return 0; |   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 | IDD_DIALOG DIALOGEX 12, 12, 206, 329 | ||||||
| STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | ||||||
| EXSTYLE WS_EX_APPWINDOW | EXSTYLE WS_EX_APPWINDOW | ||||||
| CAPTION "Rufus v1.3.3.246" | CAPTION "Rufus v1.3.3.247" | ||||||
| FONT 8, "MS Shell Dlg", 400, 0, 0x1 | FONT 8, "MS Shell Dlg", 400, 0, 0x1 | ||||||
| BEGIN | BEGIN | ||||||
|     DEFPUSHBUTTON   "Start",IDC_START,94,291,50,14 |     DEFPUSHBUTTON   "Start",IDC_START,94,291,50,14 | ||||||
|  | @ -276,8 +276,8 @@ END | ||||||
| // | // | ||||||
| 
 | 
 | ||||||
| VS_VERSION_INFO VERSIONINFO | VS_VERSION_INFO VERSIONINFO | ||||||
|  FILEVERSION 1,3,3,246 |  FILEVERSION 1,3,3,247 | ||||||
|  PRODUCTVERSION 1,3,3,246 |  PRODUCTVERSION 1,3,3,247 | ||||||
|  FILEFLAGSMASK 0x3fL |  FILEFLAGSMASK 0x3fL | ||||||
| #ifdef _DEBUG | #ifdef _DEBUG | ||||||
|  FILEFLAGS 0x1L |  FILEFLAGS 0x1L | ||||||
|  | @ -294,13 +294,13 @@ BEGIN | ||||||
|         BEGIN |         BEGIN | ||||||
|             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" |             VALUE "CompanyName", "Akeo Consulting (http://akeo.ie)" | ||||||
|             VALUE "FileDescription", "Rufus" |             VALUE "FileDescription", "Rufus" | ||||||
|             VALUE "FileVersion", "1.3.3.246" |             VALUE "FileVersion", "1.3.3.247" | ||||||
|             VALUE "InternalName", "Rufus" |             VALUE "InternalName", "Rufus" | ||||||
|             VALUE "LegalCopyright", "(c) 2011-2013 Pete Batard (GPL v3)" |             VALUE "LegalCopyright", "(c) 2011-2013 Pete Batard (GPL v3)" | ||||||
|             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" |             VALUE "LegalTrademarks", "http://www.gnu.org/copyleft/gpl.html" | ||||||
|             VALUE "OriginalFilename", "rufus.exe" |             VALUE "OriginalFilename", "rufus.exe" | ||||||
|             VALUE "ProductName", "Rufus" |             VALUE "ProductName", "Rufus" | ||||||
|             VALUE "ProductVersion", "1.3.3.246" |             VALUE "ProductVersion", "1.3.3.247" | ||||||
|         END |         END | ||||||
|     END |     END | ||||||
|     BLOCK "VarFileInfo" |     BLOCK "VarFileInfo" | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue