1.1 --- a/cdbackup.c Thu Oct 04 12:50:58 2012 +0200
1.2 +++ b/cdbackup.c Sun Dec 01 13:30:48 2013 +0100
1.3 @@ -75,6 +75,7 @@
1.4 long long totalSize=0;
1.5 int disknum=1;
1.6 int secs;
1.7 +long layerbreak=0;
1.8 struct tm curtime; /* global, so multi-disks get all the same time */
1.9 int auto_size=0;
1.10
1.11 @@ -106,6 +107,10 @@
1.12 if(virt_dump || dvd) {
1.13 *p++="-dao";
1.14 *p++=make_arg("tsize=%ds",secs);
1.15 + /* work around the oddidity that cdrecord refuses to burn the disk, if
1.16 + the tracksize is less than the first layer size on dual-layer disks */
1.17 + if(layerbreak>0 && secs<layerbreak)
1.18 + *p++=make_arg("driveropts=layerbreak=%ld",layerbreak);
1.19 }
1.20 else {
1.21 *p++="-multi";
1.22 @@ -150,6 +155,8 @@
1.23 char buff[256];
1.24 while(fgets(buff,sizeof(buff),p)) {
1.25 if(dvd) {
1.26 + /* get layerbreak position */
1.27 + if(!strncmp(buff,"layer break at:",15)) layerbreak=strtol(&buff[15],NULL,10);
1.28 /* DVD-R */
1.29 if(!strncmp(buff,"rzone size:",11)) size=strtol(&buff[11],NULL,10);
1.30 /* DVD+R */
1.31 @@ -162,7 +169,7 @@
1.32 free(cmd);
1.33 if(size>0 && verbose) {
1.34 char buff[16];
1.35 - fprintf(stderr,"%s: auto-detected media size %s (%ld blocks)\n",prg_name,FlexSize(buff,(long long)size*CD_FRAMESIZE),size);
1.36 + fprintf(stderr,"%s: auto-detected media size %s (%ld blocks, layerbreak at %ld)\n",prg_name,FlexSize(buff,(long long)size*CD_FRAMESIZE),size,layerbreak);
1.37 }
1.38 return size;
1.39 }