From b0e131e5e4a0332815d3998a175bfc1d538309f8 Mon Sep 17 00:00:00 2001 From: Pete Batard Date: Tue, 4 Jun 2013 01:03:56 +0100 Subject: [PATCH] [iso] upgrade libcdio track and sector handling * From latest git version of libcdio --- src/libcdio/cdio/track.h | 92 +++++++++---------- src/libcdio/cdio/udf_time.h | 2 +- src/libcdio/driver/sector.c | 68 +++++++------- src/libcdio/driver/track.c | 172 +++++++++++++++++++----------------- src/rufus.rc | 10 +-- 5 files changed, 179 insertions(+), 165 deletions(-) diff --git a/src/libcdio/cdio/track.h b/src/libcdio/cdio/track.h index e5b9461a..9c665c3b 100644 --- a/src/libcdio/cdio/track.h +++ b/src/libcdio/cdio/track.h @@ -15,7 +15,7 @@ along with this program. If not, see . */ -/** \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. diff --git a/src/libcdio/cdio/udf_time.h b/src/libcdio/cdio/udf_time.h index 33b2f8c4..53203a5c 100644 --- a/src/libcdio/cdio/udf_time.h +++ b/src/libcdio/cdio/udf_time.h @@ -27,7 +27,7 @@ #include -#if defined(__MINGW32__) && !defined(__MINGW64__) +#if defined(__MINGW32__) && !defined(__MINGW64_VERSION_MAJOR) struct timespec { time_t tv_sec; /* Seconds */ long tv_nsec; /* Nanoseconds */ diff --git a/src/libcdio/driver/sector.c b/src/libcdio/driver/sector.c index d24a7511..4a5c04da 100644 --- a/src/libcdio/driver/sector.c +++ b/src/libcdio/driver/sector.c @@ -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 diff --git a/src/libcdio/driver/track.c b/src/libcdio/driver/track.c index b4953fd2..84f727fe 100644 --- a/src/libcdio/driver/track.c +++ b/src/libcdio/driver/track.c @@ -1,5 +1,5 @@ /* - Copyright (C) 2003, 2004, 2005, 2008, 2011, 2012 + Copyright (C) 2003-2005, 2008, 2011-2013 Rocky Bernstein Copyright (C) 2001 Herbert Valerio Riedel @@ -25,13 +25,13 @@ #ifdef HAVE_STDBOOL_H # include -#endif +#endif #include #include #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; } diff --git a/src/rufus.rc b/src/rufus.rc index af78fd31..09909b1d 100644 --- a/src/rufus.rc +++ b/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"