New option -check_media_defaults

This commit is contained in:
Thomas Schmitt 2008-09-04 10:02:58 +00:00
parent 81acf83a11
commit f20e2fffe7
6 changed files with 333 additions and 123 deletions

View File

@ -1735,9 +1735,25 @@ Try to read data blocks from the indev drive, eventually copy them to a
disk file, and finally report about the encountered quality. Several options
may be used to modify the default behavior.
.br
An option consists of a keyword, a "=" character, and a value.
The options given with this command override the default settings which
may have been changed by option -check_media_defaults. See there for a
description of options.
.br
Default is:
The result list tells intervals of 2 KiB blocks with start address, number
of blocks and quality. Qualities which begin with "+" are
supposed to be valid readable data. Qualities with "-" are no valid data.
.br
Alternatively it is possible to report damaged files rather than blocks.
.TP
\fB\-check_media_defaults\fR [option [option ...]] --
Preset options for runs of -check_media, -extract_cut and best_effort
file extraction. Eventual options given with -check_media will override the
preset options. -extract_cut will override some options automatically.
.br
An option consists of a keyword, a "=" character, and a value. Options
may override each other. So their sequence matters.
.br
The default setting at program start is:
.br
use=indev what=tracks min_lba=-1 max_lba=-1 retry=default
time_limit=28800 item_limit=100000
@ -1746,11 +1762,9 @@ abort_file=/var/opt/xorriso/do_abort_check_media
.br
data_to='' sector_map='' map_with_volid=off patch_lba0=off report=blocks
.br
Non-default settings:
Option "reset=now" restores these startup defaults.
.br
The result list tells intervals of 2 KiB blocks with start address, number
of blocks and quality. Qualities which begin with "+" are
supposed to be valid readable data. Qualities with "-" are no valid data.
Non-default options are:
.br
"report=files" lists the files which use damaged blocks (not with use=outdev).
The format is like with find -exec report_damage.
@ -1887,7 +1901,8 @@ The data bytes of iso_rr_path need to be already stored in the loaded ISO image
and byte_offset must be a multiple of 2048, e.g. an integer with suffix
s, m, or g.
.br
This option is implemented by a special run of -check_media.
This option is implemented by a special run of -check_media and governed by
most of the options which can be set iby -check_media_defaults.
Its main purpose is to allow handling of large files if they are not supported
by mount -t iso9660 and if the reading system is unable to buffer them as
a whole.

View File

@ -3253,6 +3253,32 @@ int Checkmediajob_destroy(struct CheckmediajoB **o, int flag)
}
int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
int flag)
{
to->use_dev= from->use_dev;
to->min_lba= from->min_lba;
to->max_lba= from->max_lba;
to->min_block_size= from->min_block_size;
to->mode= from->mode;
to->time_limit= from->time_limit;
to->item_limit= from->item_limit;
strcpy(to->abort_file_path, from->abort_file_path);
strcpy(to->data_to_path, from->data_to_path);
/* not copied: data_to_fd */
to->data_to_offset= from->data_to_offset;
to->data_to_limit= from->data_to_limit;
to->patch_lba0= from->patch_lba0;
to->patch_lba0_msc1= from->patch_lba0_msc1;
strcpy(to->sector_map_path, from->sector_map_path);
/* not copied: sector_map */
to->map_with_volid= from->map_with_volid;
to->retry= from->retry;
to->report_mode= from->report_mode;
return(1);
}
/* -------------------------- End CheckmediajoB --------------------------- */
/* ------------------------------- Xorriso -------------------------------- */
@ -3327,6 +3353,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
m->volset_change_pending= 0;
m->no_volset_present= 0;
m->in_sector_map= NULL;
m->check_media_default= NULL;
m->outdev[0]= 0;
m->out_drive_handle= NULL;
m->dev_fd_1= -1;
@ -4595,6 +4622,217 @@ bit1= do only report to fp
}
int Xorriso_check_media_setup_job(struct XorrisO *xorriso,
struct CheckmediajoB *job,
char **argv, int old_idx, int end_idx, int flag)
{
int ret, i;
double num;
struct CheckmediajoB *default_job;
if(xorriso->check_media_default != NULL)
Checkmediajob_copy(xorriso->check_media_default, job, 0);
for(i= old_idx; i < end_idx; i++) {
if(strncmp(argv[i], "abort_file=", 11) == 0) {
ret= Sfile_str(job->abort_file_path, argv[i] + 11, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "data_to=", 8) == 0) {
ret= Sfile_str(job->data_to_path, argv[i] + 8, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "map_with_volid=", 15) == 0) {
if(strcmp(argv[i] + 15, "on") == 0)
job->map_with_volid= 1;
else if(strcmp(argv[i] + 15, "off") == 0)
job->map_with_volid= 0;
else
goto unknown_value;
} else if(strncmp(argv[i], "max_lba=", 8) == 0 ||
strncmp(argv[i], "min_lba=", 8) == 0) {
num= -1;
sscanf(argv[i] + 8, "%lf", &num);
if(num > 0x7fffffff || num < 0)
num= -1;
if(strncmp(argv[i], "max_lba=", 8) == 0)
job->max_lba= num;
else
job->min_lba= num;
} else if(strncmp(argv[i], "patch_lba0=", 11) == 0) {
job->patch_lba0_msc1= -1;
if(strcmp(argv[i] + 11, "on") == 0)
job->patch_lba0= 1;
else if(strcmp(argv[i] + 11, "off") == 0)
job->patch_lba0= 0;
else if(strcmp(argv[i] + 11, "force") == 0)
job->patch_lba0= 2;
else if(argv[i][11] >= '1' && argv[i][11] <= '9') {
num= -1;
sscanf(argv[i] + 11, "%lf", &num);
if(num > 0x7fffffff || num < 0)
goto unknown_value;
job->patch_lba0_msc1= num;
job->patch_lba0= (num >= 32) + (strstr(argv[i] + 11, ":force") != NULL);
} else
goto unknown_value;
} else if(strncmp(argv[i], "report=", 7) == 0) {
if(strcmp(argv[i] + 7, "blocks") == 0)
job->report_mode= 0;
else if(strcmp(argv[i] + 7, "files") == 0)
job->report_mode= 1;
else if(strcmp(argv[i] + 7, "blocks_files") == 0)
job->report_mode= 2;
else
goto unknown_value;
} else if(strcmp(argv[i], "reset=now") == 0) {
ret= Checkmediajob_new(&default_job, 0);
if(ret <= 0) {
sprintf(xorriso->info_text,
"-check_media: Cannot reset optionis due to lack of resources");
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FATAL", 0);
ret= -1; goto ex;
}
Checkmediajob_copy(default_job, job, 0);
Checkmediajob_destroy(&default_job, 0);
} else if(strncmp(argv[i], "retry=", 6) == 0) {
if(strcmp(argv[i] + 6, "on") == 0)
job->retry= 1;
else if(strcmp(argv[i] + 6, "off") == 0)
job->retry= -1;
else if(strcmp(argv[i] + 6, "default") == 0)
job->retry= 0;
else
goto unknown_value;
} else if(strncmp(argv[i], "sector_map=", 11) == 0) {
ret= Sfile_str(job->sector_map_path, argv[i] + 11, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "time_limit=", 11) == 0 ||
strncmp(argv[i], "item_limit=", 11) == 0 ) {
num= -1;
sscanf(argv[i] + 11, "%lf", &num);
if(num > 0x7fffffff || num < 0)
num= -1;
if(strncmp(argv[i], "time_limit=", 11) == 0)
job->time_limit= num;
else
job->item_limit= num;
} else if(strncmp(argv[i], "use=", 4) == 0) {
if(strcmp(argv[i] + 4, "outdev") == 0)
job->use_dev= 1;
else if(strcmp(argv[i] + 4, "indev") == 0)
job->use_dev= 0;
else if(strcmp(argv[i] + 4, "sector_map") == 0)
job->use_dev= 2;
else
goto unknown_value;
} else if(strncmp(argv[i], "what=", 5) == 0) {
if(strcmp(argv[i]+5, "tracks") == 0)
job->mode= 0;
else if(strcmp(argv[i]+5, "disc")== 0)
job->mode= 1;
else {
unknown_value:;
sprintf(xorriso->info_text,
"-check_media: Unknown value with option %s", argv[i]);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
} else {
sprintf(xorriso->info_text, "-check_media: Unknown option '%s'", argv[i]);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
ret= 1;
ex:;
return(ret);
}
/* @param report Buffer of at least 10*SfileadrL
@param flag bit0= only report non-default settings
@return <=0 error , 1 ok , 2 with bit0: every option is on default setting
*/
int Xorriso_check_media_list_job(struct XorrisO *xorriso,
struct CheckmediajoB *job,
char *report, int flag)
{
int all, ret;
struct CheckmediajoB *dflt= NULL;
all= !(flag&1);
report[0]= 0;
ret= Checkmediajob_new(&dflt, 0);
if(ret <= 0)
return(-1);
sprintf(report, "-check_media_defaults");
if(!all)
strcat(report, " reset=now");
if(all || job->use_dev != dflt->use_dev)
sprintf(report + strlen(report), " use=%s",
job->use_dev == 1 ? "outdev" :
job->use_dev == 2 ? "sector_map" : "indev");
if(all || job->mode != dflt->mode)
sprintf(report + strlen(report), " what=%s",
job->mode == 1 ? "disc" : "tracks");
if(all || job->min_lba != dflt->min_lba)
sprintf(report + strlen(report), " min_lba=%d", job->min_lba);
if(all || job->max_lba != dflt->max_lba)
sprintf(report + strlen(report), " max_lba=%d", job->max_lba);
if(all || job->retry != dflt->retry)
sprintf(report + strlen(report), " retry=%s",
job->retry == 1 ? "on" : job->retry == -1 ? "off" : "default");
if(all || job->time_limit != dflt->time_limit)
sprintf(report + strlen(report), " time_limit=%d", job->time_limit);
if(all || job->item_limit != dflt->item_limit)
sprintf(report + strlen(report), " item_limit=%d", job->item_limit);
if(all || strcmp(job->abort_file_path, dflt->abort_file_path)) {
strcat(report, " abort_file=");
Text_shellsafe(job->abort_file_path, report + strlen(report), 0);
}
if(strlen(report) > 4 * SfileadrL)
{ret= 0; goto ex;}
if(all || strcmp(job->data_to_path, dflt->data_to_path)) {
strcat(report, " data_to=");
Text_shellsafe(job->data_to_path, report + strlen(report), 0);
}
if(strlen(report) > 4 * SfileadrL)
{ret= 0; goto ex;}
if(all || strcmp(job->sector_map_path, dflt->sector_map_path)) {
strcat(report, " sector_map=");
Text_shellsafe(job->sector_map_path, report + strlen(report), 0);
}
if(all || job->map_with_volid != dflt->map_with_volid)
sprintf(report + strlen(report), " map_with_volid=%s",
job->map_with_volid == 1 ? "on" : "off");
if(all || job->patch_lba0 != dflt->patch_lba0) {
sprintf(report + strlen(report), " patch_lba0=");
if(job->patch_lba0 == 0)
sprintf(report + strlen(report), "off");
else if(job->patch_lba0_msc1 >= 0)
sprintf(report + strlen(report), "%d%s",
job->patch_lba0_msc1, job->patch_lba0 == 2 ? ":force" : "");
else
sprintf(report + strlen(report), "%s",
job->patch_lba0 == 2 ? "force" : "on");
}
if(all || job->report_mode != dflt->report_mode)
sprintf(report + strlen(report), " report=%s",
job->report_mode == 0 ? "blocks" :
job->report_mode == 1 ? "files" : "blocks_files");
if(strlen(report) > 4 * SfileadrL)
{ret= 0; goto ex;}
ret= 1;
ex:;
strcat(report, " --");
Checkmediajob_destroy(&dflt, 0);
if(ret > 0 && strcmp(report, "-check_media_defaults reset=now --") == 0)
return(2);
return(ret);
}
int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
/*
bit0= do only report non-default settings
@ -4660,6 +4898,18 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
if(xorriso->check_media_default == NULL) {
is_default= 1;
sprintf(line, "-check_media_defaults --\n");
} else {
ret= Xorriso_check_media_list_job(xorriso, xorriso->check_media_default,
line, no_defaults);
is_default= (ret == 2);
strcat(line, "\n");
}
if(!(is_default && no_defaults))
Xorriso_status_result(xorriso,filter,fp,flag&2);
is_default= (xorriso->img_read_error_mode==2);
treatment= "best_effort";
if(xorriso->img_read_error_mode==1)
@ -9647,7 +9897,6 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
int ret, i, count, lba, blocks, quality;
int end_idx, old_idx, os_errno;
char quality_name[80], head_buffer[64*1024];
double num;
struct SpotlisT *spotlist= NULL;
struct CheckmediajoB *job= NULL;
struct FindjoB *findjob= NULL;
@ -9660,109 +9909,9 @@ int Xorriso_option_check_media(struct XorrisO *xorriso,
ret= Checkmediajob_new(&job, 0);
if(ret <= 0)
goto ex;
for(i= old_idx; i < end_idx; i++) {
if(strncmp(argv[i], "abort_file=", 11) == 0) {
ret= Sfile_str(job->abort_file_path, argv[i] + 11, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "data_to=", 8) == 0) {
ret= Sfile_str(job->data_to_path, argv[i] + 8, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "map_with_volid=", 15) == 0) {
if(strcmp(argv[i] + 15, "on") == 0)
job->map_with_volid= 1;
else if(strcmp(argv[i] + 15, "off") == 0)
job->map_with_volid= 0;
else
goto unknown_value;
} else if(strncmp(argv[i], "max_lba=", 8) == 0 ||
strncmp(argv[i], "min_lba=", 8) == 0) {
num= -1;
sscanf(argv[i] + 8, "%lf", &num);
if(num > 0x7fffffff || num < 0)
num= -1;
if(strncmp(argv[i], "max_lba=", 8) == 0)
job->max_lba= num;
else
job->min_lba= num;
} else if(strncmp(argv[i], "patch_lba0=", 11) == 0) {
job->patch_lba0_msc1= -1;
if(strcmp(argv[i] + 11, "on") == 0)
job->patch_lba0= 1;
else if(strcmp(argv[i] + 11, "off") == 0)
job->patch_lba0= 0;
else if(strcmp(argv[i] + 11, "force") == 0)
job->patch_lba0= 2;
else if(argv[i][11] >= '1' && argv[i][11] <= '9') {
num= -1;
sscanf(argv[i] + 11, "%lf", &num);
if(num > 0x7fffffff || num < 0)
goto unknown_value;
job->patch_lba0_msc1= num;
job->patch_lba0= (num >= 32) + (strstr(argv[i] + 11, ":force") != NULL);
} else
goto unknown_value;
} else if(strncmp(argv[i], "report=", 7) == 0) {
if(strcmp(argv[i] + 7, "blocks") == 0)
job->report_mode= 0;
else if(strcmp(argv[i] + 7, "files") == 0)
job->report_mode= 1;
else if(strcmp(argv[i] + 7, "blocks_files") == 0)
job->report_mode= 2;
else
goto unknown_value;
} else if(strncmp(argv[i], "retry=", 6) == 0) {
if(strcmp(argv[i] + 6, "on") == 0)
job->retry= 1;
else if(strcmp(argv[i] + 6, "off") == 0)
job->retry= -1;
else if(strcmp(argv[i] + 6, "default") == 0)
job->retry= 0;
else
goto unknown_value;
} else if(strncmp(argv[i], "sector_map=", 11) == 0) {
ret= Sfile_str(job->sector_map_path, argv[i] + 11, 0);
if(ret <= 0)
goto ex;
} else if(strncmp(argv[i], "time_limit=", 11) == 0 ||
strncmp(argv[i], "item_limit=", 11) == 0 ) {
num= -1;
sscanf(argv[i] + 11, "%lf", &num);
if(num > 0x7fffffff || num < 0)
num= -1;
if(strncmp(argv[i], "time_limit=", 11) == 0)
job->time_limit= num;
else
job->item_limit= num;
} else if(strncmp(argv[i], "use=", 4) == 0) {
if(strcmp(argv[i] + 4, "outdev") == 0)
job->use_dev= 1;
else if(strcmp(argv[i] + 4, "indev") == 0)
job->use_dev= 0;
else if(strcmp(argv[i] + 4, "sector_map") == 0)
job->use_dev= 2;
else
goto unknown_value;
} else if(strncmp(argv[i], "what=", 5) == 0) {
if(strcmp(argv[i]+5, "tracks") == 0)
job->mode= 0;
else if(strcmp(argv[i]+5, "disc")== 0)
job->mode= 1;
else {
unknown_value:;
sprintf(xorriso->info_text,
"-check_media: Unknown value with option %s", argv[i]);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
} else {
sprintf(xorriso->info_text, "-check_media: Unknown option '%s'", argv[i]);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
ret= 0; goto ex;
}
}
ret= Xorriso_check_media_setup_job(xorriso, job, argv, old_idx, end_idx, 0);
if(ret <= 0)
goto ex;
if((job->report_mode == 1 || job->report_mode == 2) && job->use_dev == 1) {
sprintf(xorriso->info_text,
@ -9855,6 +10004,33 @@ ex:;
}
/* Option -check_media_defaults */
int Xorriso_option_check_media_defaults(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag)
{
int ret, old_idx, end_idx;
struct CheckmediajoB *job= NULL;
old_idx= *idx;
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 1);
(*idx)= end_idx;
ret= Checkmediajob_new(&job, 0);
if(ret <= 0)
goto ex;
ret= Xorriso_check_media_setup_job(xorriso, job, argv, old_idx, end_idx, 0);
if(ret <= 0)
goto ex;
Checkmediajob_destroy(&(xorriso->check_media_default), 0);
xorriso->check_media_default= job;
job= NULL;
ret= 1;
ex:;
Checkmediajob_destroy(&job, 0);
return(ret);
}
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
/* @param flag bit0=recursive (-chgrp_r)
*/
@ -10738,8 +10914,8 @@ int Xorriso_option_extract(struct XorrisO *xorriso, char *iso_path,
/* Option -extract_cut */
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *isorr_path,
char *start, char *count, char *disk_path, int flag)
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path,
char *start, char *count, char *disk_path, int flag)
{
int ret;
double num;
@ -10766,10 +10942,10 @@ int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *isorr_path,
sprintf(xorriso->info_text,
"-extract_cut from %s , byte %.f to %.f, and store as %s",
disk_path, (double) startbyte, (double) (startbyte+bytecount),
isorr_path);
iso_rr_path);
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "DEBUG", 0);
ret= Xorriso_extract_cut(xorriso, isorr_path, disk_path,
ret= Xorriso_extract_cut(xorriso, iso_rr_path, disk_path,
startbyte, bytecount, 0);
return(ret);
}
@ -11445,6 +11621,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Like -extract but with directory do not restore sub tree.",
" -extract_cut iso_rr_path byte_offset byte_count disk_path",
" Copy a byte interval from iso_rr_path to disk_path.",
" This is governed in part by -check_media_defaults.",
" -cpx iso_rr_path [***] disk_path",
" Copy leaf file objects from ISO image to disk filesystem.",
" -cpax iso_rr_path [***] disk_path",
@ -11467,6 +11644,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" sector_map=filepath , map_with_volid=on|off ,",
" patch_lba0=on|off|force|blockadr[:force] ,",
" report=blocks|files|blocks_files",
" -check_media_defaults [options] --",
" Preset options for runs of -check_media and -extract_cut.",
"",
"Compatibility emulation (argument list may be ended by --):",
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
@ -13523,7 +13702,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
};
static char argn_commands[][40]= {
"add","as",
"check_media","chgrp","chgrpi","chgrp_r","chgrp_ri","chmod","chmodi",
"check_media","check_media_defaults",
"chgrp","chgrpi","chgrp_r","chgrp_ri","chmod","chmodi",
"chmod_r","chmod_ri","chown","chowni","chown_r","chown_ri",
"compare_l","cpr","cpri","cp_rax","cp_rx","cpax","cpx",
"du","dui","dus","dusi","dux","dusx","extract_l",
@ -13692,6 +13872,9 @@ next_command:;
} else if(strcmp(cmd,"check_media")==0) {
ret= Xorriso_option_check_media(xorriso, argc, argv, idx, 0);
} else if(strcmp(cmd,"check_media_defaults")==0) {
ret= Xorriso_option_check_media_defaults(xorriso, argc, argv, idx, 0);
} else if(strcmp(cmd,"chgrp")==0 || strcmp(cmd,"chgrpi")==0) {
(*idx)+= 1;
ret= Xorriso_option_chgrpi(xorriso, arg1, argc, argv, idx, 0);

View File

@ -305,6 +305,10 @@ int Xorriso_option_cdx(struct XorrisO *xorriso, char *disk_path, int flag);
int Xorriso_option_check_media(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -check_media_defaults */
int Xorriso_option_check_media_defaults(struct XorrisO *xorriso,
int argc, char **argv, int *idx, int flag);
/* Option -chgrp alias -chgrpi , chgrp_r alias chgrpi */
/* @param flag bit0=recursive (-chgrp_r)
*/
@ -410,6 +414,10 @@ int Xorriso_option_error_behavior(struct XorrisO *xorriso,
int Xorriso_option_extract(struct XorrisO *xorriso, char *disk_path,
char *iso_path, int flag);
/* Option -extract_cut */
int Xorriso_option_extract_cut(struct XorrisO *xorriso, char *iso_rr_path,
char *start, char *count, char *disk_path, int flag);
/* Option -follow */
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag);

View File

@ -157,6 +157,7 @@ struct XorrisO { /* the global context of xorriso */
int volset_change_pending; /* whether -commit would make sense */
int no_volset_present; /* set to 1 on first failure */
struct CheckmediajoB *check_media_default;
struct SectorbitmaP *in_sector_map; /* eventual sector validity bitmap */
@ -311,7 +312,7 @@ struct XorrisO { /* the global context of xorriso */
struct PermiteM *perm_stack; /* Temporarily altered dir access permissions */
/* result (stdout, R: ) */
char result_line[5*SfileadrL];
char result_line[10*SfileadrL];
int result_line_counter;
int result_page_counter;
int result_open_line_len;
@ -719,6 +720,8 @@ int Checkmediajob_new(struct CheckmediajoB **o, int flag);
int Checkmediajob_destroy(struct CheckmediajoB **o, int flag);
int Checkmediajob_copy(struct CheckmediajoB *from, struct CheckmediajoB *to,
int flag);
int Sectorbitmap_new(struct SectorbitmaP **o, int sectors, int sector_size,
int flag);

View File

@ -1 +1 @@
#define Xorriso_timestamP "2008.09.03.143218"
#define Xorriso_timestamP "2008.09.04.100158"

View File

@ -7629,17 +7629,18 @@ int Xorriso_read_file_data(struct XorrisO *xorriso, IsoNode *node,
ret= Checkmediajob_new(&job, 0);
if(ret <= 0)
goto ex;
if(xorriso->check_media_default != NULL)
Checkmediajob_copy(xorriso->check_media_default, job, 0);
job->min_lba= -1;
job->max_lba= -1;
job->sector_map_path[0]= 0;
ret= Spotlist_new(&spotlist, 0);
if(ret <= 0)
{ret= -1; goto ex;}
/* do overall job programming:
>>> ??? time_limit, item_limit
>>> ??? abort_file_path
*/
if(Sfile_str(job->data_to_path, disk_path, 0) <= 0)
{ret= -1; goto ex;}
Xorriso_open_job_data_to(xorriso, job, 0);
if(ret <= 0)
goto ex;