|
|
|
@ -2086,6 +2086,26 @@ ex:;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* @return 1=replaced , 2=not replaced , <=0 = error
|
|
|
|
|
*/
|
|
|
|
|
int Xorriso_replace_arg_by_bsl(struct XorrisO *xorriso, char **arg,
|
|
|
|
|
char **argpt, int flag)
|
|
|
|
|
{
|
|
|
|
|
int ret, eaten, l;
|
|
|
|
|
|
|
|
|
|
if(!(xorriso->bsl_interpretation & 16))
|
|
|
|
|
return(2);
|
|
|
|
|
l= strlen(*argpt);
|
|
|
|
|
Xorriso_free_meM(*arg);
|
|
|
|
|
Xorriso_alloc_meM(*arg, char, l + 1);
|
|
|
|
|
strcpy(*arg, *argpt);
|
|
|
|
|
*argpt= *arg;
|
|
|
|
|
ret= Sfile_bsl_interpreter(*arg, l, &eaten, 0);
|
|
|
|
|
ex:;
|
|
|
|
|
return(ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
|
|
|
|
|
int flag)
|
|
|
|
|
/*
|
|
|
|
@ -2100,14 +2120,16 @@ int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
|
|
|
|
|
*/
|
|
|
|
|
{
|
|
|
|
|
int i, ret, was_dashed, num2, arg_count;
|
|
|
|
|
int advice, mem_add_plainly, error_seen= 0;
|
|
|
|
|
int advice, mem_add_plainly, error_seen= 0, mem_bsl;
|
|
|
|
|
int was_report_about= 0, was_abort_on= 0, was_return_with= 0;
|
|
|
|
|
int was_signal_handling= 0, was_scsi_log= 0, cmd_data_size= 5 * SfileadrL;
|
|
|
|
|
char *cmd, *original_cmd, *cmd_data= NULL, *arg1, *arg2;
|
|
|
|
|
char *arg1_data= NULL, *arg2_data= NULL;
|
|
|
|
|
char mem_list_delimiter[81];
|
|
|
|
|
|
|
|
|
|
strcpy(mem_list_delimiter, xorriso->list_delimiter);
|
|
|
|
|
mem_add_plainly= xorriso->add_plainly;
|
|
|
|
|
mem_bsl= xorriso->bsl_interpretation;
|
|
|
|
|
|
|
|
|
|
Xorriso_alloc_meM(cmd_data, char, cmd_data_size);
|
|
|
|
|
|
|
|
|
@ -2121,11 +2143,19 @@ int Xorriso_prescan_args(struct XorrisO *xorriso, int argc, char **argv,
|
|
|
|
|
{ret= -1; goto ex;}
|
|
|
|
|
|
|
|
|
|
arg1= "";
|
|
|
|
|
if(i+1<argc)
|
|
|
|
|
arg1= argv[i+1];
|
|
|
|
|
if(i + 1 < argc) {
|
|
|
|
|
arg1= argv[i + 1];
|
|
|
|
|
ret= Xorriso_replace_arg_by_bsl(xorriso, &arg1_data, &arg1, 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
}
|
|
|
|
|
arg2= "";
|
|
|
|
|
if(i+2<argc)
|
|
|
|
|
arg2= argv[i+2];
|
|
|
|
|
if(i + 2 < argc) {
|
|
|
|
|
arg2= argv[i + 2];
|
|
|
|
|
ret= Xorriso_replace_arg_by_bsl(xorriso, &arg2_data, &arg2, 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
}
|
|
|
|
|
if(i>1)
|
|
|
|
|
xorriso->did_something_useful= 1;
|
|
|
|
|
if(i==1 && argc==2) {
|
|
|
|
@ -2255,6 +2285,12 @@ protect_stdout:;
|
|
|
|
|
} else if(strcmp(original_cmd, "-x") == 0) {
|
|
|
|
|
xorriso->arrange_args= 1;
|
|
|
|
|
|
|
|
|
|
} else if(strcmp(cmd, "backslash_codes") == 0) {
|
|
|
|
|
i++;
|
|
|
|
|
ret= Xorriso_option_backslash_codes(xorriso, arg1, 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
error_seen= 1;
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
ret= Xorriso_count_args(xorriso, argc - i, argv + i, &arg_count, 1);
|
|
|
|
|
if(ret == 1) {
|
|
|
|
@ -2272,6 +2308,9 @@ protect_stdout:;
|
|
|
|
|
ex:;
|
|
|
|
|
strcpy(xorriso->list_delimiter, mem_list_delimiter);
|
|
|
|
|
xorriso->add_plainly= mem_add_plainly;
|
|
|
|
|
xorriso->bsl_interpretation= mem_bsl;
|
|
|
|
|
Xorriso_free_meM(arg1_data);
|
|
|
|
|
Xorriso_free_meM(arg2_data);
|
|
|
|
|
Xorriso_free_meM(cmd_data);
|
|
|
|
|
if(error_seen && ret > 0) {
|
|
|
|
|
advice= Xorriso_eval_problem_status(xorriso, 0, 0);
|
|
|
|
@ -2472,11 +2511,74 @@ int Xorriso_make_return_value(struct XorrisO *xorriso, int flag)
|
|
|
|
|
int Xorriso_program_arg_bsl(struct XorrisO *xorriso, int argc, char ***argv,
|
|
|
|
|
int flag)
|
|
|
|
|
{
|
|
|
|
|
int ret;
|
|
|
|
|
int i, ret, eaten, bsl_mem, params_to_come= 0, cmd_data_size= 5 * SfileadrL;
|
|
|
|
|
int next_is_backslash_codes= 0, next_is_list_delimiter= 0;
|
|
|
|
|
char **new_argv= NULL, *cmd, *cmd_data= NULL;
|
|
|
|
|
char mem_list_delimiter[81];
|
|
|
|
|
|
|
|
|
|
if(!(xorriso->bsl_interpretation & 16))
|
|
|
|
|
return(1);
|
|
|
|
|
ret= Sfile_argv_bsl(argc, argv, 0);
|
|
|
|
|
strcpy(mem_list_delimiter, xorriso->list_delimiter);
|
|
|
|
|
bsl_mem= xorriso->bsl_interpretation;
|
|
|
|
|
if(argc <= 0)
|
|
|
|
|
return(0);
|
|
|
|
|
Xorriso_alloc_meM(cmd_data, char, cmd_data_size);
|
|
|
|
|
new_argv= (char **) Smem_malloC(argc * sizeof(char *));
|
|
|
|
|
if(new_argv == NULL)
|
|
|
|
|
return(-1);
|
|
|
|
|
for(i= 0; i < argc; i++) {
|
|
|
|
|
new_argv[i]= strdup((*argv)[i]);
|
|
|
|
|
if(new_argv[i] == NULL)
|
|
|
|
|
{ret= -1; goto ex;}
|
|
|
|
|
if(i == 0)
|
|
|
|
|
continue;
|
|
|
|
|
if(xorriso->bsl_interpretation & 16) {
|
|
|
|
|
ret= Sfile_bsl_interpreter(new_argv[i], strlen(new_argv[i]), &eaten, 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
}
|
|
|
|
|
if(params_to_come == 0) {
|
|
|
|
|
ret= Xorriso_normalize_command(xorriso, new_argv[i], i,
|
|
|
|
|
cmd_data, cmd_data_size, &cmd, 0);
|
|
|
|
|
if(ret < 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
if(strcmp(cmd, "backslash_codes") == 0) {
|
|
|
|
|
params_to_come= 1;
|
|
|
|
|
next_is_backslash_codes= 1;
|
|
|
|
|
} else if(strcmp(cmd, "list_delimiter") == 0) {
|
|
|
|
|
params_to_come= 1;
|
|
|
|
|
next_is_list_delimiter= 1;
|
|
|
|
|
} else {
|
|
|
|
|
ret= Xorriso_count_args(xorriso, argc - i, *argv + i,
|
|
|
|
|
¶ms_to_come, 1);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
if(ret != 1)
|
|
|
|
|
params_to_come= 0;
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
params_to_come--;
|
|
|
|
|
if(next_is_backslash_codes) {
|
|
|
|
|
next_is_backslash_codes= 0;
|
|
|
|
|
ret= Xorriso_option_backslash_codes(xorriso, new_argv[i], 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
} else if(next_is_list_delimiter) {
|
|
|
|
|
next_is_list_delimiter= 0;
|
|
|
|
|
ret= Xorriso_option_list_delimiter(xorriso, new_argv[i], 0);
|
|
|
|
|
if(ret <= 0)
|
|
|
|
|
goto ex;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ret= 1;
|
|
|
|
|
ex:;
|
|
|
|
|
Xorriso_free_meM(cmd_data);
|
|
|
|
|
strcpy(xorriso->list_delimiter, mem_list_delimiter);
|
|
|
|
|
xorriso->bsl_interpretation= bsl_mem;
|
|
|
|
|
if(ret <= 0) {
|
|
|
|
|
if(new_argv != NULL)
|
|
|
|
|
free((char *) new_argv);
|
|
|
|
|
} else
|
|
|
|
|
*argv= new_argv;
|
|
|
|
|
return(ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|