From 0d3fbf846bd28d58d4626707ac6ce3049a27fe15 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 28 Oct 2013 15:15:39 +0000 Subject: [PATCH] New -as cdrecord option --multi_if_possible --- xorriso/emulators.c | 13 +++- xorriso/xorrecord.1 | 15 ++++- xorriso/xorrecord.info | 128 ++++++++++++++++++++---------------- xorriso/xorrecord.texi | 21 ++++-- xorriso/xorriso_timestamp.h | 2 +- 5 files changed, 111 insertions(+), 68 deletions(-) diff --git a/xorriso/emulators.c b/xorriso/emulators.c index ad47ed32..984ea4c7 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -67,6 +67,7 @@ int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag) "\t-toc\t\tretrieve and print TOC/PMA data", "\t-atip\t\tretrieve media state, print \"Is *erasable\"", "\t-multi\t\tgenerate a TOC that allows multi session", +"\t--multi_if_possible\tapply -multi if the medium supports it", "\t-waiti\t\twait until input is available before opening SCSI", "\t-tao\t\tWrite disk in TAO mode.", "\t-dao\t\tWrite disk in SAO mode.", @@ -108,6 +109,7 @@ int Xorriso_cdrskin(struct XorrisO *xorriso, char *whom, int argc, char **argv, int do_atip= 0, do_checkdrive= 0, do_eject= 0, do_scanbus= 0; int do_toc= 0, do_verbous= 0, do_version= 0, do_help= 0, do_waiti= 0; int do_multi= 0, do_msinfo= 0, do_grow= 0, do_isosize= 0, do_xa1= 0; + int do_auto_close= 0; double write_start_address= -1.0, tsize= -1.0, mem_auto_close; char *track_source= NULL, *dev_adr= NULL, *cpt; char mem_report_about_text[80], *report_about= "SORRY", blank_mode[80]; @@ -298,6 +300,10 @@ no_volunteer:; do_msinfo= 1; } else if(strcmp(argpt, "-multi")==0) { do_multi= 1; + do_auto_close= 0; + } else if(strcmp(argv[i], "--multi_if_possible") == 0) { + do_multi= 1; + do_auto_close= 1; } else if(strcmp(argpt, "-nopad")==0) { xorriso->padding= 0; } else if(strcmp(argv[i], "--no_rc")==0) { /* intentional: argv[i] */ @@ -511,10 +517,15 @@ no_volunteer:; } if(track_source[0]) { xorriso->do_close= !do_multi; - xorriso->auto_close= 0; + xorriso->auto_close= do_auto_close; ret= Xorriso_burn_track(xorriso, (off_t) write_start_address, track_source, (off_t) tsize, (!!do_grow) | ((!!do_isosize) << 1) | ((do_xa1 == 1) << 2)); + if(ret == 2) { + ret= Xorriso_retry_burn_track(xorriso, (off_t) write_start_address, + track_source, (off_t) tsize, + (!!do_grow) | ((!!do_isosize) << 1) | ((do_xa1 == 1) << 2)); + } aq_ret= Xorriso_reaquire_outdev(xorriso, 2*(ret>0)); if(ret<=0 && ret