diff --git a/xorriso/emulators.c b/xorriso/emulators.c index 59b587de..7b3c5f3b 100644 --- a/xorriso/emulators.c +++ b/xorriso/emulators.c @@ -1132,6 +1132,74 @@ ex:; } +/* Implementing mkisofs tendency to map single-path pathspecs to / */ +int Xorriso_graftable_pathspec(struct XorrisO *xorriso, char *in_pathspec, + char *pathspec, int flag) +{ + int ret, l; + char *esc_wdx= NULL, *eff_path= NULL, *ept; + + if((!xorriso->allow_graft_points) || + Fileliste__target_source_limit(in_pathspec, '=', &ept, 0) <= 0) { + + Xorriso_alloc_meM(esc_wdx, char, SfileadrL); + Xorriso_alloc_meM(eff_path, char, SfileadrL); + + strcpy(esc_wdx, xorriso->wdx); + if(!xorriso->allow_graft_points) { + ret= Fileliste__escape_source_path(esc_wdx, SfileadrL, 0); + if(ret <= 0) { + Xorriso_msgs_submit(xorriso, 0, + "Escaped -cdx directory gets much too long", 0, "FAILURE", 0); + ret= 0; goto ex; + } + } + ret= Xorriso_normalize_img_path(xorriso, esc_wdx, in_pathspec, + eff_path, 2|4); + if(ret <= 0) + {ret= 0; goto ex;} + ret= Sfile_type(eff_path, + 1 | ((xorriso->do_follow_param || xorriso->do_follow_links) << 2)); + if(ret == 2) { + strcpy(pathspec, "/="); + } else { + pathspec[0]= '/'; + pathspec[1]= 0; + ret= Sfile_leafname(eff_path, pathspec + 1, 0); + if(ret>0) { + if(!xorriso->allow_graft_points) { + ret= Fileliste__escape_source_path(pathspec, SfileadrL, 0); + if(ret <= 0) { + Xorriso_msgs_submit(xorriso, 0, + "Escaped leaf name gets much too long", 0, "FAILURE", 0); + ret= 0; goto ex; + } + } + strcat(pathspec, "="); + } else + pathspec[0]= 0; + } + l= strlen(pathspec); + strcat(pathspec, eff_path); + if(!xorriso->allow_graft_points) { + ret= Fileliste__escape_source_path(pathspec + l, 2 * SfileadrL - l, 0); + if(ret <= 0) { + Xorriso_msgs_submit(xorriso, 0, + "Escaped path gets much too long", 0, "FAILURE", 0); + ret= 0; goto ex; + } + } + } else { + Sfile_str(pathspec, in_pathspec, 0); + } + ret= 1; +ex:; + Xorriso_free_meM(esc_wdx); + Xorriso_free_meM(eff_path); + return(ret); +} + + int Xorriso_genisofs_path_pecul(struct XorrisO *xorriso, int *was_path, int with_emul_toc, int *allow_dir_id_ext, int *iso_level, int flag) @@ -1673,7 +1741,7 @@ illegal_c:; goto problem_handler_2; } else if(strcmp(argpt, "-graft-points")==0) { - xorriso->allow_graft_points= 1; + xorriso->allow_graft_points= 3; } else if(strcmp(argpt, "-path-list")==0 || strcmp(argpt, "--quoted_path_list")==0) { if(i+1>=argc) { @@ -1686,7 +1754,7 @@ not_enough_args:; i++; xorriso->pacifier_style= 1; ret= Xorriso_option_path_list(xorriso, argv[i], - (strcmp(argpt, "--quoted_path_list")==0)); + (strcmp(argpt, "--quoted_path_list") == 0) | 2); if(ret<=0) goto problem_handler_2; ret = Xorriso_genisofs_path_pecul(xorriso, &was_path, with_emul_toc, @@ -2135,36 +2203,9 @@ rr_reloc_dir:; } } } else { - /* implementing mkisofs tendency to map single-path pathspecs to / */ - if((!xorriso->allow_graft_points) || - Fileliste__target_source_limit(argv[i], '=', &ept, 0)<=0) { - ret= Xorriso_normalize_img_path(xorriso, xorriso->wdx, argv[i], - eff_path, 2|4); - if(ret<=0) - goto problem_handler_2; - ret= Sfile_type(eff_path, - 1|((xorriso->do_follow_param||xorriso->do_follow_links)<<2)); - if(ret==2) { - strcpy(pathspec, "/="); - } else { - pathspec[0]= '/'; - pathspec[1]= 0; - ret= Sfile_leafname(eff_path, pathspec+1, 0); - if(ret>0) { - ret= Fileliste__escape_source_path(pathspec, SfileadrL, 0); - if(ret <= 0) { - Xorriso_msgs_submit(xorriso, 0, - "Escaped leaf name gets much too long", - 0, "FAILURE", 0); - goto problem_handler_2; - } - strcat(pathspec, "="); - } else - pathspec[0]= 0; - } - strcat(pathspec, eff_path); - } else - Sfile_str(pathspec, argv[i], 0); + ret= Xorriso_graftable_pathspec(xorriso, argv[i], pathspec, 0); + if(ret <= 0) + goto problem_handler_2; add_pt= pathspec; if(old_root[0]) { @@ -2205,10 +2246,10 @@ rr_reloc_dir:; ret= Xorriso_option_update(xorriso, disk_pt, iso_rr_pt, 1 | 8 | 32); } else { mem_graft_points= xorriso->allow_graft_points; - xorriso->allow_graft_points= 1; + xorriso->allow_graft_points= 3; zero= 0; ret= Xorriso_option_add(xorriso, 1, &add_pt, &zero, - (was_path << 1) | (root_seen << 2) | 8); + (was_path << 1) | (root_seen << 2)); xorriso->allow_graft_points= mem_graft_points; } if(ret<=0) diff --git a/xorriso/opts_a_c.c b/xorriso/opts_a_c.c index 54cf04b7..1ce1c492 100644 --- a/xorriso/opts_a_c.c +++ b/xorriso/opts_a_c.c @@ -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; iallow_graft_points; Xorriso_pacifier_reset(xorriso, 0); if(adr[0]==0) { sprintf(xorriso->info_text,"Empty file name given with %s", @@ -172,6 +175,8 @@ int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag) ret= Xorriso_afile_fopen(xorriso, adr, "rb", &fp, 0); if(ret <= 0) return(0); + + Xorriso_alloc_meM(pathspec, char, 2 * SfileadrL); while(1) { ret= Xorriso_read_lines(xorriso, fp, &linecount, &argc, &argv, 4 | (flag & 1) ); @@ -183,7 +188,16 @@ int Xorriso_option_path_list(struct XorrisO *xorriso, char *adr, int flag) if(argv[i][0] == 0) continue; null= 0; - ret= Xorriso_option_add(xorriso, 1, argv + i, &null, 1|2); + if(flag & 2) { + ret= Xorriso_graftable_pathspec(xorriso, argv[i], pathspec, 0); + if(ret <= 0) + goto problem_handler; + xorriso->allow_graft_points= 3; + ret= Xorriso_option_add(xorriso, 1, &pathspec, &null, 1 | 2); + xorriso->allow_graft_points= allow_graft_points_mem; + } else { + ret= Xorriso_option_add(xorriso, 1, argv + i, &null, 1 | 2); + } if(ret<=0 || xorriso->request_to_abort) goto problem_handler; insertcount++; @@ -201,6 +215,9 @@ problem_handler:; } ret= 1; ex:; + xorriso->allow_graft_points= allow_graft_points_mem; + Sfile_make_argv("", "", &argc, &argv, 2); + Xorriso_free_meM(pathspec); if(flag & 1) Xorriso_read_lines(xorriso, fp, &linecount, &argc, &argv, 2); @@ -234,6 +251,8 @@ int Xorriso_option_pathspecs(struct XorrisO *xorriso, char *mode, int flag) xorriso->allow_graft_points= 0; else if(strcmp(mode, "on")==0) xorriso->allow_graft_points= 1; + else if(strcmp(mode, "as_mkisofs")==0) + xorriso->allow_graft_points= 3; else { sprintf(xorriso->info_text, "-pathspecs: unknown mode '%s'", mode); Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); diff --git a/xorriso/text_io.c b/xorriso/text_io.c index c0e33a2b..e527503a 100644 --- a/xorriso/text_io.c +++ b/xorriso/text_io.c @@ -3313,7 +3313,9 @@ int Xorriso_status(struct XorrisO *xorriso, char *filter, FILE *fp, int flag) Xorriso_status_zisofs(xorriso, filter, fp, flag & 3); is_default= !xorriso->allow_graft_points; - sprintf(line,"-pathspecs %s\n", xorriso->allow_graft_points ? "on" : "off"); + sprintf(line,"-pathspecs %s\n", + (xorriso->allow_graft_points & 2) ? "as_mkisofs" : + xorriso->allow_graft_points ? "on" : "off"); if(!(is_default && no_defaults)) Xorriso_status_result(xorriso,filter,fp,flag&2); diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index fdec849f..3b7186ac 100644 --- a/xorriso/xorriso.1 +++ b/xorriso/xorriso.1 @@ -9,7 +9,7 @@ .\" First parameter, NAME, should be all caps .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection .\" other parameters are allowed: see man(7), man(1) -.TH XORRISO 1 "Version 1.4.3, Nov 29, 2015" +.TH XORRISO 1 "Version 1.4.3, Dec 08, 2015" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1150,13 +1150,21 @@ Default is "ls". Insert the given files or directory trees from filesystem into the ISO image. .br -If \-pathspecs is set to "on" then pattern expansion is always disabled and -character '=' has a special meaning. It separates the ISO image path -from the disk path: +If \-pathspecs is set to "on" or "as_mkisofs" then pattern expansion is always +disabled and character '=' has a special meaning. It separates the ISO image +path from the disk path: .br iso_rr_path=disk_path .br -The separator '=' can be escaped by '\\'. +Character '=' in the iso_rr_path must be escaped by '\\' (i.e. as "\\="). +.br +With \-pathspecs "on", the character '\\' must not be escaped. The character '=' +in the disk_path must not be escaped. +.br +With \-pathspecs "as_mkisofs", all characters '\\' must be escaped in both, +iso_rr_path and disk_path. The character '=' may or may not be escaped +in the disk_path. +.br If iso_rr_path does not begin with '/' then \-cd is prepended. If disk_path does not begin with '/' then \-cdx is prepended. .br @@ -1462,16 +1470,26 @@ cause exponential workload before their loops get detected. The number given with "limit=" can curb this workload at the risk of truncating an intentional sequence of link hops. .TP -\fB\-pathspecs\fR "on"|"off" +\fB\-pathspecs\fR "on"|"off"|"as_mkisofs" Control parameter interpretation with \fBxorriso\fR actions \-add and \-path_list. .br -"on" enables pathspecs of the form -\fBtarget=source\fR -like with program mkisofs \-graft\-points. -It also disables \-disk_pattern expansion for command \-add. +Mode "as_mkisofs" enables pathspecs of the form .br -"off" disables pathspecs of the form target=source +\fBiso_rr_path=disk_path\fR +.br +like with program mkisofs \-graft\-points. +.br +All characters '\\' must be escaped in both, iso_rr_path and disk_path. +The character '=' must be escaped in the iso_rr_path and +may or may not be escaped in the disk_path. +This mode temporarily disables \-disk_pattern expansion for command \-add. +.br +Mode "on" does nearly the same. But '=' must only be escaped in the iso_rr_path +and '\\' must not be escaped at all. This has the disadvantage that one +cannot express an iso_rr_path which ends by '\\'. +.br +Mode "off" disables pathspecs of the form target=source and re\-enables \-disk_pattern expansion. .TP \fB\-overwrite\fR "on"|"nondir"|"off" diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index cb9769ce..2922ea0f 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -1033,13 +1033,19 @@ filesystem. -add pathspec [...] | disk_path [***] Insert the given files or directory trees from filesystem into the ISO image. - If -pathspecs is set to "on" then pattern expansion is always - disabled and character '=' has a special meaning. It separates the - ISO image path from the disk path: + If -pathspecs is set to "on" or "as_mkisofs" then pattern expansion + is always disabled and character '=' has a special meaning. It + separates the ISO image path from the disk path: iso_rr_path=disk_path - The separator '=' can be escaped by '\'. If iso_rr_path does not - begin with '/' then -cd is prepended. If disk_path does not begin - with '/' then -cdx is prepended. + Character '=' in the iso_rr_path must be escaped by '\' (i.e. as + "\="). + With -pathspecs "on", the character '\' must not be escaped. The + character '=' in the disk_path must not be escaped. + With -pathspecs "as_mkisofs", all characters '\' must be escaped in + both, iso_rr_path and disk_path. The character '=' may or may not + be escaped in the disk_path. + If iso_rr_path does not begin with '/' then -cd is prepended. If + disk_path does not begin with '/' then -cdx is prepended. If no '=' is given then the word is used as both, iso_rr_path and disk path. If in this case the word does not begin with '/' then -cdx is prepended to the disk_path and -cd is prepended to the @@ -1286,14 +1292,22 @@ File: xorriso.info, Node: SetInsert, Next: Manip, Prev: Insert, Up: Commands their loops get detected. The number given with "limit=" can curb this workload at the risk of truncating an intentional sequence of link hops. --pathspecs "on"|"off" +-pathspecs "on"|"off"|"as_mkisofs" Control parameter interpretation with 'xorriso' actions -add and -path_list. - "on" enables pathspecs of the form *target=source* like with - program mkisofs -graft-points. It also disables -disk_pattern - expansion for command -add. - "off" disables pathspecs of the form target=source and re-enables - -disk_pattern expansion. + Mode "as_mkisofs" enables pathspecs of the form + *iso_rr_path=disk_path* + like with program mkisofs -graft-points. + All characters '\' must be escaped in both, iso_rr_path and + disk_path. The character '=' must be escaped in the iso_rr_path + and may or may not be escaped in the disk_path. This mode + temporarily disables -disk_pattern expansion for command -add. + Mode "on" does nearly the same. But '=' must only be escaped in + the iso_rr_path and '\' must not be escaped at all. This has the + disadvantage that one cannot express an iso_rr_path which ends by + '\'. + Mode "off" disables pathspecs of the form target=source and + re-enables -disk_pattern expansion. -overwrite "on"|"nondir"|"off" Allow or disallow overwriting of existing files in the ISO image by files with the same name. @@ -5030,7 +5044,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -abstract_file sets abstract file name: SetWrite. (line 228) * -acl controls handling of ACLs: Loading. (line 171) * -add inserts one or more paths: Insert. (line 44) -* -add_plainly inserts one or more paths: Insert. (line 62) +* -add_plainly inserts one or more paths: Insert. (line 68) * -alter_date sets timestamps in ISO image: Manip. (line 136) * -alter_date_r sets timestamps in ISO image: Manip. (line 168) * -append_partition adds arbitrary file after image end: Bootable. @@ -5060,7 +5074,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -chmod_r sets permissions in ISO image: Manip. (line 66) * -chown sets ownership in ISO image: Manip. (line 43) * -chown_r sets ownership in ISO image: Manip. (line 47) -* -clone copies ISO directory tree: Insert. (line 164) +* -clone copies ISO directory tree: Insert. (line 170) * -close controls media closing: SetWrite. (line 371) * -close_damaged closes damaged track and session: Writing. (line 164) * -close_filter_list bans filter registration: Filter. (line 50) @@ -5073,12 +5087,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -concat copies ISO file content: Restore. (line 118) * -copyright_file sets copyright file name: SetWrite. (line 223) * -cpax copies files to disk: Restore. (line 100) -* -cpr inserts like with cp -r: Insert. (line 143) +* -cpr inserts like with cp -r: Insert. (line 149) * -cpx copies files to disk: Restore. (line 89) -* -cp_clone copies ISO directory tree: Insert. (line 175) +* -cp_clone copies ISO directory tree: Insert. (line 181) * -cp_rx copies file trees to disk: Restore. (line 103) * -cp_rx copies file trees to disk <1>: Restore. (line 111) -* -cut_out inserts piece of data file: Insert. (line 118) +* -cut_out inserts piece of data file: Insert. (line 124) * -data_cache_size adjusts read cache size: Loading. (line 332) * -dev acquires one drive for input and output: AqDrive. (line 12) * -devices gets list of drives: Inquiry. (line 7) @@ -5139,7 +5153,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -list_formats lists available formats: Writing. (line 129) * -list_profiles lists supported media: Writing. (line 177) * -list_speeds lists available write speeds: Writing. (line 140) -* -lns creates ISO symbolic link: Insert. (line 160) +* -lns creates ISO symbolic link: Insert. (line 166) * -load addresses a particular session as input: Loading. (line 33) * -local_charset sets terminal character set: Charset. (line 57) * -logfile logs output channels to file: Frontend. (line 19) @@ -5151,12 +5165,12 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -lsl lists files in ISO image: Navigate. (line 34) * -lslx lists files on disk: Navigate. (line 54) * -lsx lists files on disk: Navigate. (line 45) -* -map inserts path: Insert. (line 83) -* -map_l inserts paths from disk file: Insert. (line 90) -* -map_single inserts path: Insert. (line 87) +* -map inserts path: Insert. (line 89) +* -map_l inserts paths from disk file: Insert. (line 96) +* -map_single inserts path: Insert. (line 93) * -mark sets synchronizing message: Frontend. (line 23) * -md5 controls handling of MD5 sums: Loading. (line 182) -* -mkdir creates ISO directory: Insert. (line 156) +* -mkdir creates ISO directory: Insert. (line 162) * -modesty_on_drive keep drive buffer hungry: SetWrite. (line 320) * -mount issues mount command for ISO session: Restore. (line 146) * -mount_cmd composes mount command line: Inquiry. (line 49) @@ -5174,13 +5188,13 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -osirrox enables ISO-to-disk copying: Restore. (line 18) * -outdev acquires a drive for output: AqDrive. (line 29) * -out_charset sets output character set: SetWrite. (line 263) -* -overwrite enables overwriting in ISO: SetInsert. (line 123) +* -overwrite enables overwriting in ISO: SetInsert. (line 131) * -pacifier controls pacifier text form: Emulation. (line 166) * -padding sets amount or mode of image padding: SetWrite. (line 394) * -page set terminal geometry: DialogCtl. (line 18) * -paste_in copies file into disk file: Restore. (line 114) * -pathspecs sets meaning of = with -add: SetInsert. (line 115) -* -path_list inserts paths from disk file: Insert. (line 75) +* -path_list inserts paths from disk file: Insert. (line 81) * -pkt_output consolidates text output: Frontend. (line 7) * -preparer_id sets preparer id: SetWrite. (line 239) * -print prints result text line: Scripting. (line 102) @@ -5195,7 +5209,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -pwd tells working directory in ISO: Navigate. (line 19) * -pwdx tells working directory on disk: Navigate. (line 21) * -quoted_not_list sets exclusions: SetInsert. (line 66) -* -quoted_path_list inserts paths from disk file: Insert. (line 79) +* -quoted_path_list inserts paths from disk file: Insert. (line 85) * -read_fs filesystem type for image loading: Loading. (line 102) * -read_mkisofsrc searches and reads .mkisofsrc file: Emulation. (line 155) @@ -5234,7 +5248,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top (line 66) * -sleep waits for a given time span: Scripting. (line 113) * -speed set write speed: SetWrite. (line 285) -* -split_size enables large file splitting: SetInsert. (line 135) +* -split_size enables large file splitting: SetInsert. (line 143) * -status shows current settings: Scripting. (line 44) * -status_history_max curbs -status history: Scripting. (line 52) * -stdio_sync controls stdio buffer: SetWrite. (line 356) @@ -5245,9 +5259,9 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -toc shows list of sessions: Inquiry. (line 27) * -toc_of shows list of sessions: Inquiry. (line 41) * -uid sets global ownership: SetWrite. (line 268) -* -update inserts path if different: Insert. (line 94) -* -update_l inserts paths if different: Insert. (line 114) -* -update_r inserts paths if different: Insert. (line 104) +* -update inserts path if different: Insert. (line 100) +* -update_l inserts paths if different: Insert. (line 120) +* -update_r inserts paths if different: Insert. (line 110) * -use_readline enables readline for dialog: DialogCtl. (line 26) * -version prints help text: Scripting. (line 22) * -volid sets volume id: SetWrite. (line 162) @@ -5313,9 +5327,9 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Dialog, EOF resistant, -named_pipe_loop: Frontend. (line 120) * Dialog, line editing, -use_readline: DialogCtl. (line 26) * Dialog, terminal geometry, -page: DialogCtl. (line 18) -* Directories, copy, -cp_clone: Insert. (line 175) -* Directory, copy, -clone: Insert. (line 164) -* Directory, create, -mkdir: Insert. (line 156) +* Directories, copy, -cp_clone: Insert. (line 181) +* Directory, copy, -clone: Insert. (line 170) +* Directory, create, -mkdir: Insert. (line 162) * Directory, delete, -rmdir: Manip. (line 29) * disk_path, _definition: Insert. (line 6) * Drive, accessability, -drive_class: Loading. (line 73) @@ -5389,28 +5403,28 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Image, show MBR, GPT, and alike, -pvd_info: Inquiry. (line 137) * Image, _definition: Model. (line 9) * Input Character Set, _definition: Charset. (line 25) -* Insert, enable overwriting, -overwrite: SetInsert. (line 123) +* Insert, enable overwriting, -overwrite: SetInsert. (line 131) * Insert, file exclusion absolute, -not_paths: SetInsert. (line 53) * Insert, file exclusion from file, -not_list: SetInsert. (line 63) * Insert, file exclusion pattern, -not_leaf: SetInsert. (line 59) * Insert, file exclusion, -not_mgt: SetInsert. (line 22) * Insert, file exclusion, -quoted_not_list: SetInsert. (line 66) -* Insert, if different, -update: Insert. (line 94) -* Insert, if different, -update_l: Insert. (line 114) -* Insert, if different, -update_r: Insert. (line 104) -* Insert, large file splitting, -split_size: SetInsert. (line 135) +* Insert, if different, -update: Insert. (line 100) +* Insert, if different, -update_l: Insert. (line 120) +* Insert, if different, -update_r: Insert. (line 110) +* Insert, large file splitting, -split_size: SetInsert. (line 143) * Insert, limit data file size, -file_size_limit: SetInsert. (line 7) * Insert, links or mount points, -follow: SetInsert. (line 69) * Insert, meaning of = with -add, -pathspecs: SetInsert. (line 115) -* Insert, non-dashed arguments, -add_plainly: Insert. (line 62) -* Insert, path, -map: Insert. (line 83) -* Insert, path, -map_single: Insert. (line 87) -* Insert, paths from disk file, -map_l: Insert. (line 90) -* Insert, paths from disk file, -path_list: Insert. (line 75) -* Insert, paths from disk file, -quoted_path_list: Insert. (line 79) -* Insert, paths, -cpr: Insert. (line 143) +* Insert, non-dashed arguments, -add_plainly: Insert. (line 68) +* Insert, path, -map: Insert. (line 89) +* Insert, path, -map_single: Insert. (line 93) +* Insert, paths from disk file, -map_l: Insert. (line 96) +* Insert, paths from disk file, -path_list: Insert. (line 81) +* Insert, paths from disk file, -quoted_path_list: Insert. (line 85) +* Insert, paths, -cpr: Insert. (line 149) * Insert, pathspecs, -add: Insert. (line 44) -* Insert, piece of data file, -cut_out: Insert. (line 118) +* Insert, piece of data file, -cut_out: Insert. (line 124) * Interval reader for system area and partitions: Bootable. (line 26) * ISO 9660, _definition: Model. (line 6) * iso_rr_path, _definition: Insert. (line 7) @@ -5523,7 +5537,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Sorting order, for -x, -list_arg_sorting: ArgSort. (line 26) * SUN Disk Label, production: Bootable. (line 304) * SUN SPARC boot images, activation: Bootable. (line 377) -* Symbolic link, create, -lns: Insert. (line 160) +* Symbolic link, create, -lns: Insert. (line 166) * System area, _definition: Bootable. (line 184) * Table-of-content, search sessions, -rom_toc_scan: Loading. (line 278) * Table-of-content, show, -toc: Inquiry. (line 27) @@ -5584,46 +5598,46 @@ Node: ArgSort26629 Node: AqDrive28123 Node: Loading31178 Node: Insert51283 -Node: SetInsert61508 -Node: Manip70359 -Node: CmdFind80142 -Node: Filter98445 -Node: Writing103067 -Node: SetWrite113222 -Node: Bootable136167 -Node: Jigdo158695 -Node: Charset162954 -Node: Exception166281 -Node: DialogCtl172410 -Node: Inquiry175012 -Node: Navigate183462 -Node: Verify191757 -Node: Restore201634 -Node: Emulation210247 -Node: Scripting220657 -Node: Frontend228439 -Node: Examples238074 -Node: ExDevices239252 -Node: ExCreate239913 -Node: ExDialog241213 -Node: ExGrowing242484 -Node: ExModifying243293 -Node: ExBootable243803 -Node: ExCharset244358 -Node: ExPseudo245254 -Node: ExCdrecord246181 -Node: ExMkisofs246501 -Node: ExGrowisofs247858 -Node: ExException249012 -Node: ExTime249470 -Node: ExIncBackup249928 -Node: ExRestore253954 -Node: ExRecovery254900 -Node: Files255472 -Node: Seealso256806 -Node: Bugreport257521 -Node: Legal258112 -Node: CommandIdx259124 -Node: ConceptIdx276166 +Node: SetInsert61867 +Node: Manip71186 +Node: CmdFind80969 +Node: Filter99272 +Node: Writing103894 +Node: SetWrite114049 +Node: Bootable136994 +Node: Jigdo159522 +Node: Charset163781 +Node: Exception167108 +Node: DialogCtl173237 +Node: Inquiry175839 +Node: Navigate184289 +Node: Verify192584 +Node: Restore202461 +Node: Emulation211074 +Node: Scripting221484 +Node: Frontend229266 +Node: Examples238901 +Node: ExDevices240079 +Node: ExCreate240740 +Node: ExDialog242040 +Node: ExGrowing243311 +Node: ExModifying244120 +Node: ExBootable244630 +Node: ExCharset245185 +Node: ExPseudo246081 +Node: ExCdrecord247008 +Node: ExMkisofs247328 +Node: ExGrowisofs248685 +Node: ExException249839 +Node: ExTime250297 +Node: ExIncBackup250755 +Node: ExRestore254781 +Node: ExRecovery255727 +Node: Files256299 +Node: Seealso257633 +Node: Bugreport258348 +Node: Legal258939 +Node: CommandIdx259951 +Node: ConceptIdx276993  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 248d24ec..c9e4ea66 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -50,7 +50,7 @@ @c man .\" First parameter, NAME, should be all caps @c man .\" Second parameter, SECTION, should be 1-8, maybe w/ subsection @c man .\" other parameters are allowed: see man(7), man(1) -@c man .TH XORRISO 1 "Version 1.4.3, Nov 29, 2015" +@c man .TH XORRISO 1 "Version 1.4.3, Dec 08, 2015" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -1425,13 +1425,21 @@ Default is "ls". Insert the given files or directory trees from filesystem into the ISO image. @* -If -pathspecs is set to "on" then pattern expansion is always disabled and -character '=' has a special meaning. It separates the ISO image path -from the disk path: +If -pathspecs is set to "on" or "as_mkisofs" then pattern expansion is always +disabled and character '=' has a special meaning. It separates the ISO image +path from the disk path: @* iso_rr_path=disk_path @* -The separator '=' can be escaped by '\'. +Character '=' in the iso_rr_path must be escaped by '\' (i.e. as "\="). +@* +With -pathspecs "on", the character '\' must not be escaped. The character '=' +in the disk_path must not be escaped. +@* +With -pathspecs "as_mkisofs", all characters '\' must be escaped in both, +iso_rr_path and disk_path. The character '=' may or may not be escaped +in the disk_path. +@* If iso_rr_path does not begin with '/' then -cd is prepended. If disk_path does not begin with '/' then -cdx is prepended. @* @@ -1786,19 +1794,29 @@ cause exponential workload before their loops get detected. The number given with "limit=" can curb this workload at the risk of truncating an intentional sequence of link hops. @c man .TP -@item -pathspecs "on"|"off" +@item -pathspecs "on"|"off"|"as_mkisofs" @kindex -pathspecs sets meaning of = with -add @cindex Insert, meaning of = with -add, -pathspecs Control parameter interpretation with @command{xorriso} actions -add and -path_list. @* @cindex Pathspec, _definition -"on" enables pathspecs of the form -@strong{target=source} -like with program mkisofs -graft-points. -It also disables -disk_pattern expansion for command -add. +Mode "as_mkisofs" enables pathspecs of the form @* -"off" disables pathspecs of the form target=source +@strong{iso_rr_path=disk_path} +@* +like with program mkisofs -graft-points. +@* +All characters '\' must be escaped in both, iso_rr_path and disk_path. +The character '=' must be escaped in the iso_rr_path and +may or may not be escaped in the disk_path. +This mode temporarily disables -disk_pattern expansion for command -add. +@* +Mode "on" does nearly the same. But '=' must only be escaped in the iso_rr_path +and '\' must not be escaped at all. This has the disadvantage that one +cannot express an iso_rr_path which ends by '\'. +@* +Mode "off" disables pathspecs of the form target=source and re-enables -disk_pattern expansion. @c man .TP @item -overwrite "on"|"nondir"|"off" diff --git a/xorriso/xorriso_private.h b/xorriso/xorriso_private.h index 015dccc9..5985357d 100644 --- a/xorriso/xorriso_private.h +++ b/xorriso/xorriso_private.h @@ -528,7 +528,12 @@ struct XorrisO { /* the global context of xorriso */ char loaded_boot_cat_path[SfileadrL]; /* XORRISO options */ - int allow_graft_points; + int allow_graft_points; /* if not zero: yes + special options: + bit1= continue unescaping after first real '=' + (as mkisofs does, + but xorriso did not for years) + */ int allow_restore; /* -2=disallowed until special mode "unblock" -1=permanently disallowed diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 8843b5c8..896b7069 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2015.11.29.082702" +#define Xorriso_timestamP "2015.12.09.132636"