Implemented a more reasonable solution for drive truncation with regular files
This commit is contained in:
@@ -6524,11 +6524,13 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
if(adr[0]) {
|
||||
if(strncmp(adr, "stdio:", 6)==0 && strncmp(adr, "stdio:/dev/fd/", 14)!=0) {
|
||||
ret= Sfile_type(adr+6, 1);
|
||||
if(ret==-1)
|
||||
if(ret==-1) {
|
||||
/* ok */;
|
||||
else if(ret==1) {
|
||||
|
||||
/* >>> would prefer to do this later ... or leave it to libburn */;
|
||||
#ifdef NIX
|
||||
} else if(ret==1) {
|
||||
|
||||
/* <<< is now done in libisoburn by bit4 of Xorriso_option_dev() */
|
||||
|
||||
ret= truncate(adr+6, (off_t) 0);
|
||||
if(ret==-1) {
|
||||
@@ -6540,6 +6542,8 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
sprintf(xorriso->info_text, "-as %s: Truncated existing -o %s",
|
||||
whom, Text_shellsafe(adr+6, sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "NOTE", 0);
|
||||
#endif /* NIX */
|
||||
|
||||
} else if(ret==2 || ret==3) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-as %s: Cannot accept %s as target: -o %s",
|
||||
@@ -6548,7 +6552,8 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
}
|
||||
}
|
||||
ret= Xorriso_option_dev(xorriso, adr, 2|8); /* overwriteable as blank */
|
||||
/* Regard overwriteable as blank, truncate regular files on write start */
|
||||
ret= Xorriso_option_dev(xorriso, adr, 2|8|16);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
}
|
||||
@@ -7501,10 +7506,12 @@ int Xorriso_option_cut_out(struct XorrisO *xorriso, char *disk_path,
|
||||
|
||||
|
||||
/* Options -dev , -indev, -outdev */
|
||||
/** @param flag bit0=use as indev
|
||||
/** @param flag bit0= use as indev
|
||||
bit1= use as outdev
|
||||
bit2= do not -reassure
|
||||
bit3= regard overwriteable media as blank
|
||||
bit4= if the drive is a regular disk file: truncate it to
|
||||
the write start address
|
||||
@return <=0 error , 1 success, 2 revoked by -reassure
|
||||
*/
|
||||
int Xorriso_option_dev(struct XorrisO *xorriso, char *in_adr, int flag)
|
||||
@@ -7564,7 +7571,7 @@ int Xorriso_option_dev(struct XorrisO *xorriso, char *in_adr, int flag)
|
||||
}
|
||||
ret= Xorriso_give_up_drive(xorriso, flag&3);
|
||||
} else
|
||||
ret= Xorriso_aquire_drive(xorriso, adr, (flag&3)|((flag&8)>>1));
|
||||
ret= Xorriso_aquire_drive(xorriso, adr, (flag&3)|((flag&(8|16))>>1));
|
||||
if(ret<=0)
|
||||
return(ret);
|
||||
return(1);
|
||||
|
Reference in New Issue
Block a user