mcn -> psz_mcn and other psz variables.

bincue.c: a little closer to getting cuetools parse_cuefile useable.
This commit is contained in:
rocky
2004-07-09 02:46:42 +00:00
parent 0a905205c7
commit 56e40df160
6 changed files with 178 additions and 105 deletions

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdtext.c,v 1.1 2004/07/09 01:05:32 rocky Exp $ $Id: cdtext.c,v 1.2 2004/07/09 02:46:42 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
toc reading routine adapted from cuetools toc reading routine adapted from cuetools
@@ -89,7 +89,7 @@ void cdtext_delete (cdtext_t *cdtext)
returns 0 if field is a CD-TEXT keyword, returns non-zero otherwise returns 0 if field is a CD-TEXT keyword, returns non-zero otherwise
*/ */
int int
cdtext_is_keyword (char *key) cdtext_is_keyword (const char *key)
{ {
const char *cdtext_keywords[] = const char *cdtext_keywords[] =
{ {
@@ -120,7 +120,7 @@ cdtext_is_keyword (char *key)
/*! sets cdtext's keyword entry to field. /*! sets cdtext's keyword entry to field.
*/ */
void cdtext_set (char *key, char *value, cdtext_t *cdtext) void cdtext_set (const char *key, const char *value, cdtext_t *cdtext)
{ {
if (NULL != value) /* don't pass NULL to strdup! */ if (NULL != value) /* don't pass NULL to strdup! */
for (; NULL != cdtext->key; cdtext++) for (; NULL != cdtext->key; cdtext++)
@@ -130,3 +130,13 @@ void cdtext_set (char *key, char *value, cdtext_t *cdtext)
} }
} }
/* returns value for key, NULL if key is not found */
const char *cdtext_get (const char *key, const cdtext_t *cdtext)
{
for (; NULL != cdtext->key; cdtext++)
if (0 == strcmp (cdtext->key, key))
return (cdtext->value);
return (NULL);
}

View File

@@ -1,9 +1,9 @@
/* /*
$Id: bincue.c,v 1.25 2004/07/09 01:23:46 rocky Exp $ $Id: bincue.c,v 1.26 2004/07/09 02:46:42 rocky Exp $
Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2002, 2003, 2004 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
toc parsing routine adapted from cuetools cue parsing routine adapted from cuetools
Copyright (C) 2003 Svend Sanjay Sorensen <ssorensen@fastmail.fm> Copyright (C) 2003 Svend Sanjay Sorensen <ssorensen@fastmail.fm>
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@@ -26,7 +26,7 @@
(*.cue). (*.cue).
*/ */
static const char _rcsid[] = "$Id: bincue.c,v 1.25 2004/07/09 01:23:46 rocky Exp $"; static const char _rcsid[] = "$Id: bincue.c,v 1.26 2004/07/09 02:46:42 rocky Exp $";
#include "cdio_assert.h" #include "cdio_assert.h"
#include "cdio_private.h" #include "cdio_private.h"
@@ -133,13 +133,13 @@ typedef struct {
bool sector_2336; /* Playstation (PSX) uses 2336-byte sectors */ bool sector_2336; /* Playstation (PSX) uses 2336-byte sectors */
char *cue_name; char *psz_cue_name;
char *mcn; /* Media Catalog Number. */ char *psz_mcn; /* Media Catalog Number. */
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
add 1 for leadout. */ add 1 for leadout. */
track_t i_tracks; /* number of tracks in image */ track_t i_tracks; /* number of tracks in image */
track_t i_first_track; /* track number of first track */ track_t i_first_track; /* track number of first track */
char *catalog; char *psz_catalog;
cdtext_t *cdtext; /* CD-TEXT */ cdtext_t *cdtext; /* CD-TEXT */
bool have_cue; bool have_cue;
} _img_private_t; } _img_private_t;
@@ -176,7 +176,7 @@ _bincue_init (_img_private_t *env)
return false; return false;
/* Read in CUE sheet. */ /* Read in CUE sheet. */
if ((env->cue_name != NULL)) { if ((env->psz_cue_name != NULL)) {
env->have_cue = _bincue_image_read_cue(env); env->have_cue = _bincue_image_read_cue(env);
} }
@@ -423,12 +423,14 @@ mmssff_to_lba (char *s)
#define MAXLINE 4096 /* maximum line length + 1 */ #define MAXLINE 4096 /* maximum line length + 1 */
static void static void
parse_cue (_img_private_t *cd, char *line, int line_num) parse_cuefile (_img_private_t *cd, char *psz_line,
int i_line, cdio_log_level_t log_level)
{ {
char *keyword, *field; char *keyword, *field;
int i = cd->i_tracks - 1; int i = cd->i_tracks - 1;
bool seen_first_index_for_track=false;
if (NULL != (keyword = strtok (line, " \t\n\r"))) { if (NULL != (keyword = strtok (psz_line, " \t\n\r"))) {
/* REM remarks ... */ /* REM remarks ... */
if (0 == strcmp ("REM", keyword)) { if (0 == strcmp ("REM", keyword)) {
; ;
@@ -438,12 +440,12 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
} else if (0 == strcmp ("CATALOG", keyword)) { } else if (0 == strcmp ("CATALOG", keyword)) {
if (-1 == i) { if (-1 == i) {
if (NULL != (field = strtok (NULL, " \t\n\r"))) if (NULL != (field = strtok (NULL, " \t\n\r")))
cd->catalog = strdup (field); cd->psz_catalog = strdup (field);
if (NULL != (field = strtok (NULL, " \t\n\r"))) if (NULL != (field = strtok (NULL, " \t\n\r")))
fprintf (stderr, "%s: format error\n", keyword); cdio_log (log_level, "%s: format error\n", keyword);
} else { } else {
fprintf (stderr, "%d: only allowed in global section: %s\n", cdio_log (log_level, "%d: only allowed in global section: %s\n",
line_num, keyword); i_line, keyword);
} }
/* FILE "<filename>" <BINARY|WAVE|other?> */ /* FILE "<filename>" <BINARY|WAVE|other?> */
@@ -451,7 +453,7 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
if (NULL != (field = strtok (NULL, "\"\t\n\r"))) if (NULL != (field = strtok (NULL, "\"\t\n\r")))
cd->tocent[i + 1].filename = strdup (field); cd->tocent[i + 1].filename = strdup (field);
else else
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
/* TRACK N <mode> */ /* TRACK N <mode> */
} else if (0 == strcmp ("TRACK", keyword)) { } else if (0 == strcmp ("TRACK", keyword)) {
@@ -460,26 +462,78 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
if (NULL != (field = strtok (NULL, " \t\n\r"))) if (NULL != (field = strtok (NULL, " \t\n\r")))
; /* skip index number */ ; /* skip index number */
if (NULL != (field = strtok (NULL, " \t\n\r"))) { if (NULL != (field = strtok (NULL, " \t\n\r"))) {
if (0 == strcmp ("AUDIO", field)) track_info_t *this_track=&(cd->tocent[cd->i_tracks]);
cd->tocent[i].mode = AUDIO; this_track->track_num = cd->i_tracks;
else if (0 == strcmp ("MODE1/2048", field)) this_track->num_indices = 0;
cd->tocent[i].mode = MODE1; if (0 == strcmp ("AUDIO", field)) {
else if (0 == strcmp ("MODE1/2352", field)) this_track->mode = AUDIO;
cd->tocent[i].mode = MODE1_RAW; this_track->blocksize = CDIO_CD_FRAMESIZE_RAW;
else if (0 == strcmp ("MODE2/2336", field)) this_track->datasize = CDIO_CD_FRAMESIZE_RAW;
cd->tocent[i].mode = MODE2; this_track->datastart = 0;
else if (0 == strcmp ("MODE2/2048", field)) this_track->endsize = 0;
cd->tocent[i].mode = MODE2_FORM1; this_track->track_format = TRACK_FORMAT_AUDIO;
else if (0 == strcmp ("MODE2/2324", field)) this_track->track_green = false;
cd->tocent[i].mode = MODE2_FORM2; cd->i_tracks++;
else if (0 == strcmp ("MODE2/2336", field)) seen_first_index_for_track=false;
cd->tocent[i].mode = MODE2_FORM_MIX; } else if (0 == strcmp ("MODE1/2048", field)) {
else if (0 == strcmp ("MODE2/2352", field)) this_track->mode = MODE1;
cd->tocent[i].mode = MODE2_RAW; this_track->blocksize = 2048;
else /* Is the below correct? */
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); this_track->datastart = 0;
this_track->datasize = CDIO_CD_FRAMESIZE;
this_track->endsize = 0;
} else if (0 == strcmp ("MODE1/2352", field)) {
this_track->blocksize = 2352;
this_track->datastart = CDIO_CD_SYNC_SIZE + CDIO_CD_HEADER_SIZE;
this_track->datasize = CDIO_CD_FRAMESIZE;
this_track->endsize = CDIO_CD_EDC_SIZE + CDIO_CD_M1F1_ZERO_SIZE
+ CDIO_CD_ECC_SIZE;
this_track->mode = MODE1_RAW;
} else if (0 == strcmp ("MODE2/2336", field)) {
this_track->blocksize = 2336;
this_track->track_format= TRACK_FORMAT_XA;
this_track->track_green = true;
this_track->mode = MODE2;
this_track->datastart = CDIO_CD_SYNC_SIZE + CDIO_CD_HEADER_SIZE;
this_track->datasize = M2RAW_SECTOR_SIZE;
this_track->endsize = 0;
cd->i_tracks++;
} else if (0 == strcmp ("MODE2/2048", field)) {
this_track->blocksize = 2048;
this_track->track_format= TRACK_FORMAT_XA;
this_track->track_green = true;
this_track->mode = MODE2_FORM1;
cd->i_tracks++;
} else if (0 == strcmp ("MODE2/2324", field)) {
this_track->blocksize = 2324;
this_track->track_format= TRACK_FORMAT_XA;
this_track->track_green = true;
this_track->mode = MODE2_FORM2;
cd->i_tracks++;
} else if (0 == strcmp ("MODE2/2336", field)) {
this_track->blocksize = 2336;
this_track->track_format= TRACK_FORMAT_XA;
this_track->track_green = true;
this_track->mode = MODE2_FORM_MIX;
this_track->datastart = CDIO_CD_SYNC_SIZE + CDIO_CD_HEADER_SIZE;
this_track->datasize = M2RAW_SECTOR_SIZE;
this_track->endsize = 0;
cd->i_tracks++;
} else if (0 == strcmp ("MODE2/2352", field)) {
this_track->blocksize = 2352;
this_track->track_format= TRACK_FORMAT_XA;
this_track->track_green = true;
this_track->mode = MODE2_RAW;
this_track->datastart = CDIO_CD_SYNC_SIZE + CDIO_CD_HEADER_SIZE +
CDIO_CD_SUBHEADER_SIZE;
this_track->datasize = CDIO_CD_FRAMESIZE;
this_track->endsize = CDIO_CD_SYNC_SIZE + CDIO_CD_ECC_SIZE;
cd->i_tracks++;
} else { } else {
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
}
} else {
cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
} }
/* FLAGS flag1 flag2 ... */ /* FLAGS flag1 flag2 ... */
@@ -495,12 +549,12 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
} else if (0 == strcmp ("SCMS", field)) { } else if (0 == strcmp ("SCMS", field)) {
cd->tocent[i].flags |= SCMS; cd->tocent[i].flags |= SCMS;
} else { } else {
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_warn ("%d: format error: %s\n", i_line, keyword);
} }
} }
} else { } else {
fprintf (stderr, "%d: not allowed in global section: %s\n", line_num, cdio_log (log_level, "%d: not allowed in global section: %s\n",
keyword); i_line, keyword);
} }
/* ISRC CCOOOYYSSSSS */ /* ISRC CCOOOYYSSSSS */
@@ -509,10 +563,10 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
if (NULL != (field = strtok (NULL, " \t\n\r"))) if (NULL != (field = strtok (NULL, " \t\n\r")))
cd->tocent[i].isrc = strdup (field); cd->tocent[i].isrc = strdup (field);
else else
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
} else { } else {
fprintf (stderr, "%d: not allowed in global section: %s\n", cdio_log (log_level, "%d: not allowed in global section: %s\n",
line_num, keyword); i_line, keyword);
} }
/* PREGAP MM:SS:FF */ /* PREGAP MM:SS:FF */
@@ -521,12 +575,12 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
if (NULL != (field = strtok (NULL, " \t\n\r"))) if (NULL != (field = strtok (NULL, " \t\n\r")))
cd->tocent[i].pregap = mmssff_to_lba (field); cd->tocent[i].pregap = mmssff_to_lba (field);
else else
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
if (NULL != (field = strtok (NULL, " \t\n\r"))) if (NULL != (field = strtok (NULL, " \t\n\r")))
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
} else { } else {
fprintf (stderr, "%d: not allowed in global section: %s\n", cdio_log (log_level, "%d: not allowed in global section: %s\n",
line_num, keyword); i_line, keyword);
} }
/* INDEX [##] MM:SS:FF */ /* INDEX [##] MM:SS:FF */
@@ -541,10 +595,10 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
; ;
#endif #endif
else else
fprintf (stderr, "%d: format error: %s\n", line_num, keyword); cdio_log (log_level, "%d: format error: %s\n", i_line, keyword);
} else { } else {
fprintf (stderr, "%d: not allowed in global section: %s\n", cdio_log (log_level, "%d: not allowed in global section: %s\n",
line_num, keyword); i_line, keyword);
} }
/* CD-TEXT */ /* CD-TEXT */
@@ -561,12 +615,10 @@ parse_cue (_img_private_t *cd, char *line, int line_num)
/* unrecognized line */ /* unrecognized line */
} else { } else {
fprintf(stderr, "%d: warning: unrecognized keyword: %s\n", cdio_log(log_level, "%d: warning: unrecognized keyword: %s\n",
line_num, keyword); i_line, keyword);
} }
} }
cd->i_tracks = i + 1;
} }
static bool static bool
@@ -581,14 +633,14 @@ _bincue_image_read_cue (_img_private_t *env)
int start_index; int start_index;
bool seen_first_index_for_track=false; bool seen_first_index_for_track=false;
if ( env == NULL || env->cue_name == NULL ) return false; if ( env == NULL || env->psz_cue_name == NULL ) return false;
fp = fopen (env->cue_name, "r"); fp = fopen (env->psz_cue_name, "r");
if (fp == NULL) return false; if (fp == NULL) return false;
env->i_tracks=0; env->i_tracks=0;
env->i_first_track=1; env->i_first_track=1;
env->mcn=NULL; env->psz_mcn=NULL;
while ((fgets(line, MAXLINE, fp)) != NULL) { while ((fgets(line, MAXLINE, fp)) != NULL) {
char s[80]; char s[80];
@@ -603,7 +655,7 @@ _bincue_image_read_cue (_img_private_t *env)
*/ */
/* printf("Found file name %s\n", s); */ /* printf("Found file name %s\n", s); */
} else if (1==sscanf(p, "CATALOG %80s", s)) { } else if (1==sscanf(p, "CATALOG %80s", s)) {
env->mcn = strdup(s); env->psz_mcn = strdup(s);
} else if (2==sscanf(p, "TRACK %d MODE2/%d", &i_track, &blocksize)) { } else if (2==sscanf(p, "TRACK %d MODE2/%d", &i_track, &blocksize)) {
track_info_t *this_track=&(env->tocent[env->i_tracks]); track_info_t *this_track=&(env->tocent[env->i_tracks]);
this_track->track_num = i_track; this_track->track_num = i_track;
@@ -896,10 +948,20 @@ static void
_free_bincue (void *user_data) _free_bincue (void *user_data)
{ {
_img_private_t *env = user_data; _img_private_t *env = user_data;
track_t i_track;
if (NULL == env) return; if (NULL == env) return;
free_if_notnull(env->mcn);
free_if_notnull(env->cue_name); for (i_track=0; i_track < env->i_tracks; i_track++) {
free_if_notnull(env->tocent[i_track].filename);
free_if_notnull(env->tocent[i_track].isrc);
cdtext_delete(env->tocent[i_track].cdtext);
}
free_if_notnull(env->psz_mcn);
free_if_notnull(env->psz_catalog);
free_if_notnull(env->psz_cue_name);
cdtext_delete(env->cdtext);
cdio_generic_stdio_free(env); cdio_generic_stdio_free(env);
free(env); free(env);
} }
@@ -947,12 +1009,12 @@ _set_arg_bincue (void *user_data, const char key[], const char value[])
} }
else if (!strcmp (key, "cue")) else if (!strcmp (key, "cue"))
{ {
free_if_notnull (env->cue_name); free_if_notnull (env->psz_cue_name);
if (!value) if (!value)
return -2; return -2;
env->cue_name = strdup (value); env->psz_cue_name = strdup (value);
} }
else else
return -1; return -1;
@@ -971,7 +1033,7 @@ _get_arg_bincue (void *user_data, const char key[])
if (!strcmp (key, "source")) { if (!strcmp (key, "source")) {
return env->gen.source_name; return env->gen.source_name;
} else if (!strcmp (key, "cue")) { } else if (!strcmp (key, "cue")) {
return env->cue_name; return env->psz_cue_name;
} else if (!strcmp(key, "access-mode")) { } else if (!strcmp(key, "access-mode")) {
return "image"; return "image";
} }
@@ -1086,7 +1148,7 @@ _get_lba_track_bincue(void *user_data, track_t i_track)
} }
/*! /*!
Return corresponding BIN file if cue_name is a cue file or NULL Return corresponding BIN file if psz_cue_name is a cue file or NULL
if not a CUE file. if not a CUE file.
*/ */
@@ -1094,22 +1156,22 @@ _get_lba_track_bincue(void *user_data, track_t i_track)
started for now. started for now.
*/ */
char * char *
cdio_is_cuefile(const char *cue_name) cdio_is_cuefile(const char *psz_cue_name)
{ {
int i; int i;
char *bin_name; char *bin_name;
if (cue_name == NULL) return NULL; if (psz_cue_name == NULL) return NULL;
bin_name=strdup(cue_name); bin_name=strdup(psz_cue_name);
i=strlen(bin_name)-strlen("cue"); i=strlen(bin_name)-strlen("cue");
if (i>0) { if (i>0) {
if (cue_name[i]=='c' && cue_name[i+1]=='u' && cue_name[i+2]=='e') { if (psz_cue_name[i]=='c' && psz_cue_name[i+1]=='u' && psz_cue_name[i+2]=='e') {
bin_name[i++]='b'; bin_name[i++]='i'; bin_name[i++]='n'; bin_name[i++]='b'; bin_name[i++]='i'; bin_name[i++]='n';
return bin_name; return bin_name;
} }
else if (cue_name[i]=='C' && cue_name[i+1]=='U' && cue_name[i+2]=='E') { else if (psz_cue_name[i]=='C' && psz_cue_name[i+1]=='U' && psz_cue_name[i+2]=='E') {
bin_name[i++]='B'; bin_name[i++]='I'; bin_name[i++]='N'; bin_name[i++]='B'; bin_name[i++]='I'; bin_name[i++]='N';
return bin_name; return bin_name;
} }
@@ -1130,24 +1192,24 @@ char *
cdio_is_binfile(const char *bin_name) cdio_is_binfile(const char *bin_name)
{ {
int i; int i;
char *cue_name; char *psz_cue_name;
if (bin_name == NULL) return NULL; if (bin_name == NULL) return NULL;
cue_name=strdup(bin_name); psz_cue_name=strdup(bin_name);
i=strlen(bin_name)-strlen("bin"); i=strlen(bin_name)-strlen("bin");
if (i>0) { if (i>0) {
if (bin_name[i]=='b' && bin_name[i+1]=='i' && bin_name[i+2]=='n') { if (bin_name[i]=='b' && bin_name[i+1]=='i' && bin_name[i+2]=='n') {
cue_name[i++]='c'; cue_name[i++]='u'; cue_name[i++]='e'; psz_cue_name[i++]='c'; psz_cue_name[i++]='u'; psz_cue_name[i++]='e';
return cue_name; return psz_cue_name;
} }
else if (bin_name[i]=='B' && bin_name[i+1]=='I' && bin_name[i+2]=='N') { else if (bin_name[i]=='B' && bin_name[i+1]=='I' && bin_name[i+2]=='N') {
cue_name[i++]='C'; cue_name[i++]='U'; cue_name[i++]='E'; psz_cue_name[i++]='C'; psz_cue_name[i++]='U'; psz_cue_name[i++]='E';
return cue_name; return psz_cue_name;
} }
} }
free(cue_name); free(psz_cue_name);
return NULL; return NULL;
} }
@@ -1179,15 +1241,15 @@ cdio_open_bincue (const char *source_name)
free(bin_name); free(bin_name);
return cdio_open_cue(source_name); return cdio_open_cue(source_name);
} else { } else {
char *cue_name = cdio_is_binfile(source_name); char *psz_cue_name = cdio_is_binfile(source_name);
CdIo *cdio = cdio_open_cue(cue_name); CdIo *cdio = cdio_open_cue(psz_cue_name);
free(cue_name); free(psz_cue_name);
return cdio; return cdio;
} }
} }
CdIo * CdIo *
cdio_open_cue (const char *cue_name) cdio_open_cue (const char *psz_cue_name)
{ {
CdIo *ret; CdIo *ret;
_img_private_t *_data; _img_private_t *_data;
@@ -1218,24 +1280,25 @@ cdio_open_cue (const char *cue_name)
.stat_size = _stat_size_bincue .stat_size = _stat_size_bincue
}; };
if (NULL == cue_name) return NULL; if (NULL == psz_cue_name) return NULL;
_data = _cdio_malloc (sizeof (_img_private_t)); _data = _cdio_malloc (sizeof (_img_private_t));
(_data)->gen.init = false; (_data)->gen.init = false;
(_data)->sector_2336 = false; (_data)->sector_2336 = false;
(_data)->cue_name = NULL; (_data)->psz_cue_name = NULL;
ret = cdio_new (_data, &_funcs); ret = cdio_new (_data, &_funcs);
if (ret == NULL) return NULL; if (ret == NULL) return NULL;
bin_name = cdio_is_cuefile(cue_name); bin_name = cdio_is_cuefile(psz_cue_name);
if (NULL == bin_name) { if (NULL == bin_name) {
cdio_error ("source name %s is not recognized as a CUE file", cue_name); cdio_error ("source name %s is not recognized as a CUE file",
psz_cue_name);
} }
_set_arg_bincue (_data, "cue", cue_name); _set_arg_bincue (_data, "cue", psz_cue_name);
_set_arg_bincue (_data, "source", bin_name); _set_arg_bincue (_data, "source", bin_name);
free(bin_name); free(bin_name);

View File

@@ -1,5 +1,5 @@
/* /*
$Id: cdrdao.c,v 1.11 2004/07/09 01:05:32 rocky Exp $ $Id: cdrdao.c,v 1.12 2004/07/09 02:46:42 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
toc reading routine adapted from cuetools toc reading routine adapted from cuetools
@@ -29,7 +29,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: cdrdao.c,v 1.11 2004/07/09 01:05:32 rocky Exp $"; static const char _rcsid[] = "$Id: cdrdao.c,v 1.12 2004/07/09 02:46:42 rocky Exp $";
#include "cdio_assert.h" #include "cdio_assert.h"
#include "cdio_private.h" #include "cdio_private.h"
@@ -109,7 +109,7 @@ typedef struct {
bool sector_2336; /* Playstation (PSX) uses 2336-byte sectors */ bool sector_2336; /* Playstation (PSX) uses 2336-byte sectors */
char *toc_name; char *toc_name;
char *mcn; /* Media Catalog Number (5.22.3) char *psz_mcn; /* Media Catalog Number (5.22.3)
exactly 13 bytes */ exactly 13 bytes */
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
add 1 for leadout. */ add 1 for leadout. */
@@ -217,7 +217,7 @@ _init_cdrdao (_img_private_t *env)
*/ */
env->gen.init = true; env->gen.init = true;
env->i_first_track = 1; env->i_first_track = 1;
env->mcn = NULL; env->psz_mcn = NULL;
/* Read in TOC sheet. */ /* Read in TOC sheet. */
if ( !parse_tocfile(env, env->toc_name) ) return false; if ( !parse_tocfile(env, env->toc_name) ) return false;
@@ -429,7 +429,7 @@ parse_tocfile (_img_private_t *cd, const char *toc_name)
goto err_exit; goto err_exit;
} }
} }
if (NULL != cd) cd->mcn = strdup (field); if (NULL != cd) cd->psz_mcn = strdup (field);
} }
} else { } else {
cdio_log(log_level, cdio_log(log_level,
@@ -950,7 +950,7 @@ _free_cdrdao (void *obj)
int i; int i;
if (NULL == env) return; if (NULL == env) return;
free_if_notnull(env->mcn); free_if_notnull(env->psz_mcn);
for (i=0; i<env->i_tracks; i++) { for (i=0; i<env->i_tracks; i++) {
if (env->tocent[i].data_source) if (env->tocent[i].data_source)
cdio_stdio_destroy (env->tocent[i].data_source); cdio_stdio_destroy (env->tocent[i].data_source);

View File

@@ -1,5 +1,5 @@
/* /*
$Id: nrg.c,v 1.25 2004/07/01 09:50:59 rocky Exp $ $Id: nrg.c,v 1.26 2004/07/09 02:46:42 rocky Exp $
Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2004 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org>
@@ -49,7 +49,7 @@
#include "_cdio_stdio.h" #include "_cdio_stdio.h"
#include "nrg.h" #include "nrg.h"
static const char _rcsid[] = "$Id: nrg.c,v 1.25 2004/07/01 09:50:59 rocky Exp $"; static const char _rcsid[] = "$Id: nrg.c,v 1.26 2004/07/09 02:46:42 rocky Exp $";
/* reader */ /* reader */
@@ -99,7 +99,7 @@ typedef struct {
/* This is a hack because I don't really understnad NERO better. */ /* This is a hack because I don't really understnad NERO better. */
bool is_cues; bool is_cues;
char *mcn; /* Media Catalog Number (5.22.3) */ char *psz_mcn; /* Media Catalog Number (5.22.3) */
track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track
add 1 for leadout. */ add 1 for leadout. */
track_t i_tracks; /* number of tracks in image */ track_t i_tracks; /* number of tracks in image */
@@ -386,20 +386,20 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name)
int form2; int form2;
/* We include an extra 0 byte so these can be used as C strings.*/ /* We include an extra 0 byte so these can be used as C strings.*/
env->mcn = _cdio_malloc (CDIO_MCN_SIZE+1); env->psz_mcn = _cdio_malloc (CDIO_MCN_SIZE+1);
if (DAOX_ID == opcode) { if (DAOX_ID == opcode) {
_daox_array_t *_entries = (void *) chunk->data; _daox_array_t *_entries = (void *) chunk->data;
form2 = _entries->_unknown[1]; form2 = _entries->_unknown[1];
env->dtyp = _entries->_unknown[19]; env->dtyp = _entries->_unknown[19];
memcpy(env->mcn, &(_entries->mcn), CDIO_MCN_SIZE); memcpy(env->psz_mcn, &(_entries->psz_mcn), CDIO_MCN_SIZE);
env->mcn[CDIO_MCN_SIZE] = '\0'; env->psz_mcn[CDIO_MCN_SIZE] = '\0';
} else { } else {
_daoi_array_t *_entries = (void *) chunk->data; _daoi_array_t *_entries = (void *) chunk->data;
form2 = _entries->_unknown[1]; form2 = _entries->_unknown[1];
env->dtyp = _entries->_unknown[19]; env->dtyp = _entries->_unknown[19];
memcpy(env->mcn, &(_entries->mcn), CDIO_MCN_SIZE); memcpy(env->psz_mcn, &(_entries->psz_mcn), CDIO_MCN_SIZE);
env->mcn[CDIO_MCN_SIZE] = '\0'; env->psz_mcn[CDIO_MCN_SIZE] = '\0';
} }
env->is_dao = true; env->is_dao = true;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: nrg.h,v 1.2 2004/07/01 09:50:59 rocky Exp $ $Id: nrg.h,v 1.3 2004/07/09 02:46:42 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001, 2003 Herbert Valerio Riedel <hvr@gnu.org>
@@ -73,13 +73,13 @@ typedef struct {
typedef struct { typedef struct {
uint32_t _unknown1 GNUC_PACKED; uint32_t _unknown1 GNUC_PACKED;
char mcn[CDIO_MCN_SIZE] GNUC_PACKED; char psz_mcn[CDIO_MCN_SIZE] GNUC_PACKED;
uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED; uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED;
} _daox_array_t; } _daox_array_t;
typedef struct { typedef struct {
uint32_t _unknown1 GNUC_PACKED; uint32_t _unknown1 GNUC_PACKED;
char mcn[CDIO_MCN_SIZE] GNUC_PACKED; char psz_mcn[CDIO_MCN_SIZE] GNUC_PACKED;
uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED; uint8_t _unknown[64-CDIO_MCN_SIZE-sizeof(uint32_t)] GNUC_PACKED;
} _daoi_array_t; } _daoi_array_t;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: image_common.h,v 1.5 2004/06/02 00:43:53 rocky Exp $ $Id: image_common.h,v 1.6 2004/07/09 02:46:42 rocky Exp $
Copyright (C) 2004 Rocky Bernstein <rocky@panix.com> Copyright (C) 2004 Rocky Bernstein <rocky@panix.com>
@@ -32,8 +32,8 @@ _get_mcn_image(const void *user_data)
{ {
const _img_private_t *env = user_data; const _img_private_t *env = user_data;
if (NULL == env->mcn) return NULL; if (NULL == env->psz_mcn) return NULL;
return strdup(env->mcn); return strdup(env->psz_mcn);
} }
/*! /*!