diff --git a/lib/MSWindows/aspi32.c b/lib/MSWindows/aspi32.c index 54128c9a..678c720e 100644 --- a/lib/MSWindows/aspi32.c +++ b/lib/MSWindows/aspi32.c @@ -1,5 +1,5 @@ /* - $Id: aspi32.c,v 1.24 2004/07/16 02:09:10 rocky Exp $ + $Id: aspi32.c,v 1.25 2004/07/17 02:43:41 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: aspi32.c,v 1.24 2004/07/16 02:09:10 rocky Exp $"; +static const char _rcsid[] = "$Id: aspi32.c,v 1.25 2004/07/17 02:43:41 rocky Exp $"; #include #include @@ -710,6 +710,12 @@ wnaspi32_eject_media (void *user_data) { i_track++; \ idx = 0; +/* + Read cdtext information for a CdIo object . + + return true on success, false on error or CD-TEXT information does + not exist. +*/ /*! Get cdtext information for a CdIo object . @@ -717,8 +723,8 @@ wnaspi32_eject_media (void *user_data) { @return the CD-TEXT object or NULL if obj is NULL or CD-TEXT information does not exist. */ -const cdtext_t * -get_cdtext_aspi (_img_private_t *env) +static const cdtext_t * +_init_cdtext_aspi (_img_private_t *env) { uint8_t wdata[5000] = { 0, }; uint8_t scsi_cdb[10] = { 0, }; @@ -730,7 +736,7 @@ get_cdtext_aspi (_img_private_t *env) if (!scsi_passthrough_aspi(env, scsi_cdb, sizeof(scsi_cdb), wdata, sizeof(wdata))) - return NULL; + return false; { CDText_data_t *pdata; @@ -792,9 +798,30 @@ get_cdtext_aspi (_img_private_t *env) } } - env->b_cdtext_init = true; - return &(env->cdtext); + return true; } + +/*! + Get cdtext information for a CdIo object . + + @param obj the CD object that may contain CD-TEXT information. + @return the CD-TEXT object or NULL if obj is NULL + or CD-TEXT information does not exist. +*/ +const cdtext_t * +get_cdtext_aspi (_img_private_t *env, track_t i_track) +{ + + env->b_cdtext_init = _init_cdtext_aspi(env); + if (!env->b_cdtext_init) return NULL; + + if (0 == i_track) + return &(env->cdtext); + else + return &(env->cdtext_track[i_track-env->i_first_track]); +} + + /*! Return the the kind of drive capabilities of device. diff --git a/lib/MSWindows/win32.c b/lib/MSWindows/win32.c index f041743c..19c10d11 100644 --- a/lib/MSWindows/win32.c +++ b/lib/MSWindows/win32.c @@ -1,5 +1,5 @@ /* - $Id: win32.c,v 1.21 2004/07/16 13:55:08 rocky Exp $ + $Id: win32.c,v 1.22 2004/07/17 02:43:41 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -26,7 +26,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: win32.c,v 1.21 2004/07/16 13:55:08 rocky Exp $"; +static const char _rcsid[] = "$Id: win32.c,v 1.22 2004/07/17 02:43:41 rocky Exp $"; #include #include @@ -431,16 +431,22 @@ _get_arg_win32 (void *user_data, const char key[]) Return the value associated with the key "arg". */ static const cdtext_t * -_get_cdtext_win32 (void *user_data) +_get_cdtext_win32 (void *user_data, track_t i_track) { _img_private_t *env = user_data; if (NULL == env) return NULL; + if ( NULL == env || + (0 != i_track + && i_track >= env->i_tracks + env->i_first_track ) ) + return NULL; + + if (env->hASPI) { - return get_cdtext_aspi(env); + return get_cdtext_aspi(env, i_track); } else - return get_cdtext_win32ioctl(env); + return get_cdtext_win32ioctl(env, i_track); return NULL; } @@ -495,19 +501,19 @@ _cdio_get_num_tracks(void *user_data) Get format of track. */ static track_format_t -_cdio_get_track_format(void *obj, track_t track_num) +_cdio_get_track_format(void *obj, track_t i_tracks) { _img_private_t *env = obj; - if (!env->gen.toc_init) _cdio_read_toc (env) ; - - if (track_num > env->i_tracks || track_num == 0) + if ( NULL == env || + ( i_track < env->i_first_track + || i_track >= env->i_tracks + env->i_first_track ) ) return TRACK_FORMAT_ERROR; if( env->hASPI ) { - return get_track_format_aspi(env, track_num); + return get_track_format_aspi(env, i_tracks); } else { - return get_track_format_win32ioctl(env, track_num); + return get_track_format_win32ioctl(env, i_tracks); } } @@ -524,13 +530,6 @@ _cdio_get_track_green(void *obj, track_t i_track) { _img_private_t *env = obj; - if (!env->toc_init) _cdio_read_toc (env) ; - - if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = env->i_tracks+1; - - if (i_track > env->i_tracks+1 || i_track == 0) - return false; - switch (_cdio_get_track_format(env, i_track)) { case TRACK_FORMAT_XA: return true; @@ -553,13 +552,13 @@ _cdio_get_track_green(void *obj, track_t i_track) /*! Return the starting MSF (minutes/secs/frames) for track number - track_num in obj. Track numbers start at 1. + i_tracks in obj. Track numbers start at 1. The "leadout" track is specified either by - using track_num LEADOUT_TRACK or the total tracks+1. + using i_tracks LEADOUT_TRACK or the total tracks+1. False is returned if there is no track entry. */ static bool -_cdio_get_track_msf(void *env, track_t track_num, msf_t *msf) +_cdio_get_track_msf(void *env, track_t i_tracks, msf_t *msf) { _img_private_t *_obj = env; @@ -567,12 +566,12 @@ _cdio_get_track_msf(void *env, track_t track_num, msf_t *msf) if (!_obj->toc_init) _cdio_read_toc (_obj) ; - if (track_num == CDIO_CDROM_LEADOUT_TRACK) track_num = _obj->i_tracks+1; + if (i_tracks == CDIO_CDROM_LEADOUT_TRACK) i_tracks = _obj->i_tracks+1; - if (track_num > _obj->i_tracks+1 || track_num == 0) { + if (i_tracks > _obj->i_tracks+1 || i_tracks == 0) { return false; } else { - cdio_lsn_to_msf(_obj->tocent[track_num-1].start_lsn, msf); + cdio_lsn_to_msf(_obj->tocent[i_tracks-1].start_lsn, msf); return true; } } diff --git a/lib/_cdio_linux.c b/lib/_cdio_linux.c index ef34bc29..4d0c8188 100644 --- a/lib/_cdio_linux.c +++ b/lib/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.65 2004/07/17 02:18:27 rocky Exp $ + $Id: _cdio_linux.c,v 1.66 2004/07/17 02:43:41 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.65 2004/07/17 02:18:27 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.66 2004/07/17 02:43:41 rocky Exp $"; #include @@ -692,12 +692,11 @@ _cdio_read_toc (_img_private_t *env) i_track++; \ idx = 0; -/*! - Get cdtext information for a CdIo object . +/* + Read cdtext information for a CdIo object . - @param obj the CD object that may contain CD-TEXT information. - @return the CD-TEXT object or NULL if obj is NULL - or CD-TEXT information does not exist. + return true on success, false on error or CD-TEXT information does + not exist. */ static bool _init_cdtext_linux (_img_private_t *env) @@ -1056,7 +1055,7 @@ _get_track_green_linux(void *user_data, track_t i_track) if (!env->gen.toc_init) _cdio_read_toc (env) ; - if (i_track > (TOTAL_TRACKS+FIRST_TRACK_NUM) || i_track < FIRST_TRACK_NUM) + if (i_track >= (TOTAL_TRACKS+FIRST_TRACK_NUM) || i_track < FIRST_TRACK_NUM) return false; i_track -= FIRST_TRACK_NUM; diff --git a/lib/_cdio_sunos.c b/lib/_cdio_sunos.c index 0ad08d0b..6fce3dd8 100644 --- a/lib/_cdio_sunos.c +++ b/lib/_cdio_sunos.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_sunos.c,v 1.48 2004/07/16 11:37:12 rocky Exp $ + $Id: _cdio_sunos.c,v 1.49 2004/07/17 02:43:41 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -38,7 +38,7 @@ #ifdef HAVE_SOLARIS_CDROM -static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.48 2004/07/16 11:37:12 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.49 2004/07/17 02:43:41 rocky Exp $"; #ifdef HAVE_GLOB_H #include @@ -415,18 +415,16 @@ _cdio_read_toc (_img_private_t *env) i_track++; \ idx = 0; -/*! - Get cdtext information for a CdIo object . +/* + Read cdtext information for a CdIo object . - @param obj the CD object that may contain CD-TEXT information. - @return the CD-TEXT object or NULL if obj is NULL - or CD-TEXT information does not exist. + return true on success, false on error or CD-TEXT information does + not exist. */ static const cdtext_t * -_get_cdtext_solaris (void *user_data) +_init_cdtext_solaris (_img_private_t *env) { - _img_private_t *env = user_data; int status; char wdata[5000] = { 0, }; struct uscsi_cmd my_cmd; @@ -453,7 +451,7 @@ _get_cdtext_solaris (void *user_data) status = ioctl(env->gen.fd, USCSICMD, &my_cmd); if(status != 0) { cdio_warn ("CDTEXT reading failed: %s\n", strerror(errno)); - return NULL; + return false; } else { CDText_data_t *pdata; @@ -513,8 +511,31 @@ _get_cdtext_solaris (void *user_data) pdata++; } } - env->b_cdtext_init = true; - return &(env->cdtext); + return true; +} + +/*! + Get cdtext information for a CdIo object . + + @param obj the CD object that may contain CD-TEXT information. + @return the CD-TEXT object or NULL if obj is NULL + or CD-TEXT information does not exist. +*/ +static const cdtext_t * +_get_cdtext_solaris (void *user_data, track_t i_track) +{ + if ( NULL == env || + (0 != i_track + && i_track >= TOTAL_TRACKS+FIRST_TRACK_NUM ) ) + return NULL; + + env->b_cdtext_init = _init_cdtext_solaris(env); + if (!env->b_cdtext_init) return NULL; + + if (0 == i_track) + return &(env->cdtext); + else + return &(env->cdtext_track[i_track-FIRST_TRACK_NUM]); } /*! @@ -804,7 +825,7 @@ _cdio_get_track_green(void *user_data, track_t i_track) if (!env->gen.init) _cdio_init(env); if (!env->gen.toc_init) _cdio_read_toc (env) ; - if (i_track > TOTAL_TRACKS+FIRST_TRACK_NUM || i_track < FIRST_TRACK_NUM) + if (i_track >= TOTAL_TRACKS+FIRST_TRACK_NUM || i_track < FIRST_TRACK_NUM) return false; i_track -= FIRST_TRACK_NUM;