diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index 6eaeefd6..36591516 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -1057,13 +1057,11 @@ int Xorriso_media_product(struct XorrisO *xorriso, int flag) */ int Xorriso_toc(struct XorrisO *xorriso, int flag) { - int num_sessions= 0, num_tracks= 0, lba= 0, nwa= -1, ret; - int track_count= 0, session_no, track_no, profile_no= -1, track_size; - int session_size, first_track_start= 0; - int num_session_data, num_session_other; - int num_data= 0, other_data= 0, is_data= 0; - int is_inout_drive= 0, drive_role, status, num_formats, emul_lba; - int not_recognizable= 0, start_lba, end_lba; + int num_sessions= 0, num_tracks= 0, ret; + int track_count= 0, session_no, track_no, profile_no= -1; + int is_data= 0; + int is_inout_drive= 0, drive_role, status, num_formats; + int not_recognizable= 0; int sessions_seen, open_sessions= 0, have_real_open_session= 0; char profile_name[80],*respt,*devadr, *typetext= ""; struct burn_toc_entry toc_entry; @@ -1077,14 +1075,16 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) struct isoburn_toc_disc *disc= NULL; struct isoburn_toc_session **sessions; struct isoburn_toc_track **tracks; - int image_blocks= 0; char volume_id[33]; struct burn_toc_entry next_toc_entry; int disk_category, part_version, num_layers, num_blocks; char *book_name; int num_data_from_format= 0; char *sno = NULL; - int sno_len, i, is_bdr_pow= 0, overburn_blocks= 0; + int sno_len, i, is_bdr_pow= 0, int_start_lba= -1, int_end_lba= -1; + off_t lba= 0, nwa= -1, track_size, session_size, first_track_start= 0; + off_t num_session_data, num_session_other, num_data, other_data= 0; + off_t emul_lba, end_lba, image_blocks, overburn_blocks= 0; ret= Xorriso_get_drive_handles(xorriso, &dinfo, &drive, "on attempt to print Table Of Content", @@ -1233,17 +1233,17 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) sno= NULL; respt= xorriso->result_line; - ret= burn_get_read_capacity(drive, &num_data, 0); + ret= burn_get_read_capacity_v2(drive, &num_data, 0); if(ret != 1 || s == BURN_DISC_BLANK) num_data= 0; num_free= isoburn_disc_available_space(drive, NULL) / 2048; nwa= -1; if (s == BURN_DISC_APPENDABLE) { - ret= isoburn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa); + ret= isoburn_disc_track_lba_nwa_v2(drive, NULL, 0, &lba, &nwa); if(ret <= 0) nwa= -1; } else if(s == BURN_DISC_BLANK) { - ret= isoburn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa); + ret= isoburn_disc_track_lba_nwa_v2(drive, NULL, 0, &lba, &nwa); if(ret == 1) { num_free+= nwa; nwa= 0; @@ -1261,7 +1261,8 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) ret= burn_disc_read_atip(drive); if(ret < 0) goto ex; - ret= burn_drive_get_start_end_lba(drive, &start_lba, &end_lba, 0); + ret= burn_drive_get_start_end_lba(drive, &int_start_lba, &int_end_lba, 0); + end_lba= int_end_lba; if(s == BURN_DISC_FULL && ret == 1) { if(lba > end_lba - 2) { overburn_blocks= lba - end_lba + 2; @@ -1271,7 +1272,7 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) } else { if(ret == 1 && end_lba - 2 > lba) { sprintf(xorriso->info_text, - "ATIP end_lba %d > overall %d", end_lba, lba); + "ATIP end_lba %.f > overall %.f", (double) end_lba, (double) lba); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); } } @@ -1291,11 +1292,12 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) num_free_text = "unused"; else num_free_text = "writable"; - sprintf(respt, "Media blocks : %d %s , %d %s , %d overall\n", - num_data, num_data_text, (int) num_free, num_free_text, lba); + sprintf(respt, "Media blocks : %.f %s , %.f %s , %.f overall\n", + (double) num_data, num_data_text, + (double) num_free, num_free_text, (double) lba); Xorriso_toc_line(xorriso, flag & 8); if(overburn_blocks > 0) { - sprintf(respt, "Overburnt by : %d blocks\n", overburn_blocks); + sprintf(respt, "Overburnt by : %.f blocks\n", (double) overburn_blocks); Xorriso_toc_line(xorriso, flag & 8); } } @@ -1349,7 +1351,7 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) Xorriso_process_msg_queues(xorriso,0); nwa= 0; if(drive_role == 5 && s == BURN_DISC_APPENDABLE) { - ret= burn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa); + ret= burn_disc_track_lba_nwa_v2(drive, NULL, 0, &lba, &nwa); if(ret != 1) nwa= 0; } else { @@ -1371,10 +1373,10 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) ret= 0; typetext= "Session "; } else - ret= isoburn_read_iso_head(drive, 0, &image_blocks, volume_id, 1); + ret= isoburn_read_iso_head_v2(drive, 0, &image_blocks, volume_id, 1); if(ret>0) { - sprintf(respt, "ISO session : %3d , %9d , %9ds , %s\n", - 1, 0, image_blocks, volume_id); + sprintf(respt, "ISO session : %3d , %9d , %9.fs , %s\n", + 1, 0, (double) image_blocks, volume_id); nwa= image_blocks; } else { ret= burn_disc_get_formats(drive, &status, &size, &dummy, @@ -1382,17 +1384,17 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) if(ret <= 0 || status != BURN_FORMAT_IS_FORMATTED) size= 0; if(size <= 0) { - ret= burn_get_read_capacity(drive, &num_data, 0); + ret= burn_get_read_capacity_v2(drive, &num_data, 0); if(ret == 1) - size= ((off_t) num_data) * (off_t) 2048; + size= num_data * (off_t) 2048; } else { num_data_from_format= 1; } num_data= size / 2048; if(num_data == 0 && drive_role == 5 && s == BURN_DISC_APPENDABLE) num_data= nwa; - sprintf(respt, "%13s: %3d , %9d , %9ds , \n", - typetext, 1, 0, num_data); + sprintf(respt, "%13s: %3d , %9d , %9.fs , \n", + typetext, 1, 0, (double) num_data); } if(!(flag&1)) Xorriso_toc_line(xorriso, flag & 8); @@ -1418,7 +1420,10 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) isoburn_toc_track_get_entry(tracks[track_no], &toc_entry); if((toc_entry.control & 7) >= 4) /* data track */ is_data= 1; - if (toc_entry.extensions_valid & 1) { + if(toc_entry.extensions_valid & 8) { + lba= toc_entry.long_start_lba; + track_size= toc_entry.long_track_blocks; + } else if(toc_entry.extensions_valid & 1) { /* DVD extension valid */ lba= toc_entry.start_lba; track_size= toc_entry.track_blocks; @@ -1437,14 +1442,15 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) if((flag & (1 | 4)) || !is_data) { ret= 0; } else { - ret= isoburn_toc_track_get_emul(tracks[track_no], &emul_lba, - &image_blocks, volume_id, 0); + ret= isoburn_toc_track_get_emul_v2(tracks[track_no], &emul_lba, + &image_blocks, volume_id, 0); if(ret <= 0) - ret= isoburn_read_iso_head(drive, lba, &image_blocks, volume_id, 1); + ret= isoburn_read_iso_head_v2(drive, lba, &image_blocks, volume_id, + 1); if(image_blocks > track_size) { sprintf(xorriso->info_text, - "Session %d bears ISO image size %ds larger than track size %ds", - session_no + 1, image_blocks, track_size); + "Session %d bears ISO image size %.fs larger than track size %.fs", + session_no + 1, (double) image_blocks, (double) track_size); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); image_blocks= track_size; @@ -1453,26 +1459,28 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) if(session_no >= num_sessions && track_no == 0) { if(ret <= 0) volume_id[0]= 0; - sprintf(respt, "Incmp session: %3d , %9d , %9ds , %s\n", - session_no+1, lba, image_blocks, volume_id); + sprintf(respt, "Incmp session: %3d , %9.f , %9.fs , %s\n", + session_no + 1, (double) lba, (double) image_blocks, + volume_id); } else if(ret>0 && track_no==0) { - sprintf(respt, "ISO session : %3d , %9d , %9ds , %s\n", - session_no+1, lba, image_blocks , volume_id); + sprintf(respt, "ISO session : %3d , %9.f , %9.fs , %s\n", + session_no + 1, (double) lba, (double) image_blocks , + volume_id); } else if(ret>0) { - sprintf(respt, "ISO track : %3d , %9d , %9ds , %s\n", - track_count, lba, image_blocks , volume_id); + sprintf(respt, "ISO track : %3d , %9.f , %9.fs , %s\n", + track_count, (double) lba, (double) image_blocks , volume_id); } else if(track_no==0) { typetext= "Other session"; if(flag & 4) typetext= "Session "; - sprintf(respt, "%13s: %3d , %9d , %9ds , \n", - typetext, session_no+1, lba, track_size); + sprintf(respt, "%13s: %3d , %9.f , %9.fs , \n", + typetext, session_no+1, (double) lba, (double) track_size); } else { typetext= "Other track "; if(flag & 4) typetext= "Track "; - sprintf(respt, "%13s: %3d , %9d , %9ds , \n", - typetext, track_count, lba, track_size); + sprintf(respt, "%13s: %3d , %9.f , %9.fs , \n", + typetext, track_count, (double) lba, (double) track_size); } if(!(flag&1)) Xorriso_toc_line(xorriso, flag & 8); @@ -1484,7 +1492,9 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) first_track_start= lba; } isoburn_toc_session_get_leadout_entry(sessions[session_no], &toc_entry); - if (toc_entry.extensions_valid & 1) { + if (toc_entry.extensions_valid & 8) { + lba= toc_entry.long_start_lba; + } else if(toc_entry.extensions_valid & 1) { lba= toc_entry.start_lba; } else { lba= burn_msf_to_lba(toc_entry.pmin, toc_entry.psec, toc_entry.pframe); @@ -1507,8 +1517,9 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) sessions_seen= num_sessions + open_sessions; if(open_sessions > 0 && !have_real_open_session) sessions_seen--; - sprintf(respt, "Media summary: %d session%s, %d data blocks, %s data", - sessions_seen, (sessions_seen == 1 ? "" : "s"), num_data, mem_text); + sprintf(respt, "Media summary: %d session%s, %.f data blocks, %s data", + sessions_seen, (sessions_seen == 1 ? "" : "s"), (double) num_data, + mem_text); if(num_data_from_format) num_free= 0; else @@ -1520,14 +1531,14 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) Xorriso_toc_line(xorriso, flag & 8); if(other_data > 0) { - sprintf(respt, "Non-data blks: %d\n", other_data); + sprintf(respt, "Non-data blks: %.f\n", (double) other_data); Xorriso_toc_line(xorriso, flag & 8); } if (s==BURN_DISC_APPENDABLE && nwa!=0) { - ret= isoburn_disc_track_lba_nwa(drive, NULL, 0, &lba, &nwa); + ret= isoburn_disc_track_lba_nwa_v2(drive, NULL, 0, &lba, &nwa); if(ret>0) { - sprintf(respt, "Media nwa : %ds\n", nwa); + sprintf(respt, "Media nwa : %.fs\n", (double) nwa); if(!(flag&1)) Xorriso_toc_line(xorriso, flag & 8); } diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 08a0adab..104a02a1 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2024.03.19.112303" +#define Xorriso_timestamP "2024.03.19.185848"