From c54b5bc6a21867f7e9dbd771002ad6fafa886b58 Mon Sep 17 00:00:00 2001 From: Thomas Schmitt Date: Sun, 20 Jun 2010 16:48:28 +0000 Subject: [PATCH] New option -hide --- xorriso/disk_ops.c | 17 +++++-- xorriso/iso_manip.c | 36 ++++++++++---- xorriso/iso_tree.c | 11 ++++- xorriso/opts_d_h.c | 57 ++++++++++++++++++++--- xorriso/parse_exec.c | 6 ++- xorriso/xorriso.1 | 20 ++++++-- xorriso/xorriso.h | 4 ++ xorriso/xorriso.info | 93 +++++++++++++++++++++---------------- xorriso/xorriso.texi | 21 ++++++++- xorriso/xorriso_timestamp.h | 2 +- xorriso/xorrisoburn.h | 3 ++ 11 files changed, 203 insertions(+), 67 deletions(-) diff --git a/xorriso/disk_ops.c b/xorriso/disk_ops.c index 83907138..aa817d2b 100644 --- a/xorriso/disk_ops.c +++ b/xorriso/disk_ops.c @@ -607,10 +607,11 @@ int Xorriso__mode_to_perms(mode_t st_mode, char perms[11], int flag) /* @param flag bit0= recognize Xorriso_IFBOOT as file type bit1= add '+' to perms + bit2-3: hidden_state : 0=off, 1=iso_rr, 2=joliet= 3=on */ int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag) { - int show_major_minor= 0, high_shift= 0, high_mask= 0; + int show_major_minor= 0, high_shift= 0, high_mask= 0, hidden_state; char *rpt, perms[11], mm_text[80]; mode_t st_mode; dev_t dev, major, minor; @@ -621,9 +622,17 @@ int Xorriso_format_ls_l(struct XorrisO *xorriso, struct stat *stbuf, int flag) if(S_ISDIR(st_mode)) strcat(rpt, "d"); - else if(S_ISREG(st_mode)) - strcat(rpt, "-"); - else if(S_ISLNK(st_mode)) + else if(S_ISREG(st_mode)) { + hidden_state= (flag >> 2) & 3; + if(hidden_state == 1) + strcat(rpt, "R"); + else if(hidden_state == 2) + strcat(rpt, "J"); + else if(hidden_state == 3) + strcat(rpt, "H"); + else + strcat(rpt, "-"); + } else if(S_ISLNK(st_mode)) strcat(rpt, "l"); else if(S_ISBLK(st_mode)) { strcat(rpt, "b"); diff --git a/xorriso/iso_manip.c b/xorriso/iso_manip.c index 4bd3c588..eeab8904 100644 --- a/xorriso/iso_manip.c +++ b/xorriso/iso_manip.c @@ -1613,6 +1613,30 @@ int Xorriso_widen_hardlink(struct XorrisO *xorriso, void * boss_iter, } +int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path, + int hide_state, int flag) +{ + int ret, hide_attrs= 0; + IsoNode *node; + + node= (IsoNode *) in_node; + if(node == NULL) { + ret= Xorriso_get_node_by_path(xorriso, path, NULL, &node, 0); + if(ret<=0) + return(ret); + } + if(hide_state) { + hide_attrs|= LIBISO_HIDE_BUT_WRITE; + if(hide_state & 1) + hide_attrs|= LIBISO_HIDE_ON_RR; + if(hide_state & 2) + hide_attrs|= LIBISO_HIDE_ON_JOLIET; + } + iso_node_set_hidden(node, hide_attrs); + return(1); +} + + int Xorriso_cannot_create_iter(struct XorrisO *xorriso, int iso_error,int flag) { Xorriso_process_msg_queues(xorriso,0); @@ -1743,7 +1767,7 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job, char *abs_path, char *show_path, IsoNode *node, int depth, int flag) { - int ret= 0, type, action= 0, hflag, deleted= 0, no_dive= 0, hide_attrs; + int ret= 0, type, action= 0, hflag, deleted= 0, no_dive= 0; uid_t user= 0; gid_t group= 0; time_t date= 0; @@ -1861,15 +1885,7 @@ int Xorriso_findi_action(struct XorrisO *xorriso, struct FindjoB *job, } else if(action == 38) { /* sort_weight */ iso_node_set_sort_weight(node, type); } else if(action == 39) { /* hide */ - hide_attrs= 0; - if(type) { - hide_attrs|= LIBISO_HIDE_BUT_WRITE; - if(type & 1) - hide_attrs|= LIBISO_HIDE_ON_RR; - if(type & 2) - hide_attrs|= LIBISO_HIDE_ON_JOLIET; - } - iso_node_set_hidden(node, hide_attrs); + Xorriso_set_hidden(xorriso, node, NULL, type, 0); } else { /* includes : 15 in_iso */ sprintf(xorriso->result_line, "%s\n", Text_shellsafe(show_path, sfe, 0)); Xorriso_result(xorriso, 0); diff --git a/xorriso/iso_tree.c b/xorriso/iso_tree.c index d5744ce6..744fa9cb 100644 --- a/xorriso/iso_tree.c +++ b/xorriso/iso_tree.c @@ -1321,7 +1321,7 @@ ex:; int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, int filec, char **filev, off_t boss_mem, int flag) { - int i, ret, was_error= 0, dfilec= 0, pass, passes; + int i, ret, was_error= 0, dfilec= 0, pass, passes, hidden_state= 0; IsoNode *node; IsoImage *volume; char sfe[5*SfileadrL], sfe2[5*SfileadrL], path[SfileadrL]; @@ -1404,8 +1404,15 @@ int Xorriso_ls_filev(struct XorrisO *xorriso, char *wd, link_target[0]= 0; if((flag&5)==1) { /* -ls_l */ iso_node_get_acl_text(node, &a_text, &d_text, 16); + hidden_state= 0; + ret= iso_node_get_hidden(node); + if(ret & LIBISO_HIDE_ON_RR) + hidden_state|= 1; + if(ret & LIBISO_HIDE_ON_JOLIET) + hidden_state|= 2; ret= Xorriso_format_ls_l(xorriso, &stbuf, - 1 | ((a_text != NULL || d_text != NULL) << 1)); + 1 | ((a_text != NULL || d_text != NULL) << 1) | + (hidden_state << 2)); iso_node_get_acl_text(node, &a_text, &d_text, 1 << 15); if(ret<=0) continue; diff --git a/xorriso/opts_d_h.c b/xorriso/opts_d_h.c index 7f7603b1..5ec24751 100644 --- a/xorriso/opts_d_h.c +++ b/xorriso/opts_d_h.c @@ -1374,7 +1374,8 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " Allow more or less harmless deviations from strict standards", " compliance.", " -boot_image \"any\"|\"isolinux\"|\"grub\"", -" \"discard\"|\"keep\"|\"patch\"|\"dir=\"|\"bin_path=\"|\"cat_path=\"", +" |\"discard\"|\"keep\"|\"patch\"|\"dir=\"|\"bin_path=\"", +" |\"cat_path=\"|\"cat_hidden=on|iso_rr|joliet|off\"", " |\"load_size=\"|\"system_area=\"|\"partition_table=on|off\"", " Whether to discard or keep an exiting El Torito boot image.", " ISOLINUX can be made bootable by dir=/ or dir=/isolinux", @@ -1504,13 +1505,17 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " access time, modification time, both times.", " -alter_date_r type timestring iso_rr_path [***]", " Like -alter_date but affecting all files below directories.", +" -hide on|iso_rr|joliet|off iso_rr_path [***]", +" Keep names of files out of directory tree, but store their", +" data content in the image.", " -find iso_rr_path [test [op] [test ...]] [-exec action [params]]", " performs an action on files below the given directory in", " the ISO image. Tests:", -" -name pattern, -wholename pattern, -type b|c|d|p|f|l|s|e,", -" -pending_data, -lba_range start count, -damaged,", -" -has_acl, -has_xattr, -has_aaip, -has_filter, -has_md5", -" -has_any_xattr, -prune, -decision yes|no, -true, -false", +" -name pattern, -wholename pattern, -disk_name pattern,", +" -type b|c|d|p|f|l|s|e, -pending_data, -hidden,", +" -lba_range start count, -damaged, -has_acl, -has_xattr,", +" -has_aaip, -has_filter, -has_md5, -has_any_xattr,", +" -prune, -decision yes|no, -true, -false", " Operators: -not, -or, -and, -sub, (, -subend, ),", " -if, -then, -elseif, -else, -endif", " Action may be one of: echo, chown, chown_r, chgrp, chgrp_r", @@ -1518,7 +1523,7 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) " rm, rm_r, compare, update, report_damage, report_lba,", " getfacl, setfacl, getfattr, setfattr, get_any_xattr,", " get_md5, check_md5, make_md5, set_filter, show_stream,", -" mkisofs_r, find.", +" mkisofs_r, hide, find.", " params are their arguments except iso_rr_path.", " -mkdir iso_rr_path [...]", " Create empty directories if they do not exist yet.", @@ -1865,6 +1870,46 @@ int Xorriso_option_help(struct XorrisO *xorriso, int flag) } +/* Option -hide */ +int Xorriso_option_hide(struct XorrisO *xorriso, char *hide_state, + int argc, char **argv, int *idx, int flag) +{ + int i, ret, end_idx, optc= 0, was_failure= 0, fret, hide_mode; + char **optv= NULL; + + ret= Xorriso_opt_args(xorriso, "-hide", argc, argv, *idx, &end_idx, &optc, + &optv, 0); + if(ret<=0) + goto ex; + hide_mode= Xorriso__hide_mode(hide_state, 0); + if(hide_mode < 0) { + sprintf(xorriso->info_text, "-hide : unknown hide state "); + Text_shellsafe(hide_state, xorriso->info_text, 1); + Xorriso_msgs_submit(xorriso, 0, xorriso->info_text, 0, "FAILURE", 0); + goto ex; + } + for(i= 0; i0 && !xorriso->request_to_abort) + continue; /* regular bottom of loop */ + + was_failure= 1; + fret= Xorriso_eval_problem_status(xorriso, ret, 1|2); + if(fret>=0) + continue; + ret= 0; goto ex; + } + ret= 1; +ex:; + (*idx)= end_idx; + Xorriso_opt_args(xorriso, "-hide", argc, argv, *idx, &end_idx, &optc, &optv, + 256); + if(ret<=0) + return(ret); + return(!was_failure); +} + + /* Option -history */ int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag) { diff --git a/xorriso/parse_exec.c b/xorriso/parse_exec.c index a8254c82..cab047dd 100644 --- a/xorriso/parse_exec.c +++ b/xorriso/parse_exec.c @@ -492,7 +492,7 @@ int Xorriso_count_args(struct XorrisO *xorriso, int argc, char **argv, "du","dui","dus","dusi","dux","dusx","external_filter","extract_l", "file_size_limit","find","findi","finds","findx", "getfacl","getfacli","getfacl_r","getfacl_ri", - "getfattr","getfattri","getfattr_r","getfattr_ri", + "getfattr","getfattri","getfattr_r","getfattr_ri","hide", "ls","lsi","lsl","lsli","lsd","lsdi","lsdl","lsdli", "lsx","lslx","lsdx","lsdlx","map_l","mv","mvi","mkdir","mkdiri", "not_paths","rm","rmi","rm_r","rm_ri","rmdir","rmdiri","update_l", @@ -911,6 +911,10 @@ next_command:; } else if(strcmp(cmd,"help")==0) { Xorriso_option_help(xorriso,0); + } else if(strcmp(cmd,"hide")==0) { + (*idx)+= 1; + ret= Xorriso_option_hide(xorriso, arg1, argc, argv, idx, 1); + } else if(strcmp(cmd,"history")==0) { /* add to readline history */ (*idx)++; diff --git a/xorriso/xorriso.1 b/xorriso/xorriso.1 index 66d2e522..e0300db3 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 "Jun 10, 2010" +.TH XORRISO 1 "Jun 20, 2010" .\" Please adjust this date whenever revising the manpage. .\" .\" Some roff macros, for reference: @@ -1422,6 +1422,20 @@ where "A0" is year 2000, "B0" is 2010, etc. \fB\-alter_date_r\fR type timestring iso_rr_path [***] Like -alter_date but affecting all files below eventual directories. .TP +\fB\-hide\fR hide_state iso_rr_path [***] +Prevent the names of the given files from showing up in the directory trees +of ISO 9660 and/or Joliet when the image gets written. +The eventual data content of such hidden files will be included in the +resulting image, even if they do not show up in any directory. +But you will need own means to find nameless data in the image. +.br +Possible values of hide_state are: "iso_rr" for hiding from ISO 9660 tree, +"joliet" for Joliet tree, "on" for both trees. "off" means visibility in +both directory trees. +.br +This command does not apply to the boot catalog. +Rather use: -boot_image "any" "cat_hidden=on" +.TP .B Tree traversal command -find: .PP .TP @@ -1490,8 +1504,8 @@ Matches files which are filtered by -set_filter. .br \fB\-hidden\fR hide_state : Matches files which are hidden in "iso_rr" tree, in "joliet" tree, -in both ("on"), or not hidden in any tree ("off"). Those who are hidden -in some tree match -not -hidden "off". +in both trees ("on"), or not hidden in any tree ("off"). +Those which are hidden in some tree match -not -hidden "off". .br \fB\-prune\fR : If this test is reached and the tested file is a directory then -find will not diff --git a/xorriso/xorriso.h b/xorriso/xorriso.h index 904882f4..fb26fa15 100644 --- a/xorriso/xorriso.h +++ b/xorriso/xorriso.h @@ -827,6 +827,10 @@ int Xorriso_option_hardlinks(struct XorrisO *xorriso, char *mode, int flag); /* Option -help and part of -prog_help */ int Xorriso_option_help(struct XorrisO *xorriso, int flag); +/* Option -hide */ +int Xorriso_option_hide(struct XorrisO *xorriso, char *hide_state, + int argc, char **argv, int *idx, int flag); + /* Option -history */ int Xorriso_option_history(struct XorrisO *xorriso, char *line, int flag); diff --git a/xorriso/xorriso.info b/xorriso/xorriso.info index fa84c98d..d52dfbcf 100644 --- a/xorriso/xorriso.info +++ b/xorriso/xorriso.info @@ -1299,6 +1299,19 @@ whether they stem from the loaded image or were newly inserted. Like -alter_date but affecting all files below eventual directories. +-hide hide_state iso_rr_path [***] + Prevent the names of the given files from showing up in the + directory trees of ISO 9660 and/or Joliet when the image gets + written. The eventual data content of such hidden files will be + included in the resulting image, even if they do not show up in + any directory. But you will need own means to find nameless data + in the image. + Possible values of hide_state are: "iso_rr" for hiding from ISO + 9660 tree, "joliet" for Joliet tree, "on" for both trees. "off" + means visibility in both directory trees. + This command does not apply to the boot catalog. Rather use: + -boot_image "any" "cat_hidden=on" +  File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Options @@ -1358,8 +1371,8 @@ File: xorriso.info, Node: CmdFind, Next: Filter, Prev: Manip, Up: Options Matches files which are filtered by -set_filter. -hidden hide_state : Matches files which are hidden in "iso_rr" tree, in "joliet" - tree, in both ("on"), or not hidden in any tree ("off"). - Those who are hidden in some tree match -not -hidden "off". + tree, in both trees ("on"), or not hidden in any tree ("off"). + Those which are hidden in some tree match -not -hidden "off". -prune : If this test is reached and the tested file is a directory then -find will not dive into that directory. This test @@ -3732,6 +3745,7 @@ File: xorriso.info, Node: CommandIdx, Next: ConceptIdx, Prev: Legal, Up: Top * -grow_blindly overides next writeable address: AqDrive. (line 44) * -hardlinks controls handling of hard links: Loading. (line 91) * -help prints help text: Scripting. (line 16) +* -hide excludes file names from directory trees: Manip. (line 170) * -history brings text into readline history: Scripting. (line 22) * -in_charset sets input character set: Loading. (line 73) * -indev aquires a drive for input: AqDrive. (line 22) @@ -3911,6 +3925,7 @@ File: xorriso.info, Node: ConceptIdx, Prev: CommandIdx, Up: Top * Group, in ISO image, -chgrp_r: Manip. (line 55) * Growing, _definition: Methods. (line 19) * Hard links, control handling, -hardlinks: Loading. (line 91) +* hidden, set in ISO image, -hide: Manip. (line 170) * Image, _definition: Model. (line 9) * Image, demand volume id, -assert_volid: Loading. (line 65) * Image, discard pending changes, -rollback: Writing. (line 9) @@ -4083,42 +4098,42 @@ Node: Loading27397 Node: Insert39576 Node: SetInsert47933 Node: Manip56500 -Node: CmdFind64376 -Node: Filter74319 -Node: Writing78668 -Node: SetWrite84957 -Node: Bootable95241 -Node: Charset103193 -Node: Exception105947 -Node: DialogCtl110462 -Node: Inquiry112807 -Node: Navigate116947 -Node: Verify124301 -Node: Restore132721 -Node: Emulation139377 -Node: Scripting146250 -Node: Frontend151812 -Node: Examples153013 -Node: ExDevices154182 -Node: ExCreate154816 -Node: ExDialog156090 -Node: ExGrowing157352 -Node: ExModifying158154 -Node: ExBootable158655 -Node: ExCharset159202 -Node: ExPseudo160030 -Node: ExCdrecord160924 -Node: ExMkisofs161239 -Node: ExGrowisofs162242 -Node: ExException163366 -Node: ExTime163820 -Node: ExIncBackup164279 -Node: ExRestore167751 -Node: ExRecovery168720 -Node: Files169286 -Node: Seealso170324 -Node: Legal170848 -Node: CommandIdx171770 -Node: ConceptIdx185071 +Node: CmdFind65064 +Node: Filter75015 +Node: Writing79364 +Node: SetWrite85653 +Node: Bootable95937 +Node: Charset103889 +Node: Exception106643 +Node: DialogCtl111158 +Node: Inquiry113503 +Node: Navigate117643 +Node: Verify124997 +Node: Restore133417 +Node: Emulation140073 +Node: Scripting146946 +Node: Frontend152508 +Node: Examples153709 +Node: ExDevices154878 +Node: ExCreate155512 +Node: ExDialog156786 +Node: ExGrowing158048 +Node: ExModifying158850 +Node: ExBootable159351 +Node: ExCharset159898 +Node: ExPseudo160726 +Node: ExCdrecord161620 +Node: ExMkisofs161935 +Node: ExGrowisofs162938 +Node: ExException164062 +Node: ExTime164516 +Node: ExIncBackup164975 +Node: ExRestore168447 +Node: ExRecovery169416 +Node: Files169982 +Node: Seealso171020 +Node: Legal171544 +Node: CommandIdx172466 +Node: ConceptIdx185840  End Tag Table diff --git a/xorriso/xorriso.texi b/xorriso/xorriso.texi index 3531b6e7..44f6ddc3 100644 --- a/xorriso/xorriso.texi +++ b/xorriso/xorriso.texi @@ -44,7 +44,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 "Jun 10, 2010" +@c man .TH XORRISO 1 "Jun 20, 2010" @c man .\" Please adjust this date whenever revising the manpage. @c man .\" @c man .\" Some roff macros, for reference: @@ -1755,6 +1755,22 @@ where "A0" is year 2000, "B0" is 2010, etc. @kindex -alter_date_r sets timestamps in ISO image @cindex Timestamps, set in ISO image, -alter_date_r Like -alter_date but affecting all files below eventual directories. +@c man .TP +@item -hide hide_state iso_rr_path [***] +@kindex -hide excludes file names from directory trees +@cindex hidden, set in ISO image, -hide +Prevent the names of the given files from showing up in the directory trees +of ISO 9660 and/or Joliet when the image gets written. +The eventual data content of such hidden files will be included in the +resulting image, even if they do not show up in any directory. +But you will need own means to find nameless data in the image. +@* +Possible values of hide_state are: "iso_rr" for hiding from ISO 9660 tree, +"joliet" for Joliet tree, "on" for both trees. "off" means visibility in +both directory trees. +@* +This command does not apply to the boot catalog. +Rather use: -boot_image "any" "cat_hidden=on" @end table @c man .TP @c man .B Tree traversal command -find: @@ -3219,6 +3235,9 @@ This resembles shell command ls -d. @cindex Navigate, list ISO files, -lsl Like -ls but also list some of the file attributes. The output format resembles shell command ls -ln. +@* +Particular types of regular files: "R" hidden in ISO/Rock Ridge, "J" hidden in +Joliet, "H" hidden in both trees. @c man .TP @item -lsdl iso_rr_pattern [***] @kindex -lsdl lists files in ISO image diff --git a/xorriso/xorriso_timestamp.h b/xorriso/xorriso_timestamp.h index 4079c027..4b922659 100644 --- a/xorriso/xorriso_timestamp.h +++ b/xorriso/xorriso_timestamp.h @@ -1 +1 @@ -#define Xorriso_timestamP "2010.06.20.141555" +#define Xorriso_timestamP "2010.06.20.164738" diff --git a/xorriso/xorrisoburn.h b/xorriso/xorrisoburn.h index d7b716d5..e799161a 100644 --- a/xorriso/xorrisoburn.h +++ b/xorriso/xorrisoburn.h @@ -531,5 +531,8 @@ int Xorriso_reaquire_outdev(struct XorrisO *xorriso, int flag); int Xorriso_set_system_area_path(struct XorrisO *xorriso, char *path, int flag); +int Xorriso_set_hidden(struct XorrisO *xorriso, void *in_node, char *path, + int hide_state, int flag); + #endif /* Xorrisoburn_includeD */