Bug fix: -as mkisofs did not unescape "\=" in the source part of pathspecs

This commit is contained in:
2015-12-09 13:28:06 +00:00
parent 4b4bf14b05
commit bafcf288f9
10 changed files with 300 additions and 169 deletions

View File

@ -95,18 +95,37 @@ int Xorriso_option_acl(struct XorrisO *xorriso, char *mode, int flag)
}
/* @param flag bit3= unescape \\
*/
static void unescape_pathspec_part(char *rpt, int flag)
{
char *wpt;
wpt= rpt;
for(; *rpt != 0; rpt++) {
if(*rpt == '\\') {
if(*(rpt + 1) == '=')
continue;
if((flag & 8) && *(rpt + 1) == '\\')
rpt++;
}
*(wpt++)= *rpt;
}
*wpt= 0;
}
/* Option -add */
/* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message
bit2= prepend ISO working directory in any case
bit3= unescape \\
*/
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag)
{
int i, end_idx, ret, was_failure= 0, fret, optc= 0, split;
int i, end_idx, ret, was_failure= 0, fret, optc= 0, split, as_mkisofs= 0;
char *target= NULL, *source= NULL, *ept, *eff_path= NULL;
char **optv= NULL, *rpt, *wpt;
char **optv= NULL;
ret= Xorriso_opt_args(xorriso, "-add", argc, argv, *idx, &end_idx,
&optc, &optv, ((!!xorriso->allow_graft_points)<<2)|2);
@ -117,6 +136,8 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
Xorriso_alloc_meM(source, char, SfileadrL);
Xorriso_alloc_meM(eff_path, char, SfileadrL);
if(xorriso->allow_graft_points & 2)
as_mkisofs= 8;
if(!(flag&2))
Xorriso_pacifier_reset(xorriso, 0);
for(i= 0; i<optc; i++) {
@ -132,20 +153,13 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
split= 1;
}
/* unescape \= */;
if(split)
rpt= wpt= target;
else
rpt= wpt= source;
for(; *rpt!=0; rpt++) {
if(*rpt=='\\') {
if(*(rpt+1)=='=')
continue;
if((flag & 8) && *(rpt + 1) == '\\')
rpt++;
}
*(wpt++)= *rpt;
if(split) {
unescape_pathspec_part(target, as_mkisofs);
if(as_mkisofs)
unescape_pathspec_part(source, as_mkisofs);
} else {
unescape_pathspec_part(source, as_mkisofs);
}
*wpt= 0;
}
if(split==0)
strcpy(target, source);