From 3f2b61932b5f94517f1867bdea3f46b64fc90091 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Mon, 30 Aug 2021 12:35:26 +0200 Subject: [PATCH] New -as cdrecord option --obs_pad. Automatic no_emul_toc with -as cdrecord. --- xorriso/base_obj.c | 3 +- xorriso/emulators.c | 7 ++-- xorriso/write_run.c | 8 +++-- xorriso/xorrecord.1 | 23 ++++++++---- xorriso/xorrecord.info | 71 +++++++++++++++++++++---------------- xorriso/xorrecord.texi | 25 +++++++++---- xorriso/xorriso_private.h | 3 +- xorriso/xorriso_timestamp.h | 2 +- 8 files changed, 92 insertions(+), 50 deletions(-) diff --git a/xorriso/base_obj.c b/xorriso/base_obj.c index bda163b4..345cd655 100644 --- a/xorriso/base_obj.c +++ b/xorriso/base_obj.c @@ -3,7 +3,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2020 Thomas Schmitt, + Copyright 2007-2021 Thomas Schmitt, Provided under GPL version 2 or later. @@ -264,6 +264,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag) m->alignment= 0; m->do_stream_recording= 0; m->dvd_obs= 0; + m->do_obs_pad= 0; m->modesty_on_drive= 0; m->min_buffer_usec= 5000; m->max_buffer_usec= 25000; diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 701f7f51..6c19a0e5 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -1,7 +1,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2020 Thomas Schmitt, + Copyright 2007-2021 Thomas Schmitt, Provided under GPL version 2 or later. @@ -81,13 +81,14 @@ int Xorriso_cdrskin_help(struct XorrisO *xorriso, int flag) "\t-pad\t\tpadsize=30k", "\t-nopad\t\tDo not pad", "\tminbuf=\t\tKeep drive buffer hungry", -"\tmodesty_on_drive=\tLike minbuf=, but with more parameters", "\t-immed\t\tEquivalent to minbuf=75", +"\tmodesty_on_drive=\tLike minbuf=, but with more parameters", "\t--grow_overwriteable_iso\temulate multi-session on DVD+RW, BD-RE", "\twrite_start_address=#\t\twrite to byte address on DVD+RW, BD-RE", "\tstream_recording=on|number\ttry to get full speed on DVD-RAM, BD", "\tuse_immed_bit=on|off|default\tcontrol use of Immed bit", "\tdvd_obs=default|32k|64k\t\tbytes per DVD/BD write operation", +"\t--obs_pad\t\tpad DVD DAO and stdio to full 32k or 64k", "\tstdio_sync=on|off|end|number\twhether to fsync output to \"stdio:\"", "\t--no_rc\t\tDo not execute xorriso startup files", "\t-help\t\tprint this text to stderr and exit emulation", @@ -290,6 +291,8 @@ no_volunteer:; strncmp(argpt, "dvd_obs=", 8)==0) { cpt= strchr(argpt, '=') + 1; Xorriso_option_dvd_obs(xorriso, cpt, 0); + } else if(strcmp(argv[i], "--obs_pad") == 0) { /* intentional: argv[i] */ + xorriso->do_obs_pad= 1; } else if(strcmp(argpt, "-eject")==0) { do_eject= 1; } else if(strncmp(argpt, "-fs=", 4)==0 || strncmp(argpt, "fs=", 3)==0) { diff --git a/xorriso/write_run.c b/xorriso/write_run.c index a262ce70..0bb2091c 100644 --- a/xorriso/write_run.c +++ b/xorriso/write_run.c @@ -2,7 +2,7 @@ /* xorriso - creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2020 Thomas Schmitt, + Copyright 2007-2021 Thomas Schmitt, Provided under GPL version 2 or later. @@ -185,6 +185,7 @@ int Xorriso_make_write_options( else #endif burn_write_opts_set_dvd_obs(*burn_options, xorriso->dvd_obs); + burn_write_opts_set_obs_pad(*burn_options, !!xorriso->do_obs_pad); burn_write_opts_set_stdio_fsync(*burn_options, xorriso->stdio_sync); burn_write_opts_set_underrun_proof(*burn_options, 1); @@ -194,6 +195,7 @@ int Xorriso_make_write_options( /* @param flag bit0= do not write but only prepare and return size in sectors bit1= do not use isoburn wrappers, do not assume libisofs + bit2= no_emul_toc : do not pad random access media to full 64 KB */ int Xorriso_sanitize_image_size(struct XorrisO *xorriso, struct burn_drive *drive, struct burn_disc *disc, @@ -236,7 +238,7 @@ no_track:; Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0); } } - if(xorriso->alignment == 0 && ! (xorriso->no_emul_toc & 1)) { + if(xorriso->alignment == 0 && !((xorriso->no_emul_toc & 1) || flag & 4)) { ret= isoburn_needs_emulation(drive); if(ret > 0) { /* Take care that the session is padded up to the future NWA. @@ -2398,7 +2400,7 @@ int Xorriso_burn_track(struct XorrisO *xorriso, off_t write_start_address, } } - ret= Xorriso_sanitize_image_size(xorriso, drive, disc, burn_options, 2); + ret= Xorriso_sanitize_image_size(xorriso, drive, disc, burn_options, 2 | 4); if(ret<=0) goto ex; diff --git a/xorriso/xorrecord.1 b/xorriso/xorrecord.1 index 8395153a..0c9fd3fe 100644 --- a/xorriso/xorrecord.1 +++ b/xorriso/xorrecord.1 @@ -9,7 +9,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH XORRECORD 1 "Version 1.5.5, Jan 30, 2021" +.TH XORRECORD 1 "Version 1.5.5, Aug 30, 2021" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -605,12 +605,23 @@ If a number is given, then error management stays enabled for all byte addresses below that number. Any number below 16s is the same as "off". .TP \fBdvd_obs="default"|"32k"|"64k"\fR -Linux specific: Set the number of bytes to be transmitted with each write operation to DVD -or BD media. Tracks get padded up to the next multiple of this write -size. A number of 64 KB may improve throughput with bus systems which -show latency problems. The default depends on media type, option -stream_recording=, and on compile time options. +or BD media. With most write types, tracks get padded up to the next +multiple of this write size (see option \-\-obs_pad). A number of 64 KB may +improve throughput with bus systems which show latency problems. +The default depends on media type, option stream_recording=, and on compile +time options. +.TP +\fB\--obs_pad\fR +Pad the data of last write operation of a DVD\-R[W] DAO session or +stdio: pseudo\-drive up to the full size of an output chunk. +This padding has to be applied automatically to the other DVD and BD media +types, where it causes e.g. ISO images to have trailing unclaimed blocks. +.br +Use this option if there is the suspicion that DAO sessions abort with +your kernel and/or DVD drive, if their size is not a multiple of 16 blocks. +.br +This option may also get enabled at compile time of libburn. .TP \fBmodesty_on_drive=parameter[:parameters]\fR Control whether the drive buffer shall be kept from getting completely filled. diff --git a/xorriso/xorrecord.info b/xorriso/xorrecord.info index cafad631..f5759491 100644 --- a/xorriso/xorrecord.info +++ b/xorriso/xorrecord.info @@ -564,12 +564,21 @@ stream_recording="on"|"off"|number byte addresses below that number. Any number below 16s is the same as "off". dvd_obs="default"|"32k"|"64k" - Linux specific: Set the number of bytes to be transmitted with each - write operation to DVD or BD media. Tracks get padded up to the - next multiple of this write size. A number of 64 KB may improve - throughput with bus systems which show latency problems. The - default depends on media type, option stream_recording=, and on - compile time options. + Set the number of bytes to be transmitted with each write operation + to DVD or BD media. With most write types, tracks get padded up to + the next multiple of this write size (see option -obs_pad). A + number of 64 KB may improve throughput with bus systems which show + latency problems. The default depends on media type, option + stream_recording=, and on compile time options. +-obs_pad + Pad the data of last write operation of a DVD-R[W] DAO session or + stdio: pseudo-drive up to the full size of an output chunk. This + padding has to be applied automatically to the other DVD and BD + media types, where it causes e.g. ISO images to have trailing + unclaimed blocks. .br Use this option if there is the suspicion + that DAO sessions abort with your kernel and/or DVD drive, if their + size is not a multiple of 16 blocks. .br This option may also get + enabled at compile time of libburn. modesty_on_drive=parameter[:parameters] Control whether the drive buffer shall be kept from getting completely filled. Parameter "on" (or "1") keeps the program from @@ -908,6 +917,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * --multi_if_possible apply -multi if medium is suitable: NonCdrecord. (line 57) * --no_rc do not execute xorriso startup files: NonCdrecord. (line 8) +* --obs_pad write transaction end padding: NonCdrecord. (line 81) * -atip inquire medium state: Inquire. (line 14) * -checkdrive inquire drive CD capabilities: Inquire. (line 11) * -dao explicitly set write type SAO/DAO: SetBurn. (line 172) @@ -919,7 +929,7 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * -inq inquire drive identifiers: Inquire. (line 8) * -isosize obtain track size from ISO 9660 superblock: SetBurn. (line 137) -* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 81) +* -modesty_on_drive keep drive buffer hungry: NonCdrecord. (line 90) * -msinfo retrieve multi-session info: Inquire. (line 43) * -multi keep media appendable after burn run: SetBurn. (line 89) * -nopad disable adding of bytes to end of track: SetBurn. (line 151) @@ -941,13 +951,13 @@ File: xorrecord.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: T * minbuf= keep drive buffer hungry: SetBurn. (line 205) * padsize= add bytes to end of track: SetBurn. (line 144) * speed= set write speed: SetBurn. (line 189) -* stdio_sync= control stdio buffer: NonCdrecord. (line 133) +* stdio_sync= control stdio buffer: NonCdrecord. (line 142) * stream_recording= try to get full speed on DVD-RAM, BD: NonCdrecord. (line 64) * tsize= set a fixed track size: SetBurn. (line 126) -* use_immed_bit= control use of Immed bit: NonCdrecord. (line 118) +* use_immed_bit= control use of Immed bit: NonCdrecord. (line 127) * write_start_address= set block address for write start: NonCdrecord. - (line 127) + (line 136)  File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top @@ -959,7 +969,7 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Menu: * Accessing drive, wait for stdin, -waiti: SetBurn. (line 113) -* Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 118) +* Blank, format, Immed bit, use_immed_bit=: NonCdrecord. (line 127) * Bugs, reporting: Bugreport. (line 6) * Data track, announce, -data: SetBurn. (line 157) * Defect management, control, stream_recording=: NonCdrecord. (line 64) @@ -1003,20 +1013,21 @@ File: xorrecord.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Track size, set fixed, tsize=: SetBurn. (line 126) * Track, _definiton: Standards. (line 13) * Transaction size, set, dvd_obs=: NonCdrecord. (line 74) +* Transaction size, set, dvd_obs= <1>: NonCdrecord. (line 81) * Tray, eject, -eject: SetBurn. (line 214) * Verbosity, increase, -v: Verbose. (line 16) * Verbosity, SCSI commands, -V: Verbose. (line 20) * Version, report, -version: Verbose. (line 8) * Write simulation , control, -dummy: SetBurn. (line 106) * Write start address, set, write_start_address=: NonCdrecord. - (line 127) + (line 136) * Write type, SAO/DAO, -dao: SetBurn. (line 172) * Write type, SAO/DAO, -sao: SetBurn. (line 168) * Write type, TAO, -tao: SetBurn. (line 162) -* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 133) +* Write, buffer syncing, stdio_sync=: NonCdrecord. (line 142) * Write, drive buffer, -immed: SetBurn. (line 208) * Write, drive buffer, minbuf=: SetBurn. (line 205) -* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 81) +* Write, drive buffer, modesty_on_drive=: NonCdrecord. (line 90) * xorriso, mkisofs emulation: Xorriso. (line 6) * xorriso, options: Options. (line 6) @@ -1034,21 +1045,21 @@ Node: Inquire7618 Node: SetBurn10487 Node: Verbose21111 Node: NonCdrecord22661 -Node: Examples30471 -Node: ExDevices31132 -Node: ExMedium31350 -Node: ExBlank31613 -Node: ExFormat31834 -Node: ExDeformat32352 -Node: ExIsoSingle32619 -Node: ExIsoMulti32903 -Node: ExIsoFly34647 -Node: ExAfio35839 -Node: Files36837 -Node: Seealso37393 -Node: Bugreport37756 -Node: Legal38347 -Node: CommandIdx39276 -Node: ConceptIdx42839 +Node: Examples31044 +Node: ExDevices31705 +Node: ExMedium31923 +Node: ExBlank32186 +Node: ExFormat32407 +Node: ExDeformat32925 +Node: ExIsoSingle33192 +Node: ExIsoMulti33476 +Node: ExIsoFly35220 +Node: ExAfio36412 +Node: Files37410 +Node: Seealso37966 +Node: Bugreport38329 +Node: Legal38920 +Node: CommandIdx39849 +Node: ConceptIdx43485  End Tag Table diff --git a/xorriso/xorrecord.texi b/xorriso/xorrecord.texi index 92f6225f..d1745ee6 100644 --- a/xorriso/xorrecord.texi +++ b/xorriso/xorrecord.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRECORD 1 "Version 1.5.5, Jan 30, 2021" +@c man .TH XORRECORD 1 "Version 1.5.5, Aug 30, 2021" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -823,12 +823,25 @@ addresses below that number. Any number below 16s is the same as "off". @item dvd_obs="default"|"32k"|"64k" @kindex dvd_obs= set write transaction payload size @cindex Transaction size, set, dvd_obs= -Linux specific: Set the number of bytes to be transmitted with each write operation to DVD -or BD media. Tracks get padded up to the next multiple of this write -size. A number of 64 KB may improve throughput with bus systems which -show latency problems. The default depends on media type, option -stream_recording=, and on compile time options. +or BD media. With most write types, tracks get padded up to the next +multiple of this write size (see option --obs_pad). A number of 64 KB may +improve throughput with bus systems which show latency problems. +The default depends on media type, option stream_recording=, and on compile +time options. +@c man .TP +@item --obs_pad +@kindex --obs_pad write transaction end padding +@cindex Transaction size, set, dvd_obs= +Pad the data of last write operation of a DVD-R[W] DAO session or +stdio: pseudo-drive up to the full size of an output chunk. +This padding has to be applied automatically to the other DVD and BD media +types, where it causes e.g. ISO images to have trailing unclaimed blocks. +.br +Use this option if there is the suspicion that DAO sessions abort with +your kernel and/or DVD drive, if their size is not a multiple of 16 blocks. +.br +This option may also get enabled at compile time of libburn. @c man .TP @item modesty_on_drive=parameter[:parameters] @kindex -modesty_on_drive keep drive buffer hungry diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 69bffe6b..1d0d54af 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -2,7 +2,7 @@ /* Command line oriented batch and dialog tool which creates, loads, manipulates and burns ISO 9660 filesystem images. - Copyright 2007-2020 Thomas Schmitt, + Copyright 2007-2021 Thomas Schmitt, Provided under GPL version 2 or later. @@ -406,6 +406,7 @@ struct XorrisO { /* the global context of xorriso */ >=16 means yes with number as start LBA */ int dvd_obs; /* DVD write chunk size: 0, 32k or 64k */ + int do_obs_pad; /* 1= pad up end on all media types */ int modesty_on_drive; /* "enable" of burn_drive_set_buffer_waiting() 0= disable , 1= enable waiting , diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 92d29807..d8adf8f9 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2021.08.30.094939" +#define Xorriso_timestamP "2021.08.30.103430"