From ffca3e89dd41bf99e14b72b7ccf392a913af4eae Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sat, 12 Jan 2013 19:54:59 +0000 Subject: [PATCH] Made use of new API features to handle incomplete sessions --- cdrskin/cdrskin.c | 94 ++++++++++++++++++++++++++++--------- cdrskin/cdrskin_timestamp.h | 2 +- 2 files changed, 73 insertions(+), 23 deletions(-) diff --git a/cdrskin/cdrskin.c b/cdrskin/cdrskin.c index d6d40af..f824818 100644 --- a/cdrskin/cdrskin.c +++ b/cdrskin/cdrskin.c @@ -4915,7 +4915,7 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag) { int num_sessions= 0,num_tracks= 0,lba= 0,track_count= 0,total_tracks= 0; int session_no, track_no, pmin, psec, pframe, ret, final_ret= 1; - int track_offset = 1; + int track_offset = 1, open_sessions= 0, have_real_open_session= 0; struct burn_drive *drive; struct burn_disc *disc= NULL; struct burn_session **sessions; @@ -4951,21 +4951,32 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag) goto cannot_read; } sessions= burn_disc_get_sessions(disc,&num_sessions); + open_sessions= burn_disc_get_incomplete_sessions(disc); if(num_sessions > 0) track_offset = burn_session_get_start_tno(sessions[0], 0); if(track_offset <= 0) track_offset= 1; if(flag&1) { - for(session_no= 0; session_no 0) { + total_tracks--; /* Do not count invisible track */ + if(num_tracks > 1) + have_real_open_session= 1; + } } printf("first: %d last %d\n", track_offset, total_tracks + track_offset - 1); } - for(session_no= 0; session_no 0) + num_tracks--; + if(num_tracks <= 0) continue; if(!(flag&1)) printf("first: %d last: %d\n", @@ -4998,9 +5009,15 @@ int Cdrskin_toc(struct CdrskiN *skin, int flag) printf(" mode: %d\n",((toc_entry.control&7)<4?0:1)); } - if((flag&1) && session_nodrives[skin->driveno].drive; @@ -5138,15 +5158,17 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag) } else { sessions= burn_disc_get_sessions(disc, &num_sessions); + open_sessions= burn_disc_get_incomplete_sessions(disc); if(num_sessions > 0) track_offset= burn_session_get_start_tno(sessions[0], 0); if(track_offset <= 0) track_offset= 1; first_track= track_offset; - nominal_sessions= num_sessions; - if(s == BURN_DISC_APPENDABLE) + nominal_sessions= num_sessions + open_sessions; + if(s == BURN_DISC_APPENDABLE && open_sessions == 0) nominal_sessions++; - for(session_no= 0; session_no= 2) first_track= 2; } - if(s == BURN_DISC_APPENDABLE) + if(s == BURN_DISC_APPENDABLE && open_sessions == 0) ftils= ltils= total_tracks + 1; } printf("first track: %d\n", first_track); @@ -5187,7 +5209,7 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag) printf("\n"); printf("Track Sess Type Start Addr End Addr Size\n"); printf("==============================================\n"); - for(session_no= 0; session_no 0) @@ -5250,10 +5294,12 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag) size= avail / 2048; if(read_capacity == 0 && skin->media_is_overwriteable) size= 0; /* unformatted overwriteable media */ - printf("%5d %5d %-6s %-10d %-10d %-10d\n", - track_count + track_offset, nominal_sessions, - ovwrt_full ? "Data" : "Blank", - nwa, lba + size - 1, size); + if(nominal_sessions > num_sessions + open_sessions) { + printf("%5d %5d %-6s %-10d %-10d %-10d\n", + track_count + track_offset, nominal_sessions, + ovwrt_full ? "Data" : "Blank", + nwa, lba + size - 1, size); + } } } printf("\n"); @@ -5284,6 +5330,9 @@ int Cdrskin_minfo(struct CdrskiN *skin, int flag) printf("cdrskin: Above contrary statements follow cdrecord traditions.\n"); } + if(have_real_open_session) + printf("\nWarning: Incomplete session encountered !\n"); + if(disc!=NULL) burn_disc_free(disc); if(s == BURN_DISC_EMPTY) @@ -7388,7 +7437,7 @@ int Cdrskin_qcheck(struct CdrskiN *skin, int flag) */ int Cdrskin_msinfo(struct CdrskiN *skin, int flag) { - int num_sessions, session_no, ret, num_tracks; + int num_sessions, session_no, ret, num_tracks, open_sessions= 0; int nwa= -123456789, lba= -123456789, aux_lba; char msg[80]; enum burn_disc_status s; @@ -7428,7 +7477,8 @@ int Cdrskin_msinfo(struct CdrskiN *skin, int flag) {ret= 0; goto ex;} } sessions= burn_disc_get_sessions(disc,&num_sessions); - for(session_no= 0; session_no