diff --git a/NEWS b/NEWS index 8f31bb0e..01e39bbf 100644 --- a/NEWS +++ b/NEWS @@ -1,5 +1,8 @@ 0.69 - Add interface returning drive capabilityes (cdio_get_drive_cap). +- Minimal cdrdao image reading +- Some important (I think) bug fixes + 0.68 - More honest about mode1 reading in backends. Remove some of the bogusness. @@ -108,4 +111,4 @@ 0.1 Routines split off from VCDImager. -$Id: NEWS,v 1.38 2004/04/23 22:10:52 rocky Exp $ +$Id: NEWS,v 1.39 2004/05/08 20:36:01 rocky Exp $ diff --git a/lib/FreeBSD/freebsd_ioctl.c b/lib/FreeBSD/freebsd_ioctl.c index 5099338e..efa9e1ed 100644 --- a/lib/FreeBSD/freebsd_ioctl.c +++ b/lib/FreeBSD/freebsd_ioctl.c @@ -1,5 +1,5 @@ /* - $Id: freebsd_ioctl.c,v 1.2 2004/04/30 21:36:54 rocky Exp $ + $Id: freebsd_ioctl.c,v 1.3 2004/05/08 20:36:01 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: freebsd_ioctl.c,v 1.2 2004/04/30 21:36:54 rocky Exp $"; +static const char _rcsid[] = "$Id: freebsd_ioctl.c,v 1.3 2004/05/08 20:36:01 rocky Exp $"; #ifdef HAVE_FREEBSD_CDROM @@ -103,7 +103,7 @@ int read_mode2_sector_freebsd_ioctl (_img_private_t *env, void *data, lsn_t lsn, bool b_form2) { - char buf[M2RAW_SECTOR_SIZE] = { 0, }; + char buf[CDIO_CD_FRAMESIZE] = { 0, }; int retval; if ( (retval = read_audio_sectors_freebsd_ioctl (env, buf, lsn, 1)) ) diff --git a/lib/image/cdrdao.c b/lib/image/cdrdao.c index d377ce9a..d94b1368 100644 --- a/lib/image/cdrdao.c +++ b/lib/image/cdrdao.c @@ -1,5 +1,5 @@ /* - $Id: cdrdao.c,v 1.3 2004/05/07 10:58:23 rocky Exp $ + $Id: cdrdao.c,v 1.4 2004/05/08 20:36:01 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.3 2004/05/07 10:58:23 rocky Exp $"; +static const char _rcsid[] = "$Id: cdrdao.c,v 1.4 2004/05/08 20:36:01 rocky Exp $"; #include "cdio_assert.h" #include "cdio_private.h" @@ -202,12 +202,12 @@ msf_lba_from_mmssff (char *s) ret += msf_to_lba (0, field, 0); c = *s++; - if(c >= '0' && c <= '9') + if (isdigit(c)) field = (c - '0'); else return -1; if('\0' != (c = *s++)) { - if(c >= '0' && c <= '9') { + if (isdigit(c)) { field = field * 10 + (c - '0'); c = *s++; } @@ -433,11 +433,36 @@ parse_tocfile (_img_private_t *cd, const char *toc_name) /* CATALOG "ddddddddddddd" */ if (0 == strcmp ("CATALOG", keyword)) { if (-1 == i) { - if (NULL != (field = strtok (NULL, "\"\t\n\r"))) - if (NULL != cd) - cd->mcn = strdup (field); - if (NULL != (field = strtok (NULL, " \t\n\r"))) { - cdio_log(log_level, "%d: format error: %s", line_num, keyword); + if (NULL != (field = strtok (NULL, "\"\t\n\r"))) { + if (13 != strlen(field)) { + cdio_log(log_level, + "%s line %d after word CATALOG:", + toc_name, line_num); + cdio_log(log_level, + "Token %s has length %ld. Should be 13 digits.", + field, (long int) strlen(field)); + + goto err_exit; + } else { + /* Check that we have all digits*/ + unsigned int i; + for (i=0; i<13; i++) { + if (!isdigit(field[i])) { + cdio_log(log_level, + "%s line %d after word CATALOG:", + toc_name, line_num); + cdio_log(log_level, + "Token %s is not all digits.", field); + goto err_exit; + } + } + if (NULL != cd) cd->mcn = strdup (field); + } + } else { + cdio_log(log_level, + "%s line %d after word CATALOG:", + toc_name, line_num); + cdio_log(log_level, "Expecting 13 digits; nothing seen."); goto err_exit; } } else { @@ -547,7 +572,7 @@ parse_tocfile (_img_private_t *cd, const char *toc_name) cd->tocent[i].endsize = 0; } } else { - cdio_log(log_level, "%s line %d: format after keyword TRACK.", + cdio_log(log_level, "%s line %d after keyword TRACK:", toc_name, line_num); cdio_log(log_level, "'%s' not a valid mode.", field); goto err_exit; diff --git a/test/Makefile.am b/test/Makefile.am index d64919ac..0472f901 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,4 +1,4 @@ -# $Id: Makefile.am,v 1.21 2004/05/07 10:57:50 rocky Exp $ +# $Id: Makefile.am,v 1.22 2004/05/08 20:36:01 rocky Exp $ # # Copyright (C) 2003, 2004 Rocky Bernstein # @@ -49,6 +49,7 @@ check_DATA = vcd_demo.right \ check_opts6.right check_opts7.right \ isofs-m1-read.right cdda-read.right \ t1.toc t2.toc t3.toc t4.toc t5.toc t6.toc t7.toc t8.toc t9.toc \ + data1.toc data2.toc data5.toc data6.toc data7.doc \ bad-mode1.toc bad-msf-1.toc bad-msf-2.toc \ copying.iso copying.right diff --git a/test/bad-cat1.toc b/test/bad-cat1.toc new file mode 100644 index 00000000..864c9b4f --- /dev/null +++ b/test/bad-cat1.toc @@ -0,0 +1,8 @@ +// $Id: bad-cat1.toc,v 1.1 2004/05/08 20:36:02 rocky Exp $ +// test catalog number - no catalog after word CATALOG + +CATALOG + +TRACK AUDIO +NO COPY +FILE "cdda.bin" 1:0:0 diff --git a/test/bad-cat2.toc b/test/bad-cat2.toc new file mode 100644 index 00000000..4589d0aa --- /dev/null +++ b/test/bad-cat2.toc @@ -0,0 +1,8 @@ +// $Id: bad-cat2.toc,v 1.1 2004/05/08 20:36:02 rocky Exp $ +// test catalog number. -- not enough digits + +CATALOG "167890123" // Should be 13 digits + +TRACK AUDIO +NO COPY +FILE "cdda.bin" 1:0:0 diff --git a/test/bad-cat3.toc b/test/bad-cat3.toc new file mode 100644 index 00000000..1e389a34 --- /dev/null +++ b/test/bad-cat3.toc @@ -0,0 +1,8 @@ +// $Id: bad-cat3.toc,v 1.1 2004/05/08 20:36:02 rocky Exp $ +// test catalog number - non-digit catalog name + +CATALOG "123456789A123" + +TRACK AUDIO +NO COPY +FILE "cdda.bin" 1:0:0 diff --git a/test/data1.toc b/test/data1.toc new file mode 100644 index 00000000..9c5285cc --- /dev/null +++ b/test/data1.toc @@ -0,0 +1,8 @@ +// $Id: data1.toc,v 1.1 2004/05/08 20:36:02 rocky Exp $ +// Just a single MODE1 track. + +CD_ROM + +TRACK MODE1 +SILENCE 0:59:74 + diff --git a/test/data2.toc b/test/data2.toc new file mode 100644 index 00000000..8504c0f6 --- /dev/null +++ b/test/data2.toc @@ -0,0 +1,13 @@ +// $Id +// MODE1 track followed by an AUDIO track + +CD_ROM + +TRACK MODE1 +FILE "isofs-m1.bin" 00:00:00 +ZERO 1:0:0 + +TRACK AUDIO +PREGAP 0:2:0 +FILE "cdda.bin" 00:00:00 + diff --git a/test/data5.toc b/test/data5.toc new file mode 100644 index 00000000..dc61ad13 --- /dev/null +++ b/test/data5.toc @@ -0,0 +1,13 @@ +// $Id: data5.toc,v 1.1 2004/05/08 20:36:02 rocky Exp $ +// XA disk +// + +CD_ROM_XA + +TRACK MODE2_FORM2 +FILE "vcd_demo.bin" 00:00:00 00:13:57 + +TRACK MODE2_FORM1 +PREGAP 0:2:0 +FILE "vcd_demo.bin" 00:20:71 00:00:00 + diff --git a/test/data6.toc b/test/data6.toc new file mode 100644 index 00000000..505a31b3 --- /dev/null +++ b/test/data6.toc @@ -0,0 +1,8 @@ +// $Id: data6.toc,v 1.1 2004/05/08 20:36:02 rocky Exp $ +// MODE2 track +// + +CD_ROM + +TRACK MODE2 +FILE "vcd_demo.bin" 00:00:00 00:13:57 diff --git a/test/testtoc.c b/test/testtoc.c index 87586997..9429249a 100644 --- a/test/testtoc.c +++ b/test/testtoc.c @@ -1,5 +1,5 @@ /* - $Id: testtoc.c,v 1.1 2004/05/07 10:57:50 rocky Exp $ + $Id: testtoc.c,v 1.2 2004/05/08 20:36:02 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -38,13 +38,13 @@ #endif #include -#define NUM_GOOD_TOCS 9 -#define NUM_BAD_TOCS 3 +#define NUM_GOOD_TOCS 14 +#define NUM_BAD_TOCS 6 int main(int argc, const char *argv[]) { const char *toc_file[NUM_GOOD_TOCS] = { - "t1.toc", + "t9.toc", "t2.toc", "t3.toc", "t4.toc", @@ -52,12 +52,20 @@ main(int argc, const char *argv[]) "t6.toc", "t7.toc", "t8.toc", - "t9.toc" + "t9.toc", + "data1.toc", + "data2.toc", + "data5.toc", + "data6.toc", + "data7.toc" }; const char *badtoc_file[NUM_BAD_TOCS] = { "bad-msf-1.toc", "bad-msf-2.toc", + "bad-cat1.toc", + "bad-cat2.toc", + "bad-cat3.toc", "bad-mode1.toc" }; int ret=0;