diff --git a/cdrskin/cdrskin_timestamp.h b/cdrskin/cdrskin_timestamp.h index b67f3bd..a91ddd8 100644 --- a/cdrskin/cdrskin_timestamp.h +++ b/cdrskin/cdrskin_timestamp.h @@ -1 +1 @@ -#define Cdrskin_timestamP "2007.02.14.120213" +#define Cdrskin_timestamP "2007.02.14.121440" diff --git a/libburn/libdax_msgs.h b/libburn/libdax_msgs.h index 77c6aed..db0e879 100644 --- a/libburn/libdax_msgs.h +++ b/libburn/libdax_msgs.h @@ -350,6 +350,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff 0x00020129 (SORRY,HIGH) = Will not format media type 0x0002012a (FATAL,HIGH) = Cannot inquire write mode capabilities 0x0002012b (FATAL,HIGH) = Drive offers no suitable write mode with this job + 0x0002012c (SORRY,HIGH) = Too many logical tracks recorded 0x00020130 (SORRY,HIGH) = Drive and media state unsuitable for blanking 0x00020131 (SORRY,HIGH) = No suitable formatting type offered by drive diff --git a/libburn/mmc.c b/libburn/mmc.c index cd1726e..5b5e38b 100644 --- a/libburn/mmc.c +++ b/libburn/mmc.c @@ -163,8 +163,7 @@ int mmc_function_spy_ctrl(int do_tell) /* ts A70201 */ int mmc_four_char_to_int(unsigned char *data) { - return (data[0] << 24) | (data[1] << 16) | - (data[2] << 8) | data[3]; + return (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; } @@ -316,6 +315,11 @@ int mmc_get_nwa(struct burn_drive *d, int trackno, int *lba, int *nwa) } if (num > 0) d->media_capacity_remaining = ((off_t) num) * ((off_t) 2048); + +/* + fprintf(stderr, "LIBBURN_DEBUG: track info data[16..19] = %2.2X %2.2X %2.2X %2.2X\n", data[16], data[17], data[18], data[19]); +*/ + return 1; } @@ -565,10 +569,21 @@ int mmc_fake_toc(struct burn_drive *d) struct buffer buf; int i, session_number, prev_session = -1, ret, lba; unsigned char *tdata, size_data[4], start_data[4]; + char msg[160]; if (d->last_track_no <= 0 || d->complete_sessions <= 0 || d->status == BURN_DISC_BLANK) return 2; + if (d->last_track_no > BURN_MMC_FAKE_TOC_MAX_SIZE) { + sprintf(msg, + "Too many logical tracks recorded (%d , max. %d)\n", + d->last_track_no, BURN_MMC_FAKE_TOC_MAX_SIZE); + libdax_msgs_submit(libdax_messenger, d->global_index, + 0x0002012c, + LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH, + msg, 0,0); + return 0; + } d->disc = burn_disc_create(); if (d->disc == NULL) return -1; @@ -601,10 +616,8 @@ int mmc_fake_toc(struct burn_drive *d) */ for (i = 0; i < d->last_track_no; i++) { ret = mmc_read_track_info(d, i+1, &buf); - if (ret < 0) + if (ret <= 0) return ret; - if (ret == 0) - continue; tdata = buf.data; session_number = (tdata[33] << 8) | tdata[3]; if (session_number <= 0)