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
				
			
		|  | @ -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 */ | ||||
|  |  | |||
|  | @ -81,9 +81,9 @@ 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); | ||||
|  |  | |||
|  | @ -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> | ||||
| 
 | ||||
|  | @ -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,10 +111,10 @@ 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; | ||||
|   } | ||||
|  | @ -122,12 +124,12 @@ cdio_get_track_copy_permit(const CdIo_t *p_cdio, track_t i_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; | ||||
|   } | ||||
|  | @ -176,7 +178,8 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | |||
| 
 | ||||
|   { | ||||
|     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 | ||||
| 	|| CDIO_INVALID_TRACK == i_high_track ) return CDIO_INVALID_TRACK; | ||||
|  | @ -184,7 +187,7 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | |||
|     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; | ||||
|     } | ||||
|   } | ||||
| } | ||||
| 
 | ||||
|  | @ -208,14 +217,14 @@ cdio_get_track(const CdIo_t *p_cdio, lsn_t lsn) | |||
|   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; | ||||
|   } | ||||
|  | @ -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,11 +246,11 @@ 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 (cdio_get_track_msf(p_cdio, u_track, &msf)) | ||||
|         return cdio_msf_to_lba(&msf); | ||||
|     return CDIO_INVALID_LBA; | ||||
|   } | ||||
|  | @ -249,30 +258,33 @@ cdio_get_track_lba(const CdIo_t *p_cdio, track_t i_track) | |||
| 
 | ||||
| /*!
 | ||||
|   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,27 +292,29 @@ 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; | ||||
|   } | ||||
|  | @ -308,11 +322,11 @@ cdio_get_track_isrc (const CdIo_t *p_cdio, track_t i_track) | |||
| 
 | ||||
| /*!
 | ||||
|   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,7 +334,7 @@ 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; | ||||
|   } | ||||
|  | @ -328,23 +342,23 @@ 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 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. */ | ||||
|  | @ -353,20 +367,20 @@ cdio_get_track_last_lsn(const CdIo_t *p_cdio, track_t i_track) | |||
| 
 | ||||
| /*!
 | ||||
|   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,10 +393,10 @@ 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; | ||||
|   } | ||||
|  | @ -395,12 +409,12 @@ cdio_get_track_preemphasis(const CdIo *p_cdio, track_t i_track) | |||
|   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