From a811361577f2ae8a2aec85e6a8ca6be7036ad296 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Wed, 7 Oct 2009 07:55:23 +0000 Subject: [PATCH] New bit7 with isoburn_drive_aquire(): pretend read-only --- libisoburn/burn_wrap.c | 16 ++++++++++++---- libisoburn/libisoburn.h | 3 ++- xorriso/xorriso_timestamp.h | 2 +- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/libisoburn/burn_wrap.c b/libisoburn/burn_wrap.c index 554ee990..a9282f20 100644 --- a/libisoburn/burn_wrap.c +++ b/libisoburn/burn_wrap.c @@ -267,6 +267,7 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag) bit4= do not emulate TOC on overwriteable media bit5= ignore ACL 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, 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); if(ret<0) /* == 0 is read-only media, but it is too early to reject it here */ goto ex; - if(ret==0) + if(ret==0 || (flag & 128)) readonly= 1; + if(flag & 128) + flag = (flag & ~ 16) | 8; + ret= isoburn_new(o, 0); if(ret<=0) 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; #endif - if(caps->start_adr) { /* set emulation to overwriteable */ + if(caps->start_adr && !readonly) { /* set emulation to overwriteable */ (*o)->emulation_mode= 1; ret= isoburn_is_intermediate_dvd_rw(d, 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) */; if(readonly) { + (*o)->fabricated_disc_status= BURN_DISC_FULL; /* This might be overwriteable media in a -ROM drive. Pitfall: 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); if(ret<0) 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 get shown with a decent TOC. CD-R TOC (profile 0x08) can be trusted. Others not. @@ -412,6 +419,7 @@ ex: bit4= do not emulate TOC on overwriteable media bit5= ignore ACL 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[], char *adr, int flag) @@ -442,7 +450,7 @@ int isoburn_drive_aquire(struct burn_drive_info *drive_infos[], goto ex; drive_grabbed= 1; 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) goto ex; diff --git a/libisoburn/libisoburn.h b/libisoburn/libisoburn.h index 4e80697b..d6c6396a 100644 --- a/libisoburn/libisoburn.h +++ b/libisoburn/libisoburn.h @@ -386,10 +386,11 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[], bit5= ignore ACL from external filesystems bit6= ignore POSIX Extended Attributes from external filesystems + bit7= pretend read-only profile and scan for table of content @return 1 = success , 0 = drive not found , <0 = other error */ 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 a previous call of burn_drive_scan(). diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index efc325a9..25799f4b 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2009.10.07.072645" +#define Xorriso_timestamP "2009.10.07.075634"