diff --git a/search-index.js b/search-index.js
index a3c24b923..cce185a41 100644
--- a/search-index.js
+++ b/search-index.js
@@ -98,15 +98,15 @@ var searchIndex = JSON.parse('{\
"uptime":{"doc":"","t":[5],"n":["main"],"q":["uptime"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\
"users":{"doc":"","t":[5],"n":["main"],"q":["users"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\
"uu_arch":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_arch",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
-"uu_base32":{"doc":"","t":[0,5,5,3,5,11,11,12,11,11,5,5,12,11,0,5,12,11,11,11,12,7,7,7,7],"n":["base_common","uu_app","uumain","Config","base_app","borrow","borrow_mut","decode","from","from","get_input","handle_input","ignore_garbage","into","options","parse_base_cmd_args","to_read","try_from","try_into","type_id","wrap_cols","DECODE","FILE","IGNORE_GARBAGE","WRAP"],"q":["uu_base32","","","uu_base32::base_common","","","","","","","","","","","","","","","","","","uu_base32::base_common::options","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,[[["str",15],["str",15]],["app",3]],[[]],[[]],null,[[]],[[["argmatches",3],["str",15]],[["result",4],["config",3],["string",3]]],[[["config",3],["stdin",3]],[["read",8],["box",3]]],[[["bool",15],["str",15],["usize",15],["format",4],["option",4]]],null,[[]],null,[[["str",15]],[["result",4],["config",3],["string",3]]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null],"p":[[3,"Config"]]},\
+"uu_base32":{"doc":"","t":[0,5,5,3,5,11,11,12,11,11,5,5,12,11,0,5,12,11,11,11,12,7,7,7,7],"n":["base_common","uu_app","uumain","Config","base_app","borrow","borrow_mut","decode","from","from","get_input","handle_input","ignore_garbage","into","options","parse_base_cmd_args","to_read","try_from","try_into","type_id","wrap_cols","DECODE","FILE","IGNORE_GARBAGE","WRAP"],"q":["uu_base32","","","uu_base32::base_common","","","","","","","","","","","","","","","","","","uu_base32::base_common::options","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,1,1,1,1,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,[[["str",15],["str",15]],["app",3]],[[]],[[]],null,[[]],[[["argmatches",3],["str",15]],[["result",4],["config",3],["string",3]]],[[["config",3],["stdin",3]],[["read",8],["box",3]]],[[["format",4],["bool",15],["str",15],["usize",15],["option",4]]],null,[[]],null,[[["str",15]],[["result",4],["config",3],["string",3]]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null],"p":[[3,"Config"]]},\
"uu_base64":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_base64",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_basename":{"doc":"","t":[0,5,5,7,7,7,7],"n":["options","uu_app","uumain","MULTIPLE","NAME","SUFFIX","ZERO"],"q":["uu_basename","","","uu_basename::options","","",""],"d":["","","","","","",""],"i":[0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null],"p":[]},\
"uu_basenc":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_basenc",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_cat":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_cat",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_chcon":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,0,0,0,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","RANGE","RECURSIVE","REFERENCE","ROLE","TYPE","USER","VERBOSE","dereference","preserve_root","sym_links","DEREFERENCE","NO_DEREFERENCE","NO_PRESERVE_ROOT","PRESERVE_ROOT","FOLLOW_ARG_DIR_SYM_LINK","FOLLOW_DIR_SYM_LINKS","NO_FOLLOW_SYM_LINKS"],"q":["uu_chcon","","","uu_chcon::options","","","","","","","","","","uu_chcon::options::dereference","","uu_chcon::options::preserve_root","","uu_chcon::options::sym_links","",""],"d":["","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[]},\
-"uu_chgrp":{"doc":"","t":[0,0,5,5,3,8,3,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,5,5,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7],"n":["entries","options","uu_app","uumain","Group","Locate","Passwd","as_inner","as_inner","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","from","from","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","into","into","into_inner","into_inner","locate","locate","locate","locate","locate","name","name","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uid","uid2usr","user_dir","user_info","user_passwd","user_shell","usr2uid","ARG_FILES","ARG_GROUP","RECURSIVE","REFERENCE","dereference","preserve_root","traverse","verbosity","DEREFERENCE","NO_DEREFERENCE","NO_PRESERVE","PRESERVE","EVERY","NO_TRAVERSE","TRAVERSE","CHANGES","QUIET","SILENT","VERBOSE"],"q":["uu_chgrp","","","","uu_chgrp::entries","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_chgrp::options","","","","","","","","uu_chgrp::options::dereference","","uu_chgrp::options::preserve_root","","uu_chgrp::options::traverse","","","uu_chgrp::options::verbosity","","",""],"d":["Get password/group file entry","","","","","Fetch desired entry.","","","","This is a wrapper function for libc::getgrouplist.","","","","","","","","","From: …","The list of group IDs returned from GNU’s groups and GNU…","AKA group.gr_gid","AKA passwd.pw_gid","","","","","","","","","","","","AKA group.gr_name","AKA passwd.pw_name","","","","","","","","AKA passwd.pw_uid","","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,2,2,1,2,1,2,2,2,1,2,0,0,1,2,0,0,1,2,1,2,3,1,1,2,2,1,2,2,1,2,1,2,1,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,null,[[],["app",3]],[[],["i32",15]],null,null,null,[[],["group",3]],[[],["passwd",3]],[[],[["vec",3],["u32",15],["global",3]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[]],[[]],[[]],[[],[["vec",3],["error",3],["result",4]]],[[["u32",15],["option",4]],[["vec",3],["error",3],["result",4]]],[[],["u32",15]],[[],["u32",15]],[[["u32",15]],[["string",3],["error",3],["result",4]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],[[]],[[]],[[],["group",3]],[[],["passwd",3]],[[],[["result",4],["error",3]]],[[["str",15]],[["result",4],["error",3],["group",3]]],[[["u32",15]],[["result",4],["error",3],["group",3]]],[[["u32",15]],[["passwd",3],["result",4],["error",3]]],[[["str",15]],[["passwd",3],["result",4],["error",3]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["u32",15]],[[["u32",15]],[["string",3],["error",3],["result",4]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[[3,"Group"],[3,"Passwd"],[8,"Locate"]]},\
+"uu_chgrp":{"doc":"","t":[0,0,5,5,3,8,3,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,5,5,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,7,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7],"n":["entries","options","uu_app","uumain","Group","Locate","Passwd","as_inner","as_inner","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","from","from","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","into","into","into_inner","into_inner","locate","locate","locate","locate","locate","name","name","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uid","uid2usr","user_dir","user_info","user_passwd","user_shell","usr2uid","ARG_FILES","ARG_GROUP","RECURSIVE","REFERENCE","dereference","preserve_root","traverse","verbosity","DEREFERENCE","NO_DEREFERENCE","NO_PRESERVE","PRESERVE","EVERY","NO_TRAVERSE","TRAVERSE","CHANGES","QUIET","SILENT","VERBOSE"],"q":["uu_chgrp","","","","uu_chgrp::entries","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_chgrp::options","","","","","","","","uu_chgrp::options::dereference","","uu_chgrp::options::preserve_root","","uu_chgrp::options::traverse","","","uu_chgrp::options::verbosity","","",""],"d":["Get password/group file entry","","","","","Fetch desired entry.","","","","This is a wrapper function for libc::getgrouplist.","","","","","","","","","From: …","The list of group IDs returned from GNU’s groups and GNU…","AKA group.gr_gid","AKA passwd.pw_gid","","","","","","","","","","","","AKA group.gr_name","AKA passwd.pw_name","","","","","","","","AKA passwd.pw_uid","","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,0,0,1,2,2,1,2,1,2,2,2,1,2,0,0,1,2,0,0,1,2,1,2,3,1,1,2,2,1,2,2,1,2,1,2,1,2,2,0,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,null,[[],["app",3]],[[],["i32",15]],null,null,null,[[],["group",3]],[[],["passwd",3]],[[],[["global",3],["u32",15],["vec",3]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[]],[[]],[[]],[[],[["vec",3],["error",3],["result",4]]],[[["u32",15],["option",4]],[["vec",3],["error",3],["result",4]]],[[],["u32",15]],[[],["u32",15]],[[["u32",15]],[["string",3],["error",3],["result",4]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],[[]],[[]],[[],["group",3]],[[],["passwd",3]],[[],[["result",4],["error",3]]],[[["str",15]],[["group",3],["result",4],["error",3]]],[[["u32",15]],[["group",3],["result",4],["error",3]]],[[["u32",15]],[["result",4],["passwd",3],["error",3]]],[[["str",15]],[["result",4],["passwd",3],["error",3]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["u32",15]],[[["u32",15]],[["string",3],["error",3],["result",4]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[],[["cow",4],["str",15]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[[3,"Group"],[3,"Passwd"],[8,"Locate"]]},\
"uu_chmod":{"doc":"","t":[5,5,5,5],"n":["is_symlink","strip_minus_from_mode","uu_app","uumain"],"q":["uu_chmod","","",""],"d":["","","",""],"i":[0,0,0,0],"f":[[[["path",3],["asref",8]],["bool",15]],[[["vec",3]],["bool",15]],[[],["app",3]],[[],["i32",15]]],"p":[]},\
-"uu_chown":{"doc":"","t":[3,8,3,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,5,5,3,8,3,5,5,5,5,10,5,5,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7],"n":["Group","Locate","Passwd","as_inner","as_inner","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","entries","from","from","gid","gid","into","into","into_inner","into_inner","locate","locate","locate","locate","locate","name","name","options","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uid","user_dir","user_info","user_passwd","user_shell","uu_app","uumain","Group","Locate","Passwd","get_groups","get_groups_gnu","gid2grp","grp2gid","locate","uid2usr","usr2uid","FROM","RECURSIVE","REFERENCE","dereference","preserve_root","traverse","verbosity","DEREFERENCE","NO_DEREFERENCE","NO_PRESERVE","PRESERVE","EVERY","NO_TRAVERSE","TRAVERSE","CHANGES","QUIET","SILENT","VERBOSE"],"q":["uu_chown","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_chown::entries","","","","","","","","","","uu_chown::options","","","","","","","uu_chown::options::dereference","","uu_chown::options::preserve_root","","uu_chown::options::traverse","","","uu_chown::options::verbosity","","",""],"d":["","Fetch desired entry.","","","","This is a wrapper function for libc::getgrouplist.","","","","","","","Get password/group file entry","","","AKA group.gr_gid","AKA passwd.pw_gid","","","","","","","","","","AKA group.gr_name","AKA passwd.pw_name","","","","","","","","","AKA passwd.pw_uid","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","","Fetch desired entry.","","From: …","The list of group IDs returned from GNU’s groups and GNU…","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,2,2,1,2,1,2,2,2,0,1,2,1,2,1,2,1,2,3,1,1,2,2,1,2,0,2,1,2,1,2,1,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,null,null,[[],["group",3]],[[],["passwd",3]],[[],[["vec",3],["u32",15],["global",3]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[]],null,[[]],[[]],[[],["u32",15]],[[],["u32",15]],[[]],[[]],[[],["group",3]],[[],["passwd",3]],[[],[["result",4],["error",3]]],[[["str",15]],[["group",3],["result",4],["error",3]]],[[["u32",15]],[["group",3],["result",4],["error",3]]],[[["u32",15]],[["result",4],["error",3],["passwd",3]]],[[["str",15]],[["result",4],["error",3],["passwd",3]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["u32",15]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],["app",3]],[[],["i32",15]],null,null,null,[[],[["vec",3],["result",4],["error",3]]],[[["u32",15],["option",4]],[["vec",3],["result",4],["error",3]]],[[["u32",15]],[["error",3],["result",4],["string",3]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],[[],[["result",4],["error",3]]],[[["u32",15]],[["error",3],["result",4],["string",3]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[[3,"Group"],[3,"Passwd"],[8,"Locate"]]},\
+"uu_chown":{"doc":"","t":[3,8,3,11,11,11,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,10,11,11,11,11,11,11,0,11,11,11,11,11,11,11,11,11,11,11,11,5,5,3,8,3,5,5,5,5,10,5,5,7,7,7,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7],"n":["Group","Locate","Passwd","as_inner","as_inner","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","entries","from","from","gid","gid","into","into","into_inner","into_inner","locate","locate","locate","locate","locate","name","name","options","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uid","user_dir","user_info","user_passwd","user_shell","uu_app","uumain","Group","Locate","Passwd","get_groups","get_groups_gnu","gid2grp","grp2gid","locate","uid2usr","usr2uid","FROM","RECURSIVE","REFERENCE","dereference","preserve_root","traverse","verbosity","DEREFERENCE","NO_DEREFERENCE","NO_PRESERVE","PRESERVE","EVERY","NO_TRAVERSE","TRAVERSE","CHANGES","QUIET","SILENT","VERBOSE"],"q":["uu_chown","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_chown::entries","","","","","","","","","","uu_chown::options","","","","","","","uu_chown::options::dereference","","uu_chown::options::preserve_root","","uu_chown::options::traverse","","","uu_chown::options::verbosity","","",""],"d":["","Fetch desired entry.","","","","This is a wrapper function for libc::getgrouplist.","","","","","","","Get password/group file entry","","","AKA group.gr_gid","AKA passwd.pw_gid","","","","","","","","","","AKA group.gr_name","AKA passwd.pw_name","","","","","","","","","AKA passwd.pw_uid","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","","Fetch desired entry.","","From: …","The list of group IDs returned from GNU’s groups and GNU…","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,1,2,2,1,2,1,2,2,2,0,1,2,1,2,1,2,1,2,3,1,1,2,2,1,2,0,2,1,2,1,2,1,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,null,null,[[],["group",3]],[[],["passwd",3]],[[],[["u32",15],["vec",3],["global",3]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[]],null,[[]],[[]],[[],["u32",15]],[[],["u32",15]],[[]],[[]],[[],["group",3]],[[],["passwd",3]],[[],[["result",4],["error",3]]],[[["str",15]],[["group",3],["result",4],["error",3]]],[[["u32",15]],[["group",3],["result",4],["error",3]]],[[["u32",15]],[["result",4],["passwd",3],["error",3]]],[[["str",15]],[["result",4],["passwd",3],["error",3]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],null,[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["u32",15]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],["app",3]],[[],["i32",15]],null,null,null,[[],[["error",3],["vec",3],["result",4]]],[[["u32",15],["option",4]],[["error",3],["vec",3],["result",4]]],[[["u32",15]],[["error",3],["result",4],["string",3]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],[[],[["result",4],["error",3]]],[[["u32",15]],[["error",3],["result",4],["string",3]]],[[["str",15]],[["result",4],["u32",15],["error",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[[3,"Group"],[3,"Passwd"],[8,"Locate"]]},\
"uu_chroot":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_chroot",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_cksum":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_cksum",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_comm":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_comm",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
@@ -197,7 +197,7 @@ var searchIndex = JSON.parse('{\
"uu_who":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_who",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_whoami":{"doc":"","t":[5,5,5],"n":["exec","uu_app","uumain"],"q":["uu_whoami","",""],"d":["","",""],"i":[0,0,0],"f":[[[]],[[],["app",3]],[[],["i32",15]]],"p":[]},\
"uu_yes":{"doc":"","t":[5,5,5],"n":["exec","uu_app","uumain"],"q":["uu_yes","",""],"d":["","",""],"i":[0,0,0],"f":[[[],["result",6]],[[],["app",3]],[[],["i32",15]]],"p":[]},\
-"uucore":{"doc":"","t":[8,13,4,13,13,4,13,13,11,14,5,5,0,11,11,11,11,11,11,0,14,14,0,0,0,5,14,11,11,11,11,0,0,5,14,11,11,0,14,14,14,14,14,14,0,0,0,0,0,0,0,0,14,14,5,14,14,14,14,14,14,0,14,14,11,11,11,11,11,11,14,5,0,0,13,7,7,4,13,4,13,13,13,13,13,0,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,7,7,7,5,5,5,3,3,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,12,13,13,13,13,13,13,13,3,13,4,6,13,4,4,13,13,13,11,11,11,11,11,11,11,11,11,11,5,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,3,8,3,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,5,5,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,12,3,8,8,3,6,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,10,12,12,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,4,13,13,13,4,11,11,11,11,5,11,11,11,11,5,5,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,8,8,3,3,3,5,10,11,12,12,12,10,10,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,10,11,10,11,11,11,11,10,11,12,10,11,11,11,11,11,10,11,12,12,12,10,11,11,11,10,5,5,5,5,12,5,3,5,11,11,11,10,11,10,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,13,4,13,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,13,13,3,17,17,17,13,4,13,13,13,13,13,3,4,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,0,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,3,8,3,5,5,5,5,10,5,5,8,13,4,13,11,11,11,11,11,11,11,11,11,5,5,5,5,11,11,10,11,11,11,11,11,11,11,10,3,11,11,11,5,5,11,11,11,11,11,12,11,12,11,11,11,11,11,3,11,11,12,11,11,11,11,11,11,11,11,7,7,5,5,5,17,17,17,7,17,17,17,17,17,17,17,17,17,17,17,3,3,11,11,11,11,11,5,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,5,5],"n":["Args","Complete","ConversionResult","ConvertLossy","Ignore","InvalidEncodingHandling","Lossy","Panic","accept_any","app","args","args_os","backup_control","borrow","borrow","borrow_mut","borrow_mut","collect_str","collect_str_lossy","coreopts","crash","crash_if_err","encoding","entries","error","execution_phrase","exit","expect_complete","expect_lossy","from","from","fs","fsext","get_utility_is_second_arg","has","into","into","mode","msg_expects_no_more_than_one_of","msg_expects_one_of","msg_invalid_input","msg_invalid_opt_use","msg_opt_invalid_should_be","msg_opt_only_usable_if","os","panic","parse_size","parse_time","perms","process","ranges","ringbuffer","safe_write","safe_writeln","set_utility_is_second_arg","show","show_error","show_error_custom_description","show_if_err","show_usage_error","show_warning","signals","snippet_list_join","snippet_list_join_oxford_comma","try_from","try_from","try_into","try_into","type_id","type_id","uio_error","util_name","utmpx","version_cmp","AmbiguousArgument","BACKUP_CONTROL_LONG_HELP","BACKUP_CONTROL_VALUES","BackupError","BackupImpossible","BackupMode","ExistingBackup","InvalidArgument","NoBackup","NumberedBackup","SimpleBackup","arguments","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","code","determine_backup_mode","determine_backup_suffix","eq","eq","fmt","fmt","fmt","from","from","get_backup_path","into","into","ne","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","usage","OPT_BACKUP","OPT_BACKUP_NO_ARG","OPT_SUFFIX","backup","backup_no_args","suffix","CoreOptions","HelpText","borrow","borrow","borrow_mut","borrow_mut","display_usage","from","from","into","into","long_help","name","new","optflag","optflagmulti","optflagopt","optmulti","optopt","parse","summary","syntax","try_from","try_from","try_into","try_into","type_id","type_id","usage","version","Base16","Base2Lsbf","Base2Msbf","Base32","Base32Hex","Base64","Base64Url","Data","Decode","DecodeError","DecodeResult","DecodeZ85","EncodeError","Format","Io","Z85","Z85InputLenNotMultipleOf4","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","decode","decode","encode","encode","fmt","fmt","from","from","from","from","from","from","from","ignore_garbage","into","into","into","into","line_wrap","new","source","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","wrap_print","wrap_write","Group","Locate","Passwd","as_inner","as_inner","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","from","from","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","into","into","into_inner","into_inner","locate","locate","locate","locate","locate","name","name","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uid","uid2usr","user_dir","user_info","user_passwd","user_shell","usr2uid","0","ExitCode","FromIo","UError","UIoError","UResult","USimpleError","UUsageError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","code","code","code","code","code","code","code","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","get_exit_code","into","into","into","into","map_err_context","message","message","new","new","new","new","set_exit_code","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","usage","usage","usage","Existing","Logical","Missing","MissingHandling","None","Normal","Physical","ResolveMode","borrow","borrow","borrow_mut","borrow_mut","canonicalize","clone","clone","clone_into","clone_into","display_permissions","display_permissions_unix","eq","eq","fmt","fmt","from","from","into","into","normalize_path","resolve_relative_path","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","BirthTime","FsMeta","FsUsage","MountInfo","StatFs","StatFs","avail_blocks","avail_blocks","bavail","bavail_top_bit_set","bfree","birth","block_size","block_size","blocks","blocksize","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","dev_id","dev_name","dummy","eq","f_bavail","f_bavail","f_bfree","f_bfree","f_blocks","f_blocks","f_bsize","f_bsize","f_ffree","f_ffree","f_files","f_files","f_frsize","f_frsize","f_fsid","f_fsid","f_namelen","f_namelen","f_type","f_type","ffree","files","fmt","fmt","fmt","free_blocks","free_blocks","free_file_nodes","free_file_nodes","from","from","from","fs_type","fs_type","fs_type","fsid","fsid","hash","into","into","into","io_size","io_size","mount_dir","mount_option","mount_root","namelen","namelen","ne","new","pretty_birth","pretty_filetype","pretty_fstype","pretty_time","read_fs_list","remote","statfs","statfs_fn","statfs_fn","to_owned","to_owned","to_owned","total_blocks","total_blocks","total_file_nodes","total_file_nodes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","parse_mode","parse_numeric","parse_symbolic","is_wsl_1","is_wsl_2","mute_sigpipe_panic","ParseFailure","ParseSizeError","SizeTooBig","borrow","borrow_mut","description","eq","fmt","fmt","from","into","ne","parse_size","to_string","try_from","try_into","type_id","from_str","All","Changes","ChownExecutor","FTS_COMFOLLOW","FTS_LOGICAL","FTS_PHYSICAL","Group","IfFrom","Normal","Silent","User","UserGroup","Verbose","Verbosity","VerbosityLevel","bit_flag","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","dereference","dest_gid","dest_uid","entries","eq","eq","exec","files","filter","fmt","fmt","from","from","from","from","groups_only","into","into","into","into","level","ne","preserve_root","recursive","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","verbosity","wrap_chown","Group","Locate","Passwd","get_groups","get_groups_gnu","gid2grp","grp2gid","locate","uid2usr","usr2uid","ChildExt","Code","ExitStatus","Signal","borrow","borrow_mut","clone","clone_into","code","eq","fmt","fmt","from","getegid","geteuid","getgid","getuid","into","ne","send_signal","signal","success","to_owned","to_string","try_from","try_into","type_id","wait_or_timeout","Range","borrow","borrow_mut","cmp","complement","contain","eq","fmt","from","from_list","from_str","high","into","low","ne","partial_cmp","try_from","try_into","type_id","RingBuffer","borrow","borrow_mut","data","from","from_iter","into","new","push_back","try_from","try_into","type_id","ALL_SIGNALS","DEFAULT_SIGNAL","is_signal","signal_by_name_or_value","signal_name_by_value","ACCOUNTING","BOOT_TIME","DEAD_PROCESS","DEFAULT_FILE","EMPTY","INIT_PROCESS","LOGIN_PROCESS","NEW_TIME","OLD_TIME","RUN_LVL","USER_PROCESS","UT_HOSTSIZE","UT_IDSIZE","UT_LINESIZE","UT_NAMESIZE","Utmpx","UtmpxIter","borrow","borrow","borrow_mut","borrow_mut","canon_host","endutxent","exit_status","from","from","getutxent","host","into","into","into_inner","into_iter","is_user_process","iter_all_records","login_time","next","pid","read_from","record_type","setutxent","terminal_suffix","try_from","try_from","try_into","try_into","tty_device","type_id","type_id","user","utmpxname","version_cmp"],"q":["uucore","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::backup_control","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::backup_control::arguments","","","","","","uucore::coreopts","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::encoding","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::entries","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::fs","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::fsext","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::mode","","","uucore::os","","uucore::panic","uucore::parse_size","","","","","","","","","","","","","","","","","uucore::parse_time","uucore::perms","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::perms::entries","","","","","","","","","","uucore::process","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::ranges","","","","","","","","","","","","","","","","","","","uucore::ringbuffer","","","","","","","","","","","","uucore::signals","","","","","uucore::utmpx","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::version_cmp"],"d":["","","","","","","","","","","","","Implement GNU-style backup functionality.","","","","","Converts each iterator item to a String and collects …","convenience function for a more slim interface","","Display the provided error message, then exit() with the …","Unwraps the Result. Instead of panicking, it exists the …","","Get password/group file entry","All utils return exit with an exit code. Usually, the …","Derive the complete execution phrase for “usage”.","Calls exit() with the provided exit code.","","","","","Set of functions to manage files and symlinks","Set of functions to manage file systems","","","","","Set of functions to parse modes","","","","","","","","","","","Common functions to manage permissions","Set of functions to manage IDs","","A fixed-size ring buffer.","","","","","Show an error to stderr in a similar style to GNU …","Show a warning to stderr in a similar style to GNU …","","Show a bad invocation help message in a similar style to …","","","","","","","","","","","Shorthand to construct [UIoError]-instances.","Derive the utility name.","Aims to provide platform-independent methods to obtain …","","An ambiguous argument (e.g. ‘n’) was given as backup …","","","Backup error types.","Currently unused","Available backup modes.","Argument ‘existing’, ‘nil’","An invalid argument (e.g. ‘foo’) was given as backup …","Argument ‘none’, ‘off’","Argument ‘numbered’, ‘t’","Argument ‘simple’, ‘never’","Arguments for backup-related functionality.","","","","","","","","Determine the “mode” for the backup operation to …","Obtain the suffix to use for a backup.","","","","","","","","","","","","","","","","","","","","","","","","‘–backup’ argument","‘-b’ argument","‘-S, –suffix’ argument","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Fetch desired entry.","","","","This is a wrapper function for libc::getgrouplist.","","","","","","","","","From: …","The list of group IDs returned from GNU’s groups and GNU…","AKA group.gr_gid","AKA passwd.pw_gid","","","","","","","","","","","","AKA group.gr_name","AKA passwd.pw_name","","","","","","","","AKA passwd.pw_uid","","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","A special error type that does not print any message when …","Enables the conversion from [std::io::Error] to [UError] …","Custom errors defined by the utils and uucore.","Wrapper type around [std::io::Error].","Result type that should be returned by all utils.","A simple error type with an exit code and a message that …","","","","","","","","","","Error code of a custom error.","Error code of a custom error.","","","","","","","","","","","","","","","","","","Get the last exit code set with [set_exit_code]. The …","","","","","","","","","","","","Set the exit code for the program if uumain returns Ok(())…","","","","","","","","","","","","","","","","","Print usage help to a custom error.","Print usage help to a custom error.","","Resolve symbolic links, ignoring errors on the final …","Resolve ‘..’ elements before symlinks","Resolve symbolic links, ignoring errors on the non-final …","Controls how symbolic links should be handled when …","Do not resolve any symbolic links.","Return an error if any part of the path is missing.","Resolve symlinks as encountered when processing the path","Controls when symbolic links are resolved","","","","","Return the canonical, absolute form of a path.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Read file system list.","","","","","","","","","","","","","","","","","","","","","","","","Test if the program is running under WSL","","","","","","","","","","","","","","","Parse a size string into a number of bytes.","","","","","","","","","","","","","","","","","","","","The various level of verbosity","","","","","","","","","","","","","","","","","Get password/group file entry","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Perform the change of owner on a path with the various …","","Fetch desired entry.","","From: …","The list of group IDs returned from GNU’s groups and GNU…","","","","","","Missing methods for Child objects","","","","","","","","","","","","","getegid() returns the effective group ID of the calling …","geteuid() returns the effective user ID of the calling …","getgid() returns the real group ID of the calling process.","getuid() returns the real user ID of the calling process.","","","Send a signal to a Child process.","","","","","","","","Wait for a process to finish or return after the …","","","","","","Test if at least one of the given Ranges contain the …","","","","","","","","","","","","","","A fixed-size ring buffer backed by a VecDeque.","","","","","","","","Append a value to the end of the ring buffer.","","","","","","","","","","","","","","","","","","","","","","","","","Iterator of login records","","","","","Canonicalize host name using DNS","","A.K.A. ut.ut_exit","","","","A.K.A. ut.ut_host","","","Consumes the Utmpx, returning the underlying C struct …","","","","A.K.A. ut.ut_tv","","A.K.A. ut.ut_pid","Sets the name of the utmpx-format file for the other …","A.K.A. ut.ut_type","","A.K.A. ut.ut_id","","","","","A.K.A. ut.ut_line","","","A.K.A. ut.ut_user","",""],"i":[0,1,0,2,2,0,1,2,1,0,0,0,0,2,1,2,1,3,3,0,0,0,0,0,0,0,0,1,1,2,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,2,1,2,1,0,0,0,0,4,0,0,0,4,0,5,4,5,5,5,0,5,4,5,4,5,5,4,0,0,5,4,5,4,4,5,4,0,5,4,4,5,4,5,4,5,4,5,4,4,0,0,0,0,0,0,0,0,6,7,6,7,6,6,7,6,7,6,6,7,7,7,7,7,7,7,6,6,6,7,6,7,6,7,7,6,8,8,8,8,8,8,8,0,9,0,0,9,0,0,9,8,10,10,11,9,8,10,11,9,8,8,8,0,11,0,11,9,9,10,11,9,9,9,9,8,11,10,11,9,8,11,11,9,8,9,10,11,9,8,10,11,9,8,10,11,9,8,0,0,0,0,0,12,13,13,12,13,12,13,13,13,12,13,0,0,12,13,0,0,12,13,12,13,14,12,12,13,13,12,13,13,12,13,12,13,12,13,13,0,13,13,13,13,0,15,0,0,0,0,0,0,0,16,17,18,15,16,17,18,15,19,19,16,17,15,16,17,16,16,17,17,18,18,15,15,16,17,18,15,0,16,17,18,15,20,16,17,16,17,18,15,0,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,15,19,19,17,21,22,21,0,22,21,22,0,21,22,21,22,0,21,22,21,22,0,0,21,22,21,22,21,22,21,22,0,0,21,22,21,22,21,22,21,22,0,0,0,0,0,0,23,24,25,25,25,26,23,24,25,25,27,25,24,27,25,24,27,25,24,27,25,24,27,27,27,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,27,25,24,23,24,23,24,27,25,24,23,24,27,23,24,24,27,25,24,23,24,27,27,27,23,24,24,25,26,0,0,0,0,27,0,0,0,27,25,24,23,24,23,24,27,25,24,27,25,24,27,25,24,0,0,0,0,0,0,28,0,28,28,28,28,28,28,28,28,28,28,0,28,28,28,28,0,29,30,0,0,0,0,29,0,30,30,29,29,30,0,0,31,29,31,30,32,29,31,30,32,30,32,30,32,31,31,31,0,30,32,31,31,31,30,32,29,31,30,32,32,29,31,30,32,32,32,31,31,30,32,29,31,30,32,29,31,30,32,29,31,30,32,31,0,0,0,0,0,0,0,0,14,0,0,0,33,0,33,33,33,33,33,33,33,33,33,33,0,0,0,0,33,33,34,33,33,33,33,33,33,33,34,0,35,35,35,0,0,35,35,35,35,35,35,35,35,35,35,35,35,35,0,36,36,36,36,36,36,36,36,36,36,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,38,37,38,37,0,37,37,38,0,37,37,38,37,38,37,37,37,38,37,38,37,0,37,37,38,37,38,37,37,38,37,0,0],"f":[null,null,null,null,null,null,null,null,[[],[["string",3],["vec",3]]],null,[[]],[[]],null,[[]],[[]],[[]],[[]],[[["invalidencodinghandling",4]],["conversionresult",4]],[[],["conversionresult",4]],null,null,null,null,null,null,[[],["string",3]],null,[[["str",15]],[["string",3],["vec",3]]],[[["str",15]],[["string",3],["vec",3]]],[[]],[[]],null,null,[[],["bool",15]],null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],null,null,null,null,null,null,null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[],["string",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["backupmode",4]],[[]],[[],["i32",15]],[[["argmatches",3]],[["backupmode",4],["uresult",6]]],[[["argmatches",3]],["string",3]],[[["backupmode",4]],["bool",15]],[[["backuperror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["backupmode",4],["path",3],["str",15]],[["pathbuf",3],["option",4]]],[[]],[[]],[[["backuperror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],null,null,null,[[],["arg",3]],[[],["arg",3]],[[],["arg",3]],null,null,[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],null,null,[[["helptext",3]]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["vec",3],["string",3]],["matches",3]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15]],["string",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["format",4]],[[]],[[["format",4]],["decoderesult",6]],[[],["decoderesult",6]],[[["format",4]],[["result",4],["encodeerror",4],["string",3]]],[[],[["result",4],["encodeerror",4],["string",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["decodeerror",3]]],[[]],[[["error",3]]],[[["decodeerror",4]]],[[]],[[["bool",15]]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[["format",4]]],[[],[["error",8],["option",4]]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["data",3],["string",3]]],[[["write",8],["usize",15],["string",3]],["result",6]],null,null,null,[[],["group",3]],[[],["passwd",3]],[[],[["gid_t",6],["vec",3]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[]],[[]],[[]],[[],[["ioresult",6],["vec",3]]],[[["u32",15],["option",4]],[["ioresult",6],["vec",3]]],[[],["gid_t",6]],[[],["gid_t",6]],[[["gid_t",6]],[["ioresult",6],["string",3]]],[[["str",15]],[["gid_t",6],["ioresult",6]]],[[]],[[]],[[],["group",3]],[[],["passwd",3]],[[],["ioresult",6]],[[["gid_t",6]],["ioresult",6]],[[["str",15]],["ioresult",6]],[[["str",15]],["ioresult",6]],[[["uid_t",6]],["ioresult",6]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["uid_t",6]],[[["uid_t",6]],[["ioresult",6],["string",3]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[["str",15]],[["ioresult",6],["uid_t",6]]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["i32",15]],[[],["i32",15]],[[],["i32",15]],[[],["i32",15]],[[],["i32",15]],null,null,[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[]],[[]],[[]],[[]],[[],["i32",15]],[[]],[[]],[[]],[[]],[[]],null,null,[[["into",8],["i32",15],["string",3]],[["box",3],["uerror",8]]],[[["into",8],["i32",15],["string",3]],[["box",3],["uerror",8]]],[[["into",8],["string",3],["errorkind",4]],[["box",3],["uerror",8]]],[[["i32",15]],[["box",3],["uerror",8]]],[[["i32",15]]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["path",3],["missinghandling",4],["asref",8],["resolvemode",4]],[["ioresult",6],["pathbuf",3]]],[[],["missinghandling",4]],[[],["resolvemode",4]],[[]],[[]],[[["bool",15],["metadata",3]],["string",3]],[[["bool",15],["mode_t",6]],["string",3]],[[["missinghandling",4]],["bool",15]],[[["resolvemode",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["path",3]],["pathbuf",3]],[[["path",3]],[["cow",4],["path",3]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[],["i32",15]],[[],["u64",15]],[[],["u64",15]],null,null,null,[[],["string",3]],[[],["i64",15]],[[],["i64",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["mountinfo",3]],[[],["fsusage",3]],[[],["statfs",3]],[[]],[[]],[[]],null,null,null,[[["statfs",3]],["bool",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[],["i64",15]],[[],["i64",15]],null,[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],null,null,null,[[],["u64",15]],[[],["u64",15]],[[["statfs",3]],["bool",15]],[[["statfs",3]],["fsusage",3]],[[],["string",3]],[[["u64",15],["mode_t",6]],["str",15]],[[["i64",15]],[["str",15],["cow",4]]],[[["i64",15]],["string",3]],[[],[["vec",3],["mountinfo",3]]],null,[[["path",3],["asref",8]],[["string",3],["statfs",3],["result",4]]],null,[[],["i32",15]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15]],[["string",3],["result",4],["mode_t",6]]],[[["u32",15],["str",15]],[["u32",15],["result",4],["string",3]]],[[["u32",15],["str",15],["bool",15]],[["u32",15],["result",4],["string",3]]],[[],["bool",15]],[[],["bool",15]],[[]],null,null,null,[[]],[[]],[[],["str",15]],[[["parsesizeerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["result",4],["error",3]]],[[]],[[]],[[["parsesizeerror",4]],["bool",15]],[[["str",15]],[["result",4],["usize",15],["parsesizeerror",4]]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["str",15]],[["duration",3],["result",4],["string",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["verbositylevel",4]],[[],["verbosity",3]],[[]],[[]],null,null,null,null,[[["verbositylevel",4]],["bool",15]],[[["verbosity",3]],["bool",15]],[[],["uresult",6]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],null,[[["verbosity",3]],["bool",15]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[["metadata",3],["path",3],["asref",8],["bool",15],["u32",15],["option",4],["verbosity",3]],[["result",4],["string",3]]],null,null,null,[[],[["ioresult",6],["vec",3]]],[[["u32",15],["option",4]],[["ioresult",6],["vec",3]]],[[["gid_t",6]],[["ioresult",6],["string",3]]],[[["str",15]],[["gid_t",6],["ioresult",6]]],[[],["ioresult",6]],[[["uid_t",6]],[["ioresult",6],["string",3]]],[[["str",15]],[["ioresult",6],["uid_t",6]]],null,null,null,null,[[]],[[]],[[],["exitstatus",4]],[[]],[[],[["option",4],["i32",15]]],[[["exitstatus",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[],["gid_t",6]],[[],["uid_t",6]],[[],["gid_t",6]],[[],["uid_t",6]],[[]],[[["exitstatus",4]],["bool",15]],[[["usize",15]],["result",6]],[[],[["option",4],["i32",15]]],[[],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["duration",3]],[["option",4],["result",6]]],null,[[]],[[]],[[["range",3]],["ordering",4]],[[],[["vec",3],["range",3]]],[[["usize",15]],["bool",15]],[[["range",3]],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],[["vec",3],["result",4],["string",3]]],[[["str",15]],[["str",15],["result",4],["range",3]]],null,[[]],null,[[["range",3]],["bool",15]],[[["range",3]],[["option",4],["ordering",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],null,[[]],[[["usize",15]],["ringbuffer",3]],[[]],[[["usize",15]],["ringbuffer",3]],[[],["option",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,[[["usize",15]],["bool",15]],[[["str",15]],[["usize",15],["option",4]]],[[["usize",15]],[["str",15],["option",4]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],[["ioresult",6],["string",3]]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["utmpx",3]],[[]],[[],["bool",15]],[[],["utmpxiter",3]],[[],["tm",3]],[[],["option",4]],[[],["i32",15]],[[["str",15]]],[[],["i16",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["string",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["string",3]],[[],["i32",15]],[[["str",15]],["ordering",4]]],"p":[[4,"ConversionResult"],[4,"InvalidEncodingHandling"],[8,"Args"],[4,"BackupError"],[4,"BackupMode"],[3,"HelpText"],[3,"CoreOptions"],[4,"Format"],[4,"DecodeError"],[4,"EncodeError"],[3,"Data"],[3,"Group"],[3,"Passwd"],[8,"Locate"],[3,"ExitCode"],[3,"USimpleError"],[3,"UUsageError"],[3,"UIoError"],[8,"UError"],[8,"FromIo"],[4,"MissingHandling"],[4,"ResolveMode"],[8,"FsMeta"],[3,"statfs_fn"],[3,"FsUsage"],[8,"BirthTime"],[3,"MountInfo"],[4,"ParseSizeError"],[4,"IfFrom"],[4,"VerbosityLevel"],[3,"ChownExecutor"],[3,"Verbosity"],[4,"ExitStatus"],[8,"ChildExt"],[3,"Range"],[3,"RingBuffer"],[3,"Utmpx"],[3,"UtmpxIter"]]},\
+"uucore":{"doc":"","t":[8,13,4,13,13,4,13,13,11,14,5,5,0,11,11,11,11,11,11,0,14,14,0,0,0,5,14,11,11,11,11,0,0,5,14,11,11,0,14,14,14,14,14,14,0,0,0,0,0,0,0,0,14,14,5,14,14,14,14,14,14,0,14,14,11,11,11,11,11,11,14,5,0,0,13,7,7,4,13,4,13,13,13,13,13,0,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,7,7,7,5,5,5,3,3,11,11,11,11,12,11,11,11,11,12,12,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,12,13,13,13,13,13,13,13,3,13,4,6,13,4,4,13,13,13,11,11,11,11,11,11,11,11,11,11,5,11,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,3,8,3,11,11,11,11,11,11,11,11,11,11,11,5,5,11,11,5,5,11,11,11,11,10,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,12,3,8,8,3,6,3,3,11,11,11,11,11,11,11,11,11,11,11,11,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,10,12,12,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,13,13,13,4,13,13,13,4,11,11,11,11,5,11,11,11,11,5,5,11,11,11,11,11,11,11,11,5,5,11,11,11,11,11,11,11,11,8,8,3,3,3,5,10,11,12,12,12,10,10,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,11,11,11,10,11,10,11,11,11,11,10,11,12,10,11,11,11,11,11,10,11,12,12,12,10,11,11,11,10,5,5,5,5,12,5,3,5,11,11,11,10,11,10,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,13,4,13,11,11,11,11,11,11,11,11,11,5,11,11,11,11,5,13,13,3,17,17,17,13,4,13,13,13,13,13,3,4,12,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,0,11,11,11,12,12,11,11,11,11,11,11,12,11,11,11,11,12,11,12,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,3,8,3,5,5,5,5,10,5,5,8,13,4,13,11,11,11,11,11,11,11,11,11,5,5,5,5,11,11,10,11,11,11,11,11,11,11,10,3,11,11,11,5,5,11,11,11,11,11,12,11,12,11,11,11,11,11,3,11,11,12,11,11,11,11,11,11,11,11,7,7,5,5,5,17,17,17,7,17,17,17,17,17,17,17,17,17,17,17,3,3,11,11,11,11,11,5,11,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,11,11,5,5],"n":["Args","Complete","ConversionResult","ConvertLossy","Ignore","InvalidEncodingHandling","Lossy","Panic","accept_any","app","args","args_os","backup_control","borrow","borrow","borrow_mut","borrow_mut","collect_str","collect_str_lossy","coreopts","crash","crash_if_err","encoding","entries","error","execution_phrase","exit","expect_complete","expect_lossy","from","from","fs","fsext","get_utility_is_second_arg","has","into","into","mode","msg_expects_no_more_than_one_of","msg_expects_one_of","msg_invalid_input","msg_invalid_opt_use","msg_opt_invalid_should_be","msg_opt_only_usable_if","os","panic","parse_size","parse_time","perms","process","ranges","ringbuffer","safe_write","safe_writeln","set_utility_is_second_arg","show","show_error","show_error_custom_description","show_if_err","show_usage_error","show_warning","signals","snippet_list_join","snippet_list_join_oxford_comma","try_from","try_from","try_into","try_into","type_id","type_id","uio_error","util_name","utmpx","version_cmp","AmbiguousArgument","BACKUP_CONTROL_LONG_HELP","BACKUP_CONTROL_VALUES","BackupError","BackupImpossible","BackupMode","ExistingBackup","InvalidArgument","NoBackup","NumberedBackup","SimpleBackup","arguments","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","code","determine_backup_mode","determine_backup_suffix","eq","eq","fmt","fmt","fmt","from","from","get_backup_path","into","into","ne","to_owned","to_string","try_from","try_from","try_into","try_into","type_id","type_id","usage","OPT_BACKUP","OPT_BACKUP_NO_ARG","OPT_SUFFIX","backup","backup_no_args","suffix","CoreOptions","HelpText","borrow","borrow","borrow_mut","borrow_mut","display_usage","from","from","into","into","long_help","name","new","optflag","optflagmulti","optflagopt","optmulti","optopt","parse","summary","syntax","try_from","try_from","try_into","try_into","type_id","type_id","usage","version","Base16","Base2Lsbf","Base2Msbf","Base32","Base32Hex","Base64","Base64Url","Data","Decode","DecodeError","DecodeResult","DecodeZ85","EncodeError","Format","Io","Z85","Z85InputLenNotMultipleOf4","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","decode","decode","encode","encode","fmt","fmt","from","from","from","from","from","from","from","ignore_garbage","into","into","into","into","line_wrap","new","source","to_owned","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","wrap_print","wrap_write","Group","Locate","Passwd","as_inner","as_inner","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","from","from","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","into","into","into_inner","into_inner","locate","locate","locate","locate","locate","name","name","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uid","uid2usr","user_dir","user_info","user_passwd","user_shell","usr2uid","0","ExitCode","FromIo","UError","UIoError","UResult","USimpleError","UUsageError","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","code","code","code","code","code","code","code","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","get_exit_code","into","into","into","into","map_err_context","message","message","new","new","new","new","set_exit_code","strip_errno","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","usage","usage","usage","Existing","Logical","Missing","MissingHandling","None","Normal","Physical","ResolveMode","borrow","borrow","borrow_mut","borrow_mut","canonicalize","clone","clone","clone_into","clone_into","display_permissions","display_permissions_unix","eq","eq","fmt","fmt","from","from","into","into","normalize_path","resolve_relative_path","to_owned","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","BirthTime","FsMeta","FsUsage","MountInfo","StatFs","StatFs","avail_blocks","avail_blocks","bavail","bavail_top_bit_set","bfree","birth","block_size","block_size","blocks","blocksize","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","dev_id","dev_name","dummy","eq","f_bavail","f_bavail","f_bfree","f_bfree","f_blocks","f_blocks","f_bsize","f_bsize","f_ffree","f_ffree","f_files","f_files","f_frsize","f_frsize","f_fsid","f_fsid","f_namelen","f_namelen","f_type","f_type","ffree","files","fmt","fmt","fmt","free_blocks","free_blocks","free_file_nodes","free_file_nodes","from","from","from","fs_type","fs_type","fs_type","fsid","fsid","hash","into","into","into","io_size","io_size","mount_dir","mount_option","mount_root","namelen","namelen","ne","new","pretty_birth","pretty_filetype","pretty_fstype","pretty_time","read_fs_list","remote","statfs","statfs_fn","statfs_fn","to_owned","to_owned","to_owned","total_blocks","total_blocks","total_file_nodes","total_file_nodes","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","parse_mode","parse_numeric","parse_symbolic","is_wsl_1","is_wsl_2","mute_sigpipe_panic","ParseFailure","ParseSizeError","SizeTooBig","borrow","borrow_mut","description","eq","fmt","fmt","from","into","ne","parse_size","to_string","try_from","try_into","type_id","from_str","All","Changes","ChownExecutor","FTS_COMFOLLOW","FTS_LOGICAL","FTS_PHYSICAL","Group","IfFrom","Normal","Silent","User","UserGroup","Verbose","Verbosity","VerbosityLevel","bit_flag","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","dereference","dest_gid","dest_uid","entries","eq","eq","exec","files","filter","fmt","fmt","from","from","from","from","groups_only","into","into","into","into","level","ne","preserve_root","recursive","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","verbosity","wrap_chown","Group","Locate","Passwd","get_groups","get_groups_gnu","gid2grp","grp2gid","locate","uid2usr","usr2uid","ChildExt","Code","ExitStatus","Signal","borrow","borrow_mut","clone","clone_into","code","eq","fmt","fmt","from","getegid","geteuid","getgid","getuid","into","ne","send_signal","signal","success","to_owned","to_string","try_from","try_into","type_id","wait_or_timeout","Range","borrow","borrow_mut","cmp","complement","contain","eq","fmt","from","from_list","from_str","high","into","low","ne","partial_cmp","try_from","try_into","type_id","RingBuffer","borrow","borrow_mut","data","from","from_iter","into","new","push_back","try_from","try_into","type_id","ALL_SIGNALS","DEFAULT_SIGNAL","is_signal","signal_by_name_or_value","signal_name_by_value","ACCOUNTING","BOOT_TIME","DEAD_PROCESS","DEFAULT_FILE","EMPTY","INIT_PROCESS","LOGIN_PROCESS","NEW_TIME","OLD_TIME","RUN_LVL","USER_PROCESS","UT_HOSTSIZE","UT_IDSIZE","UT_LINESIZE","UT_NAMESIZE","Utmpx","UtmpxIter","borrow","borrow","borrow_mut","borrow_mut","canon_host","endutxent","exit_status","from","from","getutxent","host","into","into","into_inner","into_iter","is_user_process","iter_all_records","login_time","next","pid","read_from","record_type","setutxent","terminal_suffix","try_from","try_from","try_into","try_into","tty_device","type_id","type_id","user","utmpxname","version_cmp"],"q":["uucore","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::backup_control","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::backup_control::arguments","","","","","","uucore::coreopts","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::encoding","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::entries","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::fs","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::fsext","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::mode","","","uucore::os","","uucore::panic","uucore::parse_size","","","","","","","","","","","","","","","","","uucore::parse_time","uucore::perms","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::perms::entries","","","","","","","","","","uucore::process","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::ranges","","","","","","","","","","","","","","","","","","","uucore::ringbuffer","","","","","","","","","","","","uucore::signals","","","","","uucore::utmpx","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::version_cmp"],"d":["","","","","","","","","","","","","Implement GNU-style backup functionality.","","","","","Converts each iterator item to a String and collects …","convenience function for a more slim interface","","Display the provided error message, then exit() with the …","Unwraps the Result. Instead of panicking, it exists the …","","Get password/group file entry","All utils return exit with an exit code. Usually, the …","Derive the complete execution phrase for “usage”.","Calls exit() with the provided exit code.","","","","","Set of functions to manage files and symlinks","Set of functions to manage file systems","","","","","Set of functions to parse modes","","","","","","","","","","","Common functions to manage permissions","Set of functions to manage IDs","","A fixed-size ring buffer.","","","","","Show an error to stderr in a similar style to GNU …","Show a warning to stderr in a similar style to GNU …","","Show a bad invocation help message in a similar style to …","","","","","","","","","","","Shorthand to construct [UIoError]-instances.","Derive the utility name.","Aims to provide platform-independent methods to obtain …","","An ambiguous argument (e.g. ‘n’) was given as backup …","","","Backup error types.","Currently unused","Available backup modes.","Argument ‘existing’, ‘nil’","An invalid argument (e.g. ‘foo’) was given as backup …","Argument ‘none’, ‘off’","Argument ‘numbered’, ‘t’","Argument ‘simple’, ‘never’","Arguments for backup-related functionality.","","","","","","","","Determine the “mode” for the backup operation to …","Obtain the suffix to use for a backup.","","","","","","","","","","","","","","","","","","","","","","","","‘–backup’ argument","‘-b’ argument","‘-S, –suffix’ argument","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Fetch desired entry.","","","","This is a wrapper function for libc::getgrouplist.","","","","","","","","","From: …","The list of group IDs returned from GNU’s groups and GNU…","AKA group.gr_gid","AKA passwd.pw_gid","","","","","","","","","","","","AKA group.gr_name","AKA passwd.pw_name","","","","","","","","AKA passwd.pw_uid","","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","A special error type that does not print any message when …","Enables the conversion from [std::io::Error] to [UError] …","Custom errors defined by the utils and uucore.","Wrapper type around [std::io::Error].","Result type that should be returned by all utils.","A simple error type with an exit code and a message that …","","","","","","","","","","Error code of a custom error.","Error code of a custom error.","","","","","","","","","","","","","","","","","","Get the last exit code set with [set_exit_code]. The …","","","","","","","","","","","","Set the exit code for the program if uumain returns Ok(())…","Strip the trailing “ (os error XX)“ from io error …","","","","","","","","","","","","","","","","","Print usage help to a custom error.","Print usage help to a custom error.","","Resolve symbolic links, ignoring errors on the final …","Resolve ‘..’ elements before symlinks","Resolve symbolic links, ignoring errors on the non-final …","Controls how symbolic links should be handled when …","Do not resolve any symbolic links.","Return an error if any part of the path is missing.","Resolve symlinks as encountered when processing the path","Controls when symbolic links are resolved","","","","","Return the canonical, absolute form of a path.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Read file system list.","","","","","","","","","","","","","","","","","","","","","","","","Test if the program is running under WSL","","","","","","","","","","","","","","","Parse a size string into a number of bytes.","","","","","","","","","","","","","","","","","","","","The various level of verbosity","","","","","","","","","","","","","","","","","Get password/group file entry","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Perform the change of owner on a path with the various …","","Fetch desired entry.","","From: …","The list of group IDs returned from GNU’s groups and GNU…","","","","","","Missing methods for Child objects","","","","","","","","","","","","","getegid() returns the effective group ID of the calling …","geteuid() returns the effective user ID of the calling …","getgid() returns the real group ID of the calling process.","getuid() returns the real user ID of the calling process.","","","Send a signal to a Child process.","","","","","","","","Wait for a process to finish or return after the …","","","","","","Test if at least one of the given Ranges contain the …","","","","","","","","","","","","","","A fixed-size ring buffer backed by a VecDeque.","","","","","","","","Append a value to the end of the ring buffer.","","","","","","","","","","","","","","","","","","","","","","","","","Iterator of login records","","","","","Canonicalize host name using DNS","","A.K.A. ut.ut_exit","","","","A.K.A. ut.ut_host","","","Consumes the Utmpx, returning the underlying C struct …","","","","A.K.A. ut.ut_tv","","A.K.A. ut.ut_pid","Sets the name of the utmpx-format file for the other …","A.K.A. ut.ut_type","","A.K.A. ut.ut_id","","","","","A.K.A. ut.ut_line","","","A.K.A. ut.ut_user","",""],"i":[0,1,0,2,2,0,1,2,1,0,0,0,0,2,1,2,1,3,3,0,0,0,0,0,0,0,0,1,1,2,1,0,0,0,0,2,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,1,2,1,2,1,0,0,0,0,4,0,0,0,4,0,5,4,5,5,5,0,5,4,5,4,5,5,4,0,0,5,4,5,4,4,5,4,0,5,4,4,5,4,5,4,5,4,5,4,4,0,0,0,0,0,0,0,0,6,7,6,7,6,6,7,6,7,6,6,7,7,7,7,7,7,7,6,6,6,7,6,7,6,7,7,6,8,8,8,8,8,8,8,0,9,0,0,9,0,0,9,8,10,10,11,9,8,10,11,9,8,8,8,0,11,0,11,9,9,10,11,9,9,9,9,8,11,10,11,9,8,11,11,9,8,9,10,11,9,8,10,11,9,8,10,11,9,8,0,0,0,0,0,12,13,13,12,13,12,13,13,13,12,13,0,0,12,13,0,0,12,13,12,13,14,12,12,13,13,12,13,13,12,13,12,13,12,13,13,0,13,13,13,13,0,15,0,0,0,0,0,0,0,16,17,18,15,16,17,18,15,19,19,16,17,15,16,17,16,16,17,17,18,18,15,15,16,17,18,15,0,16,17,18,15,20,16,17,16,17,18,15,0,0,16,17,18,15,16,17,18,15,16,17,18,15,16,17,18,15,19,19,17,21,22,21,0,22,21,22,0,21,22,21,22,0,21,22,21,22,0,0,21,22,21,22,21,22,21,22,0,0,21,22,21,22,21,22,21,22,0,0,0,0,0,0,23,24,25,25,25,26,23,24,25,25,27,25,24,27,25,24,27,25,24,27,25,24,27,27,27,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,27,25,24,23,24,23,24,27,25,24,23,24,27,23,24,24,27,25,24,23,24,27,27,27,23,24,24,25,26,0,0,0,0,27,0,0,0,27,25,24,23,24,23,24,27,25,24,27,25,24,27,25,24,0,0,0,0,0,0,28,0,28,28,28,28,28,28,28,28,28,28,0,28,28,28,28,0,29,30,0,0,0,0,29,0,30,30,29,29,30,0,0,31,29,31,30,32,29,31,30,32,30,32,30,32,31,31,31,0,30,32,31,31,31,30,32,29,31,30,32,32,29,31,30,32,32,32,31,31,30,32,29,31,30,32,29,31,30,32,29,31,30,32,31,0,0,0,0,0,0,0,0,14,0,0,0,33,0,33,33,33,33,33,33,33,33,33,33,0,0,0,0,33,33,34,33,33,33,33,33,33,33,34,0,35,35,35,0,0,35,35,35,35,35,35,35,35,35,35,35,35,35,0,36,36,36,36,36,36,36,36,36,36,36,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,38,37,38,37,0,37,37,38,0,37,37,38,37,38,37,37,37,38,37,38,37,0,37,37,38,37,38,37,37,38,37,0,0],"f":[null,null,null,null,null,null,null,null,[[],[["string",3],["vec",3]]],null,[[]],[[]],null,[[]],[[]],[[]],[[]],[[["invalidencodinghandling",4]],["conversionresult",4]],[[],["conversionresult",4]],null,null,null,null,null,null,[[],["string",3]],null,[[["str",15]],[["string",3],["vec",3]]],[[["str",15]],[["string",3],["vec",3]]],[[]],[[]],null,null,[[],["bool",15]],null,[[]],[[]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],null,null,null,null,null,null,null,null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[],["string",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["backupmode",4]],[[]],[[],["i32",15]],[[["argmatches",3]],[["backupmode",4],["uresult",6]]],[[["argmatches",3]],["string",3]],[[["backupmode",4]],["bool",15]],[[["backuperror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["path",3],["backupmode",4],["str",15]],[["pathbuf",3],["option",4]]],[[]],[[]],[[["backuperror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],null,null,null,[[],["arg",3]],[[],["arg",3]],[[],["arg",3]],null,null,[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],null,null,[[["helptext",3]]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["str",15]],["coreoptions",3]],[[["vec",3],["string",3]],["matches",3]],null,null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15]],["string",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["format",4]],[[]],[[["format",4]],["decoderesult",6]],[[],["decoderesult",6]],[[["format",4]],[["result",4],["encodeerror",4],["string",3]]],[[],[["result",4],["encodeerror",4],["string",3]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["decodeerror",3]]],[[["error",3]]],[[["decodeerror",4]]],[[]],[[["bool",15]]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[["format",4]]],[[],[["error",8],["option",4]]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["data",3],["string",3]]],[[["write",8],["usize",15],["string",3]],["result",6]],null,null,null,[[],["group",3]],[[],["passwd",3]],[[],[["gid_t",6],["vec",3]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[]],[[]],[[]],[[],[["ioresult",6],["vec",3]]],[[["u32",15],["option",4]],[["ioresult",6],["vec",3]]],[[],["gid_t",6]],[[],["gid_t",6]],[[["gid_t",6]],[["ioresult",6],["string",3]]],[[["str",15]],[["gid_t",6],["ioresult",6]]],[[]],[[]],[[],["group",3]],[[],["passwd",3]],[[],["ioresult",6]],[[["str",15]],["ioresult",6]],[[["gid_t",6]],["ioresult",6]],[[["uid_t",6]],["ioresult",6]],[[["str",15]],["ioresult",6]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["uid_t",6]],[[["uid_t",6]],[["ioresult",6],["string",3]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[],[["str",15],["cow",4]]],[[["str",15]],[["ioresult",6],["uid_t",6]]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["i32",15]],[[],["i32",15]],[[],["i32",15]],[[],["i32",15]],[[],["i32",15]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[],["i32",15]],[[]],[[]],[[]],[[]],[[]],null,null,[[["into",8],["i32",15],["string",3]],[["box",3],["uerror",8]]],[[["into",8],["i32",15],["string",3]],[["box",3],["uerror",8]]],[[["into",8],["string",3],["errorkind",4]],[["box",3],["uerror",8]]],[[["i32",15]],[["box",3],["uerror",8]]],[[["i32",15]]],[[["error",3]],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[["resolvemode",4],["missinghandling",4],["path",3],["asref",8]],[["ioresult",6],["pathbuf",3]]],[[],["missinghandling",4]],[[],["resolvemode",4]],[[]],[[]],[[["bool",15],["metadata",3]],["string",3]],[[["bool",15],["mode_t",6]],["string",3]],[[["missinghandling",4]],["bool",15]],[[["resolvemode",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["path",3]],["pathbuf",3]],[[["path",3]],[["cow",4],["path",3]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[],["i32",15]],[[],["u64",15]],[[],["u64",15]],null,null,null,[[],["string",3]],[[],["i64",15]],[[],["i64",15]],null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["mountinfo",3]],[[],["fsusage",3]],[[],["statfs",3]],[[]],[[]],[[]],null,null,null,[[["statfs",3]],["bool",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["error",3],["result",4]]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[],["i64",15]],[[],["i64",15]],null,[[],["u64",15]],[[],["u64",15]],[[]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],null,null,null,[[],["u64",15]],[[],["u64",15]],[[["statfs",3]],["bool",15]],[[["statfs",3]],["fsusage",3]],[[],["string",3]],[[["u64",15],["mode_t",6]],["str",15]],[[["i64",15]],[["str",15],["cow",4]]],[[["i64",15]],["string",3]],[[],[["mountinfo",3],["vec",3]]],null,[[["path",3],["asref",8]],[["string",3],["statfs",3],["result",4]]],null,[[],["i32",15]],[[]],[[]],[[]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["u64",15]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[["str",15]],[["string",3],["result",4],["mode_t",6]]],[[["u32",15],["str",15]],[["u32",15],["result",4],["string",3]]],[[["u32",15],["str",15],["bool",15]],[["u32",15],["result",4],["string",3]]],[[],["bool",15]],[[],["bool",15]],[[]],null,null,null,[[]],[[]],[[],["str",15]],[[["parsesizeerror",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],[["result",4],["error",3]]],[[]],[[]],[[["parsesizeerror",4]],["bool",15]],[[["str",15]],[["result",4],["usize",15],["parsesizeerror",4]]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["str",15]],[["duration",3],["result",4],["string",3]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["verbositylevel",4]],[[],["verbosity",3]],[[]],[[]],null,null,null,null,[[["verbositylevel",4]],["bool",15]],[[["verbosity",3]],["bool",15]],[[],["uresult",6]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],null,[[["verbosity",3]],["bool",15]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[["metadata",3],["path",3],["asref",8],["bool",15],["u32",15],["option",4],["verbosity",3]],[["result",4],["string",3]]],null,null,null,[[],[["ioresult",6],["vec",3]]],[[["u32",15],["option",4]],[["ioresult",6],["vec",3]]],[[["gid_t",6]],[["ioresult",6],["string",3]]],[[["str",15]],[["gid_t",6],["ioresult",6]]],[[],["ioresult",6]],[[["uid_t",6]],[["ioresult",6],["string",3]]],[[["str",15]],[["ioresult",6],["uid_t",6]]],null,null,null,null,[[]],[[]],[[],["exitstatus",4]],[[]],[[],[["option",4],["i32",15]]],[[["exitstatus",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[],["gid_t",6]],[[],["uid_t",6]],[[],["gid_t",6]],[[],["uid_t",6]],[[]],[[["exitstatus",4]],["bool",15]],[[["usize",15]],["result",6]],[[],[["option",4],["i32",15]]],[[],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[["duration",3]],[["option",4],["result",6]]],null,[[]],[[]],[[["range",3]],["ordering",4]],[[],[["range",3],["vec",3]]],[[["usize",15]],["bool",15]],[[["range",3]],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],[["string",3],["result",4],["vec",3]]],[[["str",15]],[["range",3],["str",15],["result",4]]],null,[[]],null,[[["range",3]],["bool",15]],[[["range",3]],[["option",4],["ordering",4]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,[[]],[[]],null,[[]],[[["usize",15]],["ringbuffer",3]],[[]],[[["usize",15]],["ringbuffer",3]],[[],["option",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,[[["usize",15]],["bool",15]],[[["str",15]],[["usize",15],["option",4]]],[[["usize",15]],[["str",15],["option",4]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],[["ioresult",6],["string",3]]],[[]],[[]],[[]],[[]],[[]],[[],["string",3]],[[]],[[]],[[],["utmpx",3]],[[]],[[],["bool",15]],[[],["utmpxiter",3]],[[],["tm",3]],[[],["option",4]],[[],["i32",15]],[[["str",15]]],[[],["i16",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["string",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["string",3]],[[],["i32",15]],[[["str",15]],["ordering",4]]],"p":[[4,"ConversionResult"],[4,"InvalidEncodingHandling"],[8,"Args"],[4,"BackupError"],[4,"BackupMode"],[3,"HelpText"],[3,"CoreOptions"],[4,"Format"],[4,"DecodeError"],[4,"EncodeError"],[3,"Data"],[3,"Group"],[3,"Passwd"],[8,"Locate"],[3,"ExitCode"],[3,"USimpleError"],[3,"UUsageError"],[3,"UIoError"],[8,"UError"],[8,"FromIo"],[4,"MissingHandling"],[4,"ResolveMode"],[8,"FsMeta"],[3,"statfs_fn"],[3,"FsUsage"],[8,"BirthTime"],[3,"MountInfo"],[4,"ParseSizeError"],[4,"IfFrom"],[4,"VerbosityLevel"],[3,"ChownExecutor"],[3,"Verbosity"],[4,"ExitStatus"],[8,"ChildExt"],[3,"Range"],[3,"RingBuffer"],[3,"Utmpx"],[3,"UtmpxIter"]]},\
"uucore_procs":{"doc":"","t":[23,14],"n":["gen_uumain","main"],"q":["uucore_procs",""],"d":["",""],"i":[0,0],"f":[null,null],"p":[]},\
"wc":{"doc":"","t":[5],"n":["main"],"q":["wc"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\
"who":{"doc":"","t":[5],"n":["main"],"q":["who"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\
diff --git a/src/uu_rmdir/rmdir.rs.html b/src/uu_rmdir/rmdir.rs.html
index 13dbfc55e..215ee1fb5 100644
--- a/src/uu_rmdir/rmdir.rs.html
+++ b/src/uu_rmdir/rmdir.rs.html
@@ -140,6 +140,78 @@
138
139
140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
// * This file is part of the uutils coreutils package. // * @@ -154,8 +226,11 @@ extern crate uucore; use clap::{crate_version, App, Arg}; -use std::fs; +use std::fs::{read_dir, remove_dir}; +use std::io; use std::path::Path; +use uucore::error::{set_exit_code, strip_errno, UResult}; +use uucore::util_name; static ABOUT: &str = "Remove the DIRECTORY(ies), if they are empty."; static OPT_IGNORE_FAIL_NON_EMPTY: &str = "ignore-fail-on-non-empty"; @@ -164,35 +239,158 @@ static ARG_DIRS: &str = "dirs"; -#[cfg(unix)] -static ENOTDIR: i32 = 20; -#[cfg(windows)] -static ENOTDIR: i32 = 267; - fn usage() -> String { format!("{0} [OPTION]... DIRECTORY...", uucore::execution_phrase()) } -pub fn uumain(args: impl uucore::Args) -> i32 { +#[uucore_procs::gen_uumain] +pub fn uumain(args: impl uucore::Args) -> UResult<()> { let usage = usage(); let matches = uu_app().usage(&usage[..]).get_matches_from(args); - let dirs: Vec<String> = matches - .values_of(ARG_DIRS) - .map(|v| v.map(ToString::to_string).collect()) - .unwrap_or_default(); + let opts = Opts { + ignore: matches.is_present(OPT_IGNORE_FAIL_NON_EMPTY), + parents: matches.is_present(OPT_PARENTS), + verbose: matches.is_present(OPT_VERBOSE), + }; - let ignore = matches.is_present(OPT_IGNORE_FAIL_NON_EMPTY); - let parents = matches.is_present(OPT_PARENTS); - let verbose = matches.is_present(OPT_VERBOSE); + for path in matches + .values_of_os(ARG_DIRS) + .unwrap_or_default() + .map(Path::new) + { + if let Err(error) = remove(path, opts) { + let Error { error, path } = error; - match remove(dirs, ignore, parents, verbose) { - Ok(()) => ( /* pass */ ), - Err(e) => return e, + if opts.ignore && dir_not_empty(&error, path) { + continue; + } + + set_exit_code(1); + + // If `foo` is a symlink to a directory then `rmdir foo/` may give + // a "not a directory" error. This is confusing as `rm foo/` says + // "is a directory". + // This differs from system to system. Some don't give an error. + // Windows simply allows calling RemoveDirectory on symlinks so we + // don't need to worry about it here. + // GNU rmdir seems to print "Symbolic link not followed" if: + // - It has a trailing slash + // - It's a symlink + // - It either points to a directory or dangles + #[cfg(unix)] + { + use std::ffi::OsStr; + use std::os::unix::ffi::OsStrExt; + + fn is_symlink(path: &Path) -> io::Result<bool> { + Ok(path.symlink_metadata()?.file_type().is_symlink()) + } + + fn points_to_directory(path: &Path) -> io::Result<bool> { + Ok(path.metadata()?.file_type().is_dir()) + } + + let path = path.as_os_str().as_bytes(); + if error.raw_os_error() == Some(libc::ENOTDIR) && path.ends_with(b"/") { + // Strip the trailing slash or .symlink_metadata() will follow the symlink + let path: &Path = OsStr::from_bytes(&path[..path.len() - 1]).as_ref(); + if is_symlink(path).unwrap_or(false) + && points_to_directory(path).unwrap_or(true) + { + show_error!( + "failed to remove '{}/': Symbolic link not followed", + path.display() + ); + continue; + } + } + } + + show_error!( + "failed to remove '{}': {}", + path.display(), + strip_errno(&error) + ); + } } - 0 + Ok(()) +} + +struct Error<'a> { + error: io::Error, + path: &'a Path, +} + +fn remove(mut path: &Path, opts: Opts) -> Result<(), Error<'_>> { + remove_single(path, opts)?; + if opts.parents { + while let Some(new) = path.parent() { + path = new; + if path.as_os_str() == "" { + break; + } + remove_single(path, opts)?; + } + } + Ok(()) +} + +fn remove_single(path: &Path, opts: Opts) -> Result<(), Error<'_>> { + if opts.verbose { + println!("{}: removing directory, '{}'", util_name(), path.display()); + } + remove_dir(path).map_err(|error| Error { error, path }) +} + +// POSIX: https://pubs.opengroup.org/onlinepubs/009696799/functions/rmdir.html +#[cfg(not(windows))] +const NOT_EMPTY_CODES: &[i32] = &[libc::ENOTEMPTY, libc::EEXIST]; + +// 145 is ERROR_DIR_NOT_EMPTY, determined experimentally. +#[cfg(windows)] +const NOT_EMPTY_CODES: &[i32] = &[145]; + +// Other error codes you might get for directories that could be found and are +// not empty. +// This is a subset of the error codes listed in rmdir(2) from the Linux man-pages +// project. Maybe other systems have additional codes that apply? +#[cfg(not(windows))] +const PERHAPS_EMPTY_CODES: &[i32] = &[libc::EACCES, libc::EBUSY, libc::EPERM, libc::EROFS]; + +// Probably incomplete, I can't find a list of possible errors for +// RemoveDirectory anywhere. +#[cfg(windows)] +const PERHAPS_EMPTY_CODES: &[i32] = &[ + 5, // ERROR_ACCESS_DENIED, found experimentally. +]; + +fn dir_not_empty(error: &io::Error, path: &Path) -> bool { + if let Some(code) = error.raw_os_error() { + if NOT_EMPTY_CODES.contains(&code) { + return true; + } + // If --ignore-fail-on-non-empty is used then we want to ignore all errors + // for non-empty directories, even if the error was e.g. because there's + // no permission. So we do an additional check. + if PERHAPS_EMPTY_CODES.contains(&code) { + if let Ok(mut iterator) = read_dir(path) { + if iterator.next().is_some() { + return true; + } + } + } + } + false +} + +#[derive(Clone, Copy, Debug)] +struct Opts { + ignore: bool, + parents: bool, + verbose: bool, } pub fn uu_app() -> App<'static, 'static> { @@ -227,59 +425,5 @@ .required(true), ) } - -fn remove(dirs: Vec<String>, ignore: bool, parents: bool, verbose: bool) -> Result<(), i32> { - let mut r = Ok(()); - - for dir in &dirs { - let path = Path::new(&dir[..]); - r = remove_dir(path, ignore, verbose).and(r); - if parents { - let mut p = path; - while let Some(new_p) = p.parent() { - p = new_p; - match p.as_os_str().to_str() { - None => break, - Some(s) => match s { - "" | "." | "/" => break, - _ => (), - }, - }; - r = remove_dir(p, ignore, verbose).and(r); - } - } - } - - r -} - -fn remove_dir(path: &Path, ignore: bool, verbose: bool) -> Result<(), i32> { - let mut read_dir = fs::read_dir(path).map_err(|e| { - if e.raw_os_error() == Some(ENOTDIR) { - show_error!("failed to remove '{}': Not a directory", path.display()); - } else { - show_error!("reading directory '{}': {}", path.display(), e); - } - 1 - })?; - - let mut r = Ok(()); - - if read_dir.next().is_none() { - match fs::remove_dir(path) { - Err(e) => { - show_error!("removing directory '{}': {}", path.display(), e); - r = Err(1); - } - Ok(_) if verbose => println!("removing directory, '{}'", path.display()), - _ => (), - } - } else if !ignore { - show_error!("failed to remove '{}': Directory not empty", path.display()); - r = Err(1); - } - - r -}