Classified media with TOC read error as unsuitable (rather than as blank)
This commit is contained in:
parent
af44cbccf2
commit
4718ad99f9
@ -171,6 +171,7 @@ or
|
||||
#define Cdrskin_libburn_has_burn_aborT 1
|
||||
#define Cdrskin_libburn_has_audioxtR 1
|
||||
#define Cdrskin_libburn_has_get_start_end_lbA 1
|
||||
#define Cdrskin_libburn_has_burn_disc_unsuitablE 1
|
||||
#endif
|
||||
|
||||
#ifndef Cdrskin_libburn_versioN
|
||||
@ -3156,6 +3157,18 @@ int Cdrskin_report_disc_status(struct CdrskiN *skin, enum burn_disc_status s,
|
||||
"BURN_DISC_APPENDABLE \"There is an incomplete disc in the drive\"\n");
|
||||
} else if(s==BURN_DISC_EMPTY) {
|
||||
printf("BURN_DISC_EMPTY \"There is no disc at all in the drive\"\n");
|
||||
} else if(s==BURN_DISC_UNREADY) {
|
||||
printf("BURN_DISC_UNREADY \"The current status is not yet known\"\n");
|
||||
|
||||
#ifdef Cdrskin_libburn_has_burn_disc_unsuitablE
|
||||
|
||||
} else if(s==BURN_DISC_UNGRABBED) {
|
||||
printf("BURN_DISC_UNGRABBED \"API usage error: drive not grabbed\"\n");
|
||||
} else if(s==BURN_DISC_UNSUITABLE) {
|
||||
printf("BURN_DISC_UNSUITABLE \"Media is not suitable\"\n");
|
||||
|
||||
#endif /* Cdrskin_libburn_has_burn_disc_unsuitablE */
|
||||
|
||||
} else
|
||||
printf("-unknown status code-\n");
|
||||
return(1);
|
||||
|
@ -1 +1 @@
|
||||
#define Cdrskin_timestamP "2006.10.20.113421"
|
||||
#define Cdrskin_timestamP "2006.10.20.151602"
|
||||
|
@ -45,6 +45,7 @@ void burn_drive_free(struct burn_drive *d)
|
||||
sg_close_drive(d);
|
||||
free((void *) d->idata);
|
||||
free((void *) d->mdata);
|
||||
if(d->toc_entry != NULL)
|
||||
free((void *) d->toc_entry);
|
||||
free(d->devname);
|
||||
d->global_index = -1;
|
||||
@ -162,7 +163,10 @@ int burn_drive_grab(struct burn_drive *d, int le)
|
||||
d->load(d);
|
||||
|
||||
d->lock(d);
|
||||
d->status = BURN_DISC_BLANK;
|
||||
|
||||
/* ts A61020 : this was BURN_DISC_BLANK as pure guess */
|
||||
d->status = BURN_DISC_UNREADY;
|
||||
|
||||
if (d->mdata->cdr_write || d->mdata->cdrw_write ||
|
||||
d->mdata->dvdr_write || d->mdata->dvdram_write) {
|
||||
|
||||
@ -186,6 +190,8 @@ int burn_drive_grab(struct burn_drive *d, int le)
|
||||
old_erasable = new_erasable;
|
||||
|
||||
d->read_disc_info(d);
|
||||
if(d->status == BURN_DISC_UNSUITABLE)
|
||||
break;
|
||||
|
||||
new_speed = burn_drive_get_write_speed(d);
|
||||
new_erasable = burn_disc_erasable(d);
|
||||
@ -309,7 +315,7 @@ void burn_drive_release(struct burn_drive *d, int le)
|
||||
|
||||
d->status = BURN_DISC_UNREADY;
|
||||
d->released = 1;
|
||||
if (d->toc_entry)
|
||||
if (d->toc_entry != NULL)
|
||||
free(d->toc_entry);
|
||||
d->toc_entry = NULL;
|
||||
d->toc_entries = 0;
|
||||
@ -1118,3 +1124,15 @@ int burn_drive_get_start_end_lba(struct burn_drive *d,
|
||||
*end_lba= d->end_lba;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
/* ts A61020 API function */
|
||||
int burn_disc_pretend_blank(struct burn_drive *d)
|
||||
{
|
||||
if (d->status != BURN_DISC_UNREADY &&
|
||||
d->status != BURN_DISC_UNSUITABLE)
|
||||
return 0;
|
||||
d->status = BURN_DISC_BLANK;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -176,7 +176,11 @@ enum burn_disc_status
|
||||
|
||||
/* ts A61007 */
|
||||
/** The drive was not grabbed when the status was inquired */
|
||||
BURN_DISC_UNGRABBED
|
||||
BURN_DISC_UNGRABBED,
|
||||
|
||||
/* ts A61020 */
|
||||
/** The media seems not to be suitable for burning */
|
||||
BURN_DISC_UNSUITABLE
|
||||
};
|
||||
|
||||
|
||||
@ -628,6 +632,16 @@ void burn_drive_release(struct burn_drive *drive, int eject);
|
||||
enum burn_disc_status burn_disc_get_status(struct burn_drive *drive);
|
||||
|
||||
|
||||
/* ts A61020 */
|
||||
/** WARNING: This revives an old bug-like behavior that might be dangerous.
|
||||
Sets the drive status to BURN_DISC_BLANK if it is BURN_DISC_UNREADY
|
||||
or BURN_DISC_UNSUITABLE. Thus marking media as writable which actually
|
||||
failed to declare themselves either blank or (partially) filled.
|
||||
@return 1 drive status has been set , 0 = unsuitable drive status
|
||||
*/
|
||||
int burn_disc_pretend_blank(struct burn_drive *d);
|
||||
|
||||
|
||||
/* ts A61020 */
|
||||
/** Returns start and end lba of the media which is currently inserted
|
||||
in the given drive. The drive has to be grabbed to have hope for reply.
|
||||
|
@ -318,7 +318,7 @@ Range "scdbackup" : 0x00020000 to 0x0002ffff
|
||||
0x0002010a (FATAL,HIGH) = Unsuitable track mode
|
||||
0x0002010b (FATAL,HIGH) = Burn run failed
|
||||
0x0002010c (FATAL,HIGH) = Failed to transfer command to drive
|
||||
0x0002010d
|
||||
0x0002010d (DEBUG,HIGH) = Could not inquire TOC
|
||||
0x0002010e
|
||||
0x0002010f
|
||||
0x00020110 (FATAL,HIGH) = Persistent drive address too long
|
||||
|
@ -286,7 +286,23 @@ void mmc_read_toc(struct burn_drive *d)
|
||||
d->issue_command(d, &c);
|
||||
|
||||
if (c.error) {
|
||||
|
||||
/* ts A61020 : this snaps on non-blank DVD media */
|
||||
/* Very unsure wether this old measure is ok.
|
||||
Obviously higher levels do not care about this.
|
||||
DVD+RW burns go on after passing through here.
|
||||
|
||||
d->busy = BURN_DRIVE_IDLE;
|
||||
*/
|
||||
libdax_msgs_submit(libdax_messenger, d->global_index,
|
||||
0x0002010d,
|
||||
LIBDAX_MSGS_SEV_DEBUG, LIBDAX_MSGS_PRIO_HIGH,
|
||||
"Could not inquire TOC (non-blank DVD media ?)", 0,0);
|
||||
d->status = BURN_DISC_UNSUITABLE;
|
||||
d->toc_entries = 0;
|
||||
/* Prefering memory leaks over fandangos */
|
||||
d->toc_entry = malloc(sizeof(struct burn_toc_entry));
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user