Bug fix: -as mkisofs did not unescape "\=" in the source part of pathspecs
This commit is contained in:
@ -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);
|
||||
|
Reference in New Issue
Block a user