New API function burn_drive_leave_locked()

This commit is contained in:
2007-09-18 09:05:05 +00:00
parent 2b0ce8ec9a
commit 698866015e
3 changed files with 40 additions and 7 deletions

View File

@ -114,6 +114,8 @@ void burn_drive_free_all(void)
/* ts A60822 */
int burn_drive_is_open(struct burn_drive *d)
{
if (d->drive_role != 1)
return (d->stdio_fd >= 0);
/* ts A61021 : moved decision to sg.c */
return d->drive_is_open(d);
}
@ -421,7 +423,10 @@ int burn_drive_mark_unready(struct burn_drive *d)
}
void burn_drive_release(struct burn_drive *d, int le)
/* ts A70918 : outsourced from burn_drive_release() and enhanced */
/** @param flag bit0-2 = mode : 0=unlock , 1=unlock+eject , 2=leave locked
*/
int burn_drive_release_fl(struct burn_drive *d, int flag)
{
if (d->released) {
/* ts A61007 */
@ -430,7 +435,7 @@ void burn_drive_release(struct burn_drive *d, int le)
d->global_index, 0x00020105,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Drive is already released", 0, 0);
return;
return 0;
}
/* ts A61007 */
@ -441,12 +446,13 @@ void burn_drive_release(struct burn_drive *d, int le)
d->global_index, 0x00020106,
LIBDAX_MSGS_SEV_SORRY, LIBDAX_MSGS_PRIO_HIGH,
"Drive is busy on attempt to close", 0, 0);
return;
return 0;
}
if (d->drive_role == 1) {
d->unlock(d);
if (le)
if ((flag & 7) != 2)
d->unlock(d);
if ((flag & 7) == 1)
d->eject(d);
d->release(d);
}
@ -455,9 +461,24 @@ void burn_drive_release(struct burn_drive *d, int le)
/* ts A61125 : outsourced model aspects */
burn_drive_mark_unready(d);
return 1;
}
/* API */
void burn_drive_release(struct burn_drive *d, int le)
{
burn_drive_release_fl(d, !!le);
}
/* ts A70918 */
/* API */
int burn_drive_leave_locked(struct burn_drive *d, int flag)
{
return burn_drive_release_fl(d, 2);
}
/* ts A61007 : former void burn_wait_all() */
/* @param flag bit0= demand freed drives (else released drives) */