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_burn_aborT 1
|
||||||
#define Cdrskin_libburn_has_audioxtR 1
|
#define Cdrskin_libburn_has_audioxtR 1
|
||||||
#define Cdrskin_libburn_has_get_start_end_lbA 1
|
#define Cdrskin_libburn_has_get_start_end_lbA 1
|
||||||
|
#define Cdrskin_libburn_has_burn_disc_unsuitablE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef Cdrskin_libburn_versioN
|
#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");
|
"BURN_DISC_APPENDABLE \"There is an incomplete disc in the drive\"\n");
|
||||||
} else if(s==BURN_DISC_EMPTY) {
|
} else if(s==BURN_DISC_EMPTY) {
|
||||||
printf("BURN_DISC_EMPTY \"There is no disc at all in the drive\"\n");
|
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
|
} else
|
||||||
printf("-unknown status code-\n");
|
printf("-unknown status code-\n");
|
||||||
return(1);
|
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);
|
sg_close_drive(d);
|
||||||
free((void *) d->idata);
|
free((void *) d->idata);
|
||||||
free((void *) d->mdata);
|
free((void *) d->mdata);
|
||||||
|
if(d->toc_entry != NULL)
|
||||||
free((void *) d->toc_entry);
|
free((void *) d->toc_entry);
|
||||||
free(d->devname);
|
free(d->devname);
|
||||||
d->global_index = -1;
|
d->global_index = -1;
|
||||||
@ -162,7 +163,10 @@ int burn_drive_grab(struct burn_drive *d, int le)
|
|||||||
d->load(d);
|
d->load(d);
|
||||||
|
|
||||||
d->lock(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 ||
|
if (d->mdata->cdr_write || d->mdata->cdrw_write ||
|
||||||
d->mdata->dvdr_write || d->mdata->dvdram_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;
|
old_erasable = new_erasable;
|
||||||
|
|
||||||
d->read_disc_info(d);
|
d->read_disc_info(d);
|
||||||
|
if(d->status == BURN_DISC_UNSUITABLE)
|
||||||
|
break;
|
||||||
|
|
||||||
new_speed = burn_drive_get_write_speed(d);
|
new_speed = burn_drive_get_write_speed(d);
|
||||||
new_erasable = burn_disc_erasable(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->status = BURN_DISC_UNREADY;
|
||||||
d->released = 1;
|
d->released = 1;
|
||||||
if (d->toc_entry)
|
if (d->toc_entry != NULL)
|
||||||
free(d->toc_entry);
|
free(d->toc_entry);
|
||||||
d->toc_entry = NULL;
|
d->toc_entry = NULL;
|
||||||
d->toc_entries = 0;
|
d->toc_entries = 0;
|
||||||
@ -1118,3 +1124,15 @@ int burn_drive_get_start_end_lba(struct burn_drive *d,
|
|||||||
*end_lba= d->end_lba;
|
*end_lba= d->end_lba;
|
||||||
return 1;
|
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 */
|
/* ts A61007 */
|
||||||
/** The drive was not grabbed when the status was inquired */
|
/** 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);
|
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 */
|
/* ts A61020 */
|
||||||
/** Returns start and end lba of the media which is currently inserted
|
/** 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.
|
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
|
0x0002010a (FATAL,HIGH) = Unsuitable track mode
|
||||||
0x0002010b (FATAL,HIGH) = Burn run failed
|
0x0002010b (FATAL,HIGH) = Burn run failed
|
||||||
0x0002010c (FATAL,HIGH) = Failed to transfer command to drive
|
0x0002010c (FATAL,HIGH) = Failed to transfer command to drive
|
||||||
0x0002010d
|
0x0002010d (DEBUG,HIGH) = Could not inquire TOC
|
||||||
0x0002010e
|
0x0002010e
|
||||||
0x0002010f
|
0x0002010f
|
||||||
0x00020110 (FATAL,HIGH) = Persistent drive address too long
|
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);
|
d->issue_command(d, &c);
|
||||||
|
|
||||||
if (c.error) {
|
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;
|
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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user