New option -file_size_limit, -as mkisofs now supports -iso-level 1 to 3
This commit is contained in:
@ -3348,6 +3348,7 @@ int Xorriso_new(struct XorrisO ** xorriso,char *progname, int flag)
|
||||
m->do_iso_rr_pattern= 1;
|
||||
m->do_disk_pattern= 2;
|
||||
m->temp_mem_limit= 16*1024*1024;
|
||||
m->file_size_limit= Xorriso_default_file_size_limiT;
|
||||
m->disk_exclusions= NULL;
|
||||
m->disk_excl_mode= 1;
|
||||
m->use_stdin= 0;
|
||||
@ -4760,6 +4761,16 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag)
|
||||
}
|
||||
}
|
||||
|
||||
is_default= (xorriso->file_size_limit ==
|
||||
Xorriso_default_file_size_limiT);
|
||||
if(xorriso->file_size_limit <= 0)
|
||||
sprintf(line, "-file_size_limit off --\n");
|
||||
else
|
||||
sprintf(line, "-file_size_limit %.lf --\n",
|
||||
(double) xorriso->file_size_limit);
|
||||
if(!(is_default && no_defaults))
|
||||
Xorriso_status_result(xorriso,filter,fp,flag&2);
|
||||
|
||||
is_default= (xorriso->disk_excl_mode==1);
|
||||
sprintf(line, "-not_mgt %s:%s:%s:%s\n",
|
||||
(xorriso->disk_excl_mode&1 ? "on" : "off"),
|
||||
@ -8208,7 +8219,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
int argc, char **argv, int flag)
|
||||
{
|
||||
int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points, mem;
|
||||
int do_print_size= 0, idx_offset= 0, fd, idx;
|
||||
int do_print_size= 0, idx_offset= 0, fd, idx, iso_level= 0;
|
||||
char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL];
|
||||
char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt;
|
||||
|
||||
@ -8233,6 +8244,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
" -f, -follow-links Follow symbolic links",
|
||||
" -graft-points Allow to use graft points for filenames",
|
||||
" -help Print option help",
|
||||
" -iso-level LEVEL Set ISO9660 conformance level (1..3)",
|
||||
" -J, -joliet Generate Joliet directory information",
|
||||
" -o FILE, -output FILE Set output file name",
|
||||
" -m GLOBFILE, -exclude GLOBFILE",
|
||||
@ -8308,6 +8320,23 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
|
||||
ret= Xorriso_option_follow(xorriso, "on", 0);
|
||||
if(ret<=0)
|
||||
goto ex;
|
||||
} else if(strcmp(argv[i], "-iso-level")==0) {
|
||||
if(i+1>=argc)
|
||||
goto not_enough_args;
|
||||
i++;
|
||||
sscanf(argv[i], "%d", &iso_level);
|
||||
if(iso_level < 1 || iso_level > 3) {
|
||||
sprintf(xorriso->info_text,
|
||||
"-as %s: unsupported -iso-level '%s' (use one of: 1,2,3)",
|
||||
whom, argv[i]);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
if(iso_level < 3)
|
||||
xorriso->file_size_limit=
|
||||
((off_t) 4) * ((off_t) 1024*1024*1024) - ((off_t) 1);
|
||||
else
|
||||
xorriso->file_size_limit= 0;
|
||||
} else
|
||||
was_other_option= 1;
|
||||
}
|
||||
@ -8484,6 +8513,10 @@ not_enough_args:;
|
||||
sprintf(xorriso->info_text, "-as %s: Unknown option %s",
|
||||
whom, Text_shellsafe(argv[i], sfe, 0));
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
} else if(strcmp(argv[i], "-iso-level")==0) {
|
||||
i++;
|
||||
/* was already handled in first argument scan */;
|
||||
|
||||
} else {
|
||||
int zero= 0;
|
||||
|
||||
@ -10698,78 +10731,41 @@ int Xorriso_option_extract(struct XorrisO *xorriso, char *iso_path,
|
||||
}
|
||||
|
||||
|
||||
/* Option -follow */
|
||||
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag)
|
||||
/* Option -file_size_limit */
|
||||
int Xorriso_option_file_size_limit(struct XorrisO *xorriso,
|
||||
int argc, char **argv, int *idx, int flag)
|
||||
{
|
||||
int was_fl, was_fm, was_fpr, was_fpt, l;
|
||||
double num;
|
||||
char *cpt, *npt;
|
||||
int ret, i, end_idx;
|
||||
off_t new_limit= 0;
|
||||
|
||||
was_fpt= xorriso->do_follow_pattern;
|
||||
was_fpr= xorriso->do_follow_param;
|
||||
was_fl= xorriso->do_follow_links;
|
||||
was_fm= xorriso->do_follow_mount;
|
||||
xorriso->do_follow_pattern= 0;
|
||||
xorriso->do_follow_param= 0;
|
||||
xorriso->do_follow_links= 0;
|
||||
xorriso->do_follow_mount= 0;
|
||||
npt= cpt= mode;
|
||||
for(cpt= mode; npt!=NULL; cpt= npt+1) {
|
||||
npt= strchr(cpt,':');
|
||||
if(npt==NULL)
|
||||
l= strlen(cpt);
|
||||
else
|
||||
l= npt-cpt;
|
||||
if(l==0)
|
||||
goto unknown_mode;
|
||||
if(strncmp(cpt, "off", l)==0) {
|
||||
xorriso->do_follow_pattern= 0;
|
||||
xorriso->do_follow_param= 0;
|
||||
xorriso->do_follow_links= 0;
|
||||
xorriso->do_follow_mount= 0;
|
||||
} else if(strncmp(cpt, "on", l)==0) {
|
||||
xorriso->do_follow_pattern= 1;
|
||||
xorriso->do_follow_param= 1;
|
||||
xorriso->do_follow_links= 1;
|
||||
xorriso->do_follow_mount= 1;
|
||||
} else if(strncmp(cpt, "default", l)==0) {
|
||||
xorriso->do_follow_pattern= 1;
|
||||
xorriso->do_follow_param= 0;
|
||||
xorriso->do_follow_links= 0;
|
||||
xorriso->do_follow_mount= 1;
|
||||
xorriso->follow_link_limit= 100;
|
||||
} else if(strncmp(cpt, "link", l)==0 || strncmp(cpt,"links", l)==0) {
|
||||
xorriso->do_follow_links= 1;
|
||||
} else if(strncmp(cpt, "mount", l)==0) {
|
||||
xorriso->do_follow_mount= 1;
|
||||
} else if(strncmp(cpt,"param", l)==0) {
|
||||
xorriso->do_follow_param= 1;
|
||||
} else if(strncmp(cpt, "pattern", l)==0) {
|
||||
xorriso->do_follow_pattern= 1;
|
||||
} else if(strncmp(cpt, "limit=", 6)==0) {
|
||||
sscanf(cpt+6, "%lf", &num);
|
||||
if(num<=0 || num>1.0e6) {
|
||||
sprintf(xorriso->info_text, "-follow: Value too %s with '%s'",
|
||||
num<=0 ? "small" : "large", cpt+6);
|
||||
goto sorry_ex;
|
||||
}
|
||||
xorriso->follow_link_limit= num;
|
||||
} else {
|
||||
unknown_mode:;
|
||||
if(l<SfileadrL)
|
||||
sprintf(xorriso->info_text, "-follow: unknown mode '%s'", cpt);
|
||||
else
|
||||
sprintf(xorriso->info_text, "-follow: oversized mode parameter (%d)",l);
|
||||
sorry_ex:
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
xorriso->do_follow_pattern= was_fpt;
|
||||
xorriso->do_follow_param= was_fpr;
|
||||
xorriso->do_follow_links= was_fl;
|
||||
xorriso->do_follow_mount= was_fm;
|
||||
return(0);
|
||||
}
|
||||
end_idx= Xorriso_end_idx(xorriso, argc, argv, *idx, 1);
|
||||
if(*idx >= end_idx)
|
||||
{ret= 2; goto ex;}
|
||||
if(*idx + 1 == end_idx && strcmp(argv[*idx], "off") == 0) {
|
||||
xorriso->file_size_limit= 0;
|
||||
ret= 1; goto ex;
|
||||
}
|
||||
return(1);
|
||||
for(i= *idx; i < end_idx; i++)
|
||||
new_limit+= Scanf_io_size(argv[i], 0);
|
||||
if(new_limit <= 0) {
|
||||
sprintf(xorriso->info_text, "-file_size_limit: values sum up to %.lf",
|
||||
(double) new_limit);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 1);
|
||||
ret= 0; goto ex;
|
||||
}
|
||||
xorriso->file_size_limit= new_limit;
|
||||
ret= 1;
|
||||
ex:;
|
||||
(*idx)= end_idx;
|
||||
if(ret > 0) {
|
||||
if(xorriso->file_size_limit > 0)
|
||||
sprintf(xorriso->info_text, "-file_size_limit now at %.lf\n",
|
||||
(double) xorriso->file_size_limit);
|
||||
else
|
||||
sprintf(xorriso->info_text, "-file_size_limit now off\n");
|
||||
Xorriso_info(xorriso,0);
|
||||
}
|
||||
return(ret);
|
||||
}
|
||||
|
||||
|
||||
@ -11012,6 +11008,81 @@ ex:;
|
||||
}
|
||||
|
||||
|
||||
/* Option -follow */
|
||||
int Xorriso_option_follow(struct XorrisO *xorriso, char *mode, int flag)
|
||||
{
|
||||
int was_fl, was_fm, was_fpr, was_fpt, l;
|
||||
double num;
|
||||
char *cpt, *npt;
|
||||
|
||||
was_fpt= xorriso->do_follow_pattern;
|
||||
was_fpr= xorriso->do_follow_param;
|
||||
was_fl= xorriso->do_follow_links;
|
||||
was_fm= xorriso->do_follow_mount;
|
||||
xorriso->do_follow_pattern= 0;
|
||||
xorriso->do_follow_param= 0;
|
||||
xorriso->do_follow_links= 0;
|
||||
xorriso->do_follow_mount= 0;
|
||||
npt= cpt= mode;
|
||||
for(cpt= mode; npt!=NULL; cpt= npt+1) {
|
||||
npt= strchr(cpt,':');
|
||||
if(npt==NULL)
|
||||
l= strlen(cpt);
|
||||
else
|
||||
l= npt-cpt;
|
||||
if(l==0)
|
||||
goto unknown_mode;
|
||||
if(strncmp(cpt, "off", l)==0) {
|
||||
xorriso->do_follow_pattern= 0;
|
||||
xorriso->do_follow_param= 0;
|
||||
xorriso->do_follow_links= 0;
|
||||
xorriso->do_follow_mount= 0;
|
||||
} else if(strncmp(cpt, "on", l)==0) {
|
||||
xorriso->do_follow_pattern= 1;
|
||||
xorriso->do_follow_param= 1;
|
||||
xorriso->do_follow_links= 1;
|
||||
xorriso->do_follow_mount= 1;
|
||||
} else if(strncmp(cpt, "default", l)==0) {
|
||||
xorriso->do_follow_pattern= 1;
|
||||
xorriso->do_follow_param= 0;
|
||||
xorriso->do_follow_links= 0;
|
||||
xorriso->do_follow_mount= 1;
|
||||
xorriso->follow_link_limit= 100;
|
||||
} else if(strncmp(cpt, "link", l)==0 || strncmp(cpt,"links", l)==0) {
|
||||
xorriso->do_follow_links= 1;
|
||||
} else if(strncmp(cpt, "mount", l)==0) {
|
||||
xorriso->do_follow_mount= 1;
|
||||
} else if(strncmp(cpt,"param", l)==0) {
|
||||
xorriso->do_follow_param= 1;
|
||||
} else if(strncmp(cpt, "pattern", l)==0) {
|
||||
xorriso->do_follow_pattern= 1;
|
||||
} else if(strncmp(cpt, "limit=", 6)==0) {
|
||||
sscanf(cpt+6, "%lf", &num);
|
||||
if(num<=0 || num>1.0e6) {
|
||||
sprintf(xorriso->info_text, "-follow: Value too %s with '%s'",
|
||||
num<=0 ? "small" : "large", cpt+6);
|
||||
goto sorry_ex;
|
||||
}
|
||||
xorriso->follow_link_limit= num;
|
||||
} else {
|
||||
unknown_mode:;
|
||||
if(l<SfileadrL)
|
||||
sprintf(xorriso->info_text, "-follow: unknown mode '%s'", cpt);
|
||||
else
|
||||
sprintf(xorriso->info_text, "-follow: oversized mode parameter (%d)",l);
|
||||
sorry_ex:
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
xorriso->do_follow_pattern= was_fpt;
|
||||
xorriso->do_follow_param= was_fpr;
|
||||
xorriso->do_follow_links= was_fl;
|
||||
xorriso->do_follow_mount= was_fm;
|
||||
return(0);
|
||||
}
|
||||
}
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
||||
/* Option -fs */
|
||||
int Xorriso_option_fs(struct XorrisO *xorriso, char *size, int flag)
|
||||
{
|
||||
@ -12969,13 +13040,11 @@ bd_speed:;
|
||||
int Xorriso_option_split_size(struct XorrisO *xorriso, char *size, int flag)
|
||||
{
|
||||
double num;
|
||||
/* At most: 100 extents with 4 GB - 2 kB each = 400 GB - 800 kB */
|
||||
static off_t limit= ((off_t) 400) * ((off_t) 1024*1024*1024) - (off_t) 819200;
|
||||
|
||||
num= Scanf_io_size(size, 0);
|
||||
if(num > limit) {
|
||||
if(num > xorriso->file_size_limit && xorriso->file_size_limit > 0) {
|
||||
sprintf(xorriso->info_text, "-split_size: too large %.f (allowed: %.f)",
|
||||
num, (double) limit);
|
||||
num, (double) xorriso->file_size_limit);
|
||||
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
|
||||
return(0);
|
||||
} else if(num < 0)
|
||||
@ -13408,7 +13477,8 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv,
|
||||
"check_media","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","find","findi","findx",
|
||||
"du","dui","dus","dusi","dux","dusx","extract_l",
|
||||
"file_size_limit","find","findi","findx",
|
||||
"ls","lsi","lsl","lsli","lsd","lsdi","lsdl","lsdli",
|
||||
"lsx","lslx","lsdx","lsdlx","map_l","mv","mvi","mkdir","mkdiri",
|
||||
"not_paths","rm","rmi","rm_r","rm_ri","rmdir","rmdiri","update_l",
|
||||
@ -13698,9 +13768,8 @@ next_command:;
|
||||
(*idx)+= 2;
|
||||
ret= Xorriso_option_extract(xorriso, arg1, arg2, 32);
|
||||
|
||||
} else if(strcmp(cmd,"follow")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_follow(xorriso, arg1, 0);
|
||||
} else if(strcmp(cmd,"file_size_limit")==0) {
|
||||
ret= Xorriso_option_file_size_limit(xorriso, argc, argv, idx, 0);
|
||||
|
||||
} else if(strcmp(cmd,"find")==0 || strcmp(cmd,"findi")==0) {
|
||||
ret= Xorriso_option_find(xorriso, argc, argv, idx, 0);
|
||||
@ -13708,6 +13777,10 @@ next_command:;
|
||||
} else if(strcmp(cmd,"findx")==0) {
|
||||
ret= Xorriso_option_find(xorriso, argc, argv, idx, 1);
|
||||
|
||||
} else if(strcmp(cmd,"follow")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_follow(xorriso, arg1, 0);
|
||||
|
||||
} else if(strcmp(cmd,"format")==0) {
|
||||
(*idx)++;
|
||||
ret= Xorriso_option_blank(xorriso, arg1, 1);
|
||||
|
Reference in New Issue
Block a user