New options -C and -M for -as mkisofs

This commit is contained in:
2008-07-05 18:23:46 +00:00
parent 362ecda0f3
commit 9fa0a6f441
4 changed files with 83 additions and 13 deletions

View File

@ -7455,7 +7455,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
int ret, i, k, was_path= 0, was_other_option= 0, mem_graft_points;
int do_print_size= 0, idx_offset= 0, fd, idx;
char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL];
char *ept, *add_pt, eff_path[SfileadrL];
char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt;
/* mkisofs 2.01 options which are not scheduled for implementation, yet */
static char ignored_arg0_options[][41]= {
@ -7479,12 +7479,15 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
" -graft-points Allow to use graft points for filenames",
" -help Print option help",
" -J, -joliet Generate Joliet directory information",
" -no-pad Do not pad output",
" -o FILE, -output FILE Set output file name",
" -m GLOBFILE, -exclude GLOBFILE",
" Exclude file name",
" -exclude-list FILE File with list of file names to exclude",
" -pad Pad output by 300k (default)",
" -no-pad Do not pad output",
" -M FILE, -prev-session FILE Set path to previous session to merge",
" -C PARAMS, -cdrecord-params PARAMS",
" Magic paramters from cdrecord",
" -path-list FILE File with list of pathnames to process",
" -print-size Print estimated filesystem size and exit",
" -quiet Run quietly",
@ -7497,13 +7500,16 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
strcpy(ra_text, xorriso->report_about_text);
#ifdef NIX
/* <<< MULTI : */
if(xorriso->in_drive_handle != NULL) {
ret= Xorriso_option_dev(xorriso, "", 1); /* give up indev */
if(ret!=1)
return(ret);
}
#endif
adr[0]= 0;
adr[0]= indev[0]= 0;
for(i= 0; i<argc; i++) {
if(strcmp(argv[i], "-version")==0) {
sprintf(xorriso->result_line,
@ -7525,6 +7531,26 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
strcpy(adr, "stdio:");
if(Sfile_str(adr+strlen(adr), argv[i], 0)<=0)
{ret= -1; goto ex;}
} else if(strcmp(argv[i], "-M")==0 || strcmp(argv[i], "-dev")==0 ||
strcmp(argv[i], "-prev-session")==0) {
if(i+1>=argc)
goto not_enough_args;
i++;
indev[0]= 0;
/* >>> MULTI :
check whether indev is a valid MMC drive. Else : */
strcpy(indev, "stdio:");
if(Sfile_str(indev+strlen(indev), argv[i], 0)<=0)
{ret= -1; goto ex;}
} else if(strcmp(argv[i], "-C")==0 ||
strcmp(argv[i], "-cdrecord-params")==0) {
if(i+1>=argc)
goto not_enough_args;
i++;
strncpy(msc, argv[i], sizeof(msc)-1);
msc[sizeof(msc)-1]= 0;
} else if(strcmp(argv[i], "-help")==0) {
Xorriso_option_report_about(xorriso, "NOTE", 0);
for(i= 0; strcmp(helptext[i], "@End_of_helptexT@")!=0; i++) {
@ -7570,6 +7596,32 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
return(ret);
}
if(msc[0]) {
cpt= strchr(msc, ',');
if(cpt==NULL) {
illegal_c:;
sprintf(xorriso->info_text,
"-as %s: unusable parameter with option -C: %s",
whom, Text_shellsafe(msc, sfe, 0));
Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0);
{ret= 0; goto ex;}
} else if(cpt==msc || msc[1]==0)
goto illegal_c;
strncpy(sfe, msc, cpt-msc);
sfe[cpt-msc]= 0;
ret= Xorriso_option_load(xorriso, "sbsector", sfe, 0);
if(ret<=0)
return(ret);
ret= Xorriso_option_grow_blindly(xorriso, cpt+1, 0);
if(ret<=0)
return(ret);
}
if(indev[0]) {
ret= Xorriso_option_dev(xorriso, indev, 1);
if(ret<=0)
goto ex;
}
xorriso->padding= 300*1024;
for(i= 0; i<argc; i++) {
@ -7626,6 +7678,12 @@ not_enough_args:;
} else if(strcmp(argv[i], "-o")==0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-M")==0 || strcmp(argv[i], "-dev")==0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-C")==0) {
i++;
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-help")==0) {
/* was already handled in first argument scan */;
} else if(strcmp(argv[i], "-V")==0 || strcmp(argv[i], "-volid")==0) {
@ -10019,7 +10077,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag)
" Copy ISO file content into a byte interval of a disk file.",
"",
"Compatibility emulation (argument list may be ended by --):",
" -as mkisofs [-help|-o|-R|-J|-V|-P|-f|-m|-graft-points|-path-list|pathspecs]",
" -as mkisofs [-help|-version|-o|-R|-J|-V|-P|-f|-m|-exclude-list|-no-pad|",
" -M|-C|-graft-points|-path-list|pathspecs]",
" Perform some mkisofs gestures, understand pathspecs as mkisofs",
" does. Commit happens outside emulation at usual occasions.",
" -as cdrecord [-help|-v|dev=|speed=|blank=|fs=|-eject|-atip|padsize=|path|-]",