Bug fix: -as mkisofs did not properly unescape target part of pathspecs

This commit is contained in:
Thomas Schmitt 2011-03-07 10:15:39 +00:00
parent b6a52328bc
commit 70ed635a56
3 changed files with 23 additions and 6 deletions

View File

@ -908,7 +908,7 @@ int Xorriso_genisofs(struct XorrisO *xorriso, char *whom,
char sfe[5*SfileadrL], adr[SfileadrL+8], ra_text[80], pathspec[2*SfileadrL]; 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; char *ept, *add_pt, eff_path[SfileadrL], indev[SfileadrL+8], msc[80], *cpt;
char old_root[SfileadrL]; char old_root[SfileadrL];
char *boot_path, partno_text[8], *iso_rr_pt, *disk_pt; char *boot_path, partno_text[8], *iso_rr_pt, *disk_pt, *rpt, *wpt;
char *rm_merge_args[3]; char *rm_merge_args[3];
/* >>> This should not be static. Why is it ? */ /* >>> This should not be static. Why is it ? */
@ -1602,9 +1602,22 @@ is_pathspec_2:;
iso_rr_pt= "/"; iso_rr_pt= "/";
disk_pt= add_pt; disk_pt= add_pt;
} }
if(root_seen) {
/* Unescape iso_rr_pt */
strcpy(eff_path, iso_rr_pt); strcpy(eff_path, iso_rr_pt);
iso_rr_pt= eff_path; iso_rr_pt= eff_path;
for(wpt= rpt= iso_rr_pt; *rpt != 0; rpt++) {
if(*rpt == '\\') {
if(*(rpt + 1) == '\\')
rpt++;
else if(*(rpt + 1) == '=')
continue;
}
*(wpt++) = *rpt;
}
*wpt= 0;
if(root_seen) {
ret= Sfile_prepend_path(xorriso->wdi, iso_rr_pt, 0); ret= Sfile_prepend_path(xorriso->wdi, iso_rr_pt, 0);
if(ret<=0) { if(ret<=0) {
Xorriso_msgs_submit(xorriso, 0, "Effective path gets much too long", Xorriso_msgs_submit(xorriso, 0, "Effective path gets much too long",
@ -1619,7 +1632,7 @@ is_pathspec_2:;
xorriso->allow_graft_points= 1; xorriso->allow_graft_points= 1;
zero= 0; zero= 0;
ret= Xorriso_option_add(xorriso, 1, &add_pt, &zero, ret= Xorriso_option_add(xorriso, 1, &add_pt, &zero,
(was_path << 1) | (root_seen << 2)); (was_path << 1) | (root_seen << 2) | 8);
xorriso->allow_graft_points= mem_graft_points; xorriso->allow_graft_points= mem_graft_points;
} }
if(ret<=0) if(ret<=0)

View File

@ -95,6 +95,7 @@ int Xorriso_option_acl(struct XorrisO *xorriso, char *mode, int flag)
/* @param flag bit0=do not report the added item /* @param flag bit0=do not report the added item
bit1=do not reset pacifier, no final pacifier message bit1=do not reset pacifier, no final pacifier message
bit2= prepend ISO working directory in any case bit2= prepend ISO working directory in any case
bit3= unescape \\
*/ */
int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv, int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
int *idx, int flag) int *idx, int flag)
@ -128,9 +129,12 @@ int Xorriso_option_add(struct XorrisO *xorriso, int argc, char **argv,
else else
rpt= wpt= source; rpt= wpt= source;
for(; *rpt!=0; rpt++) { for(; *rpt!=0; rpt++) {
if(*rpt=='\\') if(*rpt=='\\') {
if(*(rpt+1)=='=') if(*(rpt+1)=='=')
continue; continue;
if((flag & 8) && *(rpt + 1) == '\\')
rpt++;
}
*(wpt++)= *rpt; *(wpt++)= *rpt;
} }
*wpt= 0; *wpt= 0;

View File

@ -1 +1 @@
#define Xorriso_timestamP "2011.03.06.153741" #define Xorriso_timestamP "2011.03.07.101547"