From cf7b5e9bf4ca2270770dd1beebb318c1e710b1c5 Mon Sep 17 00:00:00 2001 From: rocky Date: Fri, 13 Aug 2004 13:04:37 +0000 Subject: [PATCH] Merge common cdtext code into image drivers. --- lib/_cdio_generic.c | 23 ++++++++++++++--------- lib/image/bincue.c | 19 +++++++++++-------- lib/image/cdrdao.c | 25 ++++++++++++++++--------- lib/image/nrg.c | 13 ++++++++----- lib/image_common.h | 34 ++-------------------------------- 5 files changed, 51 insertions(+), 63 deletions(-) diff --git a/lib/_cdio_generic.c b/lib/_cdio_generic.c index 4c7bcd27..df8418bc 100644 --- a/lib/_cdio_generic.c +++ b/lib/_cdio_generic.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_generic.c,v 1.23 2004/08/10 11:58:15 rocky Exp $ + $Id: _cdio_generic.c,v 1.24 2004/08/13 13:04:37 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_generic.c,v 1.23 2004/08/10 11:58:15 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.24 2004/08/13 13:04:37 rocky Exp $"; #include #include @@ -65,17 +65,22 @@ cdio_generic_bogus_eject_media (void *user_data) { Release and free resources associated with cd. */ void -cdio_generic_free (void *user_data) +cdio_generic_free (void *p_user_data) { - generic_img_private_t *env = user_data; + generic_img_private_t *p_env = p_user_data; + track_t i_track; - if (NULL == env) return; - free (env->source_name); + if (NULL == p_env) return; + free (p_env->source_name); - if (env->fd >= 0) - close (env->fd); + for (i_track=0; i_track < p_env->i_tracks; i_track++) { + cdtext_destroy(&(p_env->cdtext_track[i_track])); + } - free (env); + if (p_env->fd >= 0) + close (p_env->fd); + + free (p_env); } /*! diff --git a/lib/image/bincue.c b/lib/image/bincue.c index dee7653c..6363c55e 100644 --- a/lib/image/bincue.c +++ b/lib/image/bincue.c @@ -1,5 +1,5 @@ /* - $Id: bincue.c,v 1.39 2004/07/29 02:16:20 rocky Exp $ + $Id: bincue.c,v 1.40 2004/08/13 13:04:37 rocky Exp $ Copyright (C) 2002, 2003, 2004 Rocky Bernstein Copyright (C) 2001 Herbert Valerio Riedel @@ -26,7 +26,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: bincue.c,v 1.39 2004/07/29 02:16:20 rocky Exp $"; +static const char _rcsid[] = "$Id: bincue.c,v 1.40 2004/08/13 13:04:37 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -81,7 +81,6 @@ typedef struct { exactly 13 bytes */ track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track add 1 for leadout. */ - cdtext_t cdtext; /* CD-TEXT */ discmode_t disc_mode; } _img_private_t; @@ -115,7 +114,7 @@ _init_bincue (_img_private_t *env) env->psz_mcn = NULL; env->disc_mode = CDIO_DISC_MODE_NO_INFO; - cdtext_init (&(env->cdtext)); + cdtext_init (&(env->gen.cdtext)); lead_lsn = _stat_size_bincue( (_img_private_t *) env); @@ -296,6 +295,8 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) if (cd) { cd->gen.i_tracks=0; cd->gen.i_first_track=1; + cd->gen.b_cdtext_init = true; + cd->gen.b_cdtext_error = false; cd->psz_mcn=NULL; } @@ -383,7 +384,7 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) this_track->track_num = cd->gen.i_tracks; this_track->num_indices = 0; b_first_index_for_track = false; - cdtext_init (&(cd->tocent[cd->gen.i_tracks].cdtext)); + cdtext_init (&(cd->gen.cdtext_track[cd->gen.i_tracks])); cd->gen.i_tracks++; } i++; @@ -745,12 +746,14 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) (cdtext_key = cdtext_is_keyword (psz_keyword)) ) { if (-1 == i) { if (cd) { - cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"), &(cd->cdtext)); + cdtext_set (cdtext_key, + strtok (NULL, "\"\t\n\r"), + &(cd->gen.cdtext)); } } else { if (cd) { cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"), - &(cd->tocent[i].cdtext)); + &(cd->gen.cdtext_track[i])); } } @@ -1137,7 +1140,7 @@ cdio_open_cue (const char *psz_cue_name) .eject_media = _eject_media_image, .free = _free_image, .get_arg = _get_arg_image, - .get_cdtext = _get_cdtext_image, + .get_cdtext = get_cdtext_generic, .get_devices = cdio_get_devices_bincue, .get_default_device = cdio_get_default_device_bincue, .get_discmode = _get_discmode_image, diff --git a/lib/image/cdrdao.c b/lib/image/cdrdao.c index 41a7c328..4f40c837 100644 --- a/lib/image/cdrdao.c +++ b/lib/image/cdrdao.c @@ -1,5 +1,5 @@ /* - $Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $ + $Id: cdrdao.c,v 1.25 2004/08/13 13:04:37 rocky Exp $ Copyright (C) 2004 Rocky Bernstein toc reading routine adapted from cuetools @@ -25,7 +25,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $"; +static const char _rcsid[] = "$Id: cdrdao.c,v 1.25 2004/08/13 13:04:37 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -81,7 +81,6 @@ typedef struct { exactly 13 bytes */ track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track add 1 for leadout. */ - cdtext_t cdtext; /* CD-TEXT */ discmode_t disc_mode; } _img_private_t; @@ -110,7 +109,7 @@ _init_cdrdao (_img_private_t *env) env->psz_mcn = NULL; env->disc_mode = CDIO_DISC_MODE_NO_INFO; - cdtext_init (&(env->cdtext)); + cdtext_init (&(env->gen.cdtext)); /* Read in TOC sheet. */ if ( !parse_tocfile(env, env->psz_cue_name) ) return false; @@ -289,6 +288,11 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name) return false; } + if (cd) { + cd->gen.b_cdtext_init = true; + cd->gen.b_cdtext_error = false; + } + while ((fgets(psz_line, MAXLINE, fp)) != NULL) { i_line++; @@ -368,7 +372,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name) /* TRACK [] */ } else if (0 == strcmp ("TRACK", psz_keyword)) { i++; - if (NULL != cd) cdtext_init (&(cd->tocent[i].cdtext)); + if (NULL != cd) cdtext_init (&(cd->gen.cdtext_track[i])); if (NULL != (psz_field = strtok (NULL, " \t\n\r"))) { if (0 == strcmp ("AUDIO", psz_field)) { if (NULL != cd) { @@ -786,12 +790,15 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name) (cdtext_key = cdtext_is_keyword (psz_keyword)) ) { if (-1 == i) { if (NULL != cd) { - cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"), &(cd->cdtext)); + cdtext_set (cdtext_key, + strtok (NULL, "\"\t\n\r"), + &(cd->gen.cdtext)); } } else { if (NULL != cd) { - cdtext_set (cdtext_key, strtok (NULL, "\"\t\n\r"), - &(cd->tocent[i].cdtext)); + cdtext_set (cdtext_key, + strtok (NULL, "\"\t\n\r"), + &(cd->gen.cdtext_track[i])); } } @@ -1117,7 +1124,7 @@ cdio_open_cdrdao (const char *psz_cue_name) .eject_media = _eject_media_image, .free = _free_image, .get_arg = _get_arg_image, - .get_cdtext = _get_cdtext_image, + .get_cdtext = get_cdtext_generic, .get_devices = cdio_get_devices_cdrdao, .get_default_device = cdio_get_default_device_cdrdao, .get_discmode = _get_discmode_image, diff --git a/lib/image/nrg.c b/lib/image/nrg.c index edb89ac8..3b1f06e2 100644 --- a/lib/image/nrg.c +++ b/lib/image/nrg.c @@ -1,5 +1,5 @@ /* - $Id: nrg.c,v 1.36 2004/07/29 02:16:20 rocky Exp $ + $Id: nrg.c,v 1.37 2004/08/13 13:04:37 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein Copyright (C) 2001, 2003 Herbert Valerio Riedel @@ -45,7 +45,7 @@ #include "_cdio_stdio.h" #include "nrg.h" -static const char _rcsid[] = "$Id: nrg.c,v 1.36 2004/07/29 02:16:20 rocky Exp $"; +static const char _rcsid[] = "$Id: nrg.c,v 1.37 2004/08/13 13:04:37 rocky Exp $"; /* reader */ @@ -77,7 +77,6 @@ typedef struct { track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track add 1 for leadout. */ - cdtext_t cdtext; /* CD-TEXT */ discmode_t disc_mode; /* Nero Specific stuff. Note: for the image_free to work, this *must* @@ -429,6 +428,7 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) if (0 == form2) { int i; for (i=0; igen.i_tracks; i++) { + cdtext_init (&(env->gen.cdtext_track[i])); env->tocent[i].track_format= track_format; env->tocent[i].datastart = 0; env->tocent[i].track_green = false; @@ -444,6 +444,7 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) } else if (2 == form2) { int i; for (i=0; igen.i_tracks; i++) { + cdtext_init (&(env->gen.cdtext_track[i])); env->tocent[i].track_green = true; env->tocent[i].track_format= track_format; env->tocent[i].datasize = CDIO_CD_FRAMESIZE; @@ -732,6 +733,8 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) env->tocent[env->gen.i_tracks-1].sec_count = cdio_lsn_to_lba(env->size - env->tocent[env->gen.i_tracks-1].start_lba); + env->gen.b_cdtext_init = true; + env->gen.b_cdtext_error = false; free(footer_buf); return true; } @@ -756,7 +759,7 @@ _init_nrg (_img_private_t *env) env->psz_mcn = NULL; env->disc_mode = CDIO_DISC_MODE_NO_INFO; - cdtext_init (&(env->cdtext)); + cdtext_init (&(env->gen.cdtext)); if ( !parse_nrg (env, env->gen.source_name) ) { cdio_warn ("image file %s is not a Nero image", @@ -1185,7 +1188,7 @@ cdio_open_nrg (const char *psz_source) .eject_media = _eject_media_nrg, .free = _free_nrg, .get_arg = _get_arg_image, - .get_cdtext = _get_cdtext_image, + .get_cdtext = get_cdtext_generic, .get_devices = cdio_get_devices_nrg, .get_default_device = cdio_get_default_device_nrg, .get_discmode = _get_discmode_image, diff --git a/lib/image_common.h b/lib/image_common.h index cdecaa79..fe4122af 100644 --- a/lib/image_common.h +++ b/lib/image_common.h @@ -1,5 +1,5 @@ /* - $Id: image_common.h,v 1.15 2004/07/29 02:16:20 rocky Exp $ + $Id: image_common.h,v 1.16 2004/08/13 13:04:37 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -53,7 +53,7 @@ _free_image (void *user_data) free_if_notnull(env->psz_mcn); free_if_notnull(env->psz_cue_name); - cdtext_destroy(&(env->cdtext)); + cdtext_destroy(&(env->gen.cdtext)); cdio_generic_stdio_free(env); free(env); } @@ -89,36 +89,6 @@ _get_arg_image (void *user_data, const char key[]) return NULL; } -/*! - 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. - - If i_track is 0 or CDIO_CDROM_LEADOUT_TRACK the track returned - is the information assocated with the CD. -*/ -static const cdtext_t * -_get_cdtext_image (void *user_data, track_t i_track) -{ - const _img_private_t *env = user_data; - - if ( NULL == env || - ( 0 != i_track - && i_track >= env->gen.i_tracks + env->gen.i_first_track ) ) - return NULL; - - if (CDIO_CDROM_LEADOUT_TRACK == i_track) - i_track = 0; - - if (0 == i_track) - return &(env->cdtext); - else - return &(env->tocent[i_track-env->gen.i_first_track].cdtext); - -} - /*! Get disc type associated with cd_obj. */