diff -up cdrkit-1.1.11/wodim/drv_mmc.c.format cdrkit-1.1.11/wodim/drv_mmc.c --- cdrkit-1.1.11/wodim/drv_mmc.c.format 2011-05-18 16:49:14.591822130 +0200 +++ cdrkit-1.1.11/wodim/drv_mmc.c 2011-05-18 16:49:14.596822130 +0200 @@ -1507,6 +1507,11 @@ getdisktype_mdvd(SCSI *usalp, cdr_t *dp) dstat_t *dsp = dp->cdr_dstat; struct track_info track_info; + + extern char *buf; + struct disk_info *dip; + int profile; + if(lverbose) printf("HINT: use dvd+rw-mediainfo from dvd+rw-tools for information extraction.\n"); /* if(getdisktype_mmc(usalp, dp)<0) @@ -1521,6 +1526,18 @@ getdisktype_mdvd(SCSI *usalp, cdr_t *dp) dsp->ds_disktype&= ~DT_CD; dsp->ds_disktype|= DT_DVD; + profile = get_curprofile(usalp); + if (profile == 0x1A) { + dip = (struct disk_info *)buf; + if (get_diskinfo(usalp, dip) < 0) + return (-1); + if (dip->disk_status == DS_EMPTY) { /* Unformatted */ + dsp->ds_flags |= DSF_NEED_FORMAT; + if(lverbose) + printf("The medium is empty, it will be auto formatted.\n"); + } + } + return (ret); } diff -up cdrkit-1.1.11/wodim/scsi_cdr.c.format cdrkit-1.1.11/wodim/scsi_cdr.c --- cdrkit-1.1.11/wodim/scsi_cdr.c.format 2011-05-18 16:49:14.601822130 +0200 +++ cdrkit-1.1.11/wodim/scsi_cdr.c 2011-05-18 16:49:14.600822130 +0200 @@ -1328,7 +1328,7 @@ scsi_format(SCSI *usalp, caddr_t addr, i } sleep(10); printf("\rFormating in progress: 100.00 %% done. \n"); - if (pid) exit (0); + if (pid > 0) exit (0); return ret; } diff -up cdrkit-1.1.11/wodim/wodim.c.format cdrkit-1.1.11/wodim/wodim.c --- cdrkit-1.1.11/wodim/wodim.c.format 2011-05-18 16:49:14.584822130 +0200 +++ cdrkit-1.1.11/wodim/wodim.c 2011-05-18 17:21:59.510821630 +0200 @@ -946,6 +946,40 @@ int main(int argc, char *argv[]) print_toc(usalp, dp); comexit(0); } + + if ((flags & F_FORMAT) || (dp->cdr_dstat->ds_flags & DSF_NEED_FORMAT)) { + printf("wodim: media format asked\n"); + /* + * Do not abort if OPC failes. Just give it a chance + * for better laser power calibration than without OPC. + * + * Ricoh drives return with a vendor unique sense code. + * This is most likely because they refuse to do OPC + * on a non blank media. + */ + usalp->silent++; + do_opc(usalp, dp, flags); + usalp->silent--; + wait_unit_ready(usalp, 120); + if (gettimeofday(&starttime, (struct timezone *)0) < 0) + errmsg("Cannot get start time\n"); + + if ((*dp->cdr_format)(usalp, dp, formattype) < 0) { + errmsgno(EX_BAD, "Cannot format disk, aborting.\n"); + comexit(EX_BAD); + } + if (gettimeofday(&fixtime, (struct timezone *)0) < 0) + errmsg("Cannot get format time\n"); + if (lverbose) + prtimediff("Formatting time: ", &starttime, &fixtime); + + if (!wait_unit_ready(usalp, 240) || tracks == 0) { + comexit(0); + } + if (gettimeofday(&starttime, (struct timezone *)0) < 0) + errmsg("Cannot get start time\n"); + } + #ifdef XXX if ((*dp->cdr_check_session)() < 0) { comexit(EX_BAD); @@ -1230,38 +1264,6 @@ int main(int argc, char *argv[]) comexit(0); } } - if (flags & F_FORMAT) { - printf("wodim: media format asked\n"); - /* - * Do not abort if OPC failes. Just give it a chance - * for better laser power calibration than without OPC. - * - * Ricoh drives return with a vendor unique sense code. - * This is most likely because they refuse to do OPC - * on a non blank media. - */ - usalp->silent++; - do_opc(usalp, dp, flags); - usalp->silent--; - wait_unit_ready(usalp, 120); - if (gettimeofday(&starttime, (struct timezone *)0) < 0) - errmsg("Cannot get start time\n"); - - if ((*dp->cdr_format)(usalp, dp, formattype) < 0) { - errmsgno(EX_BAD, "Cannot format disk, aborting.\n"); - comexit(EX_BAD); - } - if (gettimeofday(&fixtime, (struct timezone *)0) < 0) - errmsg("Cannot get format time\n"); - if (lverbose) - prtimediff("Formatting time: ", &starttime, &fixtime); - - if (!wait_unit_ready(usalp, 240) || tracks == 0) { - comexit(0); - } - if (gettimeofday(&starttime, (struct timezone *)0) < 0) - errmsg("Cannot get start time\n"); - } /* * Reset start time so we will not see blanking time and * writing time counted together.