From b384e51f8233da02cb20a4b36f7d5312b2825f4c Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Tue, 8 Mar 2016 07:54:53 +0000 Subject: [PATCH] Improved handling of TAO CD tracks by -check_media --- xorriso/drive_mgt.c | 33 ++++++++++++++++++++++----------- xorriso/xorriso_timestamp.h | 2 +- 2 files changed, 23 insertions(+), 12 deletions(-) diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index c9458055..1ee77309 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -2840,15 +2840,11 @@ abort_check:; /* Read last 2 blocks of CD track separately, because with TAO tracks they are always unreadable but with SAO tracks they contain data. */ - if(to_read > 2) + if(to_read > 2) { to_read-= 2; - else { - if(flag & 1) { - quality= Xorriso_read_quality_tao_enD; - skip_reading= 1; - } else if(to_read > 1) { + } else { + if(to_read > 1) to_read--; - } suspect_tao_end= 1; } } @@ -3174,9 +3170,17 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist, Xorriso_msgs_submit(xorriso, 0, msg, 0, "WARNING", 0); continue; } else { - sprintf(msg, "-check_media: Track %d of session %d extends over the end of readable medium area.", + + if(profile_no >= 0x08 && profile_no <= 0x0a && + track_lba + track_blocks == read_capacity + 2 && + i == num_sessions - 1 && j == num_tracks - 1) { + sprintf(msg, "-check_media: Last CD track exceeds readable area by 2 blocks. Assuming TAO."); + Xorriso_msgs_submit(xorriso, 0, msg, 0, "DEBUG", 0); + } else { + sprintf(msg, "-check_media: Track %d of session %d extends over the end of readable medium area.", j + 1, i + 1); - Xorriso_msgs_submit(xorriso, 0, msg, 0, "WARNING", 0); + Xorriso_msgs_submit(xorriso, 0, msg, 0, "WARNING", 0); + } track_blocks= read_capacity - track_lba; } } @@ -3227,9 +3231,16 @@ int Xorriso_check_media(struct XorrisO *xorriso, struct SpotlisT **spotlist, } if(track_bad_claim > read_capacity) { + count= Spotlist_count(*spotlist, 0); + Spotlist_get_item(*spotlist, count - 1, &track_lba, &blocks, &quality, 0); + if(profile_no >= 0x08 && profile_no <= 0x0a && + track_bad_claim - read_capacity == 2 && + quality != Xorriso_read_quality_tao_enD) + quality= Xorriso_read_quality_tao_enD; + else + quality= Xorriso_read_quality_unreadablE; ret= Spotlist_add_item(*spotlist, read_capacity, - track_bad_claim - read_capacity, - Xorriso_read_quality_unreadablE, 0); + track_bad_claim - read_capacity, quality, 0); if(ret <= 0) goto ex; } diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 75dfcae1..41aeb387 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2016.03.01.141456" +#define Xorriso_timestamP "2016.03.08.075457"