Added check for .might_simulate to burn_write_opts_auto_write_type()

This commit is contained in:
Thomas Schmitt 2007-05-28 17:03:12 +00:00
parent 12c4c73535
commit ddc2745495
3 changed files with 28 additions and 3 deletions

View File

@ -365,8 +365,10 @@ even if attempted explicitely via "driveropts=burnfree".
.TP .TP
.BI \-dummy .BI \-dummy
Try to perform the drive operations without actually affecting the inserted Try to perform the drive operations without actually affecting the inserted
media. There is no guarantee that this will work with a particular combination media. There is no warranty that this will work with a particular combination
of drive, media, and write mode. Blanking is prevented reliably, though. of drive, media, and write mode. Blanking is prevented reliably, though.
To avoid inadverted real burning, -dummy refuses burn runs on anything but
CD-R[W] and DVD-R[W].
.TP .TP
.BI \-eject .BI \-eject
Eject the disc after work is done. Eject the disc after work is done.
@ -380,6 +382,9 @@ write modes which libburn believes they are not supported by the drive.
Another application is to enforce blanking or re-formatting of media Another application is to enforce blanking or re-formatting of media
which appear to be in the desired blank or format state already. which appear to be in the desired blank or format state already.
.br .br
This option enables a burn run with option -dummy even if libburn believes
that drive and media will not simulate the write mode but will write for real.
.br
.B Caution: .B Caution:
Use this only when in urgent need. Use this only when in urgent need.
.TP .TP

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2007.05.28.165630" #define Cdrskin_timestamP "2007.05.28.170243"

View File

@ -124,11 +124,19 @@ void burn_write_opts_set_format(struct burn_write_opts *opts, int format)
int burn_write_opts_set_simulate(struct burn_write_opts *opts, int sim) int burn_write_opts_set_simulate(struct burn_write_opts *opts, int sim)
{ {
/* <<< ts A70529 :
One cannot predict the ability to simulate from page 05h
information alone. This check is now done later in
function burn_write_opts_auto_write_type().
if (opts->drive->mdata->simulate) { if (opts->drive->mdata->simulate) {
opts->simulate = sim; opts->simulate = sim;
return 1; return 1;
} }
return 0; return 0;
*/
opts->simulate = !!sim;
return 1;
} }
int burn_write_opts_set_underrun_proof(struct burn_write_opts *opts, int burn_write_opts_set_underrun_proof(struct burn_write_opts *opts,
@ -265,6 +273,8 @@ no_caps:;
} else if (caps->might_do_sao >= 3 && !(flag & 1)) } else if (caps->might_do_sao >= 3 && !(flag & 1))
goto try_tao; goto try_tao;
do_sao:; do_sao:;
if (caps->might_simulate == 0 && opts->simulate && !opts->force_is_set)
goto no_simulate;
if (!(flag & 1)) if (!(flag & 1))
burn_write_opts_set_write_type( burn_write_opts_set_write_type(
opts, BURN_WRITE_SAO, BURN_BLOCK_SAO); opts, BURN_WRITE_SAO, BURN_BLOCK_SAO);
@ -296,6 +306,8 @@ try_tao:;
if (strcmp(reason_pt, "TAO: ") != 0) if (strcmp(reason_pt, "TAO: ") != 0)
goto no_tao; goto no_tao;
/* ( TAO data/audio block size will be handled automatically ) */ /* ( TAO data/audio block size will be handled automatically ) */
if (caps->might_simulate == 0 && opts->simulate && !opts->force_is_set)
goto no_simulate;
if (!(flag & 1)) if (!(flag & 1))
burn_write_opts_set_write_type( burn_write_opts_set_write_type(
opts, BURN_WRITE_TAO, BURN_BLOCK_MODE1); opts, BURN_WRITE_TAO, BURN_BLOCK_MODE1);
@ -323,13 +335,21 @@ try_raw:;
strcat(reasons, "drive dislikes block type, "); strcat(reasons, "drive dislikes block type, ");
if (strcmp(reason_pt, "RAW: ") != 0) if (strcmp(reason_pt, "RAW: ") != 0)
goto no_write_mode; goto no_write_mode;
if (!opts->force_is_set)
goto no_simulate;
/* For now: no setting of raw write modes */ /* For now: no setting of raw write modes */
{wt = BURN_WRITE_RAW; goto ex;} {wt = BURN_WRITE_RAW; goto ex;}
no_write_mode:; no_write_mode:;
wt = BURN_WRITE_NONE; {wt = BURN_WRITE_NONE; goto ex;}
no_simulate:;
strcat(reasons,
"simulation of write job not supported by drive and media, ");
{wt = BURN_WRITE_NONE; goto ex;}
ex:; ex:;
burn_disc_free_multi_caps(&caps); burn_disc_free_multi_caps(&caps);
if (wt == BURN_WRITE_NONE && !(flag & 3)) { if (wt == BURN_WRITE_NONE && !(flag & 3)) {