Avoiding appendable role 5 if not explicitely enabled

This commit is contained in:
Thomas Schmitt 2011-03-22 08:59:43 +00:00
parent 3cf508481c
commit e3ccb45db2
4 changed files with 21 additions and 11 deletions

View File

@ -1 +1 @@
#define Cdrskin_timestamP "2011.03.21.092220" #define Cdrskin_timestamP "2011.03.22.085956"

View File

@ -1562,7 +1562,8 @@ int burn_drive_grab_dummy(struct burn_drive_info *drive_infos[], char *fname)
d->block_types[BURN_WRITE_SAO] = 0; d->block_types[BURN_WRITE_SAO] = 0;
} else { } else {
if (d->drive_role == 5 && stat_ret != -1 && if (d->drive_role == 5 && stat_ret != -1 &&
S_ISREG(stbuf.st_mode) && stbuf.st_size > 0) { S_ISREG(stbuf.st_mode) && stbuf.st_size > 0 &&
(burn_drive_role_4_allowed & 8)) {
d->status = BURN_DISC_APPENDABLE; d->status = BURN_DISC_APPENDABLE;
d->block_types[BURN_WRITE_SAO] = 0; d->block_types[BURN_WRITE_SAO] = 0;
d->role_5_nwa = stbuf.st_size / 2048 + d->role_5_nwa = stbuf.st_size / 2048 +
@ -1571,6 +1572,7 @@ int burn_drive_grab_dummy(struct burn_drive_info *drive_infos[], char *fname)
d->status = BURN_DISC_BLANK; d->status = BURN_DISC_BLANK;
d->block_types[BURN_WRITE_SAO] = d->block_types[BURN_WRITE_SAO] =
BURN_BLOCK_SAO; BURN_BLOCK_SAO;
d->role_5_nwa = 0;
} }
d->block_types[BURN_WRITE_TAO] = BURN_BLOCK_MODE1; d->block_types[BURN_WRITE_TAO] = BURN_BLOCK_MODE1;
} }

View File

@ -578,5 +578,5 @@ void burn_set_scsi_logging(int flag)
/* ts B10312 API */ /* ts B10312 API */
void burn_allow_drive_role_4(int allowed) void burn_allow_drive_role_4(int allowed)
{ {
burn_drive_role_4_allowed = (allowed & 7); burn_drive_role_4_allowed = (allowed & 0xf);
} }

View File

@ -1448,6 +1448,8 @@ void burn_read_opts_free(struct burn_read_opts *opts);
cancellable, as control of the operation is passed wholly to the drive and cancellable, as control of the operation is passed wholly to the drive and
there is no way to interrupt it safely. there is no way to interrupt it safely.
@param drive The drive with which to erase a disc. @param drive The drive with which to erase a disc.
Only drive roles 1 (MMC) and 5 (stdio random write-only)
support erasing.
@param fast Nonzero to do a fast erase, where only the disc's headers are @param fast Nonzero to do a fast erase, where only the disc's headers are
erased; zero to erase the entire disc. erased; zero to erase the entire disc.
With DVD-RW, fast blanking yields media capable only of DAO. With DVD-RW, fast blanking yields media capable only of DAO.
@ -3020,28 +3022,34 @@ int burn_drive_get_drive_role(struct burn_drive *d);
/* ts B10312 */ /* ts B10312 */
/** Allow drive role 4 "random access read-only" drive. /** Allow drive role 4 "random access read-only"
and drive role 5 "random access write-only".
By default a random access file assumes drive role 2 "read-write" By default a random access file assumes drive role 2 "read-write"
regardless whether it is actually readable or writeable. regardless whether it is actually readable or writeable.
If enabled, random-access file objects which recognizably allow no If enabled, random-access file objects which recognizably allow no
writing will be classified as role 4. writing will be classified as role 4 and those which allow no reading
will get role 5.
Candidates are drive addresses of the form stdio:/dev/fd/# , where # is Candidates are drive addresses of the form stdio:/dev/fd/# , where # is
the integer number of an open file descriptor. If this descriptor was the integer number of an open file descriptor. If this descriptor was
opened read-only, then it gets role 4. opened read-only resp. write-only, then it gets role 4 resp. role 5.
Other paths may get tested by an attempt to open them for read-write Other paths may get tested by an attempt to open them for read-write
(role 2) resp. read-only (role 4) resp. write-only (role 3). See bit1. (role 2) resp. read-only (role 4) resp. write-only (role 5). See bit1.
read-only
@param allowed Bitfield for control purposes: @param allowed Bitfield for control purposes:
bit0= Enable role 4 for drives which get aquired bit0= Enable roles 4 and 5 for drives which get
after this call aquired after this call
bit1= with bit0: bit1= with bit0:
Test whether the file can be opened for Test whether the file can be opened for
read-write resp. read-only resp. write-only. read-write resp. read-only resp. write-only.
Classify as roles 2 resp. 4 resp. 3. Classify as roles 2 resp. 4 resp. 5.
bit2= with bit0 and bit1: bit2= with bit0 and bit1:
Classify files which cannot be opened at all Classify files which cannot be opened at all
as role 0 : useless dummy. as role 0 : useless dummy.
Else classify as role 2. Else classify as role 2.
bit3= Classify non-empty role 5 drives as
BURN_DISC_APPENDABLE with Next Writeable Address
after the end of the file. It is nevertheless
possible to change this address by call
burn_write_opts_set_start_byte().
@since 1.0.6 @since 1.0.6
*/ */
void burn_allow_drive_role_4(int allowed); void burn_allow_drive_role_4(int allowed);