New bit7 with isoburn_drive_aquire(): pretend read-only

This commit is contained in:
Thomas Schmitt 2009-10-07 07:55:23 +00:00
parent cf046f9533
commit a811361577
3 changed files with 15 additions and 6 deletions

View File

@ -267,6 +267,7 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
bit4= do not emulate TOC on overwriteable media bit4= do not emulate TOC on overwriteable media
bit5= ignore ACL from external filesystems bit5= ignore ACL from external filesystems
bit6= ignore POSIX Extended Attributes from external filesystems bit6= ignore POSIX Extended Attributes from external filesystems
bit7= pretend -ROM and scan for table of content
*/ */
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d, static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
int flag) int flag)
@ -288,8 +289,11 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
ret= burn_disc_get_multi_caps(d, BURN_WRITE_NONE, &caps, 0); ret= burn_disc_get_multi_caps(d, BURN_WRITE_NONE, &caps, 0);
if(ret<0) /* == 0 is read-only media, but it is too early to reject it here */ if(ret<0) /* == 0 is read-only media, but it is too early to reject it here */
goto ex; goto ex;
if(ret==0) if(ret==0 || (flag & 128))
readonly= 1; readonly= 1;
if(flag & 128)
flag = (flag & ~ 16) | 8;
ret= isoburn_new(o, 0); ret= isoburn_new(o, 0);
if(ret<=0) if(ret<=0)
goto ex; goto ex;
@ -305,7 +309,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
(*o)->fabricated_disc_status= BURN_DISC_APPENDABLE; (*o)->fabricated_disc_status= BURN_DISC_APPENDABLE;
#endif #endif
if(caps->start_adr) { /* set emulation to overwriteable */ if(caps->start_adr && !readonly) { /* set emulation to overwriteable */
(*o)->emulation_mode= 1; (*o)->emulation_mode= 1;
ret= isoburn_is_intermediate_dvd_rw(d, 0); ret= isoburn_is_intermediate_dvd_rw(d, 0);
if(ret>0) { if(ret>0) {
@ -334,6 +338,7 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
/* >>> recognize unsuitable media (but allow read-only media) */; /* >>> recognize unsuitable media (but allow read-only media) */;
if(readonly) { if(readonly) {
(*o)->fabricated_disc_status= BURN_DISC_FULL;
/* This might be overwriteable media in a -ROM drive. /* This might be overwriteable media in a -ROM drive.
Pitfall: Pitfall:
Multi-session media which bear a xorriso image for overwriteables Multi-session media which bear a xorriso image for overwriteables
@ -364,8 +369,10 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
ret= isoburn_emulate_toc(d, 1); ret= isoburn_emulate_toc(d, 1);
if(ret<0) if(ret<0)
goto ex; goto ex;
else if(ret > 0)
(*o)->emulation_mode= 1;
} }
if(ret == 0 && profile != 0x08 && (flag&8)) { if(ret == 0 && (profile != 0x08 || (flag & 128)) && (flag & 8)) {
/* This might also be multi-session media which do not /* This might also be multi-session media which do not
get shown with a decent TOC. get shown with a decent TOC.
CD-R TOC (profile 0x08) can be trusted. Others not. CD-R TOC (profile 0x08) can be trusted. Others not.
@ -412,6 +419,7 @@ ex:
bit4= do not emulate TOC on overwriteable media bit4= do not emulate TOC on overwriteable media
bit5= ignore ACL from external filesystems bit5= ignore ACL from external filesystems
bit6= ignore POSIX Extended Attributes from external filesystems bit6= ignore POSIX Extended Attributes from external filesystems
bit7= pretend -ROM profile and scan for table of content
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char *adr, int flag) char *adr, int flag)
@ -442,7 +450,7 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
goto ex; goto ex;
drive_grabbed= 1; drive_grabbed= 1;
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive, ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
(flag & (8 | 16 | 32 | 64)) | !!(flag&2)); (flag & (8 | 16 | 32 | 64 | 128)) | !!(flag&2));
if(ret<=0) if(ret<=0)
goto ex; goto ex;

View File

@ -386,10 +386,11 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
bit5= ignore ACL from external filesystems bit5= ignore ACL from external filesystems
bit6= ignore POSIX Extended Attributes from external bit6= ignore POSIX Extended Attributes from external
filesystems filesystems
bit7= pretend read-only profile and scan for table of content
@return 1 = success , 0 = drive not found , <0 = other error @return 1 = success , 0 = drive not found , <0 = other error
*/ */
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
char* adr, int flag); char* adr, int flag);
/** Aquire a drive from the burn_drive_info[] array which was obtained by /** Aquire a drive from the burn_drive_info[] array which was obtained by
a previous call of burn_drive_scan(). a previous call of burn_drive_scan().

View File

@ -1 +1 @@
#define Xorriso_timestamP "2009.10.07.072645" #define Xorriso_timestamP "2009.10.07.075634"