diff --git a/lib/FreeBSD/freebsd.c b/lib/FreeBSD/freebsd.c index fb2439da..3fa2ae9e 100644 --- a/lib/FreeBSD/freebsd.c +++ b/lib/FreeBSD/freebsd.c @@ -1,5 +1,5 @@ /* - $Id: freebsd.c,v 1.41 2004/08/16 01:47:49 rocky Exp $ + $Id: freebsd.c,v 1.42 2004/10/26 07:34:41 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: freebsd.c,v 1.41 2004/08/16 01:47:49 rocky Exp $"; +static const char _rcsid[] = "$Id: freebsd.c,v 1.42 2004/10/26 07:34:41 rocky Exp $"; #include "freebsd.h" @@ -334,9 +334,11 @@ run_scsi_cmd_freebsd( const void *p_user_data, unsigned int i_timeout_ms, */ static track_format_t -_get_track_format_freebsd(void *user_data, track_t i_track) +_get_track_format_freebsd(void *p_user_data, track_t i_track) { - _img_private_t *p_env = user_data; + _img_private_t *p_env = p_user_data; + + if (!p_env->gen.toc_init) read_toc_freebsd (p_user_data) ; if (i_track > TOTAL_TRACKS || i_track == 0) return TRACK_FORMAT_ERROR; diff --git a/lib/MSWindows/win32.c b/lib/MSWindows/win32.c index a3efff11..067965ca 100644 --- a/lib/MSWindows/win32.c +++ b/lib/MSWindows/win32.c @@ -1,5 +1,5 @@ /* - $Id: win32.c,v 1.45 2004/08/27 04:12:29 rocky Exp $ + $Id: win32.c,v 1.46 2004/10/26 07:34: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.45 2004/08/27 04:12:29 rocky Exp $"; +static const char _rcsid[] = "$Id: win32.c,v 1.46 2004/10/26 07:34:41 rocky Exp $"; #include #include @@ -475,13 +475,16 @@ _cdio_get_mcn (const void *p_user_data) { Get format of track. */ static track_format_t -_cdio_get_track_format(void *obj, track_t i_track) +_cdio_get_track_format(void *p_obj, track_t i_track) { - _img_private_t *p_env = obj; + _img_private_t *p_env = p_obj; - if ( NULL == p_env || - ( i_track < p_env->gen.i_first_track - || i_track >= p_env->gen.i_tracks + p_env->gen.i_first_track ) ) + if ( !p_env ) return TRACK_FORMAT_ERROR; + + if (!p_env->gen.toc_init) read_toc_win32 (p_env) ; + + if ( i_track < p_env->gen.i_first_track + || i_track >= p_env->gen.i_tracks + p_env->gen.i_first_track ) ) return TRACK_FORMAT_ERROR; if( p_env->hASPI ) { diff --git a/lib/_cdio_linux.c b/lib/_cdio_linux.c index 683bc639..7621758d 100644 --- a/lib/_cdio_linux.c +++ b/lib/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.97 2004/09/03 23:20:11 rocky Exp $ + $Id: _cdio_linux.c,v 1.98 2004/10/26 07:34: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.97 2004/09/03 23:20:11 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.98 2004/10/26 07:34:41 rocky Exp $"; #include @@ -313,6 +313,10 @@ get_track_format_linux(void *p_user_data, track_t i_track) { _img_private_t *p_env = p_user_data; + if ( !p_env ) return TRACK_FORMAT_ERROR; + + if (!p_env->gen.toc_init) read_toc_linux (p_user_data) ; + if (i_track > (p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) return TRACK_FORMAT_ERROR; diff --git a/lib/_cdio_osx.c b/lib/_cdio_osx.c index fad41023..6fc73d04 100644 --- a/lib/_cdio_osx.c +++ b/lib/_cdio_osx.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_osx.c,v 1.69 2004/09/03 23:20:11 rocky Exp $ + $Id: _cdio_osx.c,v 1.70 2004/10/26 07:34:41 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein from vcdimager code: @@ -34,7 +34,7 @@ #include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_osx.c,v 1.69 2004/09/03 23:20:11 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_osx.c,v 1.70 2004/10/26 07:34:41 rocky Exp $"; #include #include @@ -1116,6 +1116,8 @@ get_track_format_osx(void *user_data, track_t i_track) dk_cd_read_track_info_t cd_read; CDTrackInfo a_track; + if (!p_env->gen.toc_init) read_toc_osx (p_env) ; + if (i_track > p_env->i_last_track || i_track < p_env->gen.i_first_track) return TRACK_FORMAT_ERROR; diff --git a/lib/_cdio_sunos.c b/lib/_cdio_sunos.c index abd21ac9..50486262 100644 --- a/lib/_cdio_sunos.c +++ b/lib/_cdio_sunos.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_sunos.c,v 1.75 2004/09/03 23:20:11 rocky Exp $ + $Id: _cdio_sunos.c,v 1.76 2004/10/26 07:34: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.75 2004/09/03 23:20:11 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.76 2004/10/26 07:34:41 rocky Exp $"; #ifdef HAVE_GLOB_H #include @@ -660,6 +660,10 @@ get_track_format_solaris(void *p_user_data, track_t i_track) { _img_private_t *p_env = p_user_data; + if ( !p_env ) return TRACK_FORMAT_ERROR; + if (!p_env->gen.init) init_solaris(p_env); + if (!p_env->gen.toc_init) read_toc_solaris (p_user_data) ; + if ( (i_track > p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) return TRACK_FORMAT_ERROR; @@ -694,6 +698,7 @@ _cdio_get_track_green(void *p_user_data, track_t i_track) { _img_private_t *p_env = p_user_data; + if ( !p_env ) return false; if (!p_env->gen.init) init_solaris(p_env); if (!p_env->gen.toc_init) read_toc_solaris (p_env) ; diff --git a/src/cd-info.c b/src/cd-info.c index 112f872a..5ad7efd2 100644 --- a/src/cd-info.c +++ b/src/cd-info.c @@ -1,5 +1,5 @@ /* - $Id: cd-info.c,v 1.93 2004/10/26 01:21:05 rocky Exp $ + $Id: cd-info.c,v 1.94 2004/10/26 07:34:41 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein Copyright (C) 1996, 1997, 1998 Gerd Knorr @@ -506,32 +506,31 @@ print_cddb_info(CdIo *p_cdio, track_t i_tracks, track_t i_first_track) { static void print_vcd_info(driver_id_t driver) { vcdinfo_open_return_t open_rc; - vcdinfo_obj_t *obj; - open_rc = vcdinfo_open(&obj, &source_name, driver, NULL); + vcdinfo_obj_t *p_vcd = NULL; + open_rc = vcdinfo_open(&p_vcd, &source_name, driver, NULL); switch (open_rc) { case VCDINFO_OPEN_VCD: - if (vcdinfo_get_format_version (obj) == VCD_TYPE_INVALID) { + if (vcdinfo_get_format_version (p_vcd) == VCD_TYPE_INVALID) { fprintf(stderr, "VCD format detection failed"); - vcdinfo_close(obj); + vcdinfo_close(p_vcd); return; } fprintf (stdout, "Format : %s\n", - vcdinfo_get_format_version_str(obj)); - fprintf (stdout, "Album : `%.16s'\n", vcdinfo_get_album_id(obj)); - fprintf (stdout, "Volume count: %d\n", vcdinfo_get_volume_count(obj)); - fprintf (stdout, "volume number: %d\n", vcdinfo_get_volume_num(obj)); + vcdinfo_get_format_version_str(p_vcd)); + fprintf (stdout, "Album : `%.16s'\n", vcdinfo_get_album_id(p_vcd)); + fprintf (stdout, "Volume count: %d\n", vcdinfo_get_volume_count(p_vcd)); + fprintf (stdout, "volume number: %d\n", vcdinfo_get_volume_num(p_vcd)); break; case VCDINFO_OPEN_ERROR: fprintf (stderr, "Error in Video CD opening of %s\n", source_name); - return; break; case VCDINFO_OPEN_OTHER: fprintf (stderr, "Even though we thought this was a Video CD, " " further inspection says it is not.\n"); break; } - vcdinfo_close(obj); + if (p_vcd) vcdinfo_close(p_vcd); } #endif @@ -635,6 +634,14 @@ print_iso9660_fs (CdIo *p_cdio, cdio_fs_anal_t fs, } } +#define print_vd_info(title, fn) \ + psz_str = fn(&pvd); \ + if (psz_str) { \ + fprintf(stdout, title ": %s\n", psz_str); \ + free(psz_str); \ + psz_str = NULL; \ + } + static void print_analysis(int ms_offset, cdio_iso_analysis_t cdio_iso_analysis, cdio_fs_anal_t fs, int first_data, unsigned int num_audio, @@ -709,15 +716,14 @@ print_analysis(int ms_offset, cdio_iso_analysis_t cdio_iso_analysis, iso9660_pvd_t pvd; if ( iso9660_fs_read_pvd(p_cdio, &pvd) ) { - fprintf(stdout, "Application: %s\n", - iso9660_get_application_id(&pvd)); - fprintf(stdout, "Preparer : %s\n", iso9660_get_preparer_id(&pvd)); - fprintf(stdout, "Publisher : %s\n", iso9660_get_publisher_id(&pvd)); - fprintf(stdout, "System : %s\n", iso9660_get_system_id(&pvd)); - fprintf(stdout, "Volume : %s\n", iso9660_get_volume_id(&pvd)); - fprintf(stdout, "Volume Set : %s\n", iso9660_get_volumeset_id(&pvd)); + char *psz_str; + print_vd_info("Application", iso9660_get_application_id); + print_vd_info("Preparer ", iso9660_get_preparer_id); + print_vd_info("Publisher ", iso9660_get_publisher_id); + print_vd_info("System ", iso9660_get_system_id); + print_vd_info("Volume ", iso9660_get_volume_id); + print_vd_info("Volume Set ", iso9660_get_volumeset_id); } - } if (opts.print_iso9660) @@ -1044,6 +1050,7 @@ main(int argc, const char *argv[]) if (!opts.no_tracks) printf("%3d: %8s %06lu leadout\n", (int) i, psz_msf, (long unsigned int) cdio_msf_to_lsn(&msf)); + free(psz_msf); break; } else if (!opts.no_tracks) { printf("%3d: %8s %06lu %-5s %s\n", (int) i, psz_msf, @@ -1051,6 +1058,7 @@ main(int argc, const char *argv[]) track_format2str[cdio_get_track_format(p_cdio, i)], cdio_get_track_green(p_cdio, i)? "true" : "false"); } + free(psz_msf); if (TRACK_FORMAT_AUDIO == cdio_get_track_format(p_cdio, i)) { num_audio++;