diff --git a/xorriso/drive_mgt.c b/xorriso/drive_mgt.c index fbff64b4..52a5741c 100644 --- a/xorriso/drive_mgt.c +++ b/xorriso/drive_mgt.c @@ -941,6 +941,7 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) int last_track_start= 0, last_track_size= -1, num_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 sessions_seen, open_sessions= 0, have_real_open_session= 0; char profile_name[80],*respt,*devadr, *typetext= ""; struct burn_toc_entry toc_entry; struct burn_drive_info *dinfo; @@ -1194,11 +1195,16 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) } else { num_data= 0; sessions= isoburn_toc_disc_get_sessions(disc, &num_sessions); - for (session_no= 0; session_norequest_to_abort); + open_sessions= isoburn_toc_disc_get_incmpl_sess(disc); + for (session_no= 0; + session_no < num_sessions + open_sessions && + !(xorriso->request_to_abort); session_no++) { tracks= isoburn_toc_session_get_tracks(sessions[session_no], &num_tracks); - if (tracks==NULL) + if (tracks == NULL || num_tracks <= 0) continue; + if(session_no == num_sessions + open_sessions - 1 && open_sessions > 0) + have_real_open_session= 1; for(track_no= 0; track_norequest_to_abort); track_no++) { track_count++; @@ -1236,7 +1242,12 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) image_blocks= track_size; } } - if(ret>0 && track_no==0) { + 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); + } else if(ret>0 && track_no==0) { sprintf(respt, "ISO session : %3d , %9d , %9ds , %s\n", session_no+1, lba, image_blocks , volume_id); } else if(ret>0) { @@ -1289,8 +1300,11 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) */ Sfile_scale(((double) num_data) * 2048.0, mem_text,5,1e4,1); + 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", - num_sessions, (num_sessions==1 ? "" : "s"), num_data, mem_text); + sessions_seen, (sessions_seen == 1 ? "" : "s"), num_data, mem_text); if(num_data_from_format) num_free= 0; else @@ -1309,10 +1323,15 @@ int Xorriso_toc(struct XorrisO *xorriso, int flag) Xorriso_toc_line(xorriso, flag & 8); } } - if(profile_no == 0x41 && num_sessions >= 300) { + if(profile_no == 0x41 && sessions_seen >= 300) { sprintf(xorriso->info_text, "Sequential BD-R medium now contains %d sessions. It is likely to soon fail writing.", - num_sessions); + sessions_seen); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); + } + + if(have_real_open_session) { + sprintf(xorriso->info_text, "Incomplete session encountered !"); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "WARNING", 0); } diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 9aeb9661..656d6018 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2013.01.13.200742" +#define Xorriso_timestamP "2013.01.14.094419"