-rom_toc_scan nonrom_off disables toc emulation on overwriteables
This commit is contained in:
parent
c61358cd16
commit
943d196710
@ -58,7 +58,7 @@ extern void *libisoburn_default_msgs_submit_handle;
|
|||||||
extern int libisoburn_default_msgs_submit_flag;
|
extern int libisoburn_default_msgs_submit_flag;
|
||||||
|
|
||||||
|
|
||||||
int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
static int isoburn_emulate_toc(struct burn_drive *d, int flag);
|
||||||
|
|
||||||
|
|
||||||
int isoburn_initialize(char msg[1024], int flag)
|
int isoburn_initialize(char msg[1024], int flag)
|
||||||
@ -263,6 +263,7 @@ int isoburn_is_intermediate_dvd_rw(struct burn_drive *d, int flag)
|
|||||||
@param flag bit0= pretent blank on overwriteable media
|
@param flag bit0= pretent blank on overwriteable media
|
||||||
bit3= if the drive reports a -ROM profile then try to read
|
bit3= if the drive reports a -ROM profile then try to read
|
||||||
table of content by scanning for ISO image headers.
|
table of content by scanning for ISO image headers.
|
||||||
|
bit4= do not emulate TOC on overwriteable media
|
||||||
*/
|
*/
|
||||||
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
||||||
int flag)
|
int flag)
|
||||||
@ -312,11 +313,13 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
|||||||
(*o)->emulation_mode= -1;
|
(*o)->emulation_mode= -1;
|
||||||
goto ex;
|
goto ex;
|
||||||
}
|
}
|
||||||
/* try to read emulated toc */
|
if(!(flag & 16)) {
|
||||||
ret= isoburn_emulate_toc(d, 0);
|
/* try to read emulated toc */
|
||||||
if(ret<0) {
|
ret= isoburn_emulate_toc(d, 0);
|
||||||
(*o)->emulation_mode= -1;
|
if(ret<0) {
|
||||||
goto ex;
|
(*o)->emulation_mode= -1;
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -326,9 +329,13 @@ static int isoburn_welcome_media(struct isoburn **o, struct burn_drive *d,
|
|||||||
|
|
||||||
if(readonly) {
|
if(readonly) {
|
||||||
/* This might be overwriteable media in a -ROM drive */
|
/* This might be overwriteable media in a -ROM drive */
|
||||||
ret= isoburn_emulate_toc(d, 1);
|
if((flag & 16)) {
|
||||||
if(ret<0)
|
ret= 0;
|
||||||
goto ex;
|
} else {
|
||||||
|
ret= isoburn_emulate_toc(d, 1);
|
||||||
|
if(ret<0)
|
||||||
|
goto ex;
|
||||||
|
}
|
||||||
if(ret==0 && profile !=0x08 && (flag&8)) {
|
if(ret==0 && profile !=0x08 && (flag&8)) {
|
||||||
/* This might also be multi-session media which do not
|
/* This might also be multi-session media which do not
|
||||||
get shown with a decent TOC.
|
get shown with a decent TOC.
|
||||||
@ -373,24 +380,38 @@ ex:
|
|||||||
table of content by scanning for ISO image headers.
|
table of content by scanning for ISO image headers.
|
||||||
(depending on media type and drive state this might
|
(depending on media type and drive state this might
|
||||||
help or it might make the resulting toc even worse)
|
help or it might make the resulting toc even worse)
|
||||||
|
bit4= do not emulate TOC on overwriteable media
|
||||||
*/
|
*/
|
||||||
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||||
char *adr, int flag)
|
char *adr, int flag)
|
||||||
{
|
{
|
||||||
int ret, conv_ret, drive_grabbed= 0;
|
int ret, drive_grabbed= 0;
|
||||||
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
|
|
||||||
struct isoburn *o= NULL;
|
struct isoburn *o= NULL;
|
||||||
|
|
||||||
|
#ifndef NIX
|
||||||
|
|
||||||
|
/* <<< should be obsolete by new drive addressing of libburn-0.5.2 */
|
||||||
|
/* >>> but helps with kernel 2.4 to use /dev/sr */
|
||||||
|
|
||||||
|
int conv_ret;
|
||||||
|
char libburn_drive_adr[BURN_DRIVE_ADR_LEN];
|
||||||
|
|
||||||
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
|
conv_ret= burn_drive_convert_fs_adr(adr, libburn_drive_adr);
|
||||||
if(conv_ret<=0)
|
if(conv_ret<=0)
|
||||||
strcpy(libburn_drive_adr, adr);
|
strcpy(libburn_drive_adr, adr);
|
||||||
|
|
||||||
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
|
ret= burn_drive_scan_and_grab(drive_infos, libburn_drive_adr, flag&1);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
ret= burn_drive_scan_and_grab(drive_infos, adr, flag & 1);
|
||||||
|
|
||||||
|
#endif /* ! NIX */
|
||||||
|
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
drive_grabbed= 1;
|
drive_grabbed= 1;
|
||||||
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
|
ret= isoburn_welcome_media(&o, (*drive_infos)[0].drive,
|
||||||
(flag&8) | !!(flag&2));
|
(flag & 24) | !!(flag&2));
|
||||||
if(ret<=0)
|
if(ret<=0)
|
||||||
goto ex;
|
goto ex;
|
||||||
|
|
||||||
|
@ -364,6 +364,7 @@ int isoburn_drive_scan_and_grab(struct burn_drive_info *drive_infos[],
|
|||||||
table of content by scanning for ISO image headers.
|
table of content by scanning for ISO image headers.
|
||||||
(depending on media type and drive this might
|
(depending on media type and drive this might
|
||||||
help or it might make the resulting toc even worse)
|
help or it might make the resulting toc even worse)
|
||||||
|
bit4= do not emulate table of content on overwriteable media
|
||||||
@return 1 = success , 0 = drive not found , <0 = other error
|
@return 1 = success , 0 = drive not found , <0 = other error
|
||||||
*/
|
*/
|
||||||
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
int isoburn_drive_aquire(struct burn_drive_info *drive_infos[],
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
.\" First parameter, NAME, should be all caps
|
.\" First parameter, NAME, should be all caps
|
||||||
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection
|
||||||
.\" other parameters are allowed: see man(7), man(1)
|
.\" other parameters are allowed: see man(7), man(1)
|
||||||
.TH XORRISO 1 "Oct 02, 2008"
|
.TH XORRISO 1 "Oct 06, 2008"
|
||||||
.\" Please adjust this date whenever revising the manpage.
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
.\"
|
.\"
|
||||||
.\" Some roff macros, for reference:
|
.\" Some roff macros, for reference:
|
||||||
@ -532,7 +532,7 @@ until the next -dev or -indev. After the image has been loaded once, the
|
|||||||
setting is valid for -rollback until next -dev or -indev, where it
|
setting is valid for -rollback until next -dev or -indev, where it
|
||||||
will be reset to "auto".
|
will be reset to "auto".
|
||||||
.TP
|
.TP
|
||||||
\fB\-rom_toc_scan\fR "on"|"off"
|
\fB\-rom_toc_scan\fR "on"|"off"|"nonrom_on"|"nonrom_off"
|
||||||
Read-only drives do not tell the actual media type but show any media as
|
Read-only drives do not tell the actual media type but show any media as
|
||||||
ROM (e.g. as DVD-ROM). The session history of MMC multi-session media might
|
ROM (e.g. as DVD-ROM). The session history of MMC multi-session media might
|
||||||
be truncated to first and last session or even be completely false.
|
be truncated to first and last session or even be completely false.
|
||||||
@ -543,8 +543,13 @@ especially the address of the last session, there is a scan for ISO 9660
|
|||||||
filesystem headers which might help but also might yield worse results
|
filesystem headers which might help but also might yield worse results
|
||||||
than the drive's table of content. At its end it can cause read attempts
|
than the drive's table of content. At its end it can cause read attempts
|
||||||
to invalid addresses and thus ugly drive behavior.
|
to invalid addresses and thus ugly drive behavior.
|
||||||
|
Setting "on" enables that scan for alleged read-only media.
|
||||||
.br
|
.br
|
||||||
To be in effect, -rom_toc_scan has to be enabled by "on" before the -*dev
|
On the other hand the emulation of session history on overwriteable media
|
||||||
|
can hamper reading of partly damaged media. Setting "nonrom_off" disables
|
||||||
|
the elsewise trustworthy table-of-content scan for those media.
|
||||||
|
.br
|
||||||
|
To be in effect, -rom_toc_scan settings have to be made before the -*dev
|
||||||
command which aquires drive and media.
|
command which aquires drive and media.
|
||||||
.TP
|
.TP
|
||||||
\fB\-ban_stdio_write\fR
|
\fB\-ban_stdio_write\fR
|
||||||
|
@ -5286,6 +5286,11 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
|||||||
xorriso->toc_emulation_flag&1 ? "on" : "off");
|
xorriso->toc_emulation_flag&1 ? "on" : "off");
|
||||||
if(!(is_default && no_defaults))
|
if(!(is_default && no_defaults))
|
||||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
is_default= !(xorriso->toc_emulation_flag&2);
|
||||||
|
sprintf(line,"-rom_toc_scan %s\n",
|
||||||
|
xorriso->toc_emulation_flag&2 ? "nonrom_off" : "nonrom_on");
|
||||||
|
if(!(is_default && no_defaults))
|
||||||
|
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||||
|
|
||||||
adr_mode= xorriso->image_start_mode & 0xffff;
|
adr_mode= xorriso->image_start_mode & 0xffff;
|
||||||
if(adr_mode>=0 && adr_mode<=max_load_mode) {
|
if(adr_mode>=0 && adr_mode<=max_load_mode) {
|
||||||
@ -11649,8 +11654,9 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
|
|||||||
" -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id",
|
" -load \"session\"|\"track\"|\"lba\"|\"sbsector\"|\"volid\"|\"auto\" id",
|
||||||
" Load a particular (outdated) ISO image from a -dev or",
|
" Load a particular (outdated) ISO image from a -dev or",
|
||||||
" -indev which hosts more than one session.",
|
" -indev which hosts more than one session.",
|
||||||
" -rom_toc_scan \"on\"|\"off\"",
|
" -rom_toc_scan \"on\"|\"off\"|\"nonrom_on\"|\"nonrom_off\"",
|
||||||
" Enable scanning for ISO sessions on read-only drives/media.",
|
" Enable scanning for ISO sessions on read-only drives/media",
|
||||||
|
" resp. on overwriteable media.",
|
||||||
" -ban_stdio_write",
|
" -ban_stdio_write",
|
||||||
" Allow for writing only the usage of optical drives.",
|
" Allow for writing only the usage of optical drives.",
|
||||||
" -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"",
|
" -blank \"fast\"|\"all\"|\"deformat\"|\"deformat_quickest\"",
|
||||||
@ -13501,9 +13507,13 @@ int Xorriso_option_rollback(struct XorrisO *xorriso, int flag)
|
|||||||
int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode, int flag)
|
int Xorriso_option_rom_toc_scan(struct XorrisO *xorriso, char *mode, int flag)
|
||||||
{
|
{
|
||||||
if(strcmp(mode, "off")==0)
|
if(strcmp(mode, "off")==0)
|
||||||
xorriso->toc_emulation_flag= 0;
|
xorriso->toc_emulation_flag&= ~1;
|
||||||
else if(strcmp(mode, "on")==0)
|
else if(strcmp(mode, "on")==0)
|
||||||
xorriso->toc_emulation_flag= 1;
|
xorriso->toc_emulation_flag|= 1;
|
||||||
|
else if(strcmp(mode, "nonrom_off")==0)
|
||||||
|
xorriso->toc_emulation_flag|= 2;
|
||||||
|
else if(strcmp(mode, "nonrom_on")==0)
|
||||||
|
xorriso->toc_emulation_flag&= ~2;
|
||||||
else {
|
else {
|
||||||
sprintf(xorriso->info_text, "-rom_toc_scan: unknown mode '%s'", mode);
|
sprintf(xorriso->info_text, "-rom_toc_scan: unknown mode '%s'", mode);
|
||||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||||
|
@ -134,6 +134,8 @@ struct XorrisO { /* the global context of xorriso */
|
|||||||
|
|
||||||
int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire()
|
int toc_emulation_flag; /* bit0= bit3 for isoburn_drive_aquire()
|
||||||
scan -ROM profiles for ISO sessions
|
scan -ROM profiles for ISO sessions
|
||||||
|
bit1= bit4 for isoburn_drive_aquire()
|
||||||
|
do not emulate TOC on overwriteable media
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int image_start_mode; /* From what address to load the ISO image
|
int image_start_mode; /* From what address to load the ISO image
|
||||||
|
@ -1 +1 @@
|
|||||||
#define Xorriso_timestamP "2008.10.02.110828"
|
#define Xorriso_timestamP "2008.10.05.075432"
|
||||||
|
@ -485,7 +485,7 @@ int Xorriso_aquire_drive(struct XorrisO *xorriso, char *adr, int flag)
|
|||||||
if(dinfo==NULL) {
|
if(dinfo==NULL) {
|
||||||
isoburn_set_msgs_submit(Xorriso_msgs_submit_void, (void *) xorriso,
|
isoburn_set_msgs_submit(Xorriso_msgs_submit_void, (void *) xorriso,
|
||||||
(3<<2) | 128 , 0);
|
(3<<2) | 128 , 0);
|
||||||
aquire_flag= 1 | ((flag&(8|4))>>1) | ((xorriso->toc_emulation_flag&1)<<3);
|
aquire_flag= 1 | ((flag&(8|4))>>1) | ((xorriso->toc_emulation_flag & 3)<<3);
|
||||||
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
ret= isoburn_drive_aquire(&dinfo, libburn_adr, aquire_flag);
|
||||||
Xorriso_process_msg_queues(xorriso,0);
|
Xorriso_process_msg_queues(xorriso,0);
|
||||||
if(ret<=0) {
|
if(ret<=0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user