From 06644513d6af58bb3972668f51598262b155dbb2 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Fri, 28 Jan 2022 20:38:49 +0100 Subject: [PATCH] files moved into dev & user --- COPYRIGHT.txt | 50 - FiraSans-LICENSE.txt | 94 - FiraSans-Medium.woff | Bin 186824 -> 0 bytes FiraSans-Medium.woff2 | Bin 132780 -> 0 bytes FiraSans-Regular.woff | Bin 183268 -> 0 bytes FiraSans-Regular.woff2 | Bin 129188 -> 0 bytes LICENSE-APACHE.txt | 201 - LICENSE-MIT.txt | 23 - NanumBarunGothic-LICENSE.txt | 99 - NanumBarunGothic.ttf.woff | Bin 677868 -> 0 bytes NanumBarunGothic.ttf.woff2 | Bin 399468 -> 0 bytes SourceCodePro-It.ttf.woff | Bin 58444 -> 0 bytes SourceCodePro-It.ttf.woff2 | Bin 44896 -> 0 bytes SourceCodePro-LICENSE.txt | 93 - SourceCodePro-Regular.ttf.woff | Bin 68152 -> 0 bytes SourceCodePro-Regular.ttf.woff2 | Bin 52228 -> 0 bytes SourceCodePro-Semibold.ttf.woff | Bin 68080 -> 0 bytes SourceCodePro-Semibold.ttf.woff2 | Bin 52348 -> 0 bytes SourceSerif4-Bold.ttf.woff | Bin 110552 -> 0 bytes SourceSerif4-Bold.ttf.woff2 | Bin 81320 -> 0 bytes SourceSerif4-It.ttf.woff | Bin 78108 -> 0 bytes SourceSerif4-It.ttf.woff2 | Bin 59860 -> 0 bytes SourceSerif4-LICENSE.md | 93 - SourceSerif4-Regular.ttf.woff | Bin 103604 -> 0 bytes SourceSerif4-Regular.ttf.woff2 | Bin 76180 -> 0 bytes arch/all.html | 5 - arch/fn.main.html | 3 - arch/index.html | 4 - arch/sidebar-items.js | 1 - ayu.css | 1 - base32/all.html | 5 - base32/fn.main.html | 3 - base32/index.html | 4 - base32/sidebar-items.js | 1 - base64/all.html | 5 - base64/fn.main.html | 3 - base64/index.html | 4 - base64/sidebar-items.js | 1 - basename/all.html | 5 - basename/fn.main.html | 3 - basename/index.html | 4 - basename/sidebar-items.js | 1 - basenc/all.html | 5 - basenc/fn.main.html | 3 - basenc/index.html | 4 - basenc/sidebar-items.js | 1 - brush.svg | 1 - cat/all.html | 5 - cat/fn.main.html | 3 - cat/index.html | 4 - cat/sidebar-items.js | 1 - chcon/all.html | 5 - chcon/fn.main.html | 3 - chcon/index.html | 4 - chcon/sidebar-items.js | 1 - chgrp/all.html | 5 - chgrp/fn.main.html | 3 - chgrp/index.html | 4 - chgrp/sidebar-items.js | 1 - chmod/all.html | 5 - chmod/fn.main.html | 3 - chmod/index.html | 4 - chmod/sidebar-items.js | 1 - chown/all.html | 5 - chown/fn.main.html | 3 - chown/index.html | 4 - chown/sidebar-items.js | 1 - chroot/all.html | 5 - chroot/fn.main.html | 3 - chroot/index.html | 4 - chroot/sidebar-items.js | 1 - cksum/all.html | 5 - cksum/fn.main.html | 3 - cksum/index.html | 4 - cksum/sidebar-items.js | 1 - clipboard.svg | 1 - comm/all.html | 5 - comm/fn.main.html | 3 - comm/index.html | 4 - comm/sidebar-items.js | 1 - coreutils/all.html | 5 - coreutils/constant.VERSION.html | 3 - coreutils/fn.binary_path.html | 3 - coreutils/fn.gen_completions.html | 4 - coreutils/fn.gen_coreutils_app.html | 3 - coreutils/fn.main.html | 3 - coreutils/fn.name.html | 3 - coreutils/fn.usage.html | 3 - coreutils/fn.util_map.html | 3 - coreutils/index.html | 7 - coreutils/sidebar-items.js | 1 - coreutils/type.UtilityMap.html | 3 - cp/all.html | 5 - cp/fn.main.html | 3 - cp/index.html | 4 - cp/sidebar-items.js | 1 - crates.js | 1 - csplit/all.html | 5 - csplit/fn.main.html | 3 - csplit/index.html | 4 - csplit/sidebar-items.js | 1 - cut/all.html | 5 - cut/fn.main.html | 3 - cut/index.html | 4 - cut/sidebar-items.js | 1 - dark.css | 1 - date/all.html | 5 - date/fn.main.html | 3 - date/index.html | 4 - date/sidebar-items.js | 1 - dd/all.html | 5 - dd/fn.main.html | 3 - dd/index.html | 4 - dd/sidebar-items.js | 1 - df/all.html | 5 - df/fn.main.html | 3 - df/index.html | 4 - df/sidebar-items.js | 1 - dircolors/all.html | 5 - dircolors/fn.main.html | 3 - dircolors/index.html | 4 - dircolors/sidebar-items.js | 1 - dirname/all.html | 5 - dirname/fn.main.html | 3 - dirname/index.html | 4 - dirname/sidebar-items.js | 1 - down-arrow.svg | 1 - du/all.html | 5 - du/fn.main.html | 3 - du/index.html | 4 - du/sidebar-items.js | 1 - echo/all.html | 5 - echo/fn.main.html | 3 - echo/index.html | 4 - echo/sidebar-items.js | 1 - env/all.html | 5 - env/fn.main.html | 3 - env/index.html | 4 - env/sidebar-items.js | 1 - expand/all.html | 5 - expand/fn.main.html | 3 - expand/index.html | 4 - expand/sidebar-items.js | 1 - expr/all.html | 5 - expr/fn.main.html | 3 - expr/index.html | 4 - expr/sidebar-items.js | 1 - factor/all.html | 5 - factor/fn.main.html | 3 - factor/index.html | 4 - factor/sidebar-items.js | 1 - false/all.html | 5 - false/fn.main.html | 3 - false/index.html | 4 - false/sidebar-items.js | 1 - favicon-16x16.png | Bin 2214 -> 0 bytes favicon-32x32.png | Bin 2919 -> 0 bytes favicon.svg | 24 - fmt/all.html | 5 - fmt/fn.main.html | 3 - fmt/index.html | 4 - fmt/sidebar-items.js | 1 - fold/all.html | 5 - fold/fn.main.html | 3 - fold/index.html | 4 - fold/sidebar-items.js | 1 - groups/all.html | 5 - groups/fn.main.html | 3 - groups/index.html | 4 - groups/sidebar-items.js | 1 - hashsum/all.html | 5 - hashsum/fn.main.html | 3 - hashsum/index.html | 4 - hashsum/sidebar-items.js | 1 - head/all.html | 5 - head/fn.main.html | 3 - head/index.html | 4 - head/sidebar-items.js | 1 - hostid/all.html | 5 - hostid/fn.main.html | 3 - hostid/index.html | 4 - hostid/sidebar-items.js | 1 - hostname/all.html | 5 - hostname/fn.main.html | 3 - hostname/index.html | 4 - hostname/sidebar-items.js | 1 - id/all.html | 5 - id/fn.main.html | 3 - id/index.html | 4 - id/sidebar-items.js | 1 - implementors/core/clone/trait.Clone.js | 11 - implementors/core/cmp/trait.Eq.js | 8 - implementors/core/cmp/trait.Ord.js | 4 - implementors/core/cmp/trait.PartialEq.js | 11 - implementors/core/cmp/trait.PartialOrd.js | 5 - implementors/core/convert/trait.From.js | 4 - implementors/core/default/trait.Default.js | 3 - implementors/core/fmt/trait.Debug.js | 10 - implementors/core/fmt/trait.Display.js | 6 - implementors/core/hash/trait.Hash.js | 3 - .../iter/traits/iterator/trait.Iterator.js | 4 - implementors/core/marker/trait.Copy.js | 7 - implementors/core/marker/trait.Freeze.js | 17 - implementors/core/marker/trait.Send.js | 17 - .../core/marker/trait.StructuralEq.js | 8 - .../core/marker/trait.StructuralPartialEq.js | 11 - implementors/core/marker/trait.Sync.js | 17 - implementors/core/marker/trait.Unpin.js | 17 - implementors/core/ops/drop/trait.Drop.js | 3 - .../panic/unwind_safe/trait.RefUnwindSafe.js | 17 - .../panic/unwind_safe/trait.UnwindSafe.js | 17 - implementors/core/str/traits/trait.FromStr.js | 4 - implementors/std/error/trait.Error.js | 5 - implementors/uu_chgrp/entries/trait.Locate.js | 3 - implementors/uu_chown/trait.Locate.js | 3 - implementors/uu_dircolors/trait.StrUtils.js | 3 - implementors/uu_pinky/trait.Capitalize.js | 3 - implementors/uu_stat/trait.ScanUtil.js | 3 - implementors/uucore/display/trait.Quotable.js | 3 - implementors/uucore/entries/trait.Locate.js | 3 - implementors/uucore/error/trait.FromIo.js | 3 - implementors/uucore/error/trait.UError.js | 3 - implementors/uucore/fsext/trait.BirthTime.js | 3 - implementors/uucore/fsext/trait.FsMeta.js | 3 - .../uucore/mods/error/trait.UError.js | 4 - implementors/uucore/process/trait.ChildExt.js | 3 - implementors/uucore/trait.Args.js | 3 - install/all.html | 5 - install/fn.main.html | 3 - install/index.html | 4 - install/sidebar-items.js | 1 - join/all.html | 5 - join/fn.main.html | 3 - join/index.html | 4 - join/sidebar-items.js | 1 - kill/all.html | 5 - kill/fn.main.html | 3 - kill/index.html | 4 - kill/sidebar-items.js | 1 - libstdbuf/all.html | 5 - libstdbuf/fn.__stdbuf.html | 6 - libstdbuf/index.html | 5 - libstdbuf/sidebar-items.js | 1 - light.css | 1 - link/all.html | 5 - link/fn.main.html | 3 - link/index.html | 4 - link/sidebar-items.js | 1 - ln/all.html | 5 - ln/fn.main.html | 3 - ln/index.html | 4 - ln/sidebar-items.js | 1 - logname/all.html | 5 - logname/fn.main.html | 3 - logname/index.html | 4 - logname/sidebar-items.js | 1 - ls/all.html | 5 - ls/fn.main.html | 3 - ls/index.html | 4 - ls/sidebar-items.js | 1 - main.js | 8 - mkdir/all.html | 5 - mkdir/fn.main.html | 3 - mkdir/index.html | 4 - mkdir/sidebar-items.js | 1 - mkfifo/all.html | 5 - mkfifo/fn.main.html | 3 - mkfifo/index.html | 4 - mkfifo/sidebar-items.js | 1 - mknod/all.html | 5 - mknod/fn.main.html | 3 - mknod/index.html | 4 - mknod/sidebar-items.js | 1 - mktemp/all.html | 5 - mktemp/fn.main.html | 3 - mktemp/index.html | 4 - mktemp/sidebar-items.js | 1 - more/all.html | 5 - more/fn.main.html | 3 - more/index.html | 4 - more/sidebar-items.js | 1 - mv/all.html | 5 - mv/fn.main.html | 3 - mv/index.html | 4 - mv/sidebar-items.js | 1 - nice/all.html | 5 - nice/fn.main.html | 3 - nice/index.html | 4 - nice/sidebar-items.js | 1 - nl/all.html | 5 - nl/fn.main.html | 3 - nl/index.html | 4 - nl/sidebar-items.js | 1 - nohup/all.html | 5 - nohup/fn.main.html | 3 - nohup/index.html | 4 - nohup/sidebar-items.js | 1 - normalize.css | 2 - noscript.css | 1 - nproc/all.html | 5 - nproc/fn.main.html | 3 - nproc/index.html | 4 - nproc/sidebar-items.js | 1 - numfmt/all.html | 5 - numfmt/fn.main.html | 3 - numfmt/index.html | 4 - numfmt/sidebar-items.js | 1 - od/all.html | 5 - od/fn.main.html | 3 - od/index.html | 4 - od/sidebar-items.js | 1 - paste/all.html | 5 - paste/fn.main.html | 3 - paste/index.html | 4 - paste/sidebar-items.js | 1 - pathchk/all.html | 5 - pathchk/fn.main.html | 3 - pathchk/index.html | 4 - pathchk/sidebar-items.js | 1 - pinky/all.html | 5 - pinky/fn.main.html | 3 - pinky/index.html | 4 - pinky/sidebar-items.js | 1 - pr/all.html | 5 - pr/fn.main.html | 3 - pr/index.html | 4 - pr/sidebar-items.js | 1 - printenv/all.html | 5 - printenv/fn.main.html | 3 - printenv/index.html | 4 - printenv/sidebar-items.js | 1 - printf/all.html | 5 - printf/fn.main.html | 3 - printf/index.html | 4 - printf/sidebar-items.js | 1 - ptx/all.html | 5 - ptx/fn.main.html | 3 - ptx/index.html | 4 - ptx/sidebar-items.js | 1 - pwd/all.html | 5 - pwd/fn.main.html | 3 - pwd/index.html | 4 - pwd/sidebar-items.js | 1 - readlink/all.html | 5 - readlink/fn.main.html | 3 - readlink/index.html | 4 - readlink/sidebar-items.js | 1 - realpath/all.html | 5 - realpath/fn.main.html | 3 - realpath/index.html | 4 - realpath/sidebar-items.js | 1 - relpath/all.html | 5 - relpath/fn.main.html | 3 - relpath/index.html | 4 - relpath/sidebar-items.js | 1 - rm/all.html | 5 - rm/fn.main.html | 3 - rm/index.html | 4 - rm/sidebar-items.js | 1 - rmdir/all.html | 5 - rmdir/fn.main.html | 3 - rmdir/index.html | 4 - rmdir/sidebar-items.js | 1 - runcon/all.html | 5 - runcon/fn.main.html | 3 - runcon/index.html | 4 - runcon/sidebar-items.js | 1 - rust-logo.png | Bin 5758 -> 0 bytes rustdoc.css | 1 - search-index.js | 208 - search.js | 1 - seq/all.html | 5 - seq/fn.main.html | 3 - seq/index.html | 4 - seq/sidebar-items.js | 1 - settings.css | 1 - settings.html | 4 - settings.js | 1 - shred/all.html | 5 - shred/fn.main.html | 3 - shred/index.html | 4 - shred/sidebar-items.js | 1 - shuf/all.html | 5 - shuf/fn.main.html | 3 - shuf/index.html | 4 - shuf/sidebar-items.js | 1 - sleep/all.html | 5 - sleep/fn.main.html | 3 - sleep/index.html | 4 - sleep/sidebar-items.js | 1 - sort/all.html | 5 - sort/fn.main.html | 3 - sort/index.html | 4 - sort/sidebar-items.js | 1 - source-files.js | 207 - source-script.js | 1 - split/all.html | 5 - split/fn.main.html | 3 - split/index.html | 4 - split/sidebar-items.js | 1 - src/arch/main.rs.html | 6 - src/base32/main.rs.html | 6 - src/base64/main.rs.html | 6 - src/basename/main.rs.html | 6 - src/basenc/main.rs.html | 6 - src/cat/main.rs.html | 6 - src/chcon/main.rs.html | 6 - src/chgrp/main.rs.html | 6 - src/chmod/main.rs.html | 6 - src/chown/main.rs.html | 6 - src/chroot/main.rs.html | 6 - src/cksum/main.rs.html | 6 - src/comm/main.rs.html | 6 - src/coreutils/coreutils.rs.html | 360 -- .../out/uutils_map.rs.html | 248 - src/cp/main.rs.html | 6 - src/csplit/main.rs.html | 6 - src/cut/main.rs.html | 6 - src/date/main.rs.html | 6 - src/dd/main.rs.html | 6 - src/df/main.rs.html | 6 - src/dircolors/main.rs.html | 6 - src/dirname/main.rs.html | 6 - src/du/main.rs.html | 6 - src/echo/main.rs.html | 6 - src/env/main.rs.html | 6 - src/expand/main.rs.html | 6 - src/expr/main.rs.html | 6 - src/factor/main.rs.html | 6 - src/false/main.rs.html | 6 - src/fmt/main.rs.html | 6 - src/fold/main.rs.html | 6 - src/groups/main.rs.html | 6 - src/hashsum/main.rs.html | 6 - src/head/main.rs.html | 6 - src/hostid/main.rs.html | 6 - src/hostname/main.rs.html | 6 - src/id/main.rs.html | 6 - src/install/main.rs.html | 6 - src/join/main.rs.html | 6 - src/kill/main.rs.html | 6 - src/libstdbuf/libstdbuf.rs.html | 148 - src/link/main.rs.html | 6 - src/ln/main.rs.html | 6 - src/logname/main.rs.html | 6 - src/ls/main.rs.html | 6 - src/mkdir/main.rs.html | 6 - src/mkfifo/main.rs.html | 6 - src/mknod/main.rs.html | 6 - src/mktemp/main.rs.html | 6 - src/more/main.rs.html | 6 - src/mv/main.rs.html | 6 - src/nice/main.rs.html | 6 - src/nl/main.rs.html | 6 - src/nohup/main.rs.html | 6 - src/nproc/main.rs.html | 6 - src/numfmt/main.rs.html | 6 - src/od/main.rs.html | 6 - src/paste/main.rs.html | 6 - src/pathchk/main.rs.html | 6 - src/pinky/main.rs.html | 6 - src/pr/main.rs.html | 6 - src/printenv/main.rs.html | 6 - src/printf/main.rs.html | 6 - src/ptx/main.rs.html | 6 - src/pwd/main.rs.html | 6 - src/readlink/main.rs.html | 6 - src/realpath/main.rs.html | 6 - src/relpath/main.rs.html | 6 - src/rm/main.rs.html | 6 - src/rmdir/main.rs.html | 6 - src/runcon/main.rs.html | 6 - src/seq/main.rs.html | 6 - src/shred/main.rs.html | 6 - src/shuf/main.rs.html | 6 - src/sleep/main.rs.html | 6 - src/sort/main.rs.html | 6 - src/split/main.rs.html | 6 - src/stat/main.rs.html | 6 - src/stdbuf/main.rs.html | 6 - src/sum/main.rs.html | 6 - src/sync/main.rs.html | 6 - src/tac/main.rs.html | 6 - src/tail/main.rs.html | 6 - src/tee/main.rs.html | 6 - src/test/main.rs.html | 6 - src/timeout/main.rs.html | 6 - src/touch/main.rs.html | 6 - src/tr/main.rs.html | 6 - src/true/main.rs.html | 6 - src/truncate/main.rs.html | 6 - src/tsort/main.rs.html | 6 - src/tty/main.rs.html | 6 - src/uname/main.rs.html | 6 - src/unexpand/main.rs.html | 6 - src/uniq/main.rs.html | 6 - src/unlink/main.rs.html | 6 - src/uptime/main.rs.html | 6 - src/users/main.rs.html | 6 - src/uu_arch/arch.rs.html | 66 - src/uu_base32/base32.rs.html | 108 - src/uu_base32/base_common.rs.html | 358 -- src/uu_base64/base64.rs.html | 102 - src/uu_basename/basename.rs.html | 304 - src/uu_basenc/basenc.rs.html | 176 - src/uu_cat/cat.rs.html | 1294 ----- src/uu_cat/splice.rs.html | 138 - src/uu_chcon/chcon.rs.html | 1532 ----- src/uu_chcon/errors.rs.html | 150 - src/uu_chcon/fts.rs.html | 390 -- src/uu_chgrp/chgrp.rs.html | 294 - src/uu_chmod/chmod.rs.html | 772 --- src/uu_chown/chown.rs.html | 466 -- src/uu_chroot/chroot.rs.html | 486 -- src/uu_chroot/error.rs.html | 166 - src/uu_cksum/cksum.rs.html | 312 -- src/uu_comm/comm.rs.html | 364 -- src/uu_cp/cp.rs.html | 3170 ----------- src/uu_csplit/csplit.rs.html | 1626 ------ src/uu_csplit/csplit_error.rs.html | 96 - src/uu_csplit/patterns.rs.html | 702 --- src/uu_csplit/split_name.rs.html | 844 --- src/uu_cut/cut.rs.html | 1238 ----- src/uu_cut/searcher.rs.html | 214 - src/uu_date/date.rs.html | 852 --- src/uu_dd/conversion_tables.rs.html | 446 -- src/uu_dd/datastructures.rs.html | 354 -- src/uu_dd/dd.rs.html | 2260 -------- src/uu_dd/parseargs.rs.html | 1400 ----- src/uu_df/df.rs.html | 1072 ---- src/uu_dircolors/colors.rs.html | 390 -- src/uu_dircolors/dircolors.rs.html | 754 --- src/uu_dirname/dirname.rs.html | 198 - src/uu_du/du.rs.html | 1728 ------ src/uu_echo/echo.rs.html | 378 -- src/uu_env/env.rs.html | 652 --- src/uu_expand/expand.rs.html | 796 --- src/uu_expr/expr.rs.html | 282 - src/uu_expr/syntax_tree.rs.html | 1078 ---- src/uu_expr/tokens.rs.html | 328 -- src/uu_factor/cli.rs.html | 174 - src/uu_factor/factor.rs.html | 602 -- .../out/prime_table.rs.html | 362 -- src/uu_factor/miller_rabin.rs.html | 424 -- src/uu_factor/numeric/gcd.rs.html | 262 - src/uu_factor/numeric/mod.rs.html | 38 - src/uu_factor/numeric/modular_inverse.rs.html | 162 - src/uu_factor/numeric/montgomery.rs.html | 462 -- src/uu_factor/numeric/traits.rs.html | 184 - src/uu_factor/rho.rs.html | 98 - src/uu_factor/table.rs.html | 206 - src/uu_false/false.rs.html | 42 - src/uu_fmt/fmt.rs.html | 706 --- src/uu_fmt/linebreak.rs.html | 1046 ---- src/uu_fmt/parasplit.rs.html | 1258 ----- src/uu_fold/fold.rs.html | 606 -- src/uu_groups/groups.rs.html | 240 - src/uu_hashsum/digest.rs.html | 632 --- src/uu_hashsum/hashsum.rs.html | 1296 ----- src/uu_head/head.rs.html | 1290 ----- src/uu_head/lines.rs.html | 154 - src/uu_head/parse.rs.html | 368 -- src/uu_head/take.rs.html | 362 -- src/uu_hostid/hostid.rs.html | 106 - src/uu_hostname/hostname.rs.html | 328 -- src/uu_id/id.rs.html | 1346 ----- src/uu_install/install.rs.html | 1520 ----- src/uu_install/mode.rs.html | 82 - src/uu_join/join.rs.html | 1716 ------ src/uu_kill/kill.rs.html | 420 -- src/uu_link/link.rs.html | 108 - src/uu_ln/ln.rs.html | 976 ---- src/uu_logname/logname.rs.html | 128 - src/uu_ls/ls.rs.html | 4946 ----------------- src/uu_ls/quoting_style.rs.html | 1464 ----- src/uu_mkdir/mkdir.rs.html | 388 -- src/uu_mkfifo/mkfifo.rs.html | 214 - src/uu_mknod/mknod.rs.html | 448 -- src/uu_mktemp/mktemp.rs.html | 560 -- src/uu_more/more.rs.html | 1002 ---- src/uu_mv/error.rs.html | 90 - src/uu_mv/mv.rs.html | 908 --- src/uu_nice/nice.rs.html | 250 - src/uu_nl/helper.rs.html | 296 - src/uu_nl/nl.rs.html | 794 --- src/uu_nohup/nohup.rs.html | 448 -- src/uu_nproc/nproc.rs.html | 242 - src/uu_numfmt/errors.rs.html | 82 - src/uu_numfmt/format.rs.html | 642 --- src/uu_numfmt/numfmt.rs.html | 676 --- src/uu_numfmt/options.rs.html | 132 - src/uu_numfmt/units.rs.html | 130 - src/uu_od/byteorder_io.rs.html | 108 - src/uu_od/formatteriteminfo.rs.html | 122 - src/uu_od/inputdecoder.rs.html | 396 -- src/uu_od/inputoffset.rs.html | 232 - src/uu_od/multifilereader.rs.html | 418 -- src/uu_od/od.rs.html | 1352 ----- src/uu_od/output_info.rs.html | 898 --- src/uu_od/parse_formats.rs.html | 1088 ---- src/uu_od/parse_inputs.rs.html | 740 --- src/uu_od/parse_nrofbytes.rs.html | 186 - src/uu_od/partialreader.rs.html | 424 -- src/uu_od/peekreader.rs.html | 434 -- src/uu_od/prn_char.rs.html | 314 -- src/uu_od/prn_float.rs.html | 448 -- src/uu_od/prn_int.rs.html | 398 -- src/uu_paste/paste.rs.html | 310 -- src/uu_pathchk/pathchk.rs.html | 508 -- src/uu_pinky/pinky.rs.html | 764 --- src/uu_pr/pr.rs.html | 2606 --------- src/uu_printenv/printenv.rs.html | 164 - src/uu_printf/printf.rs.html | 604 -- src/uu_ptx/ptx.rs.html | 1668 ------ src/uu_pwd/pwd.rs.html | 348 -- src/uu_readlink/readlink.rs.html | 362 -- src/uu_realpath/realpath.rs.html | 344 -- src/uu_relpath/relpath.rs.html | 192 - src/uu_rm/rm.rs.html | 918 --- src/uu_rmdir/rmdir.rs.html | 414 -- src/uu_runcon/errors.rs.html | 236 - src/uu_runcon/runcon.rs.html | 854 --- src/uu_seq/error.rs.html | 144 - src/uu_seq/extendedbigdecimal.rs.html | 584 -- src/uu_seq/extendedbigint.rs.html | 440 -- src/uu_seq/number.rs.html | 242 - src/uu_seq/numberparse.rs.html | 1240 ----- src/uu_seq/seq.rs.html | 756 --- src/uu_shred/shred.rs.html | 1318 ----- src/uu_shuf/rand_read_adapter.rs.html | 292 - src/uu_shuf/shuf.rs.html | 640 --- src/uu_sleep/sleep.rs.html | 152 - src/uu_sort/check.rs.html | 264 - src/uu_sort/chunks.rs.html | 640 --- src/uu_sort/custom_str_cmp.rs.html | 132 - src/uu_sort/ext_sort.rs.html | 576 -- src/uu_sort/merge.rs.html | 1114 ---- src/uu_sort/numeric_str_cmp.rs.html | 1014 ---- src/uu_sort/sort.rs.html | 3958 ------------- src/uu_sort/tmp_dir.rs.html | 174 - src/uu_split/filenames.rs.html | 1062 ---- src/uu_split/platform/mod.rs.html | 26 - src/uu_split/platform/unix.rs.html | 254 - src/uu_split/split.rs.html | 840 --- src/uu_stat/stat.rs.html | 2038 ------- src/uu_stdbuf/stdbuf.rs.html | 466 -- src/uu_sum/sum.rs.html | 334 -- src/uu_sync/sync.rs.html | 472 -- src/uu_tac/error.rs.html | 124 - src/uu_tac/tac.rs.html | 636 --- src/uu_tail/chunks.rs.html | 170 - src/uu_tail/lines.rs.html | 170 - src/uu_tail/parse.rs.html | 326 -- src/uu_tail/platform/mod.rs.html | 46 - src/uu_tail/platform/unix.rs.html | 128 - src/uu_tail/tail.rs.html | 1316 ----- src/uu_tee/tee.rs.html | 456 -- src/uu_test/parser.rs.html | 828 --- src/uu_test/test.rs.html | 788 --- src/uu_timeout/timeout.rs.html | 558 -- src/uu_touch/touch.rs.html | 580 -- src/uu_tr/convert.rs.html | 78 - src/uu_tr/operation.rs.html | 1116 ---- src/uu_tr/tr.rs.html | 388 -- src/uu_tr/unicode_table.rs.html | 34 - src/uu_true/true.rs.html | 42 - src/uu_truncate/truncate.rs.html | 764 --- src/uu_tsort/tsort.rs.html | 376 -- src/uu_tty/tty.rs.html | 176 - src/uu_uname/uname.rs.html | 330 -- src/uu_unexpand/unexpand.rs.html | 694 --- src/uu_uniq/uniq.rs.html | 870 --- src/uu_unlink/unlink.rs.html | 84 - src/uu_uptime/uptime.rs.html | 372 -- src/uu_users/users.rs.html | 148 - src/uu_wc/count_fast.rs.html | 264 - src/uu_wc/countable.rs.html | 78 - src/uu_wc/wc.rs.html | 1068 ---- src/uu_wc/word_count.rs.html | 100 - src/uu_who/who.rs.html | 1130 ---- src/uu_whoami/platform/mod.rs.html | 48 - src/uu_whoami/platform/unix.rs.html | 46 - src/uu_whoami/whoami.rs.html | 72 - src/uu_yes/splice.rs.html | 138 - src/uu_yes/yes.rs.html | 170 - src/uucore/features.rs.html | 90 - src/uucore/features/encoding.rs.html | 362 -- src/uucore/features/entries.rs.html | 760 --- src/uucore/features/fs.rs.html | 1138 ---- src/uucore/features/fsext.rs.html | 1884 ------- src/uucore/features/memo.rs.html | 172 - src/uucore/features/mode.rs.html | 406 -- src/uucore/features/perms.rs.html | 1060 ---- src/uucore/features/pipes.rs.html | 142 - src/uucore/features/process.rs.html | 298 - src/uucore/features/ringbuffer.rs.html | 270 - src/uucore/features/signals.rs.html | 268 - src/uucore/features/tokenize/mod.rs.html | 14 - .../tokenize/num_format/format_field.rs.html | 90 - .../tokenize/num_format/formatter.rs.html | 122 - .../formatters/base_conv/mod.rs.html | 544 -- .../formatters/base_conv/tests.rs.html | 116 - .../formatters/cninetyninehexfloatf.rs.html | 232 - .../num_format/formatters/decf.rs.html | 166 - .../formatters/float_common.rs.html | 704 --- .../num_format/formatters/floatf.rs.html | 88 - .../num_format/formatters/intf.rs.html | 564 -- .../num_format/formatters/mod.rs.html | 22 - .../num_format/formatters/scif.rs.html | 88 - .../features/tokenize/num_format/mod.rs.html | 12 - .../tokenize/num_format/num_format.rs.html | 544 -- src/uucore/features/tokenize/sub.rs.html | 844 --- src/uucore/features/tokenize/token.rs.html | 66 - .../features/tokenize/unescaped_text.rs.html | 556 -- src/uucore/features/utmpx.rs.html | 720 --- src/uucore/lib.rs.html | 610 -- src/uucore/macros.rs.html | 556 -- src/uucore/mods.rs.html | 22 - src/uucore/mods/backup_control.rs.html | 1246 ----- src/uucore/mods/display.rs.html | 142 - src/uucore/mods/error.rs.html | 1238 ----- src/uucore/mods/os.rs.html | 70 - src/uucore/mods/panic.rs.html | 88 - src/uucore/mods/ranges.rs.html | 354 -- src/uucore/mods/version_cmp.rs.html | 726 --- src/uucore/parser.rs.html | 8 - src/uucore/parser/parse_size.rs.html | 668 --- src/uucore/parser/parse_time.rs.html | 90 - src/uucore_procs/lib.rs.html | 236 - .../out/uutils_map.rs.html | 248 - src/uudoc/uudoc.rs.html | 278 - src/wc/main.rs.html | 6 - src/who/main.rs.html | 6 - src/whoami/main.rs.html | 6 - src/yes/main.rs.html | 6 - stat/all.html | 5 - stat/fn.main.html | 3 - stat/index.html | 4 - stat/sidebar-items.js | 1 - stdbuf/all.html | 5 - stdbuf/fn.main.html | 3 - stdbuf/index.html | 4 - stdbuf/sidebar-items.js | 1 - storage.js | 1 - sum/all.html | 5 - sum/fn.main.html | 3 - sum/index.html | 4 - sum/sidebar-items.js | 1 - sync/all.html | 5 - sync/fn.main.html | 3 - sync/index.html | 4 - sync/sidebar-items.js | 1 - tac/all.html | 5 - tac/fn.main.html | 3 - tac/index.html | 4 - tac/sidebar-items.js | 1 - tail/all.html | 5 - tail/fn.main.html | 3 - tail/index.html | 4 - tail/sidebar-items.js | 1 - tee/all.html | 5 - tee/fn.main.html | 3 - tee/index.html | 4 - tee/sidebar-items.js | 1 - test/all.html | 5 - test/fn.main.html | 3 - test/index.html | 4 - test/sidebar-items.js | 1 - timeout/all.html | 5 - timeout/fn.main.html | 3 - timeout/index.html | 4 - timeout/sidebar-items.js | 1 - toggle-minus.svg | 1 - toggle-plus.svg | 1 - touch/all.html | 5 - touch/fn.main.html | 3 - touch/index.html | 4 - touch/sidebar-items.js | 1 - tr/all.html | 5 - tr/fn.main.html | 3 - tr/index.html | 4 - tr/sidebar-items.js | 1 - true/all.html | 5 - true/fn.main.html | 3 - true/index.html | 4 - true/sidebar-items.js | 1 - truncate/all.html | 5 - truncate/fn.main.html | 3 - truncate/index.html | 4 - truncate/sidebar-items.js | 1 - tsort/all.html | 5 - tsort/fn.main.html | 3 - tsort/index.html | 4 - tsort/sidebar-items.js | 1 - tty/all.html | 5 - tty/fn.main.html | 3 - tty/index.html | 4 - tty/sidebar-items.js | 1 - uname/all.html | 5 - uname/fn.main.html | 3 - uname/index.html | 4 - uname/sidebar-items.js | 1 - unexpand/all.html | 5 - unexpand/fn.main.html | 3 - unexpand/index.html | 4 - unexpand/sidebar-items.js | 1 - uniq/all.html | 5 - uniq/fn.main.html | 3 - uniq/index.html | 4 - uniq/sidebar-items.js | 1 - unlink/all.html | 5 - unlink/fn.main.html | 3 - unlink/index.html | 4 - unlink/sidebar-items.js | 1 - uptime/all.html | 5 - uptime/fn.main.html | 3 - uptime/index.html | 4 - uptime/sidebar-items.js | 1 - users/all.html | 5 - users/fn.main.html | 3 - users/index.html | 4 - users/sidebar-items.js | 1 - uu_arch/all.html | 5 - uu_arch/fn.uu_app.html | 3 - uu_arch/fn.uumain.html | 3 - uu_arch/index.html | 4 - uu_arch/sidebar-items.js | 1 - uu_base32/all.html | 5 - uu_base32/base_common/fn.base_app.html | 3 - uu_base32/base_common/fn.get_input.html | 3 - uu_base32/base_common/fn.handle_input.html | 3 - .../base_common/fn.parse_base_cmd_args.html | 3 - uu_base32/base_common/index.html | 7 - uu_base32/base_common/options/index.html | 4 - .../base_common/options/sidebar-items.js | 1 - .../base_common/options/static.DECODE.html | 3 - .../base_common/options/static.FILE.html | 3 - .../options/static.IGNORE_GARBAGE.html | 3 - .../base_common/options/static.WRAP.html | 3 - uu_base32/base_common/sidebar-items.js | 1 - .../static.BASE_CMD_PARSE_ERROR.html | 3 - uu_base32/base_common/struct.Config.html | 17 - uu_base32/fn.uu_app.html | 3 - uu_base32/fn.uumain.html | 3 - uu_base32/index.html | 5 - uu_base32/sidebar-items.js | 1 - uu_base64/all.html | 5 - uu_base64/fn.uu_app.html | 3 - uu_base64/fn.uumain.html | 3 - uu_base64/index.html | 4 - uu_base64/sidebar-items.js | 1 - uu_basename/all.html | 5 - uu_basename/fn.uu_app.html | 3 - uu_basename/fn.uumain.html | 3 - uu_basename/index.html | 5 - uu_basename/options/index.html | 4 - uu_basename/options/sidebar-items.js | 1 - uu_basename/options/static.MULTIPLE.html | 3 - uu_basename/options/static.NAME.html | 3 - uu_basename/options/static.SUFFIX.html | 3 - uu_basename/options/static.ZERO.html | 3 - uu_basename/sidebar-items.js | 1 - uu_basenc/all.html | 5 - uu_basenc/fn.uu_app.html | 3 - uu_basenc/fn.uumain.html | 3 - uu_basenc/index.html | 4 - uu_basenc/sidebar-items.js | 1 - uu_cat/all.html | 5 - uu_cat/fn.uu_app.html | 3 - uu_cat/fn.uumain.html | 3 - uu_cat/index.html | 4 - uu_cat/sidebar-items.js | 1 - uu_chcon/all.html | 5 - uu_chcon/fn.uu_app.html | 3 - uu_chcon/fn.uumain.html | 3 - uu_chcon/index.html | 5 - uu_chcon/options/dereference/index.html | 4 - uu_chcon/options/dereference/sidebar-items.js | 1 - .../dereference/static.DEREFERENCE.html | 3 - .../dereference/static.NO_DEREFERENCE.html | 3 - uu_chcon/options/index.html | 5 - uu_chcon/options/preserve_root/index.html | 4 - .../options/preserve_root/sidebar-items.js | 1 - .../static.NO_PRESERVE_ROOT.html | 3 - .../preserve_root/static.PRESERVE_ROOT.html | 3 - uu_chcon/options/sidebar-items.js | 1 - uu_chcon/options/static.RANGE.html | 3 - uu_chcon/options/static.RECURSIVE.html | 3 - uu_chcon/options/static.REFERENCE.html | 3 - uu_chcon/options/static.ROLE.html | 3 - uu_chcon/options/static.TYPE.html | 3 - uu_chcon/options/static.USER.html | 3 - uu_chcon/options/static.VERBOSE.html | 3 - uu_chcon/options/sym_links/index.html | 4 - uu_chcon/options/sym_links/sidebar-items.js | 1 - .../static.FOLLOW_ARG_DIR_SYM_LINK.html | 3 - .../static.FOLLOW_DIR_SYM_LINKS.html | 3 - .../sym_links/static.NO_FOLLOW_SYM_LINKS.html | 3 - uu_chcon/sidebar-items.js | 1 - uu_chgrp/all.html | 5 - uu_chgrp/entries/fn.get_groups.html | 12 - uu_chgrp/entries/fn.get_groups_gnu.html | 25 - uu_chgrp/entries/fn.gid2grp.html | 3 - uu_chgrp/entries/fn.grp2gid.html | 3 - uu_chgrp/entries/fn.uid2usr.html | 3 - uu_chgrp/entries/fn.usr2uid.html | 3 - uu_chgrp/entries/index.html | 33 - uu_chgrp/entries/sidebar-items.js | 1 - uu_chgrp/entries/struct.Group.html | 23 - uu_chgrp/entries/struct.Passwd.html | 47 - uu_chgrp/entries/trait.Locate.html | 6 - uu_chgrp/fn.uu_app.html | 3 - uu_chgrp/fn.uumain.html | 3 - uu_chgrp/index.html | 6 - uu_chgrp/sidebar-items.js | 1 - uu_chmod/all.html | 5 - uu_chmod/fn.is_symlink.html | 3 - uu_chmod/fn.uu_app.html | 3 - uu_chmod/fn.uumain.html | 3 - uu_chmod/index.html | 4 - uu_chmod/sidebar-items.js | 1 - uu_chown/all.html | 5 - uu_chown/entries/fn.get_groups.html | 12 - uu_chown/entries/fn.get_groups_gnu.html | 25 - uu_chown/entries/fn.gid2grp.html | 3 - uu_chown/entries/fn.grp2gid.html | 3 - uu_chown/entries/fn.uid2usr.html | 3 - uu_chown/entries/fn.usr2uid.html | 3 - uu_chown/entries/index.html | 33 - uu_chown/entries/sidebar-items.js | 1 - uu_chown/entries/struct.Group.html | 23 - uu_chown/entries/struct.Passwd.html | 47 - uu_chown/entries/trait.Locate.html | 6 - uu_chown/fn.uu_app.html | 3 - uu_chown/fn.uumain.html | 3 - uu_chown/index.html | 9 - uu_chown/sidebar-items.js | 1 - uu_chown/struct.Group.html | 23 - uu_chown/struct.Passwd.html | 47 - uu_chown/trait.Locate.html | 6 - uu_chroot/all.html | 5 - uu_chroot/fn.uu_app.html | 3 - uu_chroot/fn.uumain.html | 3 - uu_chroot/index.html | 4 - uu_chroot/sidebar-items.js | 1 - uu_cksum/all.html | 5 - uu_cksum/fn.uu_app.html | 3 - uu_cksum/fn.uumain.html | 3 - uu_cksum/index.html | 4 - uu_cksum/sidebar-items.js | 1 - uu_comm/all.html | 5 - uu_comm/fn.uu_app.html | 3 - uu_comm/fn.uumain.html | 3 - uu_comm/index.html | 4 - uu_comm/sidebar-items.js | 1 - uu_cp/all.html | 5 - uu_cp/enum.Attribute.html | 42 - uu_cp/enum.ClobberMode.html | 26 - uu_cp/enum.CopyMode.html | 19 - uu_cp/enum.Error.html | 52 - uu_cp/enum.OverwriteMode.html | 29 - uu_cp/enum.ReflinkMode.html | 26 - uu_cp/enum.TargetType.html | 16 - uu_cp/fn.ficlone.html | 3 - uu_cp/fn.localize_to_target.html | 11 - uu_cp/fn.paths_refer_to_same_file.html | 3 - uu_cp/fn.uu_app.html | 3 - uu_cp/fn.uumain.html | 3 - uu_cp/fn.verify_target_type.html | 4 - uu_cp/index.html | 15 - uu_cp/sidebar-items.js | 1 - uu_cp/struct.Options.html | 13 - uu_cp/type.CopyResult.html | 3 - uu_cp/type.Source.html | 3 - uu_cp/type.SourceSlice.html | 3 - uu_cp/type.Target.html | 3 - uu_cp/type.TargetSlice.html | 3 - uu_csplit/all.html | 5 - uu_csplit/fn.csplit.html | 15 - uu_csplit/fn.uu_app.html | 3 - uu_csplit/fn.uumain.html | 3 - uu_csplit/index.html | 7 - uu_csplit/sidebar-items.js | 1 - uu_csplit/struct.CsplitOptions.html | 13 - uu_cut/all.html | 5 - uu_cut/fn.uu_app.html | 3 - uu_cut/fn.uumain.html | 3 - uu_cut/index.html | 4 - uu_cut/sidebar-items.js | 1 - uu_date/all.html | 5 - uu_date/fn.uu_app.html | 3 - uu_date/fn.uumain.html | 3 - uu_date/index.html | 4 - uu_date/sidebar-items.js | 1 - uu_dd/all.html | 5 - uu_dd/fn.uu_app.html | 3 - uu_dd/fn.uumain.html | 3 - uu_dd/index.html | 4 - uu_dd/sidebar-items.js | 1 - uu_df/all.html | 5 - uu_df/fn.uu_app.html | 3 - uu_df/fn.uumain.html | 3 - uu_df/index.html | 4 - uu_df/sidebar-items.js | 1 - uu_dircolors/all.html | 5 - uu_dircolors/enum.OutputFmt.html | 20 - uu_dircolors/fn.guess_syntax.html | 3 - uu_dircolors/fn.uu_app.html | 3 - uu_dircolors/fn.uumain.html | 3 - uu_dircolors/index.html | 6 - uu_dircolors/sidebar-items.js | 1 - uu_dircolors/trait.StrUtils.html | 9 - uu_dirname/all.html | 5 - uu_dirname/fn.uu_app.html | 3 - uu_dirname/fn.uumain.html | 3 - uu_dirname/index.html | 4 - uu_dirname/sidebar-items.js | 1 - uu_du/all.html | 5 - uu_du/fn.uu_app.html | 3 - uu_du/fn.uumain.html | 3 - uu_du/index.html | 4 - uu_du/sidebar-items.js | 1 - uu_echo/all.html | 5 - uu_echo/fn.uu_app.html | 3 - uu_echo/fn.uumain.html | 3 - uu_echo/index.html | 4 - uu_echo/sidebar-items.js | 1 - uu_env/all.html | 5 - uu_env/fn.uu_app.html | 3 - uu_env/fn.uumain.html | 3 - uu_env/index.html | 4 - uu_env/sidebar-items.js | 1 - uu_expand/all.html | 5 - uu_expand/fn.uu_app.html | 3 - uu_expand/fn.uumain.html | 3 - uu_expand/index.html | 5 - uu_expand/options/index.html | 4 - uu_expand/options/sidebar-items.js | 1 - uu_expand/options/static.FILES.html | 3 - uu_expand/options/static.INITIAL.html | 3 - uu_expand/options/static.NO_UTF8.html | 3 - uu_expand/options/static.TABS.html | 3 - uu_expand/sidebar-items.js | 1 - uu_expr/all.html | 5 - uu_expr/fn.uu_app.html | 3 - uu_expr/fn.uumain.html | 3 - uu_expr/index.html | 4 - uu_expr/sidebar-items.js | 1 - uu_factor/all.html | 5 - uu_factor/factor/fn.factor.html | 11 - uu_factor/factor/struct.Factors.html | 11 - uu_factor/fn.factor.html | 3 - uu_factor/fn.uu_app.html | 3 - uu_factor/fn.uumain.html | 3 - uu_factor/index.html | 6 - uu_factor/numeric/fn.gcd.html | 3 - uu_factor/numeric/gcd/fn.gcd.html | 11 - uu_factor/numeric/index.html | 4 - uu_factor/numeric/sidebar-items.js | 1 - uu_factor/sidebar-items.js | 1 - uu_factor/struct.Factors.html | 24 - uu_factor/table/constant.CHUNK_SIZE.html | 3 - uu_factor/table/constant.NEXT_PRIME.html | 3 - .../table/constant.PRIME_INVERSIONS_U64.html | 3 - uu_factor/table/fn.factor.html | 3 - uu_factor/table/fn.factor_chunk.html | 3 - uu_factor/table/index.html | 5 - uu_factor/table/sidebar-items.js | 1 - uu_false/all.html | 5 - uu_false/fn.uu_app.html | 3 - uu_false/fn.uumain.html | 3 - uu_false/index.html | 4 - uu_false/sidebar-items.js | 1 - uu_fmt/all.html | 5 - uu_fmt/fn.uu_app.html | 3 - uu_fmt/fn.uumain.html | 3 - uu_fmt/index.html | 6 - uu_fmt/sidebar-items.js | 1 - uu_fmt/struct.FmtOptions.html | 12 - uu_fmt/type.FileOrStdReader.html | 3 - uu_fold/all.html | 5 - uu_fold/fn.uu_app.html | 3 - uu_fold/fn.uumain.html | 3 - uu_fold/index.html | 4 - uu_fold/sidebar-items.js | 1 - uu_groups/all.html | 5 - uu_groups/fn.uu_app.html | 3 - uu_groups/fn.uumain.html | 3 - uu_groups/index.html | 4 - uu_groups/sidebar-items.js | 1 - uu_hashsum/all.html | 5 - uu_hashsum/fn.uu_app_common.html | 3 - uu_hashsum/fn.uu_app_custom.html | 3 - uu_hashsum/fn.uumain.html | 3 - uu_hashsum/index.html | 4 - uu_hashsum/sidebar-items.js | 1 - uu_head/all.html | 5 - uu_head/fn.uu_app.html | 3 - uu_head/fn.uumain.html | 3 - uu_head/index.html | 4 - uu_head/sidebar-items.js | 1 - uu_hostid/all.html | 5 - uu_hostid/fn.gethostid.html | 3 - uu_hostid/fn.uu_app.html | 3 - uu_hostid/fn.uumain.html | 3 - uu_hostid/index.html | 4 - uu_hostid/sidebar-items.js | 1 - uu_hostname/all.html | 5 - uu_hostname/fn.uu_app.html | 3 - uu_hostname/fn.uumain.html | 3 - uu_hostname/index.html | 4 - uu_hostname/sidebar-items.js | 1 - uu_id/all.html | 5 - uu_id/fn.uu_app.html | 3 - uu_id/fn.uumain.html | 3 - uu_id/index.html | 5 - uu_id/sidebar-items.js | 1 - uu_install/all.html | 5 - uu_install/enum.MainFunction.html | 26 - uu_install/fn.uu_app.html | 3 - uu_install/fn.uumain.html | 3 - uu_install/index.html | 6 - uu_install/sidebar-items.js | 1 - uu_install/struct.Behavior.html | 13 - uu_join/all.html | 5 - uu_join/fn.uu_app.html | 3 - uu_join/fn.uumain.html | 3 - uu_join/index.html | 4 - uu_join/sidebar-items.js | 1 - uu_kill/all.html | 5 - uu_kill/enum.Mode.html | 21 - uu_kill/fn.uu_app.html | 3 - uu_kill/fn.uumain.html | 3 - uu_kill/index.html | 6 - uu_kill/options/index.html | 4 - uu_kill/options/sidebar-items.js | 1 - uu_kill/options/static.LIST.html | 3 - uu_kill/options/static.PIDS_OR_SIGNALS.html | 3 - uu_kill/options/static.SIGNAL.html | 3 - uu_kill/options/static.TABLE.html | 3 - uu_kill/options/static.TABLE_OLD.html | 3 - uu_kill/sidebar-items.js | 1 - uu_link/all.html | 5 - uu_link/fn.uu_app.html | 3 - uu_link/fn.uumain.html | 3 - uu_link/index.html | 5 - uu_link/options/index.html | 4 - uu_link/options/sidebar-items.js | 1 - uu_link/options/static.FILES.html | 3 - uu_link/sidebar-items.js | 1 - uu_ln/all.html | 5 - uu_ln/enum.OverwriteMode.html | 26 - uu_ln/fn.is_symlink.html | 3 - uu_ln/fn.uu_app.html | 3 - uu_ln/fn.uumain.html | 3 - uu_ln/index.html | 6 - uu_ln/sidebar-items.js | 1 - uu_ln/struct.Settings.html | 12 - uu_logname/all.html | 5 - uu_logname/fn.getlogin.html | 3 - uu_logname/fn.uu_app.html | 3 - uu_logname/fn.uumain.html | 3 - uu_logname/index.html | 4 - uu_logname/sidebar-items.js | 1 - uu_ls/all.html | 5 - uu_ls/fn.uu_app.html | 3 - uu_ls/fn.uumain.html | 3 - uu_ls/index.html | 5 - uu_ls/options/dereference/index.html | 4 - uu_ls/options/dereference/sidebar-items.js | 1 - uu_ls/options/dereference/static.ALL.html | 3 - uu_ls/options/dereference/static.ARGS.html | 3 - .../options/dereference/static.DIR_ARGS.html | 3 - uu_ls/options/files/index.html | 4 - uu_ls/options/files/sidebar-items.js | 1 - uu_ls/options/files/static.ALL.html | 3 - uu_ls/options/files/static.ALMOST_ALL.html | 3 - uu_ls/options/format/index.html | 4 - uu_ls/options/format/sidebar-items.js | 1 - uu_ls/options/format/static.ACROSS.html | 3 - uu_ls/options/format/static.COLUMNS.html | 3 - uu_ls/options/format/static.COMMAS.html | 3 - uu_ls/options/format/static.LONG.html | 3 - .../options/format/static.LONG_NO_GROUP.html | 3 - .../options/format/static.LONG_NO_OWNER.html | 3 - .../format/static.LONG_NUMERIC_UID_GID.html | 3 - uu_ls/options/format/static.ONE_LINE.html | 3 - uu_ls/options/index.html | 5 - uu_ls/options/indicator_style/index.html | 4 - .../options/indicator_style/sidebar-items.js | 1 - .../indicator_style/static.CLASSIFY.html | 3 - .../indicator_style/static.FILE_TYPE.html | 3 - .../options/indicator_style/static.SLASH.html | 3 - uu_ls/options/quoting/index.html | 4 - uu_ls/options/quoting/sidebar-items.js | 1 - uu_ls/options/quoting/static.C.html | 3 - uu_ls/options/quoting/static.ESCAPE.html | 3 - uu_ls/options/quoting/static.LITERAL.html | 3 - uu_ls/options/sidebar-items.js | 1 - uu_ls/options/size/index.html | 4 - uu_ls/options/size/sidebar-items.js | 1 - uu_ls/options/size/static.HUMAN_READABLE.html | 3 - uu_ls/options/size/static.SI.html | 3 - uu_ls/options/sort/index.html | 4 - uu_ls/options/sort/sidebar-items.js | 1 - uu_ls/options/sort/static.EXTENSION.html | 3 - uu_ls/options/sort/static.NONE.html | 3 - uu_ls/options/sort/static.SIZE.html | 3 - uu_ls/options/sort/static.TIME.html | 3 - uu_ls/options/sort/static.VERSION.html | 3 - uu_ls/options/static.AUTHOR.html | 3 - uu_ls/options/static.COLOR.html | 3 - uu_ls/options/static.CONTEXT.html | 3 - uu_ls/options/static.DIRECTORY.html | 3 - uu_ls/options/static.FORMAT.html | 3 - uu_ls/options/static.FULL_TIME.html | 3 - uu_ls/options/static.HIDE.html | 3 - uu_ls/options/static.HIDE_CONTROL_CHARS.html | 3 - uu_ls/options/static.IGNORE.html | 3 - uu_ls/options/static.IGNORE_BACKUPS.html | 3 - uu_ls/options/static.INDICATOR_STYLE.html | 3 - uu_ls/options/static.INODE.html | 3 - uu_ls/options/static.NO_GROUP.html | 3 - uu_ls/options/static.PATHS.html | 3 - uu_ls/options/static.QUOTING_STYLE.html | 3 - uu_ls/options/static.RECURSIVE.html | 3 - uu_ls/options/static.REVERSE.html | 3 - uu_ls/options/static.SHOW_CONTROL_CHARS.html | 3 - uu_ls/options/static.SORT.html | 3 - uu_ls/options/static.TIME.html | 3 - uu_ls/options/static.TIME_STYLE.html | 3 - uu_ls/options/static.WIDTH.html | 3 - uu_ls/options/time/index.html | 4 - uu_ls/options/time/sidebar-items.js | 1 - uu_ls/options/time/static.ACCESS.html | 3 - uu_ls/options/time/static.CHANGE.html | 3 - uu_ls/sidebar-items.js | 1 - uu_mkdir/all.html | 5 - uu_mkdir/fn.uu_app.html | 3 - uu_mkdir/fn.uumain.html | 3 - uu_mkdir/index.html | 4 - uu_mkdir/sidebar-items.js | 1 - uu_mkfifo/all.html | 5 - uu_mkfifo/fn.uu_app.html | 3 - uu_mkfifo/fn.uumain.html | 3 - uu_mkfifo/index.html | 4 - uu_mkfifo/sidebar-items.js | 1 - uu_mknod/all.html | 5 - uu_mknod/fn.uu_app.html | 3 - uu_mknod/fn.uumain.html | 3 - uu_mknod/index.html | 4 - uu_mknod/sidebar-items.js | 1 - uu_mktemp/all.html | 5 - uu_mktemp/fn.dry_exec.html | 3 - uu_mktemp/fn.uu_app.html | 3 - uu_mktemp/fn.uumain.html | 3 - uu_mktemp/index.html | 4 - uu_mktemp/sidebar-items.js | 1 - uu_more/all.html | 5 - uu_more/fn.uu_app.html | 3 - uu_more/fn.uumain.html | 3 - uu_more/index.html | 5 - uu_more/options/constant.CLEAN_PRINT.html | 3 - uu_more/options/constant.FILES.html | 3 - uu_more/options/constant.FROM_LINE.html | 3 - uu_more/options/constant.LINES.html | 3 - uu_more/options/constant.LOGICAL.html | 3 - uu_more/options/constant.NO_PAUSE.html | 3 - uu_more/options/constant.NUMBER.html | 3 - uu_more/options/constant.PATTERN.html | 3 - uu_more/options/constant.PLAIN.html | 3 - uu_more/options/constant.PRINT_OVER.html | 3 - uu_more/options/constant.SILENT.html | 3 - uu_more/options/constant.SQUEEZE.html | 3 - uu_more/options/index.html | 4 - uu_more/options/sidebar-items.js | 1 - uu_more/sidebar-items.js | 1 - uu_mv/all.html | 5 - uu_mv/enum.OverwriteMode.html | 25 - uu_mv/fn.uu_app.html | 3 - uu_mv/fn.uumain.html | 3 - uu_mv/index.html | 6 - uu_mv/sidebar-items.js | 1 - uu_mv/struct.Behavior.html | 12 - uu_nice/all.html | 5 - uu_nice/fn.uu_app.html | 3 - uu_nice/fn.uumain.html | 3 - uu_nice/index.html | 5 - uu_nice/options/index.html | 4 - uu_nice/options/sidebar-items.js | 1 - uu_nice/options/static.ADJUSTMENT.html | 3 - uu_nice/options/static.COMMAND.html | 3 - uu_nice/sidebar-items.js | 1 - uu_nl/all.html | 5 - uu_nl/fn.uu_app.html | 3 - uu_nl/fn.uumain.html | 3 - uu_nl/index.html | 6 - uu_nl/options/constant.BODY_NUMBERING.html | 3 - uu_nl/options/constant.FILE.html | 3 - uu_nl/options/constant.FOOTER_NUMBERING.html | 3 - uu_nl/options/constant.HEADER_NUMBERING.html | 3 - uu_nl/options/constant.JOIN_BLANK_LINES.html | 3 - uu_nl/options/constant.LINE_INCREMENT.html | 3 - uu_nl/options/constant.NO_RENUMBER.html | 3 - uu_nl/options/constant.NUMBER_FORMAT.html | 3 - uu_nl/options/constant.NUMBER_SEPARATOR.html | 3 - uu_nl/options/constant.NUMBER_WIDTH.html | 3 - uu_nl/options/constant.SECTION_DELIMITER.html | 3 - .../constant.STARTING_LINE_NUMBER.html | 3 - uu_nl/options/index.html | 4 - uu_nl/options/sidebar-items.js | 1 - uu_nl/sidebar-items.js | 1 - uu_nl/struct.Settings.html | 12 - uu_nohup/all.html | 5 - uu_nohup/fn.uu_app.html | 3 - uu_nohup/fn.uumain.html | 3 - uu_nohup/index.html | 4 - uu_nohup/sidebar-items.js | 1 - uu_nproc/all.html | 5 - uu_nproc/constant._SC_NPROCESSORS_CONF.html | 3 - uu_nproc/fn.uu_app.html | 3 - uu_nproc/fn.uumain.html | 3 - uu_nproc/index.html | 5 - uu_nproc/sidebar-items.js | 1 - uu_numfmt/all.html | 5 - uu_numfmt/errors/enum.NumfmtError.html | 25 - uu_numfmt/errors/index.html | 4 - uu_numfmt/errors/sidebar-items.js | 1 - uu_numfmt/fn.uu_app.html | 3 - uu_numfmt/fn.uumain.html | 3 - uu_numfmt/format/fn.div_round.html | 24 - uu_numfmt/format/fn.format_and_print.html | 7 - uu_numfmt/format/index.html | 10 - uu_numfmt/format/sidebar-items.js | 1 - .../format/struct.WhitespaceSplitter.html | 267 - uu_numfmt/index.html | 5 - uu_numfmt/options/constant.DELIMITER.html | 3 - uu_numfmt/options/constant.FIELD.html | 3 - uu_numfmt/options/constant.FIELD_DEFAULT.html | 3 - uu_numfmt/options/constant.FROM.html | 3 - uu_numfmt/options/constant.FROM_DEFAULT.html | 3 - uu_numfmt/options/constant.HEADER.html | 3 - .../options/constant.HEADER_DEFAULT.html | 3 - uu_numfmt/options/constant.NUMBER.html | 3 - uu_numfmt/options/constant.PADDING.html | 3 - uu_numfmt/options/constant.ROUND.html | 3 - uu_numfmt/options/constant.SUFFIX.html | 3 - uu_numfmt/options/constant.TO.html | 3 - uu_numfmt/options/constant.TO_DEFAULT.html | 3 - uu_numfmt/options/enum.RoundMethod.html | 23 - uu_numfmt/options/index.html | 6 - uu_numfmt/options/sidebar-items.js | 1 - uu_numfmt/options/struct.NumfmtOptions.html | 20 - .../options/struct.TransformOptions.html | 15 - uu_numfmt/sidebar-items.js | 1 - uu_od/all.html | 5 - uu_od/fn.uu_app.html | 3 - uu_od/fn.uumain.html | 3 - uu_od/index.html | 4 - uu_od/sidebar-items.js | 1 - uu_paste/all.html | 5 - uu_paste/fn.uu_app.html | 3 - uu_paste/fn.uumain.html | 3 - uu_paste/index.html | 4 - uu_paste/sidebar-items.js | 1 - uu_pathchk/all.html | 5 - uu_pathchk/fn.uu_app.html | 3 - uu_pathchk/fn.uumain.html | 3 - uu_pathchk/index.html | 4 - uu_pathchk/sidebar-items.js | 1 - uu_pinky/all.html | 5 - uu_pinky/fn.uu_app.html | 3 - uu_pinky/fn.uumain.html | 3 - uu_pinky/index.html | 5 - uu_pinky/sidebar-items.js | 1 - uu_pinky/trait.Capitalize.html | 5 - uu_pr/all.html | 5 - uu_pr/fn.uu_app.html | 3 - uu_pr/fn.uumain.html | 3 - uu_pr/index.html | 4 - uu_pr/sidebar-items.js | 1 - uu_printenv/all.html | 5 - uu_printenv/fn.uu_app.html | 3 - uu_printenv/fn.uumain.html | 3 - uu_printenv/index.html | 4 - uu_printenv/sidebar-items.js | 1 - uu_printf/all.html | 5 - uu_printf/fn.uu_app.html | 3 - uu_printf/fn.uumain.html | 3 - uu_printf/index.html | 4 - uu_printf/sidebar-items.js | 1 - uu_ptx/all.html | 5 - uu_ptx/fn.uu_app.html | 3 - uu_ptx/fn.uumain.html | 3 - uu_ptx/index.html | 4 - uu_ptx/sidebar-items.js | 1 - uu_pwd/all.html | 5 - uu_pwd/fn.uu_app.html | 3 - uu_pwd/fn.uumain.html | 3 - uu_pwd/index.html | 4 - uu_pwd/sidebar-items.js | 1 - uu_readlink/all.html | 5 - uu_readlink/fn.uu_app.html | 3 - uu_readlink/fn.uumain.html | 3 - uu_readlink/index.html | 4 - uu_readlink/sidebar-items.js | 1 - uu_realpath/all.html | 5 - uu_realpath/fn.uu_app.html | 3 - uu_realpath/fn.uumain.html | 3 - uu_realpath/index.html | 4 - uu_realpath/sidebar-items.js | 1 - uu_relpath/all.html | 5 - uu_relpath/fn.uu_app.html | 3 - uu_relpath/fn.uumain.html | 3 - uu_relpath/index.html | 4 - uu_relpath/sidebar-items.js | 1 - uu_rm/all.html | 5 - uu_rm/fn.uu_app.html | 3 - uu_rm/fn.uumain.html | 3 - uu_rm/index.html | 4 - uu_rm/sidebar-items.js | 1 - uu_rmdir/all.html | 5 - uu_rmdir/fn.uu_app.html | 3 - uu_rmdir/fn.uumain.html | 3 - uu_rmdir/index.html | 4 - uu_rmdir/sidebar-items.js | 1 - uu_runcon/all.html | 5 - uu_runcon/fn.uu_app.html | 3 - uu_runcon/fn.uumain.html | 3 - uu_runcon/index.html | 5 - uu_runcon/options/constant.COMPUTE.html | 3 - uu_runcon/options/constant.RANGE.html | 3 - uu_runcon/options/constant.ROLE.html | 3 - uu_runcon/options/constant.TYPE.html | 3 - uu_runcon/options/constant.USER.html | 3 - uu_runcon/options/index.html | 4 - uu_runcon/options/sidebar-items.js | 1 - uu_runcon/sidebar-items.js | 1 - uu_seq/all.html | 5 - uu_seq/fn.uu_app.html | 3 - uu_seq/fn.uumain.html | 3 - uu_seq/index.html | 4 - uu_seq/sidebar-items.js | 1 - uu_shred/all.html | 5 - uu_shred/fn.uu_app.html | 3 - uu_shred/fn.uumain.html | 3 - uu_shred/index.html | 5 - uu_shred/options/constant.EXACT.html | 3 - uu_shred/options/constant.FILE.html | 3 - uu_shred/options/constant.FORCE.html | 3 - uu_shred/options/constant.ITERATIONS.html | 3 - uu_shred/options/constant.REMOVE.html | 3 - uu_shred/options/constant.SIZE.html | 3 - uu_shred/options/constant.VERBOSE.html | 3 - uu_shred/options/constant.ZERO.html | 3 - uu_shred/options/index.html | 4 - uu_shred/options/sidebar-items.js | 1 - uu_shred/sidebar-items.js | 1 - uu_shuf/all.html | 5 - uu_shuf/fn.uu_app.html | 3 - uu_shuf/fn.uumain.html | 3 - uu_shuf/index.html | 4 - uu_shuf/sidebar-items.js | 1 - uu_sleep/all.html | 5 - uu_sleep/fn.uu_app.html | 3 - uu_sleep/fn.uumain.html | 3 - uu_sleep/index.html | 4 - uu_sleep/sidebar-items.js | 1 - uu_sort/all.html | 5 - uu_sort/enum.GeneralF64ParseResult.html | 40 - uu_sort/fn.uu_app.html | 3 - uu_sort/fn.uumain.html | 3 - uu_sort/index.html | 6 - uu_sort/sidebar-items.js | 1 - uu_sort/struct.GlobalSettings.html | 24 - uu_sort/struct.Line.html | 24 - uu_sort/struct.Output.html | 18 - uu_split/all.html | 5 - uu_split/fn.uu_app.html | 3 - uu_split/fn.uumain.html | 3 - uu_split/index.html | 4 - uu_split/sidebar-items.js | 1 - uu_stat/all.html | 5 - uu_stat/constant.F_ALTER.html | 3 - uu_stat/constant.F_GROUP.html | 3 - uu_stat/constant.F_LEFT.html | 3 - uu_stat/constant.F_SIGN.html | 3 - uu_stat/constant.F_SPACE.html | 3 - uu_stat/constant.F_ZERO.html | 3 - uu_stat/enum.OutputType.html | 23 - uu_stat/enum.Token.html | 24 - uu_stat/fn.group_num.html | 3 - uu_stat/fn.uu_app.html | 3 - uu_stat/fn.uumain.html | 3 - uu_stat/index.html | 9 - uu_stat/options/index.html | 4 - uu_stat/options/sidebar-items.js | 1 - uu_stat/options/static.DEREFERENCE.html | 3 - uu_stat/options/static.FILE_SYSTEM.html | 3 - uu_stat/options/static.FORMAT.html | 3 - uu_stat/options/static.PRINTF.html | 3 - uu_stat/options/static.TERSE.html | 3 - uu_stat/sidebar-items.js | 1 - uu_stat/struct.Stater.html | 12 - uu_stat/trait.ScanUtil.html | 6 - uu_stdbuf/all.html | 5 - uu_stdbuf/fn.uu_app.html | 3 - uu_stdbuf/fn.uumain.html | 3 - uu_stdbuf/index.html | 4 - uu_stdbuf/sidebar-items.js | 1 - uu_sum/all.html | 5 - uu_sum/fn.uu_app.html | 3 - uu_sum/fn.uumain.html | 3 - uu_sum/index.html | 4 - uu_sum/sidebar-items.js | 1 - uu_sync/all.html | 5 - uu_sync/fn.uu_app.html | 3 - uu_sync/fn.uumain.html | 3 - uu_sync/index.html | 5 - uu_sync/options/index.html | 4 - uu_sync/options/sidebar-items.js | 1 - uu_sync/options/static.DATA.html | 3 - uu_sync/options/static.FILE_SYSTEM.html | 3 - uu_sync/sidebar-items.js | 1 - uu_tac/all.html | 5 - uu_tac/fn.uu_app.html | 3 - uu_tac/fn.uumain.html | 3 - uu_tac/index.html | 4 - uu_tac/sidebar-items.js | 1 - uu_tail/all.html | 5 - uu_tail/fn.uu_app.html | 3 - uu_tail/fn.uumain.html | 3 - uu_tail/index.html | 5 - uu_tail/options/index.html | 5 - uu_tail/options/sidebar-items.js | 1 - uu_tail/options/static.ARG_FILES.html | 3 - uu_tail/options/static.BYTES.html | 3 - uu_tail/options/static.FOLLOW.html | 3 - uu_tail/options/static.LINES.html | 3 - uu_tail/options/static.PID.html | 3 - uu_tail/options/static.SLEEP_INT.html | 3 - uu_tail/options/static.ZERO_TERM.html | 3 - uu_tail/options/verbosity/index.html | 4 - uu_tail/options/verbosity/sidebar-items.js | 1 - uu_tail/options/verbosity/static.QUIET.html | 3 - uu_tail/options/verbosity/static.VERBOSE.html | 3 - uu_tail/sidebar-items.js | 1 - uu_tee/all.html | 5 - uu_tee/fn.uu_app.html | 3 - uu_tee/fn.uumain.html | 3 - uu_tee/index.html | 4 - uu_tee/sidebar-items.js | 1 - uu_test/all.html | 5 - uu_test/fn.uu_app.html | 3 - uu_test/fn.uumain.html | 3 - uu_test/index.html | 4 - uu_test/sidebar-items.js | 1 - uu_timeout/all.html | 5 - uu_timeout/fn.uu_app.html | 3 - uu_timeout/fn.uumain.html | 3 - uu_timeout/index.html | 5 - uu_timeout/options/index.html | 4 - uu_timeout/options/sidebar-items.js | 1 - uu_timeout/options/static.COMMAND.html | 3 - uu_timeout/options/static.DURATION.html | 3 - uu_timeout/options/static.FOREGROUND.html | 3 - uu_timeout/options/static.KILL_AFTER.html | 3 - .../options/static.PRESERVE_STATUS.html | 3 - uu_timeout/options/static.SIGNAL.html | 3 - uu_timeout/options/static.VERBOSE.html | 3 - uu_timeout/sidebar-items.js | 1 - uu_touch/all.html | 5 - uu_touch/fn.uu_app.html | 3 - uu_touch/fn.uumain.html | 3 - uu_touch/index.html | 6 - uu_touch/options/index.html | 5 - uu_touch/options/sidebar-items.js | 1 - uu_touch/options/sources/index.html | 4 - uu_touch/options/sources/sidebar-items.js | 1 - uu_touch/options/sources/static.CURRENT.html | 3 - uu_touch/options/sources/static.DATE.html | 3 - .../options/sources/static.REFERENCE.html | 3 - uu_touch/options/static.ACCESS.html | 3 - uu_touch/options/static.MODIFICATION.html | 3 - uu_touch/options/static.NO_CREATE.html | 3 - uu_touch/options/static.NO_DEREF.html | 3 - uu_touch/options/static.SOURCES.html | 3 - uu_touch/options/static.TIME.html | 3 - uu_touch/sidebar-items.js | 1 - uu_tr/all.html | 5 - uu_tr/fn.uu_app.html | 3 - uu_tr/fn.uumain.html | 3 - uu_tr/index.html | 4 - uu_tr/sidebar-items.js | 1 - uu_true/all.html | 5 - uu_true/fn.uu_app.html | 3 - uu_true/fn.uumain.html | 3 - uu_true/index.html | 4 - uu_true/sidebar-items.js | 1 - uu_truncate/all.html | 5 - uu_truncate/fn.uu_app.html | 3 - uu_truncate/fn.uumain.html | 3 - uu_truncate/index.html | 5 - uu_truncate/options/index.html | 4 - uu_truncate/options/sidebar-items.js | 1 - uu_truncate/options/static.ARG_FILES.html | 3 - uu_truncate/options/static.IO_BLOCKS.html | 3 - uu_truncate/options/static.NO_CREATE.html | 3 - uu_truncate/options/static.REFERENCE.html | 3 - uu_truncate/options/static.SIZE.html | 3 - uu_truncate/sidebar-items.js | 1 - uu_tsort/all.html | 5 - uu_tsort/fn.uu_app.html | 3 - uu_tsort/fn.uumain.html | 3 - uu_tsort/index.html | 4 - uu_tsort/sidebar-items.js | 1 - uu_tty/all.html | 5 - uu_tty/fn.uu_app.html | 3 - uu_tty/fn.uumain.html | 3 - uu_tty/index.html | 4 - uu_tty/sidebar-items.js | 1 - uu_uname/all.html | 5 - uu_uname/fn.uu_app.html | 3 - uu_uname/fn.uumain.html | 3 - uu_uname/index.html | 5 - uu_uname/options/index.html | 4 - uu_uname/options/sidebar-items.js | 1 - uu_uname/options/static.ALL.html | 3 - uu_uname/options/static.HWPLATFORM.html | 3 - uu_uname/options/static.KERNELNAME.html | 3 - uu_uname/options/static.KERNELRELEASE.html | 3 - uu_uname/options/static.KERNELVERSION.html | 3 - uu_uname/options/static.MACHINE.html | 3 - uu_uname/options/static.NODENAME.html | 3 - uu_uname/options/static.OS.html | 3 - uu_uname/options/static.PROCESSOR.html | 3 - uu_uname/sidebar-items.js | 1 - uu_unexpand/all.html | 5 - uu_unexpand/fn.uu_app.html | 3 - uu_unexpand/fn.uumain.html | 3 - uu_unexpand/index.html | 4 - uu_unexpand/sidebar-items.js | 1 - uu_uniq/all.html | 5 - uu_uniq/fn.uu_app.html | 3 - uu_uniq/fn.uumain.html | 3 - uu_uniq/index.html | 5 - uu_uniq/options/index.html | 4 - uu_uniq/options/sidebar-items.js | 1 - uu_uniq/options/static.ALL_REPEATED.html | 3 - uu_uniq/options/static.CHECK_CHARS.html | 3 - uu_uniq/options/static.COUNT.html | 3 - uu_uniq/options/static.GROUP.html | 3 - uu_uniq/options/static.IGNORE_CASE.html | 3 - uu_uniq/options/static.REPEATED.html | 3 - uu_uniq/options/static.SKIP_CHARS.html | 3 - uu_uniq/options/static.SKIP_FIELDS.html | 3 - uu_uniq/options/static.UNIQUE.html | 3 - uu_uniq/options/static.ZERO_TERMINATED.html | 3 - uu_uniq/sidebar-items.js | 1 - uu_unlink/all.html | 5 - uu_unlink/fn.uu_app.html | 3 - uu_unlink/fn.uumain.html | 3 - uu_unlink/index.html | 4 - uu_unlink/sidebar-items.js | 1 - uu_uptime/all.html | 5 - uu_uptime/fn.uu_app.html | 3 - uu_uptime/fn.uumain.html | 3 - uu_uptime/index.html | 6 - uu_uptime/options/index.html | 4 - uu_uptime/options/sidebar-items.js | 1 - uu_uptime/options/static.SINCE.html | 3 - uu_uptime/sidebar-items.js | 1 - uu_users/all.html | 5 - uu_users/fn.uu_app.html | 3 - uu_users/fn.uumain.html | 3 - uu_users/index.html | 4 - uu_users/sidebar-items.js | 1 - uu_wc/all.html | 5 - uu_wc/fn.uu_app.html | 3 - uu_wc/fn.uumain.html | 3 - uu_wc/index.html | 5 - uu_wc/options/index.html | 4 - uu_wc/options/sidebar-items.js | 1 - uu_wc/options/static.BYTES.html | 3 - uu_wc/options/static.CHAR.html | 3 - uu_wc/options/static.LINES.html | 3 - uu_wc/options/static.MAX_LINE_LENGTH.html | 3 - uu_wc/options/static.WORDS.html | 3 - uu_wc/sidebar-items.js | 1 - uu_who/all.html | 5 - uu_who/fn.uu_app.html | 3 - uu_who/fn.uumain.html | 3 - uu_who/index.html | 4 - uu_who/sidebar-items.js | 1 - uu_whoami/all.html | 5 - uu_whoami/fn.uu_app.html | 3 - uu_whoami/fn.uumain.html | 3 - uu_whoami/index.html | 4 - uu_whoami/sidebar-items.js | 1 - uu_yes/all.html | 5 - uu_yes/fn.exec.html | 3 - uu_yes/fn.uu_app.html | 3 - uu_yes/fn.uumain.html | 3 - uu_yes/index.html | 4 - uu_yes/sidebar-items.js | 1 - uucore/all.html | 5 - .../backup_control/arguments/fn.backup.html | 4 - .../arguments/fn.backup_no_args.html | 4 - .../backup_control/arguments/fn.suffix.html | 4 - uucore/backup_control/arguments/index.html | 13 - .../backup_control/arguments/sidebar-items.js | 1 - .../arguments/static.OPT_BACKUP.html | 3 - .../arguments/static.OPT_BACKUP_NO_ARG.html | 3 - .../arguments/static.OPT_SUFFIX.html | 3 - uucore/backup_control/enum.BackupError.html | 39 - uucore/backup_control/enum.BackupMode.html | 34 - .../fn.determine_backup_mode.html | 61 - .../fn.determine_backup_suffix.html | 12 - uucore/backup_control/fn.get_backup_path.html | 3 - uucore/backup_control/index.html | 75 - uucore/backup_control/sidebar-items.js | 1 - .../static.BACKUP_CONTROL_LONG_HELP.html | 3 - .../static.BACKUP_CONTROL_VALUES.html | 3 - uucore/display/fn.print_verbatim.html | 4 - uucore/display/fn.println_verbatim.html | 11 - uucore/display/index.html | 11 - uucore/display/sidebar-items.js | 1 - uucore/display/struct.Quoted.html | 31 - uucore/display/trait.Quotable.html | 32 - uucore/encoding/enum.DecodeError.html | 26 - uucore/encoding/enum.EncodeError.html | 14 - uucore/encoding/enum.Format.html | 26 - uucore/encoding/fn.decode.html | 3 - uucore/encoding/fn.encode.html | 3 - uucore/encoding/fn.wrap_print.html | 3 - uucore/encoding/fn.wrap_write.html | 3 - uucore/encoding/index.html | 7 - uucore/encoding/sidebar-items.js | 1 - uucore/encoding/struct.Data.html | 12 - uucore/encoding/type.DecodeResult.html | 3 - uucore/entries/fn.get_groups.html | 12 - uucore/entries/fn.get_groups_gnu.html | 25 - uucore/entries/fn.gid2grp.html | 3 - uucore/entries/fn.grp2gid.html | 3 - uucore/entries/fn.uid2usr.html | 3 - uucore/entries/fn.usr2uid.html | 3 - uucore/entries/index.html | 33 - uucore/entries/sidebar-items.js | 1 - uucore/entries/struct.Group.html | 23 - uucore/entries/struct.Passwd.html | 47 - uucore/entries/trait.Locate.html | 6 - uucore/enum.ConversionResult.html | 15 - uucore/enum.InvalidEncodingHandling.html | 16 - uucore/error/fn.get_exit_code.html | 5 - uucore/error/fn.set_exit_code.html | 20 - uucore/error/fn.strip_errno.html | 4 - uucore/error/index.html | 71 - uucore/error/macro.uio_error!.html | 11 - uucore/error/macro.uio_error.html | 53 - uucore/error/sidebar-items.js | 1 - uucore/error/struct.ExitCode.html | 33 - uucore/error/struct.UIoError.html | 45 - uucore/error/struct.USimpleError.html | 31 - uucore/error/struct.UUsageError.html | 24 - uucore/error/trait.FromIo.html | 7 - uucore/error/trait.UError.html | 147 - uucore/error/type.UResult.html | 4 - .../features/encoding/enum.DecodeError.html | 11 - .../features/encoding/enum.EncodeError.html | 11 - uucore/features/encoding/enum.Format.html | 11 - uucore/features/encoding/fn.decode.html | 11 - uucore/features/encoding/fn.encode.html | 11 - uucore/features/encoding/fn.wrap_print.html | 11 - uucore/features/encoding/fn.wrap_write.html | 11 - uucore/features/encoding/index.html | 11 - uucore/features/encoding/struct.Data.html | 11 - .../features/encoding/type.DecodeResult.html | 11 - uucore/features/entries/fn.get_groups.html | 11 - .../features/entries/fn.get_groups_gnu.html | 11 - uucore/features/entries/fn.gid2grp.html | 11 - uucore/features/entries/fn.grp2gid.html | 11 - uucore/features/entries/fn.uid2usr.html | 11 - uucore/features/entries/fn.usr2uid.html | 11 - uucore/features/entries/index.html | 11 - uucore/features/entries/struct.Group.html | 11 - uucore/features/entries/struct.Passwd.html | 11 - uucore/features/entries/trait.Locate.html | 11 - uucore/features/fs/enum.MissingHandling.html | 11 - uucore/features/fs/enum.ResolveMode.html | 11 - uucore/features/fs/fn.canonicalize.html | 11 - .../features/fs/fn.display_permissions.html | 11 - .../fs/fn.display_permissions_unix.html | 11 - uucore/features/fs/fn.normalize_path.html | 11 - .../features/fs/fn.resolve_relative_path.html | 11 - uucore/features/fs/index.html | 11 - .../features/fs/struct.FileInformation.html | 11 - uucore/features/fsext/fn.StatFs.html | 11 - uucore/features/fsext/fn.pretty_filetype.html | 11 - uucore/features/fsext/fn.pretty_fstype.html | 11 - uucore/features/fsext/fn.pretty_time.html | 11 - uucore/features/fsext/fn.read_fs_list.html | 11 - uucore/features/fsext/fn.statfs.html | 11 - uucore/features/fsext/fn.statfs_fn.html | 11 - uucore/features/fsext/index.html | 11 - uucore/features/fsext/struct.FsUsage.html | 11 - uucore/features/fsext/struct.MountInfo.html | 11 - uucore/features/fsext/struct.StatFs.html | 11 - uucore/features/fsext/struct.statfs_fn.html | 11 - uucore/features/fsext/trait.BirthTime.html | 11 - uucore/features/fsext/trait.FsMeta.html | 11 - uucore/features/memo/index.html | 11 - uucore/features/memo/struct.Memo.html | 11 - uucore/features/mode/fn.get_umask.html | 11 - uucore/features/mode/fn.parse_mode.html | 11 - uucore/features/mode/fn.parse_numeric.html | 11 - uucore/features/mode/fn.parse_symbolic.html | 11 - .../mode/fn.strip_minus_from_mode.html | 11 - uucore/features/mode/index.html | 11 - uucore/features/perms/enum.IfFrom.html | 11 - .../features/perms/enum.TraverseSymlinks.html | 11 - .../features/perms/enum.VerbosityLevel.html | 11 - uucore/features/perms/fn.chown_base.html | 11 - uucore/features/perms/fn.wrap_chown.html | 11 - uucore/features/perms/index.html | 11 - .../perms/options/constant.ARG_FILES.html | 11 - .../perms/options/constant.ARG_GROUP.html | 11 - .../perms/options/constant.ARG_OWNER.html | 11 - .../features/perms/options/constant.FROM.html | 11 - .../perms/options/constant.RECURSIVE.html | 11 - .../perms/options/constant.REFERENCE.html | 11 - .../dereference/constant.DEREFERENCE.html | 11 - .../dereference/constant.NO_DEREFERENCE.html | 11 - .../perms/options/dereference/index.html | 11 - uucore/features/perms/options/index.html | 11 - .../preserve_root/constant.NO_PRESERVE.html | 11 - .../preserve_root/constant.PRESERVE.html | 11 - .../perms/options/preserve_root/index.html | 11 - .../options/traverse/constant.EVERY.html | 11 - .../traverse/constant.NO_TRAVERSE.html | 11 - .../options/traverse/constant.TRAVERSE.html | 11 - .../perms/options/traverse/index.html | 11 - .../options/verbosity/constant.CHANGES.html | 11 - .../options/verbosity/constant.QUIET.html | 11 - .../options/verbosity/constant.SILENT.html | 11 - .../options/verbosity/constant.VERBOSE.html | 11 - .../perms/options/verbosity/index.html | 11 - .../features/perms/struct.ChownExecutor.html | 11 - uucore/features/perms/struct.Verbosity.html | 11 - uucore/features/pipes/fn.pipe.html | 11 - uucore/features/pipes/fn.splice.html | 11 - uucore/features/pipes/fn.splice_exact.html | 11 - uucore/features/pipes/fn.vmsplice.html | 11 - uucore/features/pipes/index.html | 11 - uucore/features/pipes/type.Error.html | 11 - uucore/features/pipes/type.Result.html | 11 - uucore/features/process/enum.ExitStatus.html | 11 - uucore/features/process/fn.getegid.html | 11 - uucore/features/process/fn.geteuid.html | 11 - uucore/features/process/fn.getgid.html | 11 - uucore/features/process/fn.getuid.html | 11 - uucore/features/process/index.html | 11 - uucore/features/process/trait.ChildExt.html | 11 - uucore/features/ringbuffer/index.html | 11 - .../ringbuffer/struct.RingBuffer.html | 11 - uucore/features/signals/fn.is_signal.html | 11 - .../signals/fn.signal_by_name_or_value.html | 11 - .../signals/fn.signal_name_by_value.html | 11 - uucore/features/signals/index.html | 11 - .../features/signals/static.ALL_SIGNALS.html | 11 - .../signals/static.DEFAULT_SIGNAL.html | 11 - uucore/features/utmpx/fn.endutxent.html | 11 - uucore/features/utmpx/fn.getutxent.html | 11 - uucore/features/utmpx/fn.setutxent.html | 11 - uucore/features/utmpx/fn.utmpxname.html | 11 - uucore/features/utmpx/index.html | 11 - uucore/features/utmpx/struct.Utmpx.html | 11 - uucore/features/utmpx/struct.UtmpxIter.html | 11 - .../utmpx/ut/constant.ACCOUNTING.html | 11 - .../features/utmpx/ut/constant.BOOT_TIME.html | 11 - .../utmpx/ut/constant.DEAD_PROCESS.html | 11 - uucore/features/utmpx/ut/constant.EMPTY.html | 11 - .../utmpx/ut/constant.INIT_PROCESS.html | 11 - .../utmpx/ut/constant.LOGIN_PROCESS.html | 11 - .../features/utmpx/ut/constant.NEW_TIME.html | 11 - .../features/utmpx/ut/constant.OLD_TIME.html | 11 - .../features/utmpx/ut/constant.RUN_LVL.html | 11 - .../utmpx/ut/constant.USER_PROCESS.html | 11 - .../utmpx/ut/constant.UT_HOSTSIZE.html | 11 - .../features/utmpx/ut/constant.UT_IDSIZE.html | 11 - .../utmpx/ut/constant.UT_LINESIZE.html | 11 - .../utmpx/ut/constant.UT_NAMESIZE.html | 11 - .../utmpx/ut/static.DEFAULT_FILE.html | 11 - uucore/fn.args_os.html | 3 - uucore/fn.execution_phrase.html | 4 - uucore/fn.get_utility_is_second_arg.html | 3 - uucore/fn.set_utility_is_second_arg.html | 3 - uucore/fn.util_name.html | 4 - uucore/fs/enum.MissingHandling.html | 30 - uucore/fs/enum.ResolveMode.html | 30 - uucore/fs/fn.canonicalize.html | 28 - uucore/fs/fn.display_permissions.html | 3 - uucore/fs/fn.display_permissions_unix.html | 3 - uucore/fs/fn.normalize_path.html | 3 - uucore/fs/fn.resolve_relative_path.html | 3 - uucore/fs/index.html | 12 - uucore/fs/macro.has!.html | 11 - uucore/fs/macro.has.html | 6 - uucore/fs/sidebar-items.js | 1 - uucore/fs/struct.FileInformation.html | 23 - uucore/fsext/fn.StatFs.html | 3 - uucore/fsext/fn.pretty_filetype.html | 3 - uucore/fsext/fn.pretty_fstype.html | 3 - uucore/fsext/fn.pretty_time.html | 3 - uucore/fsext/fn.read_fs_list.html | 4 - uucore/fsext/fn.statfs.html | 3 - uucore/fsext/fn.statfs_fn.html | 3 - uucore/fsext/index.html | 9 - uucore/fsext/sidebar-items.js | 1 - uucore/fsext/struct.FsUsage.html | 26 - uucore/fsext/struct.MountInfo.html | 27 - uucore/fsext/struct.StatFs.html | 36 - uucore/fsext/struct.statfs_fn.html | 36 - uucore/fsext/trait.BirthTime.html | 6 - uucore/fsext/trait.FsMeta.html | 14 - uucore/index.html | 33 - uucore/macro.crash!.html | 11 - uucore/macro.crash.html | 13 - uucore/macro.crash_if_err!.html | 11 - uucore/macro.crash_if_err.html | 17 - uucore/macro.has!.html | 11 - uucore/macro.has.html | 6 - uucore/macro.show!.html | 11 - uucore/macro.show.html | 33 - uucore/macro.show_error!.html | 11 - uucore/macro.show_error.html | 11 - .../macro.show_error_custom_description!.html | 11 - .../macro.show_error_custom_description.html | 16 - uucore/macro.show_if_err!.html | 11 - uucore/macro.show_if_err.html | 22 - uucore/macro.show_usage_error!.html | 11 - uucore/macro.show_usage_error.html | 13 - uucore/macro.show_warning!.html | 11 - uucore/macro.show_warning.html | 12 - uucore/macro.uio_error!.html | 11 - uucore/macro.uio_error.html | 53 - uucore/memo/index.html | 12 - uucore/memo/sidebar-items.js | 1 - uucore/memo/struct.Memo.html | 12 - uucore/mode/fn.get_umask.html | 3 - uucore/mode/fn.parse_mode.html | 3 - uucore/mode/fn.parse_numeric.html | 3 - uucore/mode/fn.parse_symbolic.html | 3 - uucore/mode/fn.strip_minus_from_mode.html | 3 - uucore/mode/index.html | 5 - uucore/mode/sidebar-items.js | 1 - .../backup_control/arguments/fn.backup.html | 11 - .../arguments/fn.backup_no_args.html | 11 - .../backup_control/arguments/fn.suffix.html | 11 - .../mods/backup_control/arguments/index.html | 11 - .../arguments/static.OPT_BACKUP.html | 11 - .../arguments/static.OPT_BACKUP_NO_ARG.html | 11 - .../arguments/static.OPT_SUFFIX.html | 11 - .../mods/backup_control/enum.BackupError.html | 11 - .../mods/backup_control/enum.BackupMode.html | 11 - .../fn.determine_backup_mode.html | 11 - .../fn.determine_backup_suffix.html | 11 - .../backup_control/fn.get_backup_path.html | 11 - uucore/mods/backup_control/index.html | 11 - .../static.BACKUP_CONTROL_LONG_HELP.html | 11 - .../static.BACKUP_CONTROL_VALUES.html | 11 - uucore/mods/display/fn.print_verbatim.html | 11 - uucore/mods/display/fn.println_verbatim.html | 11 - uucore/mods/display/index.html | 11 - uucore/mods/display/struct.Quoted.html | 11 - uucore/mods/display/trait.Quotable.html | 11 - uucore/mods/error/fn.get_exit_code.html | 11 - uucore/mods/error/fn.set_exit_code.html | 11 - uucore/mods/error/fn.strip_errno.html | 11 - uucore/mods/error/index.html | 11 - uucore/mods/error/struct.ExitCode.html | 11 - uucore/mods/error/struct.UIoError.html | 11 - uucore/mods/error/struct.USimpleError.html | 11 - uucore/mods/error/struct.UUsageError.html | 11 - uucore/mods/error/trait.FromIo.html | 11 - uucore/mods/error/trait.UError.html | 11 - uucore/mods/error/type.UResult.html | 11 - uucore/mods/os/fn.is_wsl_1.html | 11 - uucore/mods/os/fn.is_wsl_2.html | 11 - uucore/mods/os/index.html | 11 - uucore/mods/panic/fn.mute_sigpipe_panic.html | 11 - uucore/mods/panic/index.html | 11 - uucore/mods/ranges/fn.complement.html | 11 - uucore/mods/ranges/fn.contain.html | 11 - uucore/mods/ranges/index.html | 11 - uucore/mods/ranges/struct.Range.html | 11 - uucore/mods/version_cmp/fn.version_cmp.html | 11 - uucore/mods/version_cmp/index.html | 11 - uucore/os/fn.is_wsl_1.html | 4 - uucore/os/fn.is_wsl_2.html | 3 - uucore/os/index.html | 5 - uucore/os/sidebar-items.js | 1 - uucore/panic/fn.mute_sigpipe_panic.html | 12 - uucore/panic/index.html | 10 - uucore/panic/sidebar-items.js | 1 - uucore/parse_size/enum.ParseSizeError.html | 26 - uucore/parse_size/fn.parse_size.html | 18 - uucore/parse_size/index.html | 6 - uucore/parse_size/sidebar-items.js | 1 - uucore/parse_time/fn.from_str.html | 3 - uucore/parse_time/index.html | 4 - uucore/parse_time/sidebar-items.js | 1 - .../parse_size/enum.ParseSizeError.html | 11 - uucore/parser/parse_size/fn.parse_size.html | 11 - uucore/parser/parse_size/index.html | 11 - uucore/parser/parse_time/fn.from_str.html | 11 - uucore/parser/parse_time/index.html | 11 - uucore/perms/entries/fn.get_groups.html | 12 - uucore/perms/entries/fn.get_groups_gnu.html | 25 - uucore/perms/entries/fn.gid2grp.html | 3 - uucore/perms/entries/fn.grp2gid.html | 3 - uucore/perms/entries/fn.uid2usr.html | 3 - uucore/perms/entries/fn.usr2uid.html | 3 - uucore/perms/entries/index.html | 33 - uucore/perms/entries/sidebar-items.js | 1 - uucore/perms/entries/struct.Group.html | 23 - uucore/perms/entries/struct.Passwd.html | 47 - uucore/perms/entries/trait.Locate.html | 6 - uucore/perms/enum.IfFrom.html | 17 - uucore/perms/enum.TraverseSymlinks.html | 20 - uucore/perms/enum.VerbosityLevel.html | 27 - uucore/perms/fn.chown_base.html | 9 - uucore/perms/fn.wrap_chown.html | 6 - uucore/perms/index.html | 14 - uucore/perms/options/constant.ARG_FILES.html | 3 - uucore/perms/options/constant.ARG_GROUP.html | 3 - uucore/perms/options/constant.ARG_OWNER.html | 3 - uucore/perms/options/constant.FROM.html | 3 - uucore/perms/options/constant.RECURSIVE.html | 3 - uucore/perms/options/constant.REFERENCE.html | 3 - .../dereference/constant.DEREFERENCE.html | 3 - .../dereference/constant.NO_DEREFERENCE.html | 3 - uucore/perms/options/dereference/index.html | 4 - .../options/dereference/sidebar-items.js | 1 - uucore/perms/options/index.html | 5 - .../preserve_root/constant.NO_PRESERVE.html | 3 - .../preserve_root/constant.PRESERVE.html | 3 - uucore/perms/options/preserve_root/index.html | 4 - .../options/preserve_root/sidebar-items.js | 1 - uucore/perms/options/sidebar-items.js | 1 - .../options/traverse/constant.EVERY.html | 3 - .../traverse/constant.NO_TRAVERSE.html | 3 - .../options/traverse/constant.TRAVERSE.html | 3 - uucore/perms/options/traverse/index.html | 4 - .../perms/options/traverse/sidebar-items.js | 1 - .../options/verbosity/constant.CHANGES.html | 3 - .../options/verbosity/constant.QUIET.html | 3 - .../options/verbosity/constant.SILENT.html | 3 - .../options/verbosity/constant.VERBOSE.html | 3 - uucore/perms/options/verbosity/index.html | 4 - .../perms/options/verbosity/sidebar-items.js | 1 - uucore/perms/sidebar-items.js | 1 - uucore/perms/struct.ChownExecutor.html | 22 - uucore/perms/struct.Verbosity.html | 24 - uucore/pipes/fn.pipe.html | 6 - uucore/pipes/fn.splice.html | 10 - uucore/pipes/fn.splice_exact.html | 6 - uucore/pipes/fn.vmsplice.html | 5 - uucore/pipes/index.html | 11 - uucore/pipes/sidebar-items.js | 1 - uucore/pipes/type.Error.html | 14 - uucore/pipes/type.Result.html | 4 - uucore/process/enum.ExitStatus.html | 27 - uucore/process/fn.getegid.html | 4 - uucore/process/fn.geteuid.html | 4 - uucore/process/fn.getgid.html | 4 - uucore/process/fn.getuid.html | 4 - uucore/process/index.html | 12 - uucore/process/sidebar-items.js | 1 - uucore/process/trait.ChildExt.html | 12 - uucore/ranges/fn.complement.html | 3 - uucore/ranges/fn.contain.html | 18 - uucore/ranges/index.html | 6 - uucore/ranges/sidebar-items.js | 1 - uucore/ranges/struct.Range.html | 33 - uucore/ringbuffer/index.html | 6 - uucore/ringbuffer/sidebar-items.js | 1 - uucore/ringbuffer/struct.RingBuffer.html | 62 - uucore/sidebar-items.js | 1 - uucore/signals/fn.is_signal.html | 3 - .../signals/fn.signal_by_name_or_value.html | 3 - uucore/signals/fn.signal_name_by_value.html | 3 - uucore/signals/index.html | 5 - uucore/signals/sidebar-items.js | 1 - uucore/signals/static.ALL_SIGNALS.html | 3 - uucore/signals/static.DEFAULT_SIGNAL.html | 3 - uucore/trait.Args.html | 19 - uucore/utmpx/constant.ACCOUNTING.html | 3 - uucore/utmpx/constant.BOOT_TIME.html | 3 - uucore/utmpx/constant.DEAD_PROCESS.html | 3 - uucore/utmpx/constant.EMPTY.html | 3 - uucore/utmpx/constant.INIT_PROCESS.html | 3 - uucore/utmpx/constant.LOGIN_PROCESS.html | 3 - uucore/utmpx/constant.NEW_TIME.html | 3 - uucore/utmpx/constant.OLD_TIME.html | 3 - uucore/utmpx/constant.RUN_LVL.html | 3 - uucore/utmpx/constant.USER_PROCESS.html | 3 - uucore/utmpx/constant.UT_HOSTSIZE.html | 3 - uucore/utmpx/constant.UT_IDSIZE.html | 3 - uucore/utmpx/constant.UT_LINESIZE.html | 3 - uucore/utmpx/constant.UT_NAMESIZE.html | 3 - uucore/utmpx/fn.endutxent.html | 3 - uucore/utmpx/fn.getutxent.html | 3 - uucore/utmpx/fn.setutxent.html | 3 - uucore/utmpx/fn.utmpxname.html | 3 - uucore/utmpx/index.html | 26 - uucore/utmpx/sidebar-items.js | 1 - uucore/utmpx/static.DEFAULT_FILE.html | 3 - uucore/utmpx/struct.Utmpx.html | 32 - uucore/utmpx/struct.UtmpxIter.html | 246 - uucore/version_cmp/fn.version_cmp.html | 3 - uucore/version_cmp/index.html | 4 - uucore/version_cmp/sidebar-items.js | 1 - uucore_procs/all.html | 5 - uucore_procs/attr.gen_uumain.html | 3 - uucore_procs/index.html | 5 - uucore_procs/macro.main!.html | 11 - uucore_procs/macro.main.html | 3 - uucore_procs/sidebar-items.js | 1 - uudoc/all.html | 5 - uudoc/fn.main.html | 3 - uudoc/fn.util_map.html | 3 - uudoc/fn.write_description.html | 3 - uudoc/fn.write_markdown.html | 3 - uudoc/fn.write_options.html | 3 - uudoc/fn.write_usage.html | 3 - uudoc/fn.write_version.html | 3 - uudoc/index.html | 5 - uudoc/sidebar-items.js | 1 - uudoc/type.UtilityMap.html | 3 - wc/all.html | 5 - wc/fn.main.html | 3 - wc/index.html | 4 - wc/sidebar-items.js | 1 - wheel.svg | 1 - who/all.html | 5 - who/fn.main.html | 3 - who/index.html | 4 - who/sidebar-items.js | 1 - whoami/all.html | 5 - whoami/fn.main.html | 3 - whoami/index.html | 4 - whoami/sidebar-items.js | 1 - yes/all.html | 5 - yes/fn.main.html | 3 - yes/index.html | 4 - yes/sidebar-items.js | 1 - 2156 files changed, 143494 deletions(-) delete mode 100644 COPYRIGHT.txt delete mode 100644 FiraSans-LICENSE.txt delete mode 100644 FiraSans-Medium.woff delete mode 100644 FiraSans-Medium.woff2 delete mode 100644 FiraSans-Regular.woff delete mode 100644 FiraSans-Regular.woff2 delete mode 100644 LICENSE-APACHE.txt delete mode 100644 LICENSE-MIT.txt delete mode 100644 NanumBarunGothic-LICENSE.txt delete mode 100644 NanumBarunGothic.ttf.woff delete mode 100644 NanumBarunGothic.ttf.woff2 delete mode 100644 SourceCodePro-It.ttf.woff delete mode 100644 SourceCodePro-It.ttf.woff2 delete mode 100644 SourceCodePro-LICENSE.txt delete mode 100644 SourceCodePro-Regular.ttf.woff delete mode 100644 SourceCodePro-Regular.ttf.woff2 delete mode 100644 SourceCodePro-Semibold.ttf.woff delete mode 100644 SourceCodePro-Semibold.ttf.woff2 delete mode 100644 SourceSerif4-Bold.ttf.woff delete mode 100644 SourceSerif4-Bold.ttf.woff2 delete mode 100644 SourceSerif4-It.ttf.woff delete mode 100644 SourceSerif4-It.ttf.woff2 delete mode 100644 SourceSerif4-LICENSE.md delete mode 100644 SourceSerif4-Regular.ttf.woff delete mode 100644 SourceSerif4-Regular.ttf.woff2 delete mode 100644 arch/all.html delete mode 100644 arch/fn.main.html delete mode 100644 arch/index.html delete mode 100644 arch/sidebar-items.js delete mode 100644 ayu.css delete mode 100644 base32/all.html delete mode 100644 base32/fn.main.html delete mode 100644 base32/index.html delete mode 100644 base32/sidebar-items.js delete mode 100644 base64/all.html delete mode 100644 base64/fn.main.html delete mode 100644 base64/index.html delete mode 100644 base64/sidebar-items.js delete mode 100644 basename/all.html delete mode 100644 basename/fn.main.html delete mode 100644 basename/index.html delete mode 100644 basename/sidebar-items.js delete mode 100644 basenc/all.html delete mode 100644 basenc/fn.main.html delete mode 100644 basenc/index.html delete mode 100644 basenc/sidebar-items.js delete mode 100644 brush.svg delete mode 100644 cat/all.html delete mode 100644 cat/fn.main.html delete mode 100644 cat/index.html delete mode 100644 cat/sidebar-items.js delete mode 100644 chcon/all.html delete mode 100644 chcon/fn.main.html delete mode 100644 chcon/index.html delete mode 100644 chcon/sidebar-items.js delete mode 100644 chgrp/all.html delete mode 100644 chgrp/fn.main.html delete mode 100644 chgrp/index.html delete mode 100644 chgrp/sidebar-items.js delete mode 100644 chmod/all.html delete mode 100644 chmod/fn.main.html delete mode 100644 chmod/index.html delete mode 100644 chmod/sidebar-items.js delete mode 100644 chown/all.html delete mode 100644 chown/fn.main.html delete mode 100644 chown/index.html delete mode 100644 chown/sidebar-items.js delete mode 100644 chroot/all.html delete mode 100644 chroot/fn.main.html delete mode 100644 chroot/index.html delete mode 100644 chroot/sidebar-items.js delete mode 100644 cksum/all.html delete mode 100644 cksum/fn.main.html delete mode 100644 cksum/index.html delete mode 100644 cksum/sidebar-items.js delete mode 100644 clipboard.svg delete mode 100644 comm/all.html delete mode 100644 comm/fn.main.html delete mode 100644 comm/index.html delete mode 100644 comm/sidebar-items.js delete mode 100644 coreutils/all.html delete mode 100644 coreutils/constant.VERSION.html delete mode 100644 coreutils/fn.binary_path.html delete mode 100644 coreutils/fn.gen_completions.html delete mode 100644 coreutils/fn.gen_coreutils_app.html delete mode 100644 coreutils/fn.main.html delete mode 100644 coreutils/fn.name.html delete mode 100644 coreutils/fn.usage.html delete mode 100644 coreutils/fn.util_map.html delete mode 100644 coreutils/index.html delete mode 100644 coreutils/sidebar-items.js delete mode 100644 coreutils/type.UtilityMap.html delete mode 100644 cp/all.html delete mode 100644 cp/fn.main.html delete mode 100644 cp/index.html delete mode 100644 cp/sidebar-items.js delete mode 100644 crates.js delete mode 100644 csplit/all.html delete mode 100644 csplit/fn.main.html delete mode 100644 csplit/index.html delete mode 100644 csplit/sidebar-items.js delete mode 100644 cut/all.html delete mode 100644 cut/fn.main.html delete mode 100644 cut/index.html delete mode 100644 cut/sidebar-items.js delete mode 100644 dark.css delete mode 100644 date/all.html delete mode 100644 date/fn.main.html delete mode 100644 date/index.html delete mode 100644 date/sidebar-items.js delete mode 100644 dd/all.html delete mode 100644 dd/fn.main.html delete mode 100644 dd/index.html delete mode 100644 dd/sidebar-items.js delete mode 100644 df/all.html delete mode 100644 df/fn.main.html delete mode 100644 df/index.html delete mode 100644 df/sidebar-items.js delete mode 100644 dircolors/all.html delete mode 100644 dircolors/fn.main.html delete mode 100644 dircolors/index.html delete mode 100644 dircolors/sidebar-items.js delete mode 100644 dirname/all.html delete mode 100644 dirname/fn.main.html delete mode 100644 dirname/index.html delete mode 100644 dirname/sidebar-items.js delete mode 100644 down-arrow.svg delete mode 100644 du/all.html delete mode 100644 du/fn.main.html delete mode 100644 du/index.html delete mode 100644 du/sidebar-items.js delete mode 100644 echo/all.html delete mode 100644 echo/fn.main.html delete mode 100644 echo/index.html delete mode 100644 echo/sidebar-items.js delete mode 100644 env/all.html delete mode 100644 env/fn.main.html delete mode 100644 env/index.html delete mode 100644 env/sidebar-items.js delete mode 100644 expand/all.html delete mode 100644 expand/fn.main.html delete mode 100644 expand/index.html delete mode 100644 expand/sidebar-items.js delete mode 100644 expr/all.html delete mode 100644 expr/fn.main.html delete mode 100644 expr/index.html delete mode 100644 expr/sidebar-items.js delete mode 100644 factor/all.html delete mode 100644 factor/fn.main.html delete mode 100644 factor/index.html delete mode 100644 factor/sidebar-items.js delete mode 100644 false/all.html delete mode 100644 false/fn.main.html delete mode 100644 false/index.html delete mode 100644 false/sidebar-items.js delete mode 100644 favicon-16x16.png delete mode 100644 favicon-32x32.png delete mode 100644 favicon.svg delete mode 100644 fmt/all.html delete mode 100644 fmt/fn.main.html delete mode 100644 fmt/index.html delete mode 100644 fmt/sidebar-items.js delete mode 100644 fold/all.html delete mode 100644 fold/fn.main.html delete mode 100644 fold/index.html delete mode 100644 fold/sidebar-items.js delete mode 100644 groups/all.html delete mode 100644 groups/fn.main.html delete mode 100644 groups/index.html delete mode 100644 groups/sidebar-items.js delete mode 100644 hashsum/all.html delete mode 100644 hashsum/fn.main.html delete mode 100644 hashsum/index.html delete mode 100644 hashsum/sidebar-items.js delete mode 100644 head/all.html delete mode 100644 head/fn.main.html delete mode 100644 head/index.html delete mode 100644 head/sidebar-items.js delete mode 100644 hostid/all.html delete mode 100644 hostid/fn.main.html delete mode 100644 hostid/index.html delete mode 100644 hostid/sidebar-items.js delete mode 100644 hostname/all.html delete mode 100644 hostname/fn.main.html delete mode 100644 hostname/index.html delete mode 100644 hostname/sidebar-items.js delete mode 100644 id/all.html delete mode 100644 id/fn.main.html delete mode 100644 id/index.html delete mode 100644 id/sidebar-items.js delete mode 100644 implementors/core/clone/trait.Clone.js delete mode 100644 implementors/core/cmp/trait.Eq.js delete mode 100644 implementors/core/cmp/trait.Ord.js delete mode 100644 implementors/core/cmp/trait.PartialEq.js delete mode 100644 implementors/core/cmp/trait.PartialOrd.js delete mode 100644 implementors/core/convert/trait.From.js delete mode 100644 implementors/core/default/trait.Default.js delete mode 100644 implementors/core/fmt/trait.Debug.js delete mode 100644 implementors/core/fmt/trait.Display.js delete mode 100644 implementors/core/hash/trait.Hash.js delete mode 100644 implementors/core/iter/traits/iterator/trait.Iterator.js delete mode 100644 implementors/core/marker/trait.Copy.js delete mode 100644 implementors/core/marker/trait.Freeze.js delete mode 100644 implementors/core/marker/trait.Send.js delete mode 100644 implementors/core/marker/trait.StructuralEq.js delete mode 100644 implementors/core/marker/trait.StructuralPartialEq.js delete mode 100644 implementors/core/marker/trait.Sync.js delete mode 100644 implementors/core/marker/trait.Unpin.js delete mode 100644 implementors/core/ops/drop/trait.Drop.js delete mode 100644 implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js delete mode 100644 implementors/core/panic/unwind_safe/trait.UnwindSafe.js delete mode 100644 implementors/core/str/traits/trait.FromStr.js delete mode 100644 implementors/std/error/trait.Error.js delete mode 100644 implementors/uu_chgrp/entries/trait.Locate.js delete mode 100644 implementors/uu_chown/trait.Locate.js delete mode 100644 implementors/uu_dircolors/trait.StrUtils.js delete mode 100644 implementors/uu_pinky/trait.Capitalize.js delete mode 100644 implementors/uu_stat/trait.ScanUtil.js delete mode 100644 implementors/uucore/display/trait.Quotable.js delete mode 100644 implementors/uucore/entries/trait.Locate.js delete mode 100644 implementors/uucore/error/trait.FromIo.js delete mode 100644 implementors/uucore/error/trait.UError.js delete mode 100644 implementors/uucore/fsext/trait.BirthTime.js delete mode 100644 implementors/uucore/fsext/trait.FsMeta.js delete mode 100644 implementors/uucore/mods/error/trait.UError.js delete mode 100644 implementors/uucore/process/trait.ChildExt.js delete mode 100644 implementors/uucore/trait.Args.js delete mode 100644 install/all.html delete mode 100644 install/fn.main.html delete mode 100644 install/index.html delete mode 100644 install/sidebar-items.js delete mode 100644 join/all.html delete mode 100644 join/fn.main.html delete mode 100644 join/index.html delete mode 100644 join/sidebar-items.js delete mode 100644 kill/all.html delete mode 100644 kill/fn.main.html delete mode 100644 kill/index.html delete mode 100644 kill/sidebar-items.js delete mode 100644 libstdbuf/all.html delete mode 100644 libstdbuf/fn.__stdbuf.html delete mode 100644 libstdbuf/index.html delete mode 100644 libstdbuf/sidebar-items.js delete mode 100644 light.css delete mode 100644 link/all.html delete mode 100644 link/fn.main.html delete mode 100644 link/index.html delete mode 100644 link/sidebar-items.js delete mode 100644 ln/all.html delete mode 100644 ln/fn.main.html delete mode 100644 ln/index.html delete mode 100644 ln/sidebar-items.js delete mode 100644 logname/all.html delete mode 100644 logname/fn.main.html delete mode 100644 logname/index.html delete mode 100644 logname/sidebar-items.js delete mode 100644 ls/all.html delete mode 100644 ls/fn.main.html delete mode 100644 ls/index.html delete mode 100644 ls/sidebar-items.js delete mode 100644 main.js delete mode 100644 mkdir/all.html delete mode 100644 mkdir/fn.main.html delete mode 100644 mkdir/index.html delete mode 100644 mkdir/sidebar-items.js delete mode 100644 mkfifo/all.html delete mode 100644 mkfifo/fn.main.html delete mode 100644 mkfifo/index.html delete mode 100644 mkfifo/sidebar-items.js delete mode 100644 mknod/all.html delete mode 100644 mknod/fn.main.html delete mode 100644 mknod/index.html delete mode 100644 mknod/sidebar-items.js delete mode 100644 mktemp/all.html delete mode 100644 mktemp/fn.main.html delete mode 100644 mktemp/index.html delete mode 100644 mktemp/sidebar-items.js delete mode 100644 more/all.html delete mode 100644 more/fn.main.html delete mode 100644 more/index.html delete mode 100644 more/sidebar-items.js delete mode 100644 mv/all.html delete mode 100644 mv/fn.main.html delete mode 100644 mv/index.html delete mode 100644 mv/sidebar-items.js delete mode 100644 nice/all.html delete mode 100644 nice/fn.main.html delete mode 100644 nice/index.html delete mode 100644 nice/sidebar-items.js delete mode 100644 nl/all.html delete mode 100644 nl/fn.main.html delete mode 100644 nl/index.html delete mode 100644 nl/sidebar-items.js delete mode 100644 nohup/all.html delete mode 100644 nohup/fn.main.html delete mode 100644 nohup/index.html delete mode 100644 nohup/sidebar-items.js delete mode 100644 normalize.css delete mode 100644 noscript.css delete mode 100644 nproc/all.html delete mode 100644 nproc/fn.main.html delete mode 100644 nproc/index.html delete mode 100644 nproc/sidebar-items.js delete mode 100644 numfmt/all.html delete mode 100644 numfmt/fn.main.html delete mode 100644 numfmt/index.html delete mode 100644 numfmt/sidebar-items.js delete mode 100644 od/all.html delete mode 100644 od/fn.main.html delete mode 100644 od/index.html delete mode 100644 od/sidebar-items.js delete mode 100644 paste/all.html delete mode 100644 paste/fn.main.html delete mode 100644 paste/index.html delete mode 100644 paste/sidebar-items.js delete mode 100644 pathchk/all.html delete mode 100644 pathchk/fn.main.html delete mode 100644 pathchk/index.html delete mode 100644 pathchk/sidebar-items.js delete mode 100644 pinky/all.html delete mode 100644 pinky/fn.main.html delete mode 100644 pinky/index.html delete mode 100644 pinky/sidebar-items.js delete mode 100644 pr/all.html delete mode 100644 pr/fn.main.html delete mode 100644 pr/index.html delete mode 100644 pr/sidebar-items.js delete mode 100644 printenv/all.html delete mode 100644 printenv/fn.main.html delete mode 100644 printenv/index.html delete mode 100644 printenv/sidebar-items.js delete mode 100644 printf/all.html delete mode 100644 printf/fn.main.html delete mode 100644 printf/index.html delete mode 100644 printf/sidebar-items.js delete mode 100644 ptx/all.html delete mode 100644 ptx/fn.main.html delete mode 100644 ptx/index.html delete mode 100644 ptx/sidebar-items.js delete mode 100644 pwd/all.html delete mode 100644 pwd/fn.main.html delete mode 100644 pwd/index.html delete mode 100644 pwd/sidebar-items.js delete mode 100644 readlink/all.html delete mode 100644 readlink/fn.main.html delete mode 100644 readlink/index.html delete mode 100644 readlink/sidebar-items.js delete mode 100644 realpath/all.html delete mode 100644 realpath/fn.main.html delete mode 100644 realpath/index.html delete mode 100644 realpath/sidebar-items.js delete mode 100644 relpath/all.html delete mode 100644 relpath/fn.main.html delete mode 100644 relpath/index.html delete mode 100644 relpath/sidebar-items.js delete mode 100644 rm/all.html delete mode 100644 rm/fn.main.html delete mode 100644 rm/index.html delete mode 100644 rm/sidebar-items.js delete mode 100644 rmdir/all.html delete mode 100644 rmdir/fn.main.html delete mode 100644 rmdir/index.html delete mode 100644 rmdir/sidebar-items.js delete mode 100644 runcon/all.html delete mode 100644 runcon/fn.main.html delete mode 100644 runcon/index.html delete mode 100644 runcon/sidebar-items.js delete mode 100644 rust-logo.png delete mode 100644 rustdoc.css delete mode 100644 search-index.js delete mode 100644 search.js delete mode 100644 seq/all.html delete mode 100644 seq/fn.main.html delete mode 100644 seq/index.html delete mode 100644 seq/sidebar-items.js delete mode 100644 settings.css delete mode 100644 settings.html delete mode 100644 settings.js delete mode 100644 shred/all.html delete mode 100644 shred/fn.main.html delete mode 100644 shred/index.html delete mode 100644 shred/sidebar-items.js delete mode 100644 shuf/all.html delete mode 100644 shuf/fn.main.html delete mode 100644 shuf/index.html delete mode 100644 shuf/sidebar-items.js delete mode 100644 sleep/all.html delete mode 100644 sleep/fn.main.html delete mode 100644 sleep/index.html delete mode 100644 sleep/sidebar-items.js delete mode 100644 sort/all.html delete mode 100644 sort/fn.main.html delete mode 100644 sort/index.html delete mode 100644 sort/sidebar-items.js delete mode 100644 source-files.js delete mode 100644 source-script.js delete mode 100644 split/all.html delete mode 100644 split/fn.main.html delete mode 100644 split/index.html delete mode 100644 split/sidebar-items.js delete mode 100644 src/arch/main.rs.html delete mode 100644 src/base32/main.rs.html delete mode 100644 src/base64/main.rs.html delete mode 100644 src/basename/main.rs.html delete mode 100644 src/basenc/main.rs.html delete mode 100644 src/cat/main.rs.html delete mode 100644 src/chcon/main.rs.html delete mode 100644 src/chgrp/main.rs.html delete mode 100644 src/chmod/main.rs.html delete mode 100644 src/chown/main.rs.html delete mode 100644 src/chroot/main.rs.html delete mode 100644 src/cksum/main.rs.html delete mode 100644 src/comm/main.rs.html delete mode 100644 src/coreutils/coreutils.rs.html delete mode 100644 src/coreutils/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html delete mode 100644 src/cp/main.rs.html delete mode 100644 src/csplit/main.rs.html delete mode 100644 src/cut/main.rs.html delete mode 100644 src/date/main.rs.html delete mode 100644 src/dd/main.rs.html delete mode 100644 src/df/main.rs.html delete mode 100644 src/dircolors/main.rs.html delete mode 100644 src/dirname/main.rs.html delete mode 100644 src/du/main.rs.html delete mode 100644 src/echo/main.rs.html delete mode 100644 src/env/main.rs.html delete mode 100644 src/expand/main.rs.html delete mode 100644 src/expr/main.rs.html delete mode 100644 src/factor/main.rs.html delete mode 100644 src/false/main.rs.html delete mode 100644 src/fmt/main.rs.html delete mode 100644 src/fold/main.rs.html delete mode 100644 src/groups/main.rs.html delete mode 100644 src/hashsum/main.rs.html delete mode 100644 src/head/main.rs.html delete mode 100644 src/hostid/main.rs.html delete mode 100644 src/hostname/main.rs.html delete mode 100644 src/id/main.rs.html delete mode 100644 src/install/main.rs.html delete mode 100644 src/join/main.rs.html delete mode 100644 src/kill/main.rs.html delete mode 100644 src/libstdbuf/libstdbuf.rs.html delete mode 100644 src/link/main.rs.html delete mode 100644 src/ln/main.rs.html delete mode 100644 src/logname/main.rs.html delete mode 100644 src/ls/main.rs.html delete mode 100644 src/mkdir/main.rs.html delete mode 100644 src/mkfifo/main.rs.html delete mode 100644 src/mknod/main.rs.html delete mode 100644 src/mktemp/main.rs.html delete mode 100644 src/more/main.rs.html delete mode 100644 src/mv/main.rs.html delete mode 100644 src/nice/main.rs.html delete mode 100644 src/nl/main.rs.html delete mode 100644 src/nohup/main.rs.html delete mode 100644 src/nproc/main.rs.html delete mode 100644 src/numfmt/main.rs.html delete mode 100644 src/od/main.rs.html delete mode 100644 src/paste/main.rs.html delete mode 100644 src/pathchk/main.rs.html delete mode 100644 src/pinky/main.rs.html delete mode 100644 src/pr/main.rs.html delete mode 100644 src/printenv/main.rs.html delete mode 100644 src/printf/main.rs.html delete mode 100644 src/ptx/main.rs.html delete mode 100644 src/pwd/main.rs.html delete mode 100644 src/readlink/main.rs.html delete mode 100644 src/realpath/main.rs.html delete mode 100644 src/relpath/main.rs.html delete mode 100644 src/rm/main.rs.html delete mode 100644 src/rmdir/main.rs.html delete mode 100644 src/runcon/main.rs.html delete mode 100644 src/seq/main.rs.html delete mode 100644 src/shred/main.rs.html delete mode 100644 src/shuf/main.rs.html delete mode 100644 src/sleep/main.rs.html delete mode 100644 src/sort/main.rs.html delete mode 100644 src/split/main.rs.html delete mode 100644 src/stat/main.rs.html delete mode 100644 src/stdbuf/main.rs.html delete mode 100644 src/sum/main.rs.html delete mode 100644 src/sync/main.rs.html delete mode 100644 src/tac/main.rs.html delete mode 100644 src/tail/main.rs.html delete mode 100644 src/tee/main.rs.html delete mode 100644 src/test/main.rs.html delete mode 100644 src/timeout/main.rs.html delete mode 100644 src/touch/main.rs.html delete mode 100644 src/tr/main.rs.html delete mode 100644 src/true/main.rs.html delete mode 100644 src/truncate/main.rs.html delete mode 100644 src/tsort/main.rs.html delete mode 100644 src/tty/main.rs.html delete mode 100644 src/uname/main.rs.html delete mode 100644 src/unexpand/main.rs.html delete mode 100644 src/uniq/main.rs.html delete mode 100644 src/unlink/main.rs.html delete mode 100644 src/uptime/main.rs.html delete mode 100644 src/users/main.rs.html delete mode 100644 src/uu_arch/arch.rs.html delete mode 100644 src/uu_base32/base32.rs.html delete mode 100644 src/uu_base32/base_common.rs.html delete mode 100644 src/uu_base64/base64.rs.html delete mode 100644 src/uu_basename/basename.rs.html delete mode 100644 src/uu_basenc/basenc.rs.html delete mode 100644 src/uu_cat/cat.rs.html delete mode 100644 src/uu_cat/splice.rs.html delete mode 100644 src/uu_chcon/chcon.rs.html delete mode 100644 src/uu_chcon/errors.rs.html delete mode 100644 src/uu_chcon/fts.rs.html delete mode 100644 src/uu_chgrp/chgrp.rs.html delete mode 100644 src/uu_chmod/chmod.rs.html delete mode 100644 src/uu_chown/chown.rs.html delete mode 100644 src/uu_chroot/chroot.rs.html delete mode 100644 src/uu_chroot/error.rs.html delete mode 100644 src/uu_cksum/cksum.rs.html delete mode 100644 src/uu_comm/comm.rs.html delete mode 100644 src/uu_cp/cp.rs.html delete mode 100644 src/uu_csplit/csplit.rs.html delete mode 100644 src/uu_csplit/csplit_error.rs.html delete mode 100644 src/uu_csplit/patterns.rs.html delete mode 100644 src/uu_csplit/split_name.rs.html delete mode 100644 src/uu_cut/cut.rs.html delete mode 100644 src/uu_cut/searcher.rs.html delete mode 100644 src/uu_date/date.rs.html delete mode 100644 src/uu_dd/conversion_tables.rs.html delete mode 100644 src/uu_dd/datastructures.rs.html delete mode 100644 src/uu_dd/dd.rs.html delete mode 100644 src/uu_dd/parseargs.rs.html delete mode 100644 src/uu_df/df.rs.html delete mode 100644 src/uu_dircolors/colors.rs.html delete mode 100644 src/uu_dircolors/dircolors.rs.html delete mode 100644 src/uu_dirname/dirname.rs.html delete mode 100644 src/uu_du/du.rs.html delete mode 100644 src/uu_echo/echo.rs.html delete mode 100644 src/uu_env/env.rs.html delete mode 100644 src/uu_expand/expand.rs.html delete mode 100644 src/uu_expr/expr.rs.html delete mode 100644 src/uu_expr/syntax_tree.rs.html delete mode 100644 src/uu_expr/tokens.rs.html delete mode 100644 src/uu_factor/cli.rs.html delete mode 100644 src/uu_factor/factor.rs.html delete mode 100644 src/uu_factor/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/uu_factor-8cfc0910b95323cf/out/prime_table.rs.html delete mode 100644 src/uu_factor/miller_rabin.rs.html delete mode 100644 src/uu_factor/numeric/gcd.rs.html delete mode 100644 src/uu_factor/numeric/mod.rs.html delete mode 100644 src/uu_factor/numeric/modular_inverse.rs.html delete mode 100644 src/uu_factor/numeric/montgomery.rs.html delete mode 100644 src/uu_factor/numeric/traits.rs.html delete mode 100644 src/uu_factor/rho.rs.html delete mode 100644 src/uu_factor/table.rs.html delete mode 100644 src/uu_false/false.rs.html delete mode 100644 src/uu_fmt/fmt.rs.html delete mode 100644 src/uu_fmt/linebreak.rs.html delete mode 100644 src/uu_fmt/parasplit.rs.html delete mode 100644 src/uu_fold/fold.rs.html delete mode 100644 src/uu_groups/groups.rs.html delete mode 100644 src/uu_hashsum/digest.rs.html delete mode 100644 src/uu_hashsum/hashsum.rs.html delete mode 100644 src/uu_head/head.rs.html delete mode 100644 src/uu_head/lines.rs.html delete mode 100644 src/uu_head/parse.rs.html delete mode 100644 src/uu_head/take.rs.html delete mode 100644 src/uu_hostid/hostid.rs.html delete mode 100644 src/uu_hostname/hostname.rs.html delete mode 100644 src/uu_id/id.rs.html delete mode 100644 src/uu_install/install.rs.html delete mode 100644 src/uu_install/mode.rs.html delete mode 100644 src/uu_join/join.rs.html delete mode 100644 src/uu_kill/kill.rs.html delete mode 100644 src/uu_link/link.rs.html delete mode 100644 src/uu_ln/ln.rs.html delete mode 100644 src/uu_logname/logname.rs.html delete mode 100644 src/uu_ls/ls.rs.html delete mode 100644 src/uu_ls/quoting_style.rs.html delete mode 100644 src/uu_mkdir/mkdir.rs.html delete mode 100644 src/uu_mkfifo/mkfifo.rs.html delete mode 100644 src/uu_mknod/mknod.rs.html delete mode 100644 src/uu_mktemp/mktemp.rs.html delete mode 100644 src/uu_more/more.rs.html delete mode 100644 src/uu_mv/error.rs.html delete mode 100644 src/uu_mv/mv.rs.html delete mode 100644 src/uu_nice/nice.rs.html delete mode 100644 src/uu_nl/helper.rs.html delete mode 100644 src/uu_nl/nl.rs.html delete mode 100644 src/uu_nohup/nohup.rs.html delete mode 100644 src/uu_nproc/nproc.rs.html delete mode 100644 src/uu_numfmt/errors.rs.html delete mode 100644 src/uu_numfmt/format.rs.html delete mode 100644 src/uu_numfmt/numfmt.rs.html delete mode 100644 src/uu_numfmt/options.rs.html delete mode 100644 src/uu_numfmt/units.rs.html delete mode 100644 src/uu_od/byteorder_io.rs.html delete mode 100644 src/uu_od/formatteriteminfo.rs.html delete mode 100644 src/uu_od/inputdecoder.rs.html delete mode 100644 src/uu_od/inputoffset.rs.html delete mode 100644 src/uu_od/multifilereader.rs.html delete mode 100644 src/uu_od/od.rs.html delete mode 100644 src/uu_od/output_info.rs.html delete mode 100644 src/uu_od/parse_formats.rs.html delete mode 100644 src/uu_od/parse_inputs.rs.html delete mode 100644 src/uu_od/parse_nrofbytes.rs.html delete mode 100644 src/uu_od/partialreader.rs.html delete mode 100644 src/uu_od/peekreader.rs.html delete mode 100644 src/uu_od/prn_char.rs.html delete mode 100644 src/uu_od/prn_float.rs.html delete mode 100644 src/uu_od/prn_int.rs.html delete mode 100644 src/uu_paste/paste.rs.html delete mode 100644 src/uu_pathchk/pathchk.rs.html delete mode 100644 src/uu_pinky/pinky.rs.html delete mode 100644 src/uu_pr/pr.rs.html delete mode 100644 src/uu_printenv/printenv.rs.html delete mode 100644 src/uu_printf/printf.rs.html delete mode 100644 src/uu_ptx/ptx.rs.html delete mode 100644 src/uu_pwd/pwd.rs.html delete mode 100644 src/uu_readlink/readlink.rs.html delete mode 100644 src/uu_realpath/realpath.rs.html delete mode 100644 src/uu_relpath/relpath.rs.html delete mode 100644 src/uu_rm/rm.rs.html delete mode 100644 src/uu_rmdir/rmdir.rs.html delete mode 100644 src/uu_runcon/errors.rs.html delete mode 100644 src/uu_runcon/runcon.rs.html delete mode 100644 src/uu_seq/error.rs.html delete mode 100644 src/uu_seq/extendedbigdecimal.rs.html delete mode 100644 src/uu_seq/extendedbigint.rs.html delete mode 100644 src/uu_seq/number.rs.html delete mode 100644 src/uu_seq/numberparse.rs.html delete mode 100644 src/uu_seq/seq.rs.html delete mode 100644 src/uu_shred/shred.rs.html delete mode 100644 src/uu_shuf/rand_read_adapter.rs.html delete mode 100644 src/uu_shuf/shuf.rs.html delete mode 100644 src/uu_sleep/sleep.rs.html delete mode 100644 src/uu_sort/check.rs.html delete mode 100644 src/uu_sort/chunks.rs.html delete mode 100644 src/uu_sort/custom_str_cmp.rs.html delete mode 100644 src/uu_sort/ext_sort.rs.html delete mode 100644 src/uu_sort/merge.rs.html delete mode 100644 src/uu_sort/numeric_str_cmp.rs.html delete mode 100644 src/uu_sort/sort.rs.html delete mode 100644 src/uu_sort/tmp_dir.rs.html delete mode 100644 src/uu_split/filenames.rs.html delete mode 100644 src/uu_split/platform/mod.rs.html delete mode 100644 src/uu_split/platform/unix.rs.html delete mode 100644 src/uu_split/split.rs.html delete mode 100644 src/uu_stat/stat.rs.html delete mode 100644 src/uu_stdbuf/stdbuf.rs.html delete mode 100644 src/uu_sum/sum.rs.html delete mode 100644 src/uu_sync/sync.rs.html delete mode 100644 src/uu_tac/error.rs.html delete mode 100644 src/uu_tac/tac.rs.html delete mode 100644 src/uu_tail/chunks.rs.html delete mode 100644 src/uu_tail/lines.rs.html delete mode 100644 src/uu_tail/parse.rs.html delete mode 100644 src/uu_tail/platform/mod.rs.html delete mode 100644 src/uu_tail/platform/unix.rs.html delete mode 100644 src/uu_tail/tail.rs.html delete mode 100644 src/uu_tee/tee.rs.html delete mode 100644 src/uu_test/parser.rs.html delete mode 100644 src/uu_test/test.rs.html delete mode 100644 src/uu_timeout/timeout.rs.html delete mode 100644 src/uu_touch/touch.rs.html delete mode 100644 src/uu_tr/convert.rs.html delete mode 100644 src/uu_tr/operation.rs.html delete mode 100644 src/uu_tr/tr.rs.html delete mode 100644 src/uu_tr/unicode_table.rs.html delete mode 100644 src/uu_true/true.rs.html delete mode 100644 src/uu_truncate/truncate.rs.html delete mode 100644 src/uu_tsort/tsort.rs.html delete mode 100644 src/uu_tty/tty.rs.html delete mode 100644 src/uu_uname/uname.rs.html delete mode 100644 src/uu_unexpand/unexpand.rs.html delete mode 100644 src/uu_uniq/uniq.rs.html delete mode 100644 src/uu_unlink/unlink.rs.html delete mode 100644 src/uu_uptime/uptime.rs.html delete mode 100644 src/uu_users/users.rs.html delete mode 100644 src/uu_wc/count_fast.rs.html delete mode 100644 src/uu_wc/countable.rs.html delete mode 100644 src/uu_wc/wc.rs.html delete mode 100644 src/uu_wc/word_count.rs.html delete mode 100644 src/uu_who/who.rs.html delete mode 100644 src/uu_whoami/platform/mod.rs.html delete mode 100644 src/uu_whoami/platform/unix.rs.html delete mode 100644 src/uu_whoami/whoami.rs.html delete mode 100644 src/uu_yes/splice.rs.html delete mode 100644 src/uu_yes/yes.rs.html delete mode 100644 src/uucore/features.rs.html delete mode 100644 src/uucore/features/encoding.rs.html delete mode 100644 src/uucore/features/entries.rs.html delete mode 100644 src/uucore/features/fs.rs.html delete mode 100644 src/uucore/features/fsext.rs.html delete mode 100644 src/uucore/features/memo.rs.html delete mode 100644 src/uucore/features/mode.rs.html delete mode 100644 src/uucore/features/perms.rs.html delete mode 100644 src/uucore/features/pipes.rs.html delete mode 100644 src/uucore/features/process.rs.html delete mode 100644 src/uucore/features/ringbuffer.rs.html delete mode 100644 src/uucore/features/signals.rs.html delete mode 100644 src/uucore/features/tokenize/mod.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/format_field.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatter.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/base_conv/mod.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/base_conv/tests.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/cninetyninehexfloatf.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/decf.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/float_common.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/floatf.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/intf.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/mod.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/formatters/scif.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/mod.rs.html delete mode 100644 src/uucore/features/tokenize/num_format/num_format.rs.html delete mode 100644 src/uucore/features/tokenize/sub.rs.html delete mode 100644 src/uucore/features/tokenize/token.rs.html delete mode 100644 src/uucore/features/tokenize/unescaped_text.rs.html delete mode 100644 src/uucore/features/utmpx.rs.html delete mode 100644 src/uucore/lib.rs.html delete mode 100644 src/uucore/macros.rs.html delete mode 100644 src/uucore/mods.rs.html delete mode 100644 src/uucore/mods/backup_control.rs.html delete mode 100644 src/uucore/mods/display.rs.html delete mode 100644 src/uucore/mods/error.rs.html delete mode 100644 src/uucore/mods/os.rs.html delete mode 100644 src/uucore/mods/panic.rs.html delete mode 100644 src/uucore/mods/ranges.rs.html delete mode 100644 src/uucore/mods/version_cmp.rs.html delete mode 100644 src/uucore/parser.rs.html delete mode 100644 src/uucore/parser/parse_size.rs.html delete mode 100644 src/uucore/parser/parse_time.rs.html delete mode 100644 src/uucore_procs/lib.rs.html delete mode 100644 src/uudoc/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html delete mode 100644 src/uudoc/uudoc.rs.html delete mode 100644 src/wc/main.rs.html delete mode 100644 src/who/main.rs.html delete mode 100644 src/whoami/main.rs.html delete mode 100644 src/yes/main.rs.html delete mode 100644 stat/all.html delete mode 100644 stat/fn.main.html delete mode 100644 stat/index.html delete mode 100644 stat/sidebar-items.js delete mode 100644 stdbuf/all.html delete mode 100644 stdbuf/fn.main.html delete mode 100644 stdbuf/index.html delete mode 100644 stdbuf/sidebar-items.js delete mode 100644 storage.js delete mode 100644 sum/all.html delete mode 100644 sum/fn.main.html delete mode 100644 sum/index.html delete mode 100644 sum/sidebar-items.js delete mode 100644 sync/all.html delete mode 100644 sync/fn.main.html delete mode 100644 sync/index.html delete mode 100644 sync/sidebar-items.js delete mode 100644 tac/all.html delete mode 100644 tac/fn.main.html delete mode 100644 tac/index.html delete mode 100644 tac/sidebar-items.js delete mode 100644 tail/all.html delete mode 100644 tail/fn.main.html delete mode 100644 tail/index.html delete mode 100644 tail/sidebar-items.js delete mode 100644 tee/all.html delete mode 100644 tee/fn.main.html delete mode 100644 tee/index.html delete mode 100644 tee/sidebar-items.js delete mode 100644 test/all.html delete mode 100644 test/fn.main.html delete mode 100644 test/index.html delete mode 100644 test/sidebar-items.js delete mode 100644 timeout/all.html delete mode 100644 timeout/fn.main.html delete mode 100644 timeout/index.html delete mode 100644 timeout/sidebar-items.js delete mode 100644 toggle-minus.svg delete mode 100644 toggle-plus.svg delete mode 100644 touch/all.html delete mode 100644 touch/fn.main.html delete mode 100644 touch/index.html delete mode 100644 touch/sidebar-items.js delete mode 100644 tr/all.html delete mode 100644 tr/fn.main.html delete mode 100644 tr/index.html delete mode 100644 tr/sidebar-items.js delete mode 100644 true/all.html delete mode 100644 true/fn.main.html delete mode 100644 true/index.html delete mode 100644 true/sidebar-items.js delete mode 100644 truncate/all.html delete mode 100644 truncate/fn.main.html delete mode 100644 truncate/index.html delete mode 100644 truncate/sidebar-items.js delete mode 100644 tsort/all.html delete mode 100644 tsort/fn.main.html delete mode 100644 tsort/index.html delete mode 100644 tsort/sidebar-items.js delete mode 100644 tty/all.html delete mode 100644 tty/fn.main.html delete mode 100644 tty/index.html delete mode 100644 tty/sidebar-items.js delete mode 100644 uname/all.html delete mode 100644 uname/fn.main.html delete mode 100644 uname/index.html delete mode 100644 uname/sidebar-items.js delete mode 100644 unexpand/all.html delete mode 100644 unexpand/fn.main.html delete mode 100644 unexpand/index.html delete mode 100644 unexpand/sidebar-items.js delete mode 100644 uniq/all.html delete mode 100644 uniq/fn.main.html delete mode 100644 uniq/index.html delete mode 100644 uniq/sidebar-items.js delete mode 100644 unlink/all.html delete mode 100644 unlink/fn.main.html delete mode 100644 unlink/index.html delete mode 100644 unlink/sidebar-items.js delete mode 100644 uptime/all.html delete mode 100644 uptime/fn.main.html delete mode 100644 uptime/index.html delete mode 100644 uptime/sidebar-items.js delete mode 100644 users/all.html delete mode 100644 users/fn.main.html delete mode 100644 users/index.html delete mode 100644 users/sidebar-items.js delete mode 100644 uu_arch/all.html delete mode 100644 uu_arch/fn.uu_app.html delete mode 100644 uu_arch/fn.uumain.html delete mode 100644 uu_arch/index.html delete mode 100644 uu_arch/sidebar-items.js delete mode 100644 uu_base32/all.html delete mode 100644 uu_base32/base_common/fn.base_app.html delete mode 100644 uu_base32/base_common/fn.get_input.html delete mode 100644 uu_base32/base_common/fn.handle_input.html delete mode 100644 uu_base32/base_common/fn.parse_base_cmd_args.html delete mode 100644 uu_base32/base_common/index.html delete mode 100644 uu_base32/base_common/options/index.html delete mode 100644 uu_base32/base_common/options/sidebar-items.js delete mode 100644 uu_base32/base_common/options/static.DECODE.html delete mode 100644 uu_base32/base_common/options/static.FILE.html delete mode 100644 uu_base32/base_common/options/static.IGNORE_GARBAGE.html delete mode 100644 uu_base32/base_common/options/static.WRAP.html delete mode 100644 uu_base32/base_common/sidebar-items.js delete mode 100644 uu_base32/base_common/static.BASE_CMD_PARSE_ERROR.html delete mode 100644 uu_base32/base_common/struct.Config.html delete mode 100644 uu_base32/fn.uu_app.html delete mode 100644 uu_base32/fn.uumain.html delete mode 100644 uu_base32/index.html delete mode 100644 uu_base32/sidebar-items.js delete mode 100644 uu_base64/all.html delete mode 100644 uu_base64/fn.uu_app.html delete mode 100644 uu_base64/fn.uumain.html delete mode 100644 uu_base64/index.html delete mode 100644 uu_base64/sidebar-items.js delete mode 100644 uu_basename/all.html delete mode 100644 uu_basename/fn.uu_app.html delete mode 100644 uu_basename/fn.uumain.html delete mode 100644 uu_basename/index.html delete mode 100644 uu_basename/options/index.html delete mode 100644 uu_basename/options/sidebar-items.js delete mode 100644 uu_basename/options/static.MULTIPLE.html delete mode 100644 uu_basename/options/static.NAME.html delete mode 100644 uu_basename/options/static.SUFFIX.html delete mode 100644 uu_basename/options/static.ZERO.html delete mode 100644 uu_basename/sidebar-items.js delete mode 100644 uu_basenc/all.html delete mode 100644 uu_basenc/fn.uu_app.html delete mode 100644 uu_basenc/fn.uumain.html delete mode 100644 uu_basenc/index.html delete mode 100644 uu_basenc/sidebar-items.js delete mode 100644 uu_cat/all.html delete mode 100644 uu_cat/fn.uu_app.html delete mode 100644 uu_cat/fn.uumain.html delete mode 100644 uu_cat/index.html delete mode 100644 uu_cat/sidebar-items.js delete mode 100644 uu_chcon/all.html delete mode 100644 uu_chcon/fn.uu_app.html delete mode 100644 uu_chcon/fn.uumain.html delete mode 100644 uu_chcon/index.html delete mode 100644 uu_chcon/options/dereference/index.html delete mode 100644 uu_chcon/options/dereference/sidebar-items.js delete mode 100644 uu_chcon/options/dereference/static.DEREFERENCE.html delete mode 100644 uu_chcon/options/dereference/static.NO_DEREFERENCE.html delete mode 100644 uu_chcon/options/index.html delete mode 100644 uu_chcon/options/preserve_root/index.html delete mode 100644 uu_chcon/options/preserve_root/sidebar-items.js delete mode 100644 uu_chcon/options/preserve_root/static.NO_PRESERVE_ROOT.html delete mode 100644 uu_chcon/options/preserve_root/static.PRESERVE_ROOT.html delete mode 100644 uu_chcon/options/sidebar-items.js delete mode 100644 uu_chcon/options/static.RANGE.html delete mode 100644 uu_chcon/options/static.RECURSIVE.html delete mode 100644 uu_chcon/options/static.REFERENCE.html delete mode 100644 uu_chcon/options/static.ROLE.html delete mode 100644 uu_chcon/options/static.TYPE.html delete mode 100644 uu_chcon/options/static.USER.html delete mode 100644 uu_chcon/options/static.VERBOSE.html delete mode 100644 uu_chcon/options/sym_links/index.html delete mode 100644 uu_chcon/options/sym_links/sidebar-items.js delete mode 100644 uu_chcon/options/sym_links/static.FOLLOW_ARG_DIR_SYM_LINK.html delete mode 100644 uu_chcon/options/sym_links/static.FOLLOW_DIR_SYM_LINKS.html delete mode 100644 uu_chcon/options/sym_links/static.NO_FOLLOW_SYM_LINKS.html delete mode 100644 uu_chcon/sidebar-items.js delete mode 100644 uu_chgrp/all.html delete mode 100644 uu_chgrp/entries/fn.get_groups.html delete mode 100644 uu_chgrp/entries/fn.get_groups_gnu.html delete mode 100644 uu_chgrp/entries/fn.gid2grp.html delete mode 100644 uu_chgrp/entries/fn.grp2gid.html delete mode 100644 uu_chgrp/entries/fn.uid2usr.html delete mode 100644 uu_chgrp/entries/fn.usr2uid.html delete mode 100644 uu_chgrp/entries/index.html delete mode 100644 uu_chgrp/entries/sidebar-items.js delete mode 100644 uu_chgrp/entries/struct.Group.html delete mode 100644 uu_chgrp/entries/struct.Passwd.html delete mode 100644 uu_chgrp/entries/trait.Locate.html delete mode 100644 uu_chgrp/fn.uu_app.html delete mode 100644 uu_chgrp/fn.uumain.html delete mode 100644 uu_chgrp/index.html delete mode 100644 uu_chgrp/sidebar-items.js delete mode 100644 uu_chmod/all.html delete mode 100644 uu_chmod/fn.is_symlink.html delete mode 100644 uu_chmod/fn.uu_app.html delete mode 100644 uu_chmod/fn.uumain.html delete mode 100644 uu_chmod/index.html delete mode 100644 uu_chmod/sidebar-items.js delete mode 100644 uu_chown/all.html delete mode 100644 uu_chown/entries/fn.get_groups.html delete mode 100644 uu_chown/entries/fn.get_groups_gnu.html delete mode 100644 uu_chown/entries/fn.gid2grp.html delete mode 100644 uu_chown/entries/fn.grp2gid.html delete mode 100644 uu_chown/entries/fn.uid2usr.html delete mode 100644 uu_chown/entries/fn.usr2uid.html delete mode 100644 uu_chown/entries/index.html delete mode 100644 uu_chown/entries/sidebar-items.js delete mode 100644 uu_chown/entries/struct.Group.html delete mode 100644 uu_chown/entries/struct.Passwd.html delete mode 100644 uu_chown/entries/trait.Locate.html delete mode 100644 uu_chown/fn.uu_app.html delete mode 100644 uu_chown/fn.uumain.html delete mode 100644 uu_chown/index.html delete mode 100644 uu_chown/sidebar-items.js delete mode 100644 uu_chown/struct.Group.html delete mode 100644 uu_chown/struct.Passwd.html delete mode 100644 uu_chown/trait.Locate.html delete mode 100644 uu_chroot/all.html delete mode 100644 uu_chroot/fn.uu_app.html delete mode 100644 uu_chroot/fn.uumain.html delete mode 100644 uu_chroot/index.html delete mode 100644 uu_chroot/sidebar-items.js delete mode 100644 uu_cksum/all.html delete mode 100644 uu_cksum/fn.uu_app.html delete mode 100644 uu_cksum/fn.uumain.html delete mode 100644 uu_cksum/index.html delete mode 100644 uu_cksum/sidebar-items.js delete mode 100644 uu_comm/all.html delete mode 100644 uu_comm/fn.uu_app.html delete mode 100644 uu_comm/fn.uumain.html delete mode 100644 uu_comm/index.html delete mode 100644 uu_comm/sidebar-items.js delete mode 100644 uu_cp/all.html delete mode 100644 uu_cp/enum.Attribute.html delete mode 100644 uu_cp/enum.ClobberMode.html delete mode 100644 uu_cp/enum.CopyMode.html delete mode 100644 uu_cp/enum.Error.html delete mode 100644 uu_cp/enum.OverwriteMode.html delete mode 100644 uu_cp/enum.ReflinkMode.html delete mode 100644 uu_cp/enum.TargetType.html delete mode 100644 uu_cp/fn.ficlone.html delete mode 100644 uu_cp/fn.localize_to_target.html delete mode 100644 uu_cp/fn.paths_refer_to_same_file.html delete mode 100644 uu_cp/fn.uu_app.html delete mode 100644 uu_cp/fn.uumain.html delete mode 100644 uu_cp/fn.verify_target_type.html delete mode 100644 uu_cp/index.html delete mode 100644 uu_cp/sidebar-items.js delete mode 100644 uu_cp/struct.Options.html delete mode 100644 uu_cp/type.CopyResult.html delete mode 100644 uu_cp/type.Source.html delete mode 100644 uu_cp/type.SourceSlice.html delete mode 100644 uu_cp/type.Target.html delete mode 100644 uu_cp/type.TargetSlice.html delete mode 100644 uu_csplit/all.html delete mode 100644 uu_csplit/fn.csplit.html delete mode 100644 uu_csplit/fn.uu_app.html delete mode 100644 uu_csplit/fn.uumain.html delete mode 100644 uu_csplit/index.html delete mode 100644 uu_csplit/sidebar-items.js delete mode 100644 uu_csplit/struct.CsplitOptions.html delete mode 100644 uu_cut/all.html delete mode 100644 uu_cut/fn.uu_app.html delete mode 100644 uu_cut/fn.uumain.html delete mode 100644 uu_cut/index.html delete mode 100644 uu_cut/sidebar-items.js delete mode 100644 uu_date/all.html delete mode 100644 uu_date/fn.uu_app.html delete mode 100644 uu_date/fn.uumain.html delete mode 100644 uu_date/index.html delete mode 100644 uu_date/sidebar-items.js delete mode 100644 uu_dd/all.html delete mode 100644 uu_dd/fn.uu_app.html delete mode 100644 uu_dd/fn.uumain.html delete mode 100644 uu_dd/index.html delete mode 100644 uu_dd/sidebar-items.js delete mode 100644 uu_df/all.html delete mode 100644 uu_df/fn.uu_app.html delete mode 100644 uu_df/fn.uumain.html delete mode 100644 uu_df/index.html delete mode 100644 uu_df/sidebar-items.js delete mode 100644 uu_dircolors/all.html delete mode 100644 uu_dircolors/enum.OutputFmt.html delete mode 100644 uu_dircolors/fn.guess_syntax.html delete mode 100644 uu_dircolors/fn.uu_app.html delete mode 100644 uu_dircolors/fn.uumain.html delete mode 100644 uu_dircolors/index.html delete mode 100644 uu_dircolors/sidebar-items.js delete mode 100644 uu_dircolors/trait.StrUtils.html delete mode 100644 uu_dirname/all.html delete mode 100644 uu_dirname/fn.uu_app.html delete mode 100644 uu_dirname/fn.uumain.html delete mode 100644 uu_dirname/index.html delete mode 100644 uu_dirname/sidebar-items.js delete mode 100644 uu_du/all.html delete mode 100644 uu_du/fn.uu_app.html delete mode 100644 uu_du/fn.uumain.html delete mode 100644 uu_du/index.html delete mode 100644 uu_du/sidebar-items.js delete mode 100644 uu_echo/all.html delete mode 100644 uu_echo/fn.uu_app.html delete mode 100644 uu_echo/fn.uumain.html delete mode 100644 uu_echo/index.html delete mode 100644 uu_echo/sidebar-items.js delete mode 100644 uu_env/all.html delete mode 100644 uu_env/fn.uu_app.html delete mode 100644 uu_env/fn.uumain.html delete mode 100644 uu_env/index.html delete mode 100644 uu_env/sidebar-items.js delete mode 100644 uu_expand/all.html delete mode 100644 uu_expand/fn.uu_app.html delete mode 100644 uu_expand/fn.uumain.html delete mode 100644 uu_expand/index.html delete mode 100644 uu_expand/options/index.html delete mode 100644 uu_expand/options/sidebar-items.js delete mode 100644 uu_expand/options/static.FILES.html delete mode 100644 uu_expand/options/static.INITIAL.html delete mode 100644 uu_expand/options/static.NO_UTF8.html delete mode 100644 uu_expand/options/static.TABS.html delete mode 100644 uu_expand/sidebar-items.js delete mode 100644 uu_expr/all.html delete mode 100644 uu_expr/fn.uu_app.html delete mode 100644 uu_expr/fn.uumain.html delete mode 100644 uu_expr/index.html delete mode 100644 uu_expr/sidebar-items.js delete mode 100644 uu_factor/all.html delete mode 100644 uu_factor/factor/fn.factor.html delete mode 100644 uu_factor/factor/struct.Factors.html delete mode 100644 uu_factor/fn.factor.html delete mode 100644 uu_factor/fn.uu_app.html delete mode 100644 uu_factor/fn.uumain.html delete mode 100644 uu_factor/index.html delete mode 100644 uu_factor/numeric/fn.gcd.html delete mode 100644 uu_factor/numeric/gcd/fn.gcd.html delete mode 100644 uu_factor/numeric/index.html delete mode 100644 uu_factor/numeric/sidebar-items.js delete mode 100644 uu_factor/sidebar-items.js delete mode 100644 uu_factor/struct.Factors.html delete mode 100644 uu_factor/table/constant.CHUNK_SIZE.html delete mode 100644 uu_factor/table/constant.NEXT_PRIME.html delete mode 100644 uu_factor/table/constant.PRIME_INVERSIONS_U64.html delete mode 100644 uu_factor/table/fn.factor.html delete mode 100644 uu_factor/table/fn.factor_chunk.html delete mode 100644 uu_factor/table/index.html delete mode 100644 uu_factor/table/sidebar-items.js delete mode 100644 uu_false/all.html delete mode 100644 uu_false/fn.uu_app.html delete mode 100644 uu_false/fn.uumain.html delete mode 100644 uu_false/index.html delete mode 100644 uu_false/sidebar-items.js delete mode 100644 uu_fmt/all.html delete mode 100644 uu_fmt/fn.uu_app.html delete mode 100644 uu_fmt/fn.uumain.html delete mode 100644 uu_fmt/index.html delete mode 100644 uu_fmt/sidebar-items.js delete mode 100644 uu_fmt/struct.FmtOptions.html delete mode 100644 uu_fmt/type.FileOrStdReader.html delete mode 100644 uu_fold/all.html delete mode 100644 uu_fold/fn.uu_app.html delete mode 100644 uu_fold/fn.uumain.html delete mode 100644 uu_fold/index.html delete mode 100644 uu_fold/sidebar-items.js delete mode 100644 uu_groups/all.html delete mode 100644 uu_groups/fn.uu_app.html delete mode 100644 uu_groups/fn.uumain.html delete mode 100644 uu_groups/index.html delete mode 100644 uu_groups/sidebar-items.js delete mode 100644 uu_hashsum/all.html delete mode 100644 uu_hashsum/fn.uu_app_common.html delete mode 100644 uu_hashsum/fn.uu_app_custom.html delete mode 100644 uu_hashsum/fn.uumain.html delete mode 100644 uu_hashsum/index.html delete mode 100644 uu_hashsum/sidebar-items.js delete mode 100644 uu_head/all.html delete mode 100644 uu_head/fn.uu_app.html delete mode 100644 uu_head/fn.uumain.html delete mode 100644 uu_head/index.html delete mode 100644 uu_head/sidebar-items.js delete mode 100644 uu_hostid/all.html delete mode 100644 uu_hostid/fn.gethostid.html delete mode 100644 uu_hostid/fn.uu_app.html delete mode 100644 uu_hostid/fn.uumain.html delete mode 100644 uu_hostid/index.html delete mode 100644 uu_hostid/sidebar-items.js delete mode 100644 uu_hostname/all.html delete mode 100644 uu_hostname/fn.uu_app.html delete mode 100644 uu_hostname/fn.uumain.html delete mode 100644 uu_hostname/index.html delete mode 100644 uu_hostname/sidebar-items.js delete mode 100644 uu_id/all.html delete mode 100644 uu_id/fn.uu_app.html delete mode 100644 uu_id/fn.uumain.html delete mode 100644 uu_id/index.html delete mode 100644 uu_id/sidebar-items.js delete mode 100644 uu_install/all.html delete mode 100644 uu_install/enum.MainFunction.html delete mode 100644 uu_install/fn.uu_app.html delete mode 100644 uu_install/fn.uumain.html delete mode 100644 uu_install/index.html delete mode 100644 uu_install/sidebar-items.js delete mode 100644 uu_install/struct.Behavior.html delete mode 100644 uu_join/all.html delete mode 100644 uu_join/fn.uu_app.html delete mode 100644 uu_join/fn.uumain.html delete mode 100644 uu_join/index.html delete mode 100644 uu_join/sidebar-items.js delete mode 100644 uu_kill/all.html delete mode 100644 uu_kill/enum.Mode.html delete mode 100644 uu_kill/fn.uu_app.html delete mode 100644 uu_kill/fn.uumain.html delete mode 100644 uu_kill/index.html delete mode 100644 uu_kill/options/index.html delete mode 100644 uu_kill/options/sidebar-items.js delete mode 100644 uu_kill/options/static.LIST.html delete mode 100644 uu_kill/options/static.PIDS_OR_SIGNALS.html delete mode 100644 uu_kill/options/static.SIGNAL.html delete mode 100644 uu_kill/options/static.TABLE.html delete mode 100644 uu_kill/options/static.TABLE_OLD.html delete mode 100644 uu_kill/sidebar-items.js delete mode 100644 uu_link/all.html delete mode 100644 uu_link/fn.uu_app.html delete mode 100644 uu_link/fn.uumain.html delete mode 100644 uu_link/index.html delete mode 100644 uu_link/options/index.html delete mode 100644 uu_link/options/sidebar-items.js delete mode 100644 uu_link/options/static.FILES.html delete mode 100644 uu_link/sidebar-items.js delete mode 100644 uu_ln/all.html delete mode 100644 uu_ln/enum.OverwriteMode.html delete mode 100644 uu_ln/fn.is_symlink.html delete mode 100644 uu_ln/fn.uu_app.html delete mode 100644 uu_ln/fn.uumain.html delete mode 100644 uu_ln/index.html delete mode 100644 uu_ln/sidebar-items.js delete mode 100644 uu_ln/struct.Settings.html delete mode 100644 uu_logname/all.html delete mode 100644 uu_logname/fn.getlogin.html delete mode 100644 uu_logname/fn.uu_app.html delete mode 100644 uu_logname/fn.uumain.html delete mode 100644 uu_logname/index.html delete mode 100644 uu_logname/sidebar-items.js delete mode 100644 uu_ls/all.html delete mode 100644 uu_ls/fn.uu_app.html delete mode 100644 uu_ls/fn.uumain.html delete mode 100644 uu_ls/index.html delete mode 100644 uu_ls/options/dereference/index.html delete mode 100644 uu_ls/options/dereference/sidebar-items.js delete mode 100644 uu_ls/options/dereference/static.ALL.html delete mode 100644 uu_ls/options/dereference/static.ARGS.html delete mode 100644 uu_ls/options/dereference/static.DIR_ARGS.html delete mode 100644 uu_ls/options/files/index.html delete mode 100644 uu_ls/options/files/sidebar-items.js delete mode 100644 uu_ls/options/files/static.ALL.html delete mode 100644 uu_ls/options/files/static.ALMOST_ALL.html delete mode 100644 uu_ls/options/format/index.html delete mode 100644 uu_ls/options/format/sidebar-items.js delete mode 100644 uu_ls/options/format/static.ACROSS.html delete mode 100644 uu_ls/options/format/static.COLUMNS.html delete mode 100644 uu_ls/options/format/static.COMMAS.html delete mode 100644 uu_ls/options/format/static.LONG.html delete mode 100644 uu_ls/options/format/static.LONG_NO_GROUP.html delete mode 100644 uu_ls/options/format/static.LONG_NO_OWNER.html delete mode 100644 uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html delete mode 100644 uu_ls/options/format/static.ONE_LINE.html delete mode 100644 uu_ls/options/index.html delete mode 100644 uu_ls/options/indicator_style/index.html delete mode 100644 uu_ls/options/indicator_style/sidebar-items.js delete mode 100644 uu_ls/options/indicator_style/static.CLASSIFY.html delete mode 100644 uu_ls/options/indicator_style/static.FILE_TYPE.html delete mode 100644 uu_ls/options/indicator_style/static.SLASH.html delete mode 100644 uu_ls/options/quoting/index.html delete mode 100644 uu_ls/options/quoting/sidebar-items.js delete mode 100644 uu_ls/options/quoting/static.C.html delete mode 100644 uu_ls/options/quoting/static.ESCAPE.html delete mode 100644 uu_ls/options/quoting/static.LITERAL.html delete mode 100644 uu_ls/options/sidebar-items.js delete mode 100644 uu_ls/options/size/index.html delete mode 100644 uu_ls/options/size/sidebar-items.js delete mode 100644 uu_ls/options/size/static.HUMAN_READABLE.html delete mode 100644 uu_ls/options/size/static.SI.html delete mode 100644 uu_ls/options/sort/index.html delete mode 100644 uu_ls/options/sort/sidebar-items.js delete mode 100644 uu_ls/options/sort/static.EXTENSION.html delete mode 100644 uu_ls/options/sort/static.NONE.html delete mode 100644 uu_ls/options/sort/static.SIZE.html delete mode 100644 uu_ls/options/sort/static.TIME.html delete mode 100644 uu_ls/options/sort/static.VERSION.html delete mode 100644 uu_ls/options/static.AUTHOR.html delete mode 100644 uu_ls/options/static.COLOR.html delete mode 100644 uu_ls/options/static.CONTEXT.html delete mode 100644 uu_ls/options/static.DIRECTORY.html delete mode 100644 uu_ls/options/static.FORMAT.html delete mode 100644 uu_ls/options/static.FULL_TIME.html delete mode 100644 uu_ls/options/static.HIDE.html delete mode 100644 uu_ls/options/static.HIDE_CONTROL_CHARS.html delete mode 100644 uu_ls/options/static.IGNORE.html delete mode 100644 uu_ls/options/static.IGNORE_BACKUPS.html delete mode 100644 uu_ls/options/static.INDICATOR_STYLE.html delete mode 100644 uu_ls/options/static.INODE.html delete mode 100644 uu_ls/options/static.NO_GROUP.html delete mode 100644 uu_ls/options/static.PATHS.html delete mode 100644 uu_ls/options/static.QUOTING_STYLE.html delete mode 100644 uu_ls/options/static.RECURSIVE.html delete mode 100644 uu_ls/options/static.REVERSE.html delete mode 100644 uu_ls/options/static.SHOW_CONTROL_CHARS.html delete mode 100644 uu_ls/options/static.SORT.html delete mode 100644 uu_ls/options/static.TIME.html delete mode 100644 uu_ls/options/static.TIME_STYLE.html delete mode 100644 uu_ls/options/static.WIDTH.html delete mode 100644 uu_ls/options/time/index.html delete mode 100644 uu_ls/options/time/sidebar-items.js delete mode 100644 uu_ls/options/time/static.ACCESS.html delete mode 100644 uu_ls/options/time/static.CHANGE.html delete mode 100644 uu_ls/sidebar-items.js delete mode 100644 uu_mkdir/all.html delete mode 100644 uu_mkdir/fn.uu_app.html delete mode 100644 uu_mkdir/fn.uumain.html delete mode 100644 uu_mkdir/index.html delete mode 100644 uu_mkdir/sidebar-items.js delete mode 100644 uu_mkfifo/all.html delete mode 100644 uu_mkfifo/fn.uu_app.html delete mode 100644 uu_mkfifo/fn.uumain.html delete mode 100644 uu_mkfifo/index.html delete mode 100644 uu_mkfifo/sidebar-items.js delete mode 100644 uu_mknod/all.html delete mode 100644 uu_mknod/fn.uu_app.html delete mode 100644 uu_mknod/fn.uumain.html delete mode 100644 uu_mknod/index.html delete mode 100644 uu_mknod/sidebar-items.js delete mode 100644 uu_mktemp/all.html delete mode 100644 uu_mktemp/fn.dry_exec.html delete mode 100644 uu_mktemp/fn.uu_app.html delete mode 100644 uu_mktemp/fn.uumain.html delete mode 100644 uu_mktemp/index.html delete mode 100644 uu_mktemp/sidebar-items.js delete mode 100644 uu_more/all.html delete mode 100644 uu_more/fn.uu_app.html delete mode 100644 uu_more/fn.uumain.html delete mode 100644 uu_more/index.html delete mode 100644 uu_more/options/constant.CLEAN_PRINT.html delete mode 100644 uu_more/options/constant.FILES.html delete mode 100644 uu_more/options/constant.FROM_LINE.html delete mode 100644 uu_more/options/constant.LINES.html delete mode 100644 uu_more/options/constant.LOGICAL.html delete mode 100644 uu_more/options/constant.NO_PAUSE.html delete mode 100644 uu_more/options/constant.NUMBER.html delete mode 100644 uu_more/options/constant.PATTERN.html delete mode 100644 uu_more/options/constant.PLAIN.html delete mode 100644 uu_more/options/constant.PRINT_OVER.html delete mode 100644 uu_more/options/constant.SILENT.html delete mode 100644 uu_more/options/constant.SQUEEZE.html delete mode 100644 uu_more/options/index.html delete mode 100644 uu_more/options/sidebar-items.js delete mode 100644 uu_more/sidebar-items.js delete mode 100644 uu_mv/all.html delete mode 100644 uu_mv/enum.OverwriteMode.html delete mode 100644 uu_mv/fn.uu_app.html delete mode 100644 uu_mv/fn.uumain.html delete mode 100644 uu_mv/index.html delete mode 100644 uu_mv/sidebar-items.js delete mode 100644 uu_mv/struct.Behavior.html delete mode 100644 uu_nice/all.html delete mode 100644 uu_nice/fn.uu_app.html delete mode 100644 uu_nice/fn.uumain.html delete mode 100644 uu_nice/index.html delete mode 100644 uu_nice/options/index.html delete mode 100644 uu_nice/options/sidebar-items.js delete mode 100644 uu_nice/options/static.ADJUSTMENT.html delete mode 100644 uu_nice/options/static.COMMAND.html delete mode 100644 uu_nice/sidebar-items.js delete mode 100644 uu_nl/all.html delete mode 100644 uu_nl/fn.uu_app.html delete mode 100644 uu_nl/fn.uumain.html delete mode 100644 uu_nl/index.html delete mode 100644 uu_nl/options/constant.BODY_NUMBERING.html delete mode 100644 uu_nl/options/constant.FILE.html delete mode 100644 uu_nl/options/constant.FOOTER_NUMBERING.html delete mode 100644 uu_nl/options/constant.HEADER_NUMBERING.html delete mode 100644 uu_nl/options/constant.JOIN_BLANK_LINES.html delete mode 100644 uu_nl/options/constant.LINE_INCREMENT.html delete mode 100644 uu_nl/options/constant.NO_RENUMBER.html delete mode 100644 uu_nl/options/constant.NUMBER_FORMAT.html delete mode 100644 uu_nl/options/constant.NUMBER_SEPARATOR.html delete mode 100644 uu_nl/options/constant.NUMBER_WIDTH.html delete mode 100644 uu_nl/options/constant.SECTION_DELIMITER.html delete mode 100644 uu_nl/options/constant.STARTING_LINE_NUMBER.html delete mode 100644 uu_nl/options/index.html delete mode 100644 uu_nl/options/sidebar-items.js delete mode 100644 uu_nl/sidebar-items.js delete mode 100644 uu_nl/struct.Settings.html delete mode 100644 uu_nohup/all.html delete mode 100644 uu_nohup/fn.uu_app.html delete mode 100644 uu_nohup/fn.uumain.html delete mode 100644 uu_nohup/index.html delete mode 100644 uu_nohup/sidebar-items.js delete mode 100644 uu_nproc/all.html delete mode 100644 uu_nproc/constant._SC_NPROCESSORS_CONF.html delete mode 100644 uu_nproc/fn.uu_app.html delete mode 100644 uu_nproc/fn.uumain.html delete mode 100644 uu_nproc/index.html delete mode 100644 uu_nproc/sidebar-items.js delete mode 100644 uu_numfmt/all.html delete mode 100644 uu_numfmt/errors/enum.NumfmtError.html delete mode 100644 uu_numfmt/errors/index.html delete mode 100644 uu_numfmt/errors/sidebar-items.js delete mode 100644 uu_numfmt/fn.uu_app.html delete mode 100644 uu_numfmt/fn.uumain.html delete mode 100644 uu_numfmt/format/fn.div_round.html delete mode 100644 uu_numfmt/format/fn.format_and_print.html delete mode 100644 uu_numfmt/format/index.html delete mode 100644 uu_numfmt/format/sidebar-items.js delete mode 100644 uu_numfmt/format/struct.WhitespaceSplitter.html delete mode 100644 uu_numfmt/index.html delete mode 100644 uu_numfmt/options/constant.DELIMITER.html delete mode 100644 uu_numfmt/options/constant.FIELD.html delete mode 100644 uu_numfmt/options/constant.FIELD_DEFAULT.html delete mode 100644 uu_numfmt/options/constant.FROM.html delete mode 100644 uu_numfmt/options/constant.FROM_DEFAULT.html delete mode 100644 uu_numfmt/options/constant.HEADER.html delete mode 100644 uu_numfmt/options/constant.HEADER_DEFAULT.html delete mode 100644 uu_numfmt/options/constant.NUMBER.html delete mode 100644 uu_numfmt/options/constant.PADDING.html delete mode 100644 uu_numfmt/options/constant.ROUND.html delete mode 100644 uu_numfmt/options/constant.SUFFIX.html delete mode 100644 uu_numfmt/options/constant.TO.html delete mode 100644 uu_numfmt/options/constant.TO_DEFAULT.html delete mode 100644 uu_numfmt/options/enum.RoundMethod.html delete mode 100644 uu_numfmt/options/index.html delete mode 100644 uu_numfmt/options/sidebar-items.js delete mode 100644 uu_numfmt/options/struct.NumfmtOptions.html delete mode 100644 uu_numfmt/options/struct.TransformOptions.html delete mode 100644 uu_numfmt/sidebar-items.js delete mode 100644 uu_od/all.html delete mode 100644 uu_od/fn.uu_app.html delete mode 100644 uu_od/fn.uumain.html delete mode 100644 uu_od/index.html delete mode 100644 uu_od/sidebar-items.js delete mode 100644 uu_paste/all.html delete mode 100644 uu_paste/fn.uu_app.html delete mode 100644 uu_paste/fn.uumain.html delete mode 100644 uu_paste/index.html delete mode 100644 uu_paste/sidebar-items.js delete mode 100644 uu_pathchk/all.html delete mode 100644 uu_pathchk/fn.uu_app.html delete mode 100644 uu_pathchk/fn.uumain.html delete mode 100644 uu_pathchk/index.html delete mode 100644 uu_pathchk/sidebar-items.js delete mode 100644 uu_pinky/all.html delete mode 100644 uu_pinky/fn.uu_app.html delete mode 100644 uu_pinky/fn.uumain.html delete mode 100644 uu_pinky/index.html delete mode 100644 uu_pinky/sidebar-items.js delete mode 100644 uu_pinky/trait.Capitalize.html delete mode 100644 uu_pr/all.html delete mode 100644 uu_pr/fn.uu_app.html delete mode 100644 uu_pr/fn.uumain.html delete mode 100644 uu_pr/index.html delete mode 100644 uu_pr/sidebar-items.js delete mode 100644 uu_printenv/all.html delete mode 100644 uu_printenv/fn.uu_app.html delete mode 100644 uu_printenv/fn.uumain.html delete mode 100644 uu_printenv/index.html delete mode 100644 uu_printenv/sidebar-items.js delete mode 100644 uu_printf/all.html delete mode 100644 uu_printf/fn.uu_app.html delete mode 100644 uu_printf/fn.uumain.html delete mode 100644 uu_printf/index.html delete mode 100644 uu_printf/sidebar-items.js delete mode 100644 uu_ptx/all.html delete mode 100644 uu_ptx/fn.uu_app.html delete mode 100644 uu_ptx/fn.uumain.html delete mode 100644 uu_ptx/index.html delete mode 100644 uu_ptx/sidebar-items.js delete mode 100644 uu_pwd/all.html delete mode 100644 uu_pwd/fn.uu_app.html delete mode 100644 uu_pwd/fn.uumain.html delete mode 100644 uu_pwd/index.html delete mode 100644 uu_pwd/sidebar-items.js delete mode 100644 uu_readlink/all.html delete mode 100644 uu_readlink/fn.uu_app.html delete mode 100644 uu_readlink/fn.uumain.html delete mode 100644 uu_readlink/index.html delete mode 100644 uu_readlink/sidebar-items.js delete mode 100644 uu_realpath/all.html delete mode 100644 uu_realpath/fn.uu_app.html delete mode 100644 uu_realpath/fn.uumain.html delete mode 100644 uu_realpath/index.html delete mode 100644 uu_realpath/sidebar-items.js delete mode 100644 uu_relpath/all.html delete mode 100644 uu_relpath/fn.uu_app.html delete mode 100644 uu_relpath/fn.uumain.html delete mode 100644 uu_relpath/index.html delete mode 100644 uu_relpath/sidebar-items.js delete mode 100644 uu_rm/all.html delete mode 100644 uu_rm/fn.uu_app.html delete mode 100644 uu_rm/fn.uumain.html delete mode 100644 uu_rm/index.html delete mode 100644 uu_rm/sidebar-items.js delete mode 100644 uu_rmdir/all.html delete mode 100644 uu_rmdir/fn.uu_app.html delete mode 100644 uu_rmdir/fn.uumain.html delete mode 100644 uu_rmdir/index.html delete mode 100644 uu_rmdir/sidebar-items.js delete mode 100644 uu_runcon/all.html delete mode 100644 uu_runcon/fn.uu_app.html delete mode 100644 uu_runcon/fn.uumain.html delete mode 100644 uu_runcon/index.html delete mode 100644 uu_runcon/options/constant.COMPUTE.html delete mode 100644 uu_runcon/options/constant.RANGE.html delete mode 100644 uu_runcon/options/constant.ROLE.html delete mode 100644 uu_runcon/options/constant.TYPE.html delete mode 100644 uu_runcon/options/constant.USER.html delete mode 100644 uu_runcon/options/index.html delete mode 100644 uu_runcon/options/sidebar-items.js delete mode 100644 uu_runcon/sidebar-items.js delete mode 100644 uu_seq/all.html delete mode 100644 uu_seq/fn.uu_app.html delete mode 100644 uu_seq/fn.uumain.html delete mode 100644 uu_seq/index.html delete mode 100644 uu_seq/sidebar-items.js delete mode 100644 uu_shred/all.html delete mode 100644 uu_shred/fn.uu_app.html delete mode 100644 uu_shred/fn.uumain.html delete mode 100644 uu_shred/index.html delete mode 100644 uu_shred/options/constant.EXACT.html delete mode 100644 uu_shred/options/constant.FILE.html delete mode 100644 uu_shred/options/constant.FORCE.html delete mode 100644 uu_shred/options/constant.ITERATIONS.html delete mode 100644 uu_shred/options/constant.REMOVE.html delete mode 100644 uu_shred/options/constant.SIZE.html delete mode 100644 uu_shred/options/constant.VERBOSE.html delete mode 100644 uu_shred/options/constant.ZERO.html delete mode 100644 uu_shred/options/index.html delete mode 100644 uu_shred/options/sidebar-items.js delete mode 100644 uu_shred/sidebar-items.js delete mode 100644 uu_shuf/all.html delete mode 100644 uu_shuf/fn.uu_app.html delete mode 100644 uu_shuf/fn.uumain.html delete mode 100644 uu_shuf/index.html delete mode 100644 uu_shuf/sidebar-items.js delete mode 100644 uu_sleep/all.html delete mode 100644 uu_sleep/fn.uu_app.html delete mode 100644 uu_sleep/fn.uumain.html delete mode 100644 uu_sleep/index.html delete mode 100644 uu_sleep/sidebar-items.js delete mode 100644 uu_sort/all.html delete mode 100644 uu_sort/enum.GeneralF64ParseResult.html delete mode 100644 uu_sort/fn.uu_app.html delete mode 100644 uu_sort/fn.uumain.html delete mode 100644 uu_sort/index.html delete mode 100644 uu_sort/sidebar-items.js delete mode 100644 uu_sort/struct.GlobalSettings.html delete mode 100644 uu_sort/struct.Line.html delete mode 100644 uu_sort/struct.Output.html delete mode 100644 uu_split/all.html delete mode 100644 uu_split/fn.uu_app.html delete mode 100644 uu_split/fn.uumain.html delete mode 100644 uu_split/index.html delete mode 100644 uu_split/sidebar-items.js delete mode 100644 uu_stat/all.html delete mode 100644 uu_stat/constant.F_ALTER.html delete mode 100644 uu_stat/constant.F_GROUP.html delete mode 100644 uu_stat/constant.F_LEFT.html delete mode 100644 uu_stat/constant.F_SIGN.html delete mode 100644 uu_stat/constant.F_SPACE.html delete mode 100644 uu_stat/constant.F_ZERO.html delete mode 100644 uu_stat/enum.OutputType.html delete mode 100644 uu_stat/enum.Token.html delete mode 100644 uu_stat/fn.group_num.html delete mode 100644 uu_stat/fn.uu_app.html delete mode 100644 uu_stat/fn.uumain.html delete mode 100644 uu_stat/index.html delete mode 100644 uu_stat/options/index.html delete mode 100644 uu_stat/options/sidebar-items.js delete mode 100644 uu_stat/options/static.DEREFERENCE.html delete mode 100644 uu_stat/options/static.FILE_SYSTEM.html delete mode 100644 uu_stat/options/static.FORMAT.html delete mode 100644 uu_stat/options/static.PRINTF.html delete mode 100644 uu_stat/options/static.TERSE.html delete mode 100644 uu_stat/sidebar-items.js delete mode 100644 uu_stat/struct.Stater.html delete mode 100644 uu_stat/trait.ScanUtil.html delete mode 100644 uu_stdbuf/all.html delete mode 100644 uu_stdbuf/fn.uu_app.html delete mode 100644 uu_stdbuf/fn.uumain.html delete mode 100644 uu_stdbuf/index.html delete mode 100644 uu_stdbuf/sidebar-items.js delete mode 100644 uu_sum/all.html delete mode 100644 uu_sum/fn.uu_app.html delete mode 100644 uu_sum/fn.uumain.html delete mode 100644 uu_sum/index.html delete mode 100644 uu_sum/sidebar-items.js delete mode 100644 uu_sync/all.html delete mode 100644 uu_sync/fn.uu_app.html delete mode 100644 uu_sync/fn.uumain.html delete mode 100644 uu_sync/index.html delete mode 100644 uu_sync/options/index.html delete mode 100644 uu_sync/options/sidebar-items.js delete mode 100644 uu_sync/options/static.DATA.html delete mode 100644 uu_sync/options/static.FILE_SYSTEM.html delete mode 100644 uu_sync/sidebar-items.js delete mode 100644 uu_tac/all.html delete mode 100644 uu_tac/fn.uu_app.html delete mode 100644 uu_tac/fn.uumain.html delete mode 100644 uu_tac/index.html delete mode 100644 uu_tac/sidebar-items.js delete mode 100644 uu_tail/all.html delete mode 100644 uu_tail/fn.uu_app.html delete mode 100644 uu_tail/fn.uumain.html delete mode 100644 uu_tail/index.html delete mode 100644 uu_tail/options/index.html delete mode 100644 uu_tail/options/sidebar-items.js delete mode 100644 uu_tail/options/static.ARG_FILES.html delete mode 100644 uu_tail/options/static.BYTES.html delete mode 100644 uu_tail/options/static.FOLLOW.html delete mode 100644 uu_tail/options/static.LINES.html delete mode 100644 uu_tail/options/static.PID.html delete mode 100644 uu_tail/options/static.SLEEP_INT.html delete mode 100644 uu_tail/options/static.ZERO_TERM.html delete mode 100644 uu_tail/options/verbosity/index.html delete mode 100644 uu_tail/options/verbosity/sidebar-items.js delete mode 100644 uu_tail/options/verbosity/static.QUIET.html delete mode 100644 uu_tail/options/verbosity/static.VERBOSE.html delete mode 100644 uu_tail/sidebar-items.js delete mode 100644 uu_tee/all.html delete mode 100644 uu_tee/fn.uu_app.html delete mode 100644 uu_tee/fn.uumain.html delete mode 100644 uu_tee/index.html delete mode 100644 uu_tee/sidebar-items.js delete mode 100644 uu_test/all.html delete mode 100644 uu_test/fn.uu_app.html delete mode 100644 uu_test/fn.uumain.html delete mode 100644 uu_test/index.html delete mode 100644 uu_test/sidebar-items.js delete mode 100644 uu_timeout/all.html delete mode 100644 uu_timeout/fn.uu_app.html delete mode 100644 uu_timeout/fn.uumain.html delete mode 100644 uu_timeout/index.html delete mode 100644 uu_timeout/options/index.html delete mode 100644 uu_timeout/options/sidebar-items.js delete mode 100644 uu_timeout/options/static.COMMAND.html delete mode 100644 uu_timeout/options/static.DURATION.html delete mode 100644 uu_timeout/options/static.FOREGROUND.html delete mode 100644 uu_timeout/options/static.KILL_AFTER.html delete mode 100644 uu_timeout/options/static.PRESERVE_STATUS.html delete mode 100644 uu_timeout/options/static.SIGNAL.html delete mode 100644 uu_timeout/options/static.VERBOSE.html delete mode 100644 uu_timeout/sidebar-items.js delete mode 100644 uu_touch/all.html delete mode 100644 uu_touch/fn.uu_app.html delete mode 100644 uu_touch/fn.uumain.html delete mode 100644 uu_touch/index.html delete mode 100644 uu_touch/options/index.html delete mode 100644 uu_touch/options/sidebar-items.js delete mode 100644 uu_touch/options/sources/index.html delete mode 100644 uu_touch/options/sources/sidebar-items.js delete mode 100644 uu_touch/options/sources/static.CURRENT.html delete mode 100644 uu_touch/options/sources/static.DATE.html delete mode 100644 uu_touch/options/sources/static.REFERENCE.html delete mode 100644 uu_touch/options/static.ACCESS.html delete mode 100644 uu_touch/options/static.MODIFICATION.html delete mode 100644 uu_touch/options/static.NO_CREATE.html delete mode 100644 uu_touch/options/static.NO_DEREF.html delete mode 100644 uu_touch/options/static.SOURCES.html delete mode 100644 uu_touch/options/static.TIME.html delete mode 100644 uu_touch/sidebar-items.js delete mode 100644 uu_tr/all.html delete mode 100644 uu_tr/fn.uu_app.html delete mode 100644 uu_tr/fn.uumain.html delete mode 100644 uu_tr/index.html delete mode 100644 uu_tr/sidebar-items.js delete mode 100644 uu_true/all.html delete mode 100644 uu_true/fn.uu_app.html delete mode 100644 uu_true/fn.uumain.html delete mode 100644 uu_true/index.html delete mode 100644 uu_true/sidebar-items.js delete mode 100644 uu_truncate/all.html delete mode 100644 uu_truncate/fn.uu_app.html delete mode 100644 uu_truncate/fn.uumain.html delete mode 100644 uu_truncate/index.html delete mode 100644 uu_truncate/options/index.html delete mode 100644 uu_truncate/options/sidebar-items.js delete mode 100644 uu_truncate/options/static.ARG_FILES.html delete mode 100644 uu_truncate/options/static.IO_BLOCKS.html delete mode 100644 uu_truncate/options/static.NO_CREATE.html delete mode 100644 uu_truncate/options/static.REFERENCE.html delete mode 100644 uu_truncate/options/static.SIZE.html delete mode 100644 uu_truncate/sidebar-items.js delete mode 100644 uu_tsort/all.html delete mode 100644 uu_tsort/fn.uu_app.html delete mode 100644 uu_tsort/fn.uumain.html delete mode 100644 uu_tsort/index.html delete mode 100644 uu_tsort/sidebar-items.js delete mode 100644 uu_tty/all.html delete mode 100644 uu_tty/fn.uu_app.html delete mode 100644 uu_tty/fn.uumain.html delete mode 100644 uu_tty/index.html delete mode 100644 uu_tty/sidebar-items.js delete mode 100644 uu_uname/all.html delete mode 100644 uu_uname/fn.uu_app.html delete mode 100644 uu_uname/fn.uumain.html delete mode 100644 uu_uname/index.html delete mode 100644 uu_uname/options/index.html delete mode 100644 uu_uname/options/sidebar-items.js delete mode 100644 uu_uname/options/static.ALL.html delete mode 100644 uu_uname/options/static.HWPLATFORM.html delete mode 100644 uu_uname/options/static.KERNELNAME.html delete mode 100644 uu_uname/options/static.KERNELRELEASE.html delete mode 100644 uu_uname/options/static.KERNELVERSION.html delete mode 100644 uu_uname/options/static.MACHINE.html delete mode 100644 uu_uname/options/static.NODENAME.html delete mode 100644 uu_uname/options/static.OS.html delete mode 100644 uu_uname/options/static.PROCESSOR.html delete mode 100644 uu_uname/sidebar-items.js delete mode 100644 uu_unexpand/all.html delete mode 100644 uu_unexpand/fn.uu_app.html delete mode 100644 uu_unexpand/fn.uumain.html delete mode 100644 uu_unexpand/index.html delete mode 100644 uu_unexpand/sidebar-items.js delete mode 100644 uu_uniq/all.html delete mode 100644 uu_uniq/fn.uu_app.html delete mode 100644 uu_uniq/fn.uumain.html delete mode 100644 uu_uniq/index.html delete mode 100644 uu_uniq/options/index.html delete mode 100644 uu_uniq/options/sidebar-items.js delete mode 100644 uu_uniq/options/static.ALL_REPEATED.html delete mode 100644 uu_uniq/options/static.CHECK_CHARS.html delete mode 100644 uu_uniq/options/static.COUNT.html delete mode 100644 uu_uniq/options/static.GROUP.html delete mode 100644 uu_uniq/options/static.IGNORE_CASE.html delete mode 100644 uu_uniq/options/static.REPEATED.html delete mode 100644 uu_uniq/options/static.SKIP_CHARS.html delete mode 100644 uu_uniq/options/static.SKIP_FIELDS.html delete mode 100644 uu_uniq/options/static.UNIQUE.html delete mode 100644 uu_uniq/options/static.ZERO_TERMINATED.html delete mode 100644 uu_uniq/sidebar-items.js delete mode 100644 uu_unlink/all.html delete mode 100644 uu_unlink/fn.uu_app.html delete mode 100644 uu_unlink/fn.uumain.html delete mode 100644 uu_unlink/index.html delete mode 100644 uu_unlink/sidebar-items.js delete mode 100644 uu_uptime/all.html delete mode 100644 uu_uptime/fn.uu_app.html delete mode 100644 uu_uptime/fn.uumain.html delete mode 100644 uu_uptime/index.html delete mode 100644 uu_uptime/options/index.html delete mode 100644 uu_uptime/options/sidebar-items.js delete mode 100644 uu_uptime/options/static.SINCE.html delete mode 100644 uu_uptime/sidebar-items.js delete mode 100644 uu_users/all.html delete mode 100644 uu_users/fn.uu_app.html delete mode 100644 uu_users/fn.uumain.html delete mode 100644 uu_users/index.html delete mode 100644 uu_users/sidebar-items.js delete mode 100644 uu_wc/all.html delete mode 100644 uu_wc/fn.uu_app.html delete mode 100644 uu_wc/fn.uumain.html delete mode 100644 uu_wc/index.html delete mode 100644 uu_wc/options/index.html delete mode 100644 uu_wc/options/sidebar-items.js delete mode 100644 uu_wc/options/static.BYTES.html delete mode 100644 uu_wc/options/static.CHAR.html delete mode 100644 uu_wc/options/static.LINES.html delete mode 100644 uu_wc/options/static.MAX_LINE_LENGTH.html delete mode 100644 uu_wc/options/static.WORDS.html delete mode 100644 uu_wc/sidebar-items.js delete mode 100644 uu_who/all.html delete mode 100644 uu_who/fn.uu_app.html delete mode 100644 uu_who/fn.uumain.html delete mode 100644 uu_who/index.html delete mode 100644 uu_who/sidebar-items.js delete mode 100644 uu_whoami/all.html delete mode 100644 uu_whoami/fn.uu_app.html delete mode 100644 uu_whoami/fn.uumain.html delete mode 100644 uu_whoami/index.html delete mode 100644 uu_whoami/sidebar-items.js delete mode 100644 uu_yes/all.html delete mode 100644 uu_yes/fn.exec.html delete mode 100644 uu_yes/fn.uu_app.html delete mode 100644 uu_yes/fn.uumain.html delete mode 100644 uu_yes/index.html delete mode 100644 uu_yes/sidebar-items.js delete mode 100644 uucore/all.html delete mode 100644 uucore/backup_control/arguments/fn.backup.html delete mode 100644 uucore/backup_control/arguments/fn.backup_no_args.html delete mode 100644 uucore/backup_control/arguments/fn.suffix.html delete mode 100644 uucore/backup_control/arguments/index.html delete mode 100644 uucore/backup_control/arguments/sidebar-items.js delete mode 100644 uucore/backup_control/arguments/static.OPT_BACKUP.html delete mode 100644 uucore/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html delete mode 100644 uucore/backup_control/arguments/static.OPT_SUFFIX.html delete mode 100644 uucore/backup_control/enum.BackupError.html delete mode 100644 uucore/backup_control/enum.BackupMode.html delete mode 100644 uucore/backup_control/fn.determine_backup_mode.html delete mode 100644 uucore/backup_control/fn.determine_backup_suffix.html delete mode 100644 uucore/backup_control/fn.get_backup_path.html delete mode 100644 uucore/backup_control/index.html delete mode 100644 uucore/backup_control/sidebar-items.js delete mode 100644 uucore/backup_control/static.BACKUP_CONTROL_LONG_HELP.html delete mode 100644 uucore/backup_control/static.BACKUP_CONTROL_VALUES.html delete mode 100644 uucore/display/fn.print_verbatim.html delete mode 100644 uucore/display/fn.println_verbatim.html delete mode 100644 uucore/display/index.html delete mode 100644 uucore/display/sidebar-items.js delete mode 100644 uucore/display/struct.Quoted.html delete mode 100644 uucore/display/trait.Quotable.html delete mode 100644 uucore/encoding/enum.DecodeError.html delete mode 100644 uucore/encoding/enum.EncodeError.html delete mode 100644 uucore/encoding/enum.Format.html delete mode 100644 uucore/encoding/fn.decode.html delete mode 100644 uucore/encoding/fn.encode.html delete mode 100644 uucore/encoding/fn.wrap_print.html delete mode 100644 uucore/encoding/fn.wrap_write.html delete mode 100644 uucore/encoding/index.html delete mode 100644 uucore/encoding/sidebar-items.js delete mode 100644 uucore/encoding/struct.Data.html delete mode 100644 uucore/encoding/type.DecodeResult.html delete mode 100644 uucore/entries/fn.get_groups.html delete mode 100644 uucore/entries/fn.get_groups_gnu.html delete mode 100644 uucore/entries/fn.gid2grp.html delete mode 100644 uucore/entries/fn.grp2gid.html delete mode 100644 uucore/entries/fn.uid2usr.html delete mode 100644 uucore/entries/fn.usr2uid.html delete mode 100644 uucore/entries/index.html delete mode 100644 uucore/entries/sidebar-items.js delete mode 100644 uucore/entries/struct.Group.html delete mode 100644 uucore/entries/struct.Passwd.html delete mode 100644 uucore/entries/trait.Locate.html delete mode 100644 uucore/enum.ConversionResult.html delete mode 100644 uucore/enum.InvalidEncodingHandling.html delete mode 100644 uucore/error/fn.get_exit_code.html delete mode 100644 uucore/error/fn.set_exit_code.html delete mode 100644 uucore/error/fn.strip_errno.html delete mode 100644 uucore/error/index.html delete mode 100644 uucore/error/macro.uio_error!.html delete mode 100644 uucore/error/macro.uio_error.html delete mode 100644 uucore/error/sidebar-items.js delete mode 100644 uucore/error/struct.ExitCode.html delete mode 100644 uucore/error/struct.UIoError.html delete mode 100644 uucore/error/struct.USimpleError.html delete mode 100644 uucore/error/struct.UUsageError.html delete mode 100644 uucore/error/trait.FromIo.html delete mode 100644 uucore/error/trait.UError.html delete mode 100644 uucore/error/type.UResult.html delete mode 100644 uucore/features/encoding/enum.DecodeError.html delete mode 100644 uucore/features/encoding/enum.EncodeError.html delete mode 100644 uucore/features/encoding/enum.Format.html delete mode 100644 uucore/features/encoding/fn.decode.html delete mode 100644 uucore/features/encoding/fn.encode.html delete mode 100644 uucore/features/encoding/fn.wrap_print.html delete mode 100644 uucore/features/encoding/fn.wrap_write.html delete mode 100644 uucore/features/encoding/index.html delete mode 100644 uucore/features/encoding/struct.Data.html delete mode 100644 uucore/features/encoding/type.DecodeResult.html delete mode 100644 uucore/features/entries/fn.get_groups.html delete mode 100644 uucore/features/entries/fn.get_groups_gnu.html delete mode 100644 uucore/features/entries/fn.gid2grp.html delete mode 100644 uucore/features/entries/fn.grp2gid.html delete mode 100644 uucore/features/entries/fn.uid2usr.html delete mode 100644 uucore/features/entries/fn.usr2uid.html delete mode 100644 uucore/features/entries/index.html delete mode 100644 uucore/features/entries/struct.Group.html delete mode 100644 uucore/features/entries/struct.Passwd.html delete mode 100644 uucore/features/entries/trait.Locate.html delete mode 100644 uucore/features/fs/enum.MissingHandling.html delete mode 100644 uucore/features/fs/enum.ResolveMode.html delete mode 100644 uucore/features/fs/fn.canonicalize.html delete mode 100644 uucore/features/fs/fn.display_permissions.html delete mode 100644 uucore/features/fs/fn.display_permissions_unix.html delete mode 100644 uucore/features/fs/fn.normalize_path.html delete mode 100644 uucore/features/fs/fn.resolve_relative_path.html delete mode 100644 uucore/features/fs/index.html delete mode 100644 uucore/features/fs/struct.FileInformation.html delete mode 100644 uucore/features/fsext/fn.StatFs.html delete mode 100644 uucore/features/fsext/fn.pretty_filetype.html delete mode 100644 uucore/features/fsext/fn.pretty_fstype.html delete mode 100644 uucore/features/fsext/fn.pretty_time.html delete mode 100644 uucore/features/fsext/fn.read_fs_list.html delete mode 100644 uucore/features/fsext/fn.statfs.html delete mode 100644 uucore/features/fsext/fn.statfs_fn.html delete mode 100644 uucore/features/fsext/index.html delete mode 100644 uucore/features/fsext/struct.FsUsage.html delete mode 100644 uucore/features/fsext/struct.MountInfo.html delete mode 100644 uucore/features/fsext/struct.StatFs.html delete mode 100644 uucore/features/fsext/struct.statfs_fn.html delete mode 100644 uucore/features/fsext/trait.BirthTime.html delete mode 100644 uucore/features/fsext/trait.FsMeta.html delete mode 100644 uucore/features/memo/index.html delete mode 100644 uucore/features/memo/struct.Memo.html delete mode 100644 uucore/features/mode/fn.get_umask.html delete mode 100644 uucore/features/mode/fn.parse_mode.html delete mode 100644 uucore/features/mode/fn.parse_numeric.html delete mode 100644 uucore/features/mode/fn.parse_symbolic.html delete mode 100644 uucore/features/mode/fn.strip_minus_from_mode.html delete mode 100644 uucore/features/mode/index.html delete mode 100644 uucore/features/perms/enum.IfFrom.html delete mode 100644 uucore/features/perms/enum.TraverseSymlinks.html delete mode 100644 uucore/features/perms/enum.VerbosityLevel.html delete mode 100644 uucore/features/perms/fn.chown_base.html delete mode 100644 uucore/features/perms/fn.wrap_chown.html delete mode 100644 uucore/features/perms/index.html delete mode 100644 uucore/features/perms/options/constant.ARG_FILES.html delete mode 100644 uucore/features/perms/options/constant.ARG_GROUP.html delete mode 100644 uucore/features/perms/options/constant.ARG_OWNER.html delete mode 100644 uucore/features/perms/options/constant.FROM.html delete mode 100644 uucore/features/perms/options/constant.RECURSIVE.html delete mode 100644 uucore/features/perms/options/constant.REFERENCE.html delete mode 100644 uucore/features/perms/options/dereference/constant.DEREFERENCE.html delete mode 100644 uucore/features/perms/options/dereference/constant.NO_DEREFERENCE.html delete mode 100644 uucore/features/perms/options/dereference/index.html delete mode 100644 uucore/features/perms/options/index.html delete mode 100644 uucore/features/perms/options/preserve_root/constant.NO_PRESERVE.html delete mode 100644 uucore/features/perms/options/preserve_root/constant.PRESERVE.html delete mode 100644 uucore/features/perms/options/preserve_root/index.html delete mode 100644 uucore/features/perms/options/traverse/constant.EVERY.html delete mode 100644 uucore/features/perms/options/traverse/constant.NO_TRAVERSE.html delete mode 100644 uucore/features/perms/options/traverse/constant.TRAVERSE.html delete mode 100644 uucore/features/perms/options/traverse/index.html delete mode 100644 uucore/features/perms/options/verbosity/constant.CHANGES.html delete mode 100644 uucore/features/perms/options/verbosity/constant.QUIET.html delete mode 100644 uucore/features/perms/options/verbosity/constant.SILENT.html delete mode 100644 uucore/features/perms/options/verbosity/constant.VERBOSE.html delete mode 100644 uucore/features/perms/options/verbosity/index.html delete mode 100644 uucore/features/perms/struct.ChownExecutor.html delete mode 100644 uucore/features/perms/struct.Verbosity.html delete mode 100644 uucore/features/pipes/fn.pipe.html delete mode 100644 uucore/features/pipes/fn.splice.html delete mode 100644 uucore/features/pipes/fn.splice_exact.html delete mode 100644 uucore/features/pipes/fn.vmsplice.html delete mode 100644 uucore/features/pipes/index.html delete mode 100644 uucore/features/pipes/type.Error.html delete mode 100644 uucore/features/pipes/type.Result.html delete mode 100644 uucore/features/process/enum.ExitStatus.html delete mode 100644 uucore/features/process/fn.getegid.html delete mode 100644 uucore/features/process/fn.geteuid.html delete mode 100644 uucore/features/process/fn.getgid.html delete mode 100644 uucore/features/process/fn.getuid.html delete mode 100644 uucore/features/process/index.html delete mode 100644 uucore/features/process/trait.ChildExt.html delete mode 100644 uucore/features/ringbuffer/index.html delete mode 100644 uucore/features/ringbuffer/struct.RingBuffer.html delete mode 100644 uucore/features/signals/fn.is_signal.html delete mode 100644 uucore/features/signals/fn.signal_by_name_or_value.html delete mode 100644 uucore/features/signals/fn.signal_name_by_value.html delete mode 100644 uucore/features/signals/index.html delete mode 100644 uucore/features/signals/static.ALL_SIGNALS.html delete mode 100644 uucore/features/signals/static.DEFAULT_SIGNAL.html delete mode 100644 uucore/features/utmpx/fn.endutxent.html delete mode 100644 uucore/features/utmpx/fn.getutxent.html delete mode 100644 uucore/features/utmpx/fn.setutxent.html delete mode 100644 uucore/features/utmpx/fn.utmpxname.html delete mode 100644 uucore/features/utmpx/index.html delete mode 100644 uucore/features/utmpx/struct.Utmpx.html delete mode 100644 uucore/features/utmpx/struct.UtmpxIter.html delete mode 100644 uucore/features/utmpx/ut/constant.ACCOUNTING.html delete mode 100644 uucore/features/utmpx/ut/constant.BOOT_TIME.html delete mode 100644 uucore/features/utmpx/ut/constant.DEAD_PROCESS.html delete mode 100644 uucore/features/utmpx/ut/constant.EMPTY.html delete mode 100644 uucore/features/utmpx/ut/constant.INIT_PROCESS.html delete mode 100644 uucore/features/utmpx/ut/constant.LOGIN_PROCESS.html delete mode 100644 uucore/features/utmpx/ut/constant.NEW_TIME.html delete mode 100644 uucore/features/utmpx/ut/constant.OLD_TIME.html delete mode 100644 uucore/features/utmpx/ut/constant.RUN_LVL.html delete mode 100644 uucore/features/utmpx/ut/constant.USER_PROCESS.html delete mode 100644 uucore/features/utmpx/ut/constant.UT_HOSTSIZE.html delete mode 100644 uucore/features/utmpx/ut/constant.UT_IDSIZE.html delete mode 100644 uucore/features/utmpx/ut/constant.UT_LINESIZE.html delete mode 100644 uucore/features/utmpx/ut/constant.UT_NAMESIZE.html delete mode 100644 uucore/features/utmpx/ut/static.DEFAULT_FILE.html delete mode 100644 uucore/fn.args_os.html delete mode 100644 uucore/fn.execution_phrase.html delete mode 100644 uucore/fn.get_utility_is_second_arg.html delete mode 100644 uucore/fn.set_utility_is_second_arg.html delete mode 100644 uucore/fn.util_name.html delete mode 100644 uucore/fs/enum.MissingHandling.html delete mode 100644 uucore/fs/enum.ResolveMode.html delete mode 100644 uucore/fs/fn.canonicalize.html delete mode 100644 uucore/fs/fn.display_permissions.html delete mode 100644 uucore/fs/fn.display_permissions_unix.html delete mode 100644 uucore/fs/fn.normalize_path.html delete mode 100644 uucore/fs/fn.resolve_relative_path.html delete mode 100644 uucore/fs/index.html delete mode 100644 uucore/fs/macro.has!.html delete mode 100644 uucore/fs/macro.has.html delete mode 100644 uucore/fs/sidebar-items.js delete mode 100644 uucore/fs/struct.FileInformation.html delete mode 100644 uucore/fsext/fn.StatFs.html delete mode 100644 uucore/fsext/fn.pretty_filetype.html delete mode 100644 uucore/fsext/fn.pretty_fstype.html delete mode 100644 uucore/fsext/fn.pretty_time.html delete mode 100644 uucore/fsext/fn.read_fs_list.html delete mode 100644 uucore/fsext/fn.statfs.html delete mode 100644 uucore/fsext/fn.statfs_fn.html delete mode 100644 uucore/fsext/index.html delete mode 100644 uucore/fsext/sidebar-items.js delete mode 100644 uucore/fsext/struct.FsUsage.html delete mode 100644 uucore/fsext/struct.MountInfo.html delete mode 100644 uucore/fsext/struct.StatFs.html delete mode 100644 uucore/fsext/struct.statfs_fn.html delete mode 100644 uucore/fsext/trait.BirthTime.html delete mode 100644 uucore/fsext/trait.FsMeta.html delete mode 100644 uucore/index.html delete mode 100644 uucore/macro.crash!.html delete mode 100644 uucore/macro.crash.html delete mode 100644 uucore/macro.crash_if_err!.html delete mode 100644 uucore/macro.crash_if_err.html delete mode 100644 uucore/macro.has!.html delete mode 100644 uucore/macro.has.html delete mode 100644 uucore/macro.show!.html delete mode 100644 uucore/macro.show.html delete mode 100644 uucore/macro.show_error!.html delete mode 100644 uucore/macro.show_error.html delete mode 100644 uucore/macro.show_error_custom_description!.html delete mode 100644 uucore/macro.show_error_custom_description.html delete mode 100644 uucore/macro.show_if_err!.html delete mode 100644 uucore/macro.show_if_err.html delete mode 100644 uucore/macro.show_usage_error!.html delete mode 100644 uucore/macro.show_usage_error.html delete mode 100644 uucore/macro.show_warning!.html delete mode 100644 uucore/macro.show_warning.html delete mode 100644 uucore/macro.uio_error!.html delete mode 100644 uucore/macro.uio_error.html delete mode 100644 uucore/memo/index.html delete mode 100644 uucore/memo/sidebar-items.js delete mode 100644 uucore/memo/struct.Memo.html delete mode 100644 uucore/mode/fn.get_umask.html delete mode 100644 uucore/mode/fn.parse_mode.html delete mode 100644 uucore/mode/fn.parse_numeric.html delete mode 100644 uucore/mode/fn.parse_symbolic.html delete mode 100644 uucore/mode/fn.strip_minus_from_mode.html delete mode 100644 uucore/mode/index.html delete mode 100644 uucore/mode/sidebar-items.js delete mode 100644 uucore/mods/backup_control/arguments/fn.backup.html delete mode 100644 uucore/mods/backup_control/arguments/fn.backup_no_args.html delete mode 100644 uucore/mods/backup_control/arguments/fn.suffix.html delete mode 100644 uucore/mods/backup_control/arguments/index.html delete mode 100644 uucore/mods/backup_control/arguments/static.OPT_BACKUP.html delete mode 100644 uucore/mods/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html delete mode 100644 uucore/mods/backup_control/arguments/static.OPT_SUFFIX.html delete mode 100644 uucore/mods/backup_control/enum.BackupError.html delete mode 100644 uucore/mods/backup_control/enum.BackupMode.html delete mode 100644 uucore/mods/backup_control/fn.determine_backup_mode.html delete mode 100644 uucore/mods/backup_control/fn.determine_backup_suffix.html delete mode 100644 uucore/mods/backup_control/fn.get_backup_path.html delete mode 100644 uucore/mods/backup_control/index.html delete mode 100644 uucore/mods/backup_control/static.BACKUP_CONTROL_LONG_HELP.html delete mode 100644 uucore/mods/backup_control/static.BACKUP_CONTROL_VALUES.html delete mode 100644 uucore/mods/display/fn.print_verbatim.html delete mode 100644 uucore/mods/display/fn.println_verbatim.html delete mode 100644 uucore/mods/display/index.html delete mode 100644 uucore/mods/display/struct.Quoted.html delete mode 100644 uucore/mods/display/trait.Quotable.html delete mode 100644 uucore/mods/error/fn.get_exit_code.html delete mode 100644 uucore/mods/error/fn.set_exit_code.html delete mode 100644 uucore/mods/error/fn.strip_errno.html delete mode 100644 uucore/mods/error/index.html delete mode 100644 uucore/mods/error/struct.ExitCode.html delete mode 100644 uucore/mods/error/struct.UIoError.html delete mode 100644 uucore/mods/error/struct.USimpleError.html delete mode 100644 uucore/mods/error/struct.UUsageError.html delete mode 100644 uucore/mods/error/trait.FromIo.html delete mode 100644 uucore/mods/error/trait.UError.html delete mode 100644 uucore/mods/error/type.UResult.html delete mode 100644 uucore/mods/os/fn.is_wsl_1.html delete mode 100644 uucore/mods/os/fn.is_wsl_2.html delete mode 100644 uucore/mods/os/index.html delete mode 100644 uucore/mods/panic/fn.mute_sigpipe_panic.html delete mode 100644 uucore/mods/panic/index.html delete mode 100644 uucore/mods/ranges/fn.complement.html delete mode 100644 uucore/mods/ranges/fn.contain.html delete mode 100644 uucore/mods/ranges/index.html delete mode 100644 uucore/mods/ranges/struct.Range.html delete mode 100644 uucore/mods/version_cmp/fn.version_cmp.html delete mode 100644 uucore/mods/version_cmp/index.html delete mode 100644 uucore/os/fn.is_wsl_1.html delete mode 100644 uucore/os/fn.is_wsl_2.html delete mode 100644 uucore/os/index.html delete mode 100644 uucore/os/sidebar-items.js delete mode 100644 uucore/panic/fn.mute_sigpipe_panic.html delete mode 100644 uucore/panic/index.html delete mode 100644 uucore/panic/sidebar-items.js delete mode 100644 uucore/parse_size/enum.ParseSizeError.html delete mode 100644 uucore/parse_size/fn.parse_size.html delete mode 100644 uucore/parse_size/index.html delete mode 100644 uucore/parse_size/sidebar-items.js delete mode 100644 uucore/parse_time/fn.from_str.html delete mode 100644 uucore/parse_time/index.html delete mode 100644 uucore/parse_time/sidebar-items.js delete mode 100644 uucore/parser/parse_size/enum.ParseSizeError.html delete mode 100644 uucore/parser/parse_size/fn.parse_size.html delete mode 100644 uucore/parser/parse_size/index.html delete mode 100644 uucore/parser/parse_time/fn.from_str.html delete mode 100644 uucore/parser/parse_time/index.html delete mode 100644 uucore/perms/entries/fn.get_groups.html delete mode 100644 uucore/perms/entries/fn.get_groups_gnu.html delete mode 100644 uucore/perms/entries/fn.gid2grp.html delete mode 100644 uucore/perms/entries/fn.grp2gid.html delete mode 100644 uucore/perms/entries/fn.uid2usr.html delete mode 100644 uucore/perms/entries/fn.usr2uid.html delete mode 100644 uucore/perms/entries/index.html delete mode 100644 uucore/perms/entries/sidebar-items.js delete mode 100644 uucore/perms/entries/struct.Group.html delete mode 100644 uucore/perms/entries/struct.Passwd.html delete mode 100644 uucore/perms/entries/trait.Locate.html delete mode 100644 uucore/perms/enum.IfFrom.html delete mode 100644 uucore/perms/enum.TraverseSymlinks.html delete mode 100644 uucore/perms/enum.VerbosityLevel.html delete mode 100644 uucore/perms/fn.chown_base.html delete mode 100644 uucore/perms/fn.wrap_chown.html delete mode 100644 uucore/perms/index.html delete mode 100644 uucore/perms/options/constant.ARG_FILES.html delete mode 100644 uucore/perms/options/constant.ARG_GROUP.html delete mode 100644 uucore/perms/options/constant.ARG_OWNER.html delete mode 100644 uucore/perms/options/constant.FROM.html delete mode 100644 uucore/perms/options/constant.RECURSIVE.html delete mode 100644 uucore/perms/options/constant.REFERENCE.html delete mode 100644 uucore/perms/options/dereference/constant.DEREFERENCE.html delete mode 100644 uucore/perms/options/dereference/constant.NO_DEREFERENCE.html delete mode 100644 uucore/perms/options/dereference/index.html delete mode 100644 uucore/perms/options/dereference/sidebar-items.js delete mode 100644 uucore/perms/options/index.html delete mode 100644 uucore/perms/options/preserve_root/constant.NO_PRESERVE.html delete mode 100644 uucore/perms/options/preserve_root/constant.PRESERVE.html delete mode 100644 uucore/perms/options/preserve_root/index.html delete mode 100644 uucore/perms/options/preserve_root/sidebar-items.js delete mode 100644 uucore/perms/options/sidebar-items.js delete mode 100644 uucore/perms/options/traverse/constant.EVERY.html delete mode 100644 uucore/perms/options/traverse/constant.NO_TRAVERSE.html delete mode 100644 uucore/perms/options/traverse/constant.TRAVERSE.html delete mode 100644 uucore/perms/options/traverse/index.html delete mode 100644 uucore/perms/options/traverse/sidebar-items.js delete mode 100644 uucore/perms/options/verbosity/constant.CHANGES.html delete mode 100644 uucore/perms/options/verbosity/constant.QUIET.html delete mode 100644 uucore/perms/options/verbosity/constant.SILENT.html delete mode 100644 uucore/perms/options/verbosity/constant.VERBOSE.html delete mode 100644 uucore/perms/options/verbosity/index.html delete mode 100644 uucore/perms/options/verbosity/sidebar-items.js delete mode 100644 uucore/perms/sidebar-items.js delete mode 100644 uucore/perms/struct.ChownExecutor.html delete mode 100644 uucore/perms/struct.Verbosity.html delete mode 100644 uucore/pipes/fn.pipe.html delete mode 100644 uucore/pipes/fn.splice.html delete mode 100644 uucore/pipes/fn.splice_exact.html delete mode 100644 uucore/pipes/fn.vmsplice.html delete mode 100644 uucore/pipes/index.html delete mode 100644 uucore/pipes/sidebar-items.js delete mode 100644 uucore/pipes/type.Error.html delete mode 100644 uucore/pipes/type.Result.html delete mode 100644 uucore/process/enum.ExitStatus.html delete mode 100644 uucore/process/fn.getegid.html delete mode 100644 uucore/process/fn.geteuid.html delete mode 100644 uucore/process/fn.getgid.html delete mode 100644 uucore/process/fn.getuid.html delete mode 100644 uucore/process/index.html delete mode 100644 uucore/process/sidebar-items.js delete mode 100644 uucore/process/trait.ChildExt.html delete mode 100644 uucore/ranges/fn.complement.html delete mode 100644 uucore/ranges/fn.contain.html delete mode 100644 uucore/ranges/index.html delete mode 100644 uucore/ranges/sidebar-items.js delete mode 100644 uucore/ranges/struct.Range.html delete mode 100644 uucore/ringbuffer/index.html delete mode 100644 uucore/ringbuffer/sidebar-items.js delete mode 100644 uucore/ringbuffer/struct.RingBuffer.html delete mode 100644 uucore/sidebar-items.js delete mode 100644 uucore/signals/fn.is_signal.html delete mode 100644 uucore/signals/fn.signal_by_name_or_value.html delete mode 100644 uucore/signals/fn.signal_name_by_value.html delete mode 100644 uucore/signals/index.html delete mode 100644 uucore/signals/sidebar-items.js delete mode 100644 uucore/signals/static.ALL_SIGNALS.html delete mode 100644 uucore/signals/static.DEFAULT_SIGNAL.html delete mode 100644 uucore/trait.Args.html delete mode 100644 uucore/utmpx/constant.ACCOUNTING.html delete mode 100644 uucore/utmpx/constant.BOOT_TIME.html delete mode 100644 uucore/utmpx/constant.DEAD_PROCESS.html delete mode 100644 uucore/utmpx/constant.EMPTY.html delete mode 100644 uucore/utmpx/constant.INIT_PROCESS.html delete mode 100644 uucore/utmpx/constant.LOGIN_PROCESS.html delete mode 100644 uucore/utmpx/constant.NEW_TIME.html delete mode 100644 uucore/utmpx/constant.OLD_TIME.html delete mode 100644 uucore/utmpx/constant.RUN_LVL.html delete mode 100644 uucore/utmpx/constant.USER_PROCESS.html delete mode 100644 uucore/utmpx/constant.UT_HOSTSIZE.html delete mode 100644 uucore/utmpx/constant.UT_IDSIZE.html delete mode 100644 uucore/utmpx/constant.UT_LINESIZE.html delete mode 100644 uucore/utmpx/constant.UT_NAMESIZE.html delete mode 100644 uucore/utmpx/fn.endutxent.html delete mode 100644 uucore/utmpx/fn.getutxent.html delete mode 100644 uucore/utmpx/fn.setutxent.html delete mode 100644 uucore/utmpx/fn.utmpxname.html delete mode 100644 uucore/utmpx/index.html delete mode 100644 uucore/utmpx/sidebar-items.js delete mode 100644 uucore/utmpx/static.DEFAULT_FILE.html delete mode 100644 uucore/utmpx/struct.Utmpx.html delete mode 100644 uucore/utmpx/struct.UtmpxIter.html delete mode 100644 uucore/version_cmp/fn.version_cmp.html delete mode 100644 uucore/version_cmp/index.html delete mode 100644 uucore/version_cmp/sidebar-items.js delete mode 100644 uucore_procs/all.html delete mode 100644 uucore_procs/attr.gen_uumain.html delete mode 100644 uucore_procs/index.html delete mode 100644 uucore_procs/macro.main!.html delete mode 100644 uucore_procs/macro.main.html delete mode 100644 uucore_procs/sidebar-items.js delete mode 100644 uudoc/all.html delete mode 100644 uudoc/fn.main.html delete mode 100644 uudoc/fn.util_map.html delete mode 100644 uudoc/fn.write_description.html delete mode 100644 uudoc/fn.write_markdown.html delete mode 100644 uudoc/fn.write_options.html delete mode 100644 uudoc/fn.write_usage.html delete mode 100644 uudoc/fn.write_version.html delete mode 100644 uudoc/index.html delete mode 100644 uudoc/sidebar-items.js delete mode 100644 uudoc/type.UtilityMap.html delete mode 100644 wc/all.html delete mode 100644 wc/fn.main.html delete mode 100644 wc/index.html delete mode 100644 wc/sidebar-items.js delete mode 100644 wheel.svg delete mode 100644 who/all.html delete mode 100644 who/fn.main.html delete mode 100644 who/index.html delete mode 100644 who/sidebar-items.js delete mode 100644 whoami/all.html delete mode 100644 whoami/fn.main.html delete mode 100644 whoami/index.html delete mode 100644 whoami/sidebar-items.js delete mode 100644 yes/all.html delete mode 100644 yes/fn.main.html delete mode 100644 yes/index.html delete mode 100644 yes/sidebar-items.js diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt deleted file mode 100644 index c2629a83f..000000000 --- a/COPYRIGHT.txt +++ /dev/null @@ -1,50 +0,0 @@ -These documentation pages include resources by third parties. This copyright -file applies only to those resources. The following third party resources are -included, and carry their own copyright notices and license terms: - -* Fira Sans (FiraSans-Regular.woff2, FiraSans-Medium.woff2, - FiraSans-Regular.woff, FiraSans-Medium.woff): - - Copyright (c) 2014, Mozilla Foundation https://mozilla.org/ - with Reserved Font Name Fira Sans. - - Copyright (c) 2014, Telefonica S.A. - - Licensed under the SIL Open Font License, Version 1.1. - See FiraSans-LICENSE.txt. - -* rustdoc.css, main.js, and playpen.js: - - Copyright 2015 The Rust Developers. - Licensed under the Apache License, Version 2.0 (see LICENSE-APACHE.txt) or - the MIT license (LICENSE-MIT.txt) at your option. - -* normalize.css: - - Copyright (c) Nicolas Gallagher and Jonathan Neal. - Licensed under the MIT license (see LICENSE-MIT.txt). - -* Source Code Pro (SourceCodePro-Regular.ttf.woff2, - SourceCodePro-Semibold.ttf.woff2, SourceCodePro-It.ttf.woff2, - SourceCodePro-Regular.ttf.woff, SourceCodePro-Semibold.ttf.woff, - SourceCodePro-It.ttf.woff): - - Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), - with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark - of Adobe Systems Incorporated in the United States and/or other countries. - - Licensed under the SIL Open Font License, Version 1.1. - See SourceCodePro-LICENSE.txt. - -* Source Serif 4 (SourceSerif4-Regular.ttf.woff2, SourceSerif4-Bold.ttf.woff2, - SourceSerif4-It.ttf.woff2, SourceSerif4-Regular.ttf.woff, - SourceSerif4-Bold.ttf.woff, SourceSerif4-It.ttf.woff): - - Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name - 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United - States and/or other countries. - - Licensed under the SIL Open Font License, Version 1.1. - See SourceSerif4-LICENSE.md. - -This copyright file is intended to be distributed with rustdoc output. diff --git a/FiraSans-LICENSE.txt b/FiraSans-LICENSE.txt deleted file mode 100644 index ff9afab06..000000000 --- a/FiraSans-LICENSE.txt +++ /dev/null @@ -1,94 +0,0 @@ -Digitized data copyright (c) 2012-2015, The Mozilla Foundation and Telefonica S.A. -with Reserved Font Name < Fira >, - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/FiraSans-Medium.woff b/FiraSans-Medium.woff deleted file mode 100644 index 7d742c5fb7d4597ae140f8418f52ffe03dc75343..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 186824 zcmXT-cXMN4WME)mx_N>@h=GBDP3H##4&V~(>CV7(^8f<_0|yi{y1Tf#F)%PrVPIes zWnf_Ju#mPla1ZbgW?*1i!@y9j&A@0}&~fDZ8~5N)CkBSv8w?Ceu?!4eZINMh+x&y| zjTjgfSTHa!gflQOBqZ|R@Jr53EMQ<*FoA(V;|~KvpvTplEA*1fN)#BFF3T`5Fa$F& zFkIrB<*+@iAU&6X>2d)B1M3O~2JY!kL~egbPb@BAV7e>V(PGBCAHU|^7pU|`Tx5RP)3mz!8oz`!)`1p@`xFc|VNFl4X(RBODapeVI~f$63M z0|UcS1_p+mo|!I86}Lnu-1ce;6mU!L|9j)@uW4eP9LT;hI{#iCxA!bpoWODerQs<)6YK^{8AL95`a<_hTw>{WrrE>m_VY%wN5TCMX1!ppd)56U+WtpK@E`NC&lX**n%wns!vaef7#J#Uy{YA` z2|0T8`<>n2--$~Y+{`iC?JXoI=q%)PLR_&$Ku}O{f)WTU?GOWw|~;?h?4c(Fa74;m^*UgJN0r_@|qy7Ksqz%}N^8a&-DA7&po zq;vV$#R%bRJzKXGmRy^%bfZq#xjl1t$IU-jRVG*9%O+h>`h1^c&XKFN9ew-veQw|} zd)pRgYjoqzJzI@4lkE29ok*BkTREe*_P0QKyU*E!dZ{mUqW>93D4kBQ{51dMq#LPg zdjC96vAZ_s>8X0XX=n7(bD!Fqf8H#nZ1w+@kqui@etwEqo_1H79U-W_ulP&t;;nWI{yMTZ^0CS?T1l12yl}aox!|&6dgD3PScY9c z-t9itb7@-RI<~tUyJSoFGk9MZUND~X%I|{91(ORt7o0A1Rlk!c-hNMbi~S3M3lkSS zc2I9V$1swR03!)v%?-hTyEq`6@*xzui@Rfmsu%odh4eJ_nYfB;bVNCtjVOgCQ1LLCwLYgbuL~c*!%at_5WBWp;fGBZ@$Y> zkUr+Nu`owy_OY~$l{tdPT92g#oHkzd-e;SJz>b_RqKh|&H9bDX`>gNG<*2lwCZk1KoU zEC_p$TjaE*Cu8w{m#dFXMI4@cLi%rnbo99$JNEG23ol(E`cKSNwjz7()H(f0mjl1r z{(iqMF=pr9ja$X{b`)JZdhN2<<>jwJa#zR3`n;}OytcDMH(tFsuA-;rf9;Q6`+Yk? zqH4Rv*8QG8YqH_y6?$cBCiy(v`uXUWA7U5FHA<(3X0O)Id{ewj)#{M))J<*ggU<&? zJ(;hTdc|F&%659@wG;ovY{PTUdoSF)?PkVV(Rs`F>U30t^ZEHUF4u|BX zYtw?9w?6)yxA)8Xp0#)P=l##Oygz4~(bXc(^j_sqW;?xeW+u+8=6;*5#h$TPFTaZM z+|BoT%8UN$r+b-Bzx?8$)Yey5kDj-vp1a1bx&E=l%&gwPeec2}7aLkFdTR0Y*q?6M z?(|%v-S1|fRyeiwmYn;!O2gfIirPX?UwqMXP4Lp9Yf@*m>hs_1X!hB#)G7H_r8eP{~=?i2IqsVuf0G1 zYI@`Ne*3KQ^vBtqfg!gWwoEoQ+Lp(AB`!-XXwm%MZQHp%PTVWL@9(VYi;FkEW6FK= z_t%u1nEXFy0{++hpLg|-(&5{xk*aB35gWDk$LngOwf^p}%~-cz_$Ghv;(c*XU2}KJ zhB)VOzgeuMr`htwF*{^YYfZ#t%Y5#W6TKGwiS}Gv+`U0~gIbugS5D)eRUuZV#6CSN z`jY%eS2){x&HCvt>z965`ak+glxm9n5~=ISEo}80*QVd(;O)OrWh`$b{@?%(Qff3{CuGHaiEZt|sdg5I-P|9Y%8 zT3c>9t*&R@-F~}|o-5CpI;>x6slE5J?4NmRzuG=bpQS1vJZ;}D)gqx6vDN((MgI!+ zUX$vHkFVub%5yQ%`JQ#;*WC?U^}Hh%hyCn-ySnwk@e@AAe!n+HJ!1Lt+A2mk@U7b4 zeF4U+)WZ5cPt3Y{&dx2@GN$FJz}4_a;h9J3-OsJwWg)##>@TPE!LZv|i65Q5UAsEl z{c2GD%HH?fOPiz3n#5m5r&=uZda^b9wGr=o*5B`VC(R5sG}>HuUvII%)CtpKguftqk?KdVrdSfu}Th-M~_v=j4 zdAHQXI#<2j|C+1uQN{lGSN6}mCXoL(w&vvjz2QN6`@V=vT-+KT&Ruu)gVWoT*~aPr zlSMzS`u9CtuEVB+x4^Xe!hHW`PPZwS3Jv{pb;mQ6}{Xh41)SKSdTk=1K!+q(d)XgWh zt?PWNXn8GpeNA<0-N(*nwjkgr9y83GSp)*H!CHk#7uJfsA@1&UgJ9{7P z7O7E5kM3Npc)x#LN#IhOl$+20-@5n5Kj#0IcXMvMZ#o*+-{>2g8~gNcdG?J@c2|G> zSpDzX-+M1a^D1hbwVR*5es}bdRGMhnl8Eaf*&o(U`>wt=R&pyxWbbNMo08O&U3=t0 z4zKU}oc*lewV_^tZKu}){rhdQzMog`-r(|P&zi8skMCFPRSe^H$h-L0zVzZ>hWj5c zTbI>tj=ueaN5N)Fm2u;~r8yeY%f7rl<+cCp-H+VoKEK$(clC1Cp8Ll`HEMR5h5XN7 zS$*x%tgW{a1&yO?brzI#iG59)e{}Ek?wpm~6MF9DudnvfU90!ct2kx*9=$kGUsmJO z+V8xtX7@Tv%%30Q(0@~Cw^>AS`)wB9w@Tgb@^@e0Gmg2vGW$hVZ$`BD;|ISBf7m${ zneqBZIlopt&wa%u?sxxA`>x&6oI8xStxdDW2jr*Q%&Av3lRQ{n}>RZ+=%JX9<_g!aKp0BZb@2ZCrb8gF) zihbG?7O|7p(|dQQ^7q~=SLaukrE|xo-{!1bxNFHxw>96hzcq%L#u!Q?a`dRI<``Q2~L-BFbsT>pz7OU9(WknuXY-~-nsw~m zEJjA}@)%CK%-{1YOnd83udUy=ik08ZN|i3$t<3vv;`{h$x3BAup1j+5N^aWjX<18; ztl#9-HfPn7zt{V(YOJ1iea@==yK6N*uig6AV@>zwcl+O(zO@RC+qvzg?ymfq+qP9m zetTXWF~f9um0VDOrEfqNTgzVYhOs>^r1u}3W|;GgL4 zpPvncj+~3ge-n3`d&}W}J6=!Yjr||7KBw90P2k$8i`PD!`o{W2zl!&_!%m{bD@7(< zxV=E+pHyVdZnNINp1o$gQ#YS$@{d)n2@-^CuEQz5rT>{|B@`+assoptQd zlf=JQwA5~ivkPrpT{GeMw6ogJ^44xyqL-I`fBXL*IUV;?PyL)FQ*+I0(HR=ve?z^p7xs~~D z+~*y4r^iiEw-T-`tlG8j!tv8T6A!hY&YZX8MwxW?#B-njtZ9sO{<`K9_xrp&g*7qO zOZSDAZcM)MjU}+Q`{MNtQ&raqIo_(uoz%X*{(Z9k0)Bsukd?3hRR*qh$lCJDxVb|5 zukxRMo@FO({Yx(`x32k8|3z`W$ks>a4oa-<)tPes=MROztf^C09=@9PcBaeMH4ztT z^gnIdIsH!i6FX(`&OL8(T-F)x^gf|FA=_!4=1%XEs*}8xo-0rHIp?p}8q*M?wNqiI zz)pjmX-_VlSn3{^_KV5pdD!L87bH$u2Clmosu4PMk6Md*`4W~Vv)cA0==2vac|Y;u zm)VM6GuNN3z3e}0skw)A`}1m!w?W(@{fh{SJmDt(%U%BiY}gcJwx)(k$n*xv(HJLo$526zxUOV zJHo3!KGE#nBlA=1lcr@5aZ$6R!CX358{Ke39+e zPk+^9gv|HO={QhU@x#JBrzyjB&Y zm6lVfU$g(%wER6hSLYwn_*HZ6Irofn^RKV9e>Qc=#d%U+uQ+AhJ$8$!Og(w}yVR&h z0Y%CudezMPD%hXAPkfp6^1n+_@Cjda^X>}um*skY=PkR>`b2DUv|FC4v5@(t_gO`+ zPZatr-S=gW?%cOV_xz3t@&3B&yg%;OUH86Q8XGk&?N6zkDsQ=C_^5T}#49sCXcncv zs4p%uu@Wkt;l{mq+7p#I=Vd%Uf6)Hp-QjOLKSFP=V6eJv=C%{solnA(!hi8j@K(Ow z6r;8?rl|Fa*U8X;8FEj4-T3!?`Te{nRg+$O=P~R&_@r&3v}a#R@}-KR$tz;GA8uK) z@=4kXlM2g-M+$GlJNF$)sF44!mZq|8iiWnK|Ds1n^g2@=?h5}FeCwN+@JQgLwN2p^ zmt=S>+R>eK^{~Vs2@hEr@o3tZT&LUE3S3@Y!}X}1-ZdZ3cgrsvsM?&K@o7Ru=0p?i${jh{SATCS3)8Sl zpX9FEKQ+T?(-gatm)Bf!cTXz$rgGkAUh>y1s{dE)`}{cCrZVu;r5_XL?orwqv~-hM z9G8oG(x)u`w9H7<(%|5lZ;yuRO5?e8>^*thE^?sK0~^75s< zSpTAZ|APM+hpk^`&=@pFvscy2htp%qv`bEl&P<8vu+9d|pmVTz%q^5Y=6`AVuWr>;zq6gulSQ$2giWToR3rzVMLDhGuvT{AJG_LN%Z zwqm?eG1t|T1<#pwy_nfx9qHBW;B-L!u&Iex$a{Bh zQ4ThvN55@uU2dGlsOiX5+4zY2d*uS13#xLaS1t#p%$Db3-No*~#Zq;AL1W`X#!1?Z zffuE2X01H7ZtWK?)?;jHNBVPa^PJ`O5!0}`&vcn7Xt$!t@vM^vYF4WS)D z9;=qUu5gC=j^o~+&P<{xi9cqc=uzmT4rfN{+=F>LN>k=LNeRj3Ky6q zY`y>TK&7`ByH;@ThkYUWS(iiV|E%!ljaF9LTA8Ko{chQ_h`$qO>DPJ(omPF7b#_li z_wsKZTZ3NC*Lv#s>OzQSXpsBzsE2CH{5BqoU-f3@mB^Jr@?NnMvR*n{t~~wdsrRc> zA(q#It}o5oQ!sydo~LTA=F}*?QvX$|-h9hWZJbu6@^yyO@>d_vMLhhoylII!t7JfO zs}L&}TT@Uo*EWtQsVl1z@|af`%oEq)4bw<@8P48ptGYhFpuwfNdFR1Ir_&sh>O^HE zW&Brq%oLs@HD}?Wv)hiP6eJ3KQs1GXk=n<*mg`idT#WpbOX@qWe)5&d^1Sw-@4>nX zk*~hzHs8{Ukew10`XS+h)J^uL<7+R9OxdJap|>R3R=6ly$YM&u*4mD1FDLM8I4=k| zJz8N!_|+?f206?PcvtL^xzQWcL-k@0JwkUQ{c$ig)gs>%af5HFBSrp|~#D zEpW?rr{&JiU-!m_rb!1qzG& z+nW7_iP>`_MdmH?(pnl)5mvEo>GT%yBimEDjB`8>72KHA^7P@b!iYsFd?P&-U-T~6-o(ck%k)b-rh4AFBbr%r?y=VKy_oxJsf#`%Z*v(_F0++K{mcx@ z4CxCo7jiDBJHBUPd%&LUpW%n#1Lv9SdG|2v5ZWPBA^1V5 zPub_SO9^kj`B}zW_LGilu3ucn_d}+@{6`tH+x)D(TN&px9sYhSv&!g)?tx6sJ3>1I zEG8#^Qz?-9@w4x#OZNnCL5sv6dCa`re211;%BlYn`muVVpX>(d#0%C@dKQ*U%GZ(~ z{9&5Ic;L1pdqLklzCZIGd|}CBy~DM`{)6nTT$g%0?jbRMwjOmR1Zu&iJ>sa;+?a(d=f3Uo9zSvhLQRQ@AgS16v%oXAv z^rk#ql5F^J;RBx5{OSiLKk8mu95iuPJ%2Z_GjfB#K2?s$h9FUf=Z*0^Q5<|K4Q9MQ zj9Xl|GY&VlGcQ;6VSFLdb7?heTfTLRi1I_Oo{d}+yEW7;^qZ?#U2nTR_|1G=V^Qsa z{i1Jcm@GKz1T0u~v6P4g#kKC3P;{#~qmkoOLAONyhp$chIL>t+=xz{aywCK@FsYWO zhUo`OL3T?H?;p=6#Y^1Qu1al~zffN3mWYJVBwMxYBZm##?E>wCJ~tP$I_V|m^`sXF zs6Ba5!BcZwVXps#bBZlHz0Q^QNi((!X#0Nqy>x=~oH)*NQx9BT`sKk7<%!}MYNv!- z@{6B*75wBR@lEvDw{VV~9E#!}tu}3b@M6LA(-Th`zKhOcD=@!M_@IY*9;*%a56uV5 zC!9_{@saz%lXhVRVp+9OIcdX@Wl9{ISPn(WGb;JeL>`!aho)|DRU zdChRHX32z>51t(TqA|O9D_DPMH+*jVEXci@*_!>I@Qg@K3H1oco7zcxFQ|Q(DrNhL z@6`)uF1sUHJ%Lj?CiouoWJ%YFdaryT>&Yk0nrP+LYaEv^DY_~1e{OWX()V15@jinr z|G(cSE^2C=Dr2)PWy^f_q3&X>$IsL$Pg0i@b3B~hxS2;WyzyBhmt>KtL5XPYngtIW z?qzW|#xwk9HPk<_pR2;;hrL)aONnO9bf)zzahz`$*D@?;s*wF)bwyPvj6I-t{mZE2 z2geR*Mtr}_gp+G>ZGw=WL88)eO95ikDq4D()>Q;VEV)XaOVZe#PCGt6VL;rwBEA=TsInkme!6YA!?W2_a{v}gRIlFw_#uKYps z$X~^zzXB3bV!gMWdRY7fyRTLGy>~wGyP;n3t3V$+BR^AIQw*QwDURul@oeWT1LclK z%vyNZ^1dO{!`KBYU+fNP`DyX!K-STp%@Yq*{aDBTTy4VEyZ$(TK$88IdGvWM`ACvi~xxKelU!OE< z{|uR}+xK(te0L;Tx&FHM_RfFb)vov7aVSbDSIJ)*|Em3o>=*Cs-SdAP^)EVWKU4Cb zEnrAp6iyyU)n$E`{jJqom*S@Cs}tHb$-fK*go?^q1SJQ zhq+Hyy|90|`{Z+p&#%AKn_JHMSZ97Yxb2bnzke)`D^Aefz)8ucbR@UYZl5U1a$rBi3J2G2CyR_D;Dc zzXEo;9mv%Ddy+RO^FxtA{k(S`c9Uv!l6C&8&HuFdiLuPjx&MweJ@@~@uHyB1`vi^4 z@h{G^YJCm&h%>K`Uu1id_XB@eq5H3P#@>(p)AxA(12whJPs^BBzfk9(-G8Bzi$ngL zepx=XzPG-1uTajX{HYo3`)9paH)G28-~3)BSL$OHS^c-1y6KFrtG}m5A@k3mCZW_N zDT2A4diqOsmP+i=)7%@p>vI17DUF)WDR=ZV53h|{)-!4AoGC_OpS*(AJf8T>%-I@n z%0#k!S*ZD;;zzeFQ|nGCbxw=gJ7LqIto>8GMDub_v2{=1WO*y=WA4;Vx~b+DwW_<9 zzwx#7`NB|>-Kzi5&+FdHhKWV<+PN#3|2YINC|D4>z%syZfyxB_5V;qEFSxF#8)#gR z&&Wt9NpR8Gv~{!7$>mIsk3=Y&1THurlKqEu*=nIPL8>!Wdu?!-ny^vppiyYk)Kx5j zTdX$tE!%Fm!FAbo+YQ0XwySUOUluNGp>)|=%tH0j=3d@bru2&U%Z-Z8U2$1-#eZdE zNY=+ICPgz>wz_1tEt$5gOxdegWo!B?hDEi>hcr{9OSzWvZA%MzWia)&$JE;rQ%_Y) zy{$6!cF5FdlNgb+9&@K#-Ih{aIfHklcTo6JJ@%-{yEH|O^-8l}t-B)YaCIen@b}}b z!6(duMLwx7lbgC($?)qAhn1y{wo}s*FUb0Eur=E`NgkYbaF4=OiwGGV?lS%|#Vgh~ z^et2@CS3UNV8w$Lg`+%ve16>LIM1n=*jq_AcQ<(-t>9b75$3hUOe5X3ptxYROX$J7 zOr3Sko>zUo`E$JsebL|$a_O*9p3{b~Mbi#W7MjZH?|ntTB5qNjqVs|Y=2uMQSeLi{ z`Bu}Lq&T{VW zYr-$3KHT?lPexS>+mX+URJSe_&pnwDy;7`enu(2tjnATq4-Lb(Th%ZA|L9=M;mbNp zxAJyq-seL_GA+|vrh9ME+T*t9>qFm6GruN!LOb%5i-ST(RG&Sww2p1&&rXZ4m)6DYteDgYt9(+mEdgsx3 zY>7ATyycVpE?LxOd8Pj1@xHdy`>aiE+^<7b8J<>=TrW?%+N$LH?%L9I$$Y7Iv_`G_ zuXP!6A5~RDWcwGrTq^5%U%r2lYVR`fT+ire*XS1syS6@B<7b~2ss6I)sNee27dpAD zbsFbL+suE$y7rEdkx|sK?}2V%ZBy<^9+eDAOD_q`m46!=dg+4S>b!+>CGU#9lD%Jd zF|OlV>K6Ma)7SU^HDWu~FBH9hrQLV`QxZb=!~XAAynW+GT|i08-~Byriofm`JbI$} zecz(Z>RoSyUhWsXsq*^&VU6U9wktLN%k5A8U;5iK$J+DAy-73nvVSe_jLAsvs8x6S zYpbYM@QC%>BA$+SA2+;jy>RN_{&U;39o{V7@Lp(V;G0IqvWBGXZh!YGy^#sBD{q{u z`0e-CZ+8{G#R}}GUUy&f{lemN?;Gp&-`!=dZ!)oGWM3S(`}VfePZfe*aG!I0llfEl zM||UF(E{HR`HnKl6`E1^wiTx_yqmp5;fdju*AhQwKAI;|bM#$zJ(t!uKLyi`=by*D znVczkxA8#M0m0t_@2y@8*zXF|Wylf`ou z+jH@KQ+cuZz)aS@8^?`UW!@xTT;6ERE3;8PP0?!}^DVJ2wios;2wku{K!4+L=1&2; znF^2E-qBj3`7J-B@&C3xr_WpFH-DD0u(DX+*c>ZhRpnLf+-I9r{LOpI&-)LnZEODb zP3qq3y!CAzxuLHU>V1Mj*29e$7? z-u};G* zxAJ~7nA7&gmUrKd_f536M!_BZF>znOI3 z*qC{@-6eTO>r~$CPN=_dN5k@YJolZs*93ZV8EiXaj@+Bae1P30GjN-Kp#JN1 zRVC`7!4K9wi093@`*;79TX$8yF`c~YsD5-+`-hnv_oXA=bY{KRcwk-WVBYwT?F++; z*K@LFN+hrBv#iPI{}#sT5d5Y2fNo*^{N+5H%VIlsusen~o?~Cj6x(bvTZvUYBfLQ7 zLo9n0Pl@>t*PyO*2mMahJgDiBIW>3h(c%y0yMycIF}>OGcnfESg${t-C3KlAaP5m z)U8#Lx3pw;>Nu}ixWIA&YT zH016sd@^t8#jj-#ZhT*taGvL@$aPNsleUem6Qoo&9a(koA79PAZOR^Rk_!{QPh5O2PWFv^*Ug3OE3fANKbv~dRxw;Qwdz?) z(d83oRou1Dg&u#JKey!hi~lu6-6wQaw>NF{nOmp*^1AQ-?319@?H#jcC+>Lf4}DTL z`SA~iR__f>9elqU;9Z@^*gPZGm}4R|Jf}(f6L1=_b&ZRdX=&zPV-Zi@2%7{`(J0(!=2X6 zi3u;VJ@HlX`usZzT+Z1g&jfD&fB40E${miP#V31}%_rUwDY|^}tdjZkJ4{;FSuFN` zO)5GaBDF_Gr+CW4lQ|P-&YW3Ydh=?kLo3%*tq{g5YZ>L-ZAD+LzQEARmd-ahBjuUI zOs^^CcEyuif<nY1G2M z4(umoL-#y(D1CA+a>dql6J{^I#`&a%i?z{6WWDN6odq^UM;-2zc0Mjuzuq5{zo3!J zwbHqv?f3_`t#aBISw5%<&u#l+F^lt_%%biSXY=KCpoO|tNb^)n1hc5D*U-omJtx>hjMNf}Z zt(}q%CWkj0?%ph(rhoF7&$&3)jNV6U!!ss3MT_2=xYv78*3sMY)8*XR8~cuZ=+h2a ze!-Ia>5GjkpIoRp=gIKtDNC_Y$c||bF6x{+8N9+meVY4c%jLVB_CBsKNiJq%x~Ow5 zZl1ALdd0bjU*?P*pRX}rTyu8jOk?%*S-N*>TH9^}o>S`kVKKpG)@4iWhK#i5IVWz; z*=*LHR_G`C>1oDxr|QOxYtLlZ7VVr}EYy*fajvra`mv7BPi^$wb7$SEG>boT-|V48 z+~*qwxf%Pmo!lv~p7-o)Gu5w$w`#Jl&z>!p`)kWW%e!sQif1qEGH2SeLf?I{sFb?E zPCKn*N6dm%X5DK`OPsxv_k%^$f(wt#POC(%42pxccvv&?d{*+bZo7SIPw>^`Bxa;MJLxTGu+p!t4d z(vxMHSC|Stjh-aMo>g5rA$nCntJB>EkG?10dU?fTmlv~htW*lSeCHq+Z*WEm^S{>SM=QUK(pDT-70O{ZOTJyEEG2vU)Q)-wK49~ z)drc~*>`+*hMbO>l)BT}LVx?L&pG>k>xw*$^jI>fTHs;dDhZXlMT*yp&PVRqwrgqS z7S+saW{TTba%*#&bB%9JvSB{ObSgXg&bBqV;wN9PtEtw$vi_|@XPd^og4RVZd$StM z#WI|D@;5nM&M{0|6?8VlFm08DaVQV>*+7k1pK4mgj!sjx`hGBaRn2paEleveMIF2~ z>Dc8m<_l@7!*5S|lM}u4LSE~)ZMF&*6OXQDReE{tTgjV@{OWsAyK^=3w;hugaFcMa zoN%Bru6l<}hIge(=I29Q*JBojeNf#wb9#T_{_Aq*rg5d@$a!AfvySU)M#FXYh5sCy zr@RlyE_pUlZYuj;&Hj>Qdo(LAe^z@o@yeOm-Lo!RoNZ2<;;wAye?(!e2LG=BxtC6r z(z>}S`Q2B;DrW>%syzMlEn=}ne!R}9#bIZxl}c9bNv>QjVwJqG%tuk({jJpX=Zvaa zA^{q{3&prnx1FB4^2o;qE>W%AaK%7#(RIt6YDJ|IrfNm~Dr**%T6V#sRpIrmi6zx=~QGZ>x3s!kWE|a%%{HYKmS&gIl1kR;>LYH59_8p?o~1gYn^?da?i6v z)6ZY{bJC;#&H6txJFKr}P5)!5C3@-EC-F$BqJKd@CizZ_=Zv3Z`BS>VBHvixW;wTh9y3Z^4Yyw4I!EeD}xM7%HFwGvZ};$Da3Pm>=W?`;kXvT zcr%c7vrg>Ngmqih#B~BxBh~~pe$iBT8N4BCVQHbwBsbOx&a5GQOcDO9D$QKqG+AE8 zI!s#5@GXq-?A9h@F|C#wO_iHLHzGa?iE?R7x#ke#A!_HvWjvAVF> z_=^Qj6D(Vgb6(ZFxAR6wm&ZMkovla1rvyCNT+>}3y1XN$o5y{{ilt7GT#lDSCN9xz zTB50>yK2Sm)*}|I>$j)A7ylZZkx)Bt!cA9|-mW(0iDxut1(@v2(79luaH*>6S;V)j zi;EU5b^ZMFRZK|amTeiWy2sjP>|naMD}Iab(iqmbjh|F&mu2X?*W3|z+$S*CbZ>?dqx2LbN(Gq#J zEWrPWLgdvthriQA3~x=Il4b9+^+#5#*(w{O(4L80y^eQ2UhB#7pR~sI%ffF<7`M(} zd%>o4!N)D?E3ek=JStq}+1#;Z!MALk5DU9L_e*Q{PRVZBrp2=JTHW-mmm0(GI#?(k zUZoqSy~+5N{FX0|zD-Db+aJB}?dvsHSql}fdzGBt-lF2nnX_MLQl{#JG*y-LUQ_x) zCM^w!W44LeuB*AZ;^I`{eX&viic%ZJnR#3W|bC6!Yjc!^yXX4SHcE!tNQ$L_p50SAhhMJ>;E(RHTNP3p(qpIPCNFx}>91~zcjW{p=j78& zKeyk?YUWc8+3}C7_t^?&&zF1?&dYk(l{bXEGdO*T@2BWjz6;N+Cg{A|5V0_oYi&rz zRwodD$qNR~JB=#k>@NyrzeSj(x7S{a>B!2IDP0lxqQmLJhaa~xxXVv%+UWZ7pmp-X zpcnN^{Z58S9?yU3}>dTg8MmOP3njWK=A@t0NbG)4Tdu zt8x^VWVF|(EhRHj%coCbjkMY{Q$ESE~Z}TYqVY@LrE!=$N|1 zeOm8|^UP9fFYMUVDdZdYaG5sCYvGkHpJ%MTzyuoK(b*PK!>b#unU;Gq%TWKc$E2yb zISanLl8Teua>-~?UTU?-t>pqsB1`5?m({cmV>=n@wrSPm&B2fT)+olQPYRu@u(aWl zNY=uDWllS}T$4qj!v9)LjoOyEoXflY^_89uH6+x1NCg|c1Swaskv zyvtUF*__z#x96F=sFhxkGP~!EPL;Tw>n7}GoR=4Csn@Qeqple-FYw+bn-hV{SIT_U zUiY-}>CvZ=X7`P%Eu>#DU5WkZ@o4Jz#~tyLHRXfs_S7ispB8O*YS*f0zRWPcPpfM- zU2T4PS!C8t2K}yt_0!JpZ_rnX`FTm=Ue}F+r&GhEO^#@*-wfa9_%lyTd1Fmo?&VYXXW}qY7K5gnC*( z*O(%&Tl`#TwVX_+gxLDxKBuQ#rJ;rsjJ9vH{=VVW?VbIn7K6v-r0$1>?KrpOV7XlG z+2YlIIo^h9mWLW1(=?f=T=#araY}mnq}g*74Xr2lyxHTR=yCj2wBxu%Va zCe4b!_{OJb+vk-LAqSHxMbEVzE^X_Jym;f$$C)}M-CZu-$G`W6u&l{mAUffmsLD=l zqh#+3c{Q$iu8FRi`&&rr@T{Ar#f+qMm2w0yM4>U7adRcboov* zRW#A<)7qxB#d%>YS0e8Ug`e?-24yzk7rX)r?_65yCAw-w@UPIeM{|XxR@lzDP#h3+ zbhAl-(}XMG#V23%T{rAZ`n%&+`qhrbtDAX07>P73J+e0U<>|M-Y+nDneRW6Jhxo5H zGyh7i{9n86jr6?GI~P0;Tf7dpxmmpQ@p75u_=4!g@;~C6J{f03Tf{wB{>9R$QJ&3g zL-W7HH;$acR z)XP-ce%w@T^=1$K>H9W!=&?O#F0gaSl2@Ac_NIj{x24$Pxcy?!Wv^MMM$Yk!ENQ&l z{odhJ`2tzD2UiZ+TL;GJ@A?x!ASsqnsu7P~`i-cDCLUnlna zyZB?1jJRj+0nZGo-U@z+lDfp-Xe>L&{6hcA7mMQ;$iKeO|48MfNnpHXQPzP-Mypd+ zPs8UNx_zOz?m*_A_fI?zNa;&kr&cffV6;Tv@AF>aoe|5;xXuYL*yH9Luy}jG;)NYk zb$^#|-~Zot=YOWP?XO$hHeV}*EzBE>g)M3){Ok3oSHAS0@ze(`r+r-$)?c$;e5+3F z3*!Uki_49Z=Pkd}bLC#sd;Ln;tCQopKgt~7wh*24DfRn@Y17jK|4+I;@vqSDFY{g2 zq*wl){GRKzreT}<`5Vd}ktZ(wU9f*r<=L*x)d+E_2R#EUwO& z-Tx`w<;dh{8`;=7w{_2*sNvdozH{^Hqn7t2PHx_k^{+(skpJ`ZA5W+o$GQCQx^2Ap zo4S|0<9qw2d22V>dZ$-kx)Rv6xx#fOyTTuaDSy~clruc~Ci;BS;qO%sUJIIY7ZwN1 zW1OHaZuRm`-K6ghONzCRJ#=_t%8>iR>edIbGmF>GaAyvT7f-uTZ-3j zb)3+}9C*%=!+6T~mH(V)itCG>`*?NL!JVSTxeCv2<+9bsr6?@_q`5jvZ|jZa95?;z zg}46WJ`~d)kzRQ-VEWpx^F+_N>@^A$TJ!RjanimM%O5Ee3#jpL{kBLfH*j9immk#< z;qPzyMepZ%sPFt^+JreTGgi;c&@PNBYyHdlz=P$7*om&I7SYp>=eFF-Y1w4zr1RS6 z-SmSy9c>F|tE_l?=kI-Y|NGbL8S2WXyh^*sx8M=y6~#;6IRob9n@{;BI%S*XtJ|`B z%hq1(%HaPJTRvsE^rbh=`+m3jq>H`ax)8XaM)!5!K7sV2@=5B9?(IHpQ$vB61-Uqkar_a=imiE_LZ1Zx_@|^Rn@vM=$^VX(t9A2_#uITre3ZqBAE-; z&E$x=kIwWdFRAFdSZ7t8Y-4*(;{2l6Mb`_pu5ll~Z{b#}fACaA=VH-&)dgbyZbiLG zOOwUzrEeGt&0#NGRG?qF>ziuDvbRDf+L!e$oG`f}=t80Lp&hyD#}=!sxU1SX`$Ny& zk2{KwOFulhN6EH#|4N3MLbtD4OMXTl(Ph;we)GV}=ZmEKH?HUe>%_U+3)~mRD%kjy zspoQ?7hJS#=8SCJfcrfjylGt=mwo1*_$T?O%iKf6{rqP!_14qDdpA3-H5Zj}TKU7L zMq;BJn>zc_y*}Tt|?%DQavyf5PZ*7anIaUU0vTr9Y{#s-3yxierA=mD(_7C4S ze|G-#=FhYRk{x2O^4`^Y{bco1@|*l7E)Q&1@A>#;`Cpg+EL%c_K`2Q0ij`;~|6;fI zjLxeC&l_Hjc|1p|kdN_FrrI&HPg#9}mt+**F8{Q>U=J_nPWD;<*Iu~9zw*228du$G zx8`;A*}k`z-=dnqmZAMsuHks#;^l(RGVcW+d2YLv=V@f0NLuH#e!Kj$_t@i@?jJXJ zf5iBR@k49wooAf%_Ot)z=h(^eqq3!vF;{io&wX>Q_sRA@c`SKhz2(CBXB*CJw0~&J zk~rAB1#IIr!gpez4*B`tKLw)PJeGvT)ua{o~P;cfJ~LB^7xmM2Xh4mWcX4 zx!)SGp4*o#QLJP0PeHdm@`tPDbG~1EKS6Je%i8JPo4*~LsjsVMlijzmgjMB0MT?~V z&l$dt{<3vU)hl81Xx{EvuI!_Irs-GyYJu|(@p^^c7kDm&N#xg*+4tStEBg7D(V5rB z4cDJfj_WR$is9_MD^!{4l+>NRrugTHi_T7Li+C=?Zml$OH$Rtu;MS80F&V%5rlNl= zw)=c-YPApV=h#^|+e(^2{cpB)?)y6e`5#U=y^GZ7|0`Mk`!-J)^LjVEt&ch@j|jbA zYT34N*VOA1YdPaT?)g{QGi|Taqz|7qA8#m}X79;x?|S#s&--54iat6k_bFB;KFP1P z^NVuKG@(4!Q|{vTx)0e2i#+UCYW-SsZS&7xCOtpb|IiS9&*R9oRpMm3;Ol;l{S0BA zy00o!o&E)$VclnS;`yro9Um&Db1$`Nb+XgCAAZ2OPNK5q#rz+Y%x@A4^BQAn^+Mmf zTI#Q;h~{2D-6GT3f5Mz;3nUjT>f76(cz?n3n6`z&b> z_tQTbD$H9kO-y|sCYvTLw8}_e#6t~2lZSk+TCw77|ujiUgUse3;eeb+q3iqxb zQF^hSb2>iugA{+H!p-~K6nb@}1Aq>N+l|MDkA9Do1qo8n|~ zlu_}hCg1yp|9oCo#m--TEX(nRx#cIr50iPa^I7jlUi|KTLjBxq1)eQoYWJRB@Q%71 z?wqf4#8T#!uD~1LCqI@|)HhXJciH=yp~PnYI_q5zcK#H2zWAN5?DLN?zb7xa-caVc zJN3a5nRQp~&#%>;BgLAJoHBiU7x?85zT~T2aJQG)Uizn1!~4e% zdD-2Z6xU_GD16@<(Xr#ag3UPth0ZfqW=p=wmpxc*vn8lS|LAR9tp(4geEKAObSKB7 zSiOwrE-l{`pFEv#X8K~*Beyp$Q#@nKQEa(R{Go3=-=5;bg}g~O@25O++NZZ=Irl!j zC$AlL_qy%gIpJUThS1V2_cFHJW85;Yg1bxlt=hfrBF(5XtzyNW#02tJB+NZp$$2qY z_(b^jdkYimtJ!|HOmCTc;J1HOr*WM_b>rvsD;oX%N_*8U&foT{5_o_7g~sj8+y#;u z;TQO>&7SLV+flo-SUE@C?Z&;e3q=+37>^10E$pa#eo|&0_eH%OcEN0?obR2DcH1ZT z)boo%SeY6B!}(9&I&ZA_y+`N1pK?&~gI&CSdmiW}+b?V^S-5V(wANQWVuekvdR{ZM zjxDTM&zCQ$cF#lk+~gTt=aLHkY2Hg|npkYV{V~VquT=&wVjs!saQxqs+t@SVfz zsOP0CFB@$U`rz#nt@xBLBmJY>CZiwE6l!1W`W1O3tN-5m|LbNewdlLt7gao~^d;81 z=j2g|$?p?Qo+X;-JzG4no?<`CXrM@BC#J%SXK?w+e3GR80JESVDJs zz%!mLK@vNqAN2^g6fSxf=fSLAb^qVC`Ti3REsv;w`qLpI(Vz2Yg7x{w#UJ;{W^Vsf zCbn2rdS{0@49Gk)egnb$kbJn&r3mfU5JO>Z>pY2AEO($!;m$M)rV_mrt&cCH^M%6I<|*BoaW?r+mfHTf-R*bmUheQMX_2vi z`gY2n^B*PKSWMJ+9#fLrF1XX~z*gb9>#gy#n;zR_CDzq5eb+eWa`{=|&%X?HwmtDX zAE`gftX-*My;9`2#u33&Z$+#Z2l_=NpGsUVcHz<%v8ZL!R*PmWjbgp2Y^!<9?$USR ztp{%z{OY@M?8E!|tG0Wrm6oKtSh+`i6j6#>WS`LePCja*S_a{68?yz>Y+%(>^ zB}7TrX!`e?{&#+T|Uo$T}zDR&UM@F%RTuu;kAFBz|MtF+$JdJhRD13 zePON>o9DOpi2upWj{@zM-ZIKvx-BYtdG3{M8Mn92y(O1BKWwq=#lFntTa2wP&#g+f z4dj23dCO~W>%5iEU$s`Pj9XZ~`0Mudb`J7u_%FM^O8)ZkmrCs_JLmbn_bb1|dfZq2 z66<$A^h>Ps{jXo{y4+v;>)QXl%YXO2d&&1ys%A;2^4yGBb#3Q0^PUToexCK|s-e-0 z_>;XMA4(@$bXRtNTzzt)*&nY$mhY354huYEtShx>`d$=t>b*ej@%7xnI(GivJNCM4 ztf+lnWUW}lUL=1$m)}dhHA8-#t83IE73ZD3F10S(+@F~D$rouhioULlkTp)+sKYFG zp!TNRo%_4Qzi*E#x^r@?a2(sWZOI%?MV$Y%zN{)&IDX$Tt6Jgv`&OTNxx~1pb6aMt z*Atn3t)az{^RPkp-=6s`C)VF(ozeU=VnXVQK*g%hk#()MO~o9_JM=D8Bs%TOwS5pC z|9n!kg6#HnKdt$~Cq?W2FW%F4$E_&(MDFyDZ?ZeL_Q_1N$+opreH@jUzkdI=30JP) zSo2>i)2?y;m1`0Em#p*+V>_8TA=^{WdzVeo(I=-)lqz1I8YUJzpCUG0iz;%bFI-8yhygXJ#Muk;V^k9f8oep1=$-*E1rwAlN=O>Q1D zw`-cteYSVu#TVwAdhIhrpUFMvc&q#A@*VTZ_XE;42=u;4OPS7g7EurMEtua`vu?9n&qAU&}H-XZkF;{A!nL_PV{x_pXm!SL<-!$JWzdajwmZ z^o*TV#ecoldhGW)f5qyR{iXUPrI(JsO5R%ZSM;yw+RbrG_pc3o@&3itsPN;H`_#9} zx%Ew4d^cf>Dc9C{ZW{yFd^Ppz33{uxcyr*wujacXVz)55g)d%Rw)*1P7b|&9eo2{U zmP?sSZ_g^1Z0IvD#zIw=9wu8G2Tqn33aiO-=H0 zulttv-s8QMxBPpT_deg^-V-mm|5BRtd1>#h>OJDU_cQ#Z_M3)fe(v>poSNIX@m$1u zU86n;_bu^~%X@-v2|ey9bgRBsGJ`L7<;@#8YxX9n&FZ{mWSp=pOMlkRwCK0j)2xl- zfA>aah-K|JwVwI(me%K}&rxeH?YXxnuKHxn`8&(knth-Bdu!=4#?5ZOn=3EaEXg&n zH|o!lJ{z?;>~>CFn%wm`Q+sp&%=I(lXDr`({p{vv;kTsIj#Mt)cDQow=d`!;&sEP& zE?NFL@%iChw=Iuax_-B)e^}%4-74KO{pECv?UvtPbDqGYh}Z$MUSt_q zJbUul%vs0hRVGjYZfmQGnzijd+X^lqG?O7-HFLvcX6H3|Ac>zr;Yw+ zrd@7k2IFigCSFx~^|s(c0as50!4ccDc0owba_}t7pGvd+QdiAD;gmq0dSBjOZ2zF{!ruwM6Tkc4wJ-jE=kKcD`R}C4*FHCW)hnMBn;8Ff+1KL-pPG5L zR-Zg%;u-h9Cw9@_nAv_sbKe(xUVV09mhdI9Ed9+JzIA=8p0+9sBm)-Z5`m^41cU{L{xBr}(ANMQkR!dd8&R=JL?Apuz*ZrG&e+mDZtfH#@ z)oaqlCFz^Pzi#~%HEG`KFXkST{)OH@c<=K6W$%;gjc-Z6z4`lCf3N)JzsH=9Ilp0k z+<$ETO~%Li$Fko{*m(DcwsqE?)ICSDdbjs}zp?z-?_+gkrz{d=(n^mVKX&|$_T%8k z64v>14E(ar{8;{R=`!hb-(@>}4wqz3pCNa7acq{_jOkgOX%~Dh|4A#}EZV!q$9VFw zkZCj5#^#C5V7(=pHZgL^R+HPaWw&Ub?Mrjlz5FI8EMx6iy)<#D?7L_3qWW$gezS0E zVPDC=h|{HgrT5l9wU#fiTOevBUt+gH)Kb34Zi%S1x}|#N+qskHPTnf?{QMmI%T^ZY z7V=lU=Js34Up_Tw^W4o_{mxmQi_dy`E`84VjMzEnt>#}{SEyI^&+GN8ntMA#UO$U@ z7PG9hJg;cqy4d%B&QwPIZan?iYx%^A#jo9R*Q}nudVbmd*J9UoZ&_S-xbEwR3py>jkeTyx#Cy`Fi@h4ZD}_?zO&t z_uAa&dC$+4i|^pR>-sK<>$TyhUZ%wtUie-5uC5Y3-+aAlp3&Oy+#aRHcV6UvG0Zb> zlPH(|E|uKF-aB71xL5L+Px7>l*M97+ocmL=_1mu9JF0h9@6Ip1|8C#m+U39XzVqL$ zG0jQJF}i1P&*Wd)pSxFl?tYmyeTHY+rkP1`xpB#5%LQ1U@t4RUcXLuoq25Ny6rL6vH82pcHS#|TekQ0t;bd8L(hiCUT5^P z-P1N}yWsL?>L%8)=XTF6H-0AbR>n8$eZ}(%BlG%Ke>96N(yh{s4*y*A`TUuZx211W zGey)7*3R9%dw2V9w{rXMD&JGSi+m6HZt{KcyW=+e72ATcc5R<{{rHUQ@4p)B7wJBU zxh^Q4d3W98b;4&{W9}C3eI7P%`*X+hhkGjPURCyeSa0JU>3!blyw|jskxwJf->Ule zq;l%iO1rOBH%&!uEvQpGdod*~d|P+Q`|c>Mt!H*G**j^O<1N;gAJ4UhT)+Nf#|6#s zOZ~jZ%6Hs5WtaT-24~oDyTs+D?A8lsE_q+)`bmA!-R0T8YHx{~9G748^S|)kSgZ?V^Cjnb&c~eBxBYC(ZNqJQKJeuH?|WYS z>`hml`djt<>3OE}!fp0{U-S9T!OintZ8*94X7Q=d{^v8-Z;!LGncD4}-2Ht0yzMqu zZFIesH>Wo}S3K`>-rt75dRbN7yP3~^wmug;zj)rvdB<%w+ibS=uXt85@5`CbHcu;W zeeQW4d0y$f(D|UOyYbaw6?M;7ep&N1=gXg?pI1E(K5uwFect1F!t*B2J8xS$Pv0iK z>RiRSs&ke5KF#^=vggd|%F^{OORHkzwokv`t@HQRoV7J?D~~<<(U!h@`Kis9H(&o; ze!lKJ`#k3OaHi^a5|;hdKSGt*pK45STf55m^6Q1045eyQHdZp2#rY9%YN-cej~jh+kh2*^qsKN6KWWo0JK65$`OE zC62WqS6f(BhU1_QlMfC6~Hs{+v|j`_OZLTHd<&V6MA8 zd1ta?(qoRxsGQy%eCKtqoX*7^2X{2qR7=@v>Sf;7Y25PupG&@BUSe-A<1q%V`qhQn zt%|jCUIZj-{JfWX$Mw&{WBnS}IFebOT3nLw-1l8#v4-!Z%bI_G_x$d#zgE%UWpr_d z$HV%hKP^8d_jqopoAAu9aJls5PP-%+z5-#b}u>4z;FCs>@9 zIv;py$@O5a^U~*qW3zOY8t6-%jy&*V>&NVCCn6I6w0+3$y)P7-x@OT8tzIv#&yzk1 zE!}@B!gtQ}-szfKOOIKtIx62|A2553`L*DRO>7;LOdY1IVHA6CjUf=uTa>~ppqkyF z5y|XwQcA(=8bkJ>wTx*quBxq7e|G=Oe!=JO)p`?)=kM(QxwH0wO^Uosg5Tz2YZCJ| z3Gq#OulQNuqrH)RQrzc`%9hxqx|}+n!v0zAkw)9)W}LUllUqJv{_Od|CxV}8KB`Zw zbNsTUa@Ncg&pE39EI-Sf{JH+j`WY{mXdav6clKq%Nx#FH2K|>yX02H{*=|eG&N+I| z$}Ua+@kN!7Q{a%~Iqgi>-PdkTF3?Zce^&af?4FP2o!5J&v(8DLlicBdjWcnRU&o|U zrzvZM7p2SshDDW zY+Y;3$@K1*uN5^n&pz~~vF7K5s{&6iEn&E{M0JTLotv?^OD4-#R8j@88}{*HiwPZ4zm^HT%}=C%@Ny(+kYgWZC-n zR-M=U+uY_E@>%jh`%G^Y9#Y>Te8k>!+hN{Yns2$ietN&v$#&btxOU4fM==+vlo);6 z1ekot+mj8SAIsdBa7j1vBUEsM{t-(d>FN#NY z2JfGo`r7&AqZh2*i^X;N;x<@R9elJyP-wI2n?C8U>|fY5^tRjOsr*e5y4e1;z0-K+ zn*P-ZwO^XP7Eb*)<)5{d^ma$1l7IW=U)$iaNwG5eu-r+t>J;VE7yqyMKQk%!l6m0U ze@rZT0crDVM(&$P~yZ{8{)|X6c`)k8O6J6fAU!nCRHlId#H>!cB5*rwcX)9nLjL zmF;y=?p$%6W8>_NZ7)+yw=A5xVC}_ePbdBjaFNM-otp4f>&UCCM|RxWG3(HWtJ?Cb zr#F_KKCtWQv0YD(?n+I#t7TFpxi@3(j?OTB^R;p2!7=-)L=(OmZK&F6%qH126K2_~%@ixzUa<*O-I_N$fkcv-keRTh9)x zy2iPBmZRA9s7D{Zu93cZx_(L6U5Bt@{Y{(9E^7S{e;oQK$8g&QzGK-b?$4#7Pxie_ zePd8&U>}*7zv*_5*5WRUJDbiKlu220zBeiptUF%Oo+`Dww>(lhxqoB3#ruhO?;c!X zwklHSX8!x&6Ms{h)1~Ak!WEPm%n|M@7n7Z-qzWAg4BY#)v1&b3wJc=b%G1z3*MWr3|uG+W-UGPKBFwfGHqt0+aJF)b*|vNINu%J zH(O1bv(IFAT%MY0~W9Dm{y*GHTz_;J)`t3cJWxRgqebzg4_)Ov&+wCWAYHT`L zf28g6>hd*H)_lGw@+|Ii+$Y)OKE;~(mGVo?uE}`+sQX-Z?YK;O-(rztv-yS6n=Bi@ zs#O0|y*(x08@@Hbr^q-Sql@ApIenf?vi zXC=i}OTTqkHs4LL%d+#TSoTxm=Q*SFz!Nv0$sF>ZVGnSuS-nsce zO9>Gs;r7Zlp z@~7s@1@mXl4~$tCEOkLsctNn*1hdLM3qj*UpB6Z(IW(Iru$H)P=3TX$WLy1O@RS#{O5FK=ef zn|J!%o0I3-wv-)LnJln#roa@1PL-IgDo30y2(a|91WgmLJhAmvLqpUdc72)CtC+i% zzsjh5Jh^6)gtvj#f=MoR8M5|swEn-(*S)h>c3V(t;MJ{{s?*B8zxii>{(a@WdUJjb z>wghHl8gFt{ol1I=eH|2f9QQEJ$La3--olG%$v_qf9NJxz0n`foplB^0sF3h(>cFU zc2>>%=tJ92{LSaRuXa73|Nc9fLkrxu`A@FS5&v9N@#REWcF}q3!|rqCTYUQu&F7Y% zTwP};!nVP7cFp_WhrXZu`up(r(|_f8>{YhQ^V#cs|8qV-%WU^uLeKot6jkV^p}VH$?Gz&lb=`B#?7Bzz3$@m6Z7LP zs2A1F-FI&0Ywur^HeWe^>3q?Pch0k3fBF7W@lR8||Jr^sHP2ee zT0424=ezxp_jT-lhTPYxubREjH*fyx`P%irYW_0qtX){Q@J{jWeX;wV@zu7+?DyDz zg7eGVs2xuGBmOu1*)sjb^b^KaGwWvFDc-*C_D{RpdZ%pdm(+Xg`}g$M(@!(rU(TO4 z|HFi7D=*H!W~BVfI4aHM|FnPmKMB{x*L%u!<{pn*H~)hFiSPfW{?mRQ_BZu!YWkY} zi}pXdv*v%)|Ew@fG=DgT{wf?ow*ZVK`7k~R2{xy8=^jGU&uD6`}Z`Z$FpQHYM z|Mh-u_{;hW{~zpe`@i^~`}3>6q<=}D)BY0tOY^ziU*EsJ&!;|dAf4r&f9n1%FO9^SZ zjPY~BoqY#wH0rNAKU3WKSMzgl(eJX)W$77pxBhG?USD~`M(4VHa-G|{`-%4yulLVz zfAVYYv$;io^*-zEth-{P)qf;yd1vMJ%Iz`sX>ya@KM8&oOrLF1+G$dH@=xPW=AS>~ zjpB>)%=>2_fBMVw^O8GthieYs?8)oSEB4E||9s8F-D($`FE*dky(sTiuTlTY{i3|( za+Qsoo;glJ)zfUx7KlCB`1aZ!)s}0!7M3<|ep_*FvD2xGUCUyZ94F zy)|i-+u7fLJDR%x{KqSAy>5iuRqVTcEStG>`Y!J&-+||LH|-C+V{+6t`OcMa{#EQxcdu!7dzJWg!=II3{o?<8iv1MZzsmh- z{zgB^hf^&5ZVE52>HqU&e)#*T_J8FcOKO#Z0c6~cHxLe$%l}AufqbJm+lX*UwV@m)FQ1?O zTD(K;SH>bIUgr`6C-!QM1^ur|18kM6zHj(rvbtQb>bleWDj&b=A7l3Csh#{K`O{AM z=KBdRjf1M)vd(+Fm0W47ygohUi|nOJH>>j=H)M@U+}h5aI4il+QrYmmiS8ob!;+j9 z$}iJW?#Nzx%lEQuy320=MYakT-%U;`e)e$d5p(##7Qsx1iEK(Y>bdXPH+{)IYT5EJTH~Cm zh`M`r(Uvrp>){1^9m~^RmA)$d#JxSnzUf8uiu0VWCNH)-9`MIwukT*pqNz)N2tKJ} z*?j)O0_PdEysD=H7Zqy+@~u68rP{TVZ{b(LIrA1fDw||YA0*=Y}$}H+sHYwz?pQiDcr!K}> ze))@JK3%zmot7;#4!60#Na*A9dw7t?^o-&`9@9N6%yJ9cEUheBzZz+*Z+IhgB2Rde z^nt?I8*dl=Q~&FKZtH|u+$$?5L`hq{c22L|v4(&8TJyD=R5x)8+?4qA$}!IN#A@Ek zt%~c-o=iOyqq$}3p-9b^tNFJwy(4OGXf-dtH6cWLQkHX2uE#4Y53M|@9Pgl7k5#p< zvvX||*lbfT1hd(uI{BNn{t8%e`ZMR5?z7#pM?Z5`ezEJn_x$2-fyM0FRRN3G<*RJG z=DWZAtWhhs^!(zFN9*kz+TUGTc>cwOSgS9;eDdA$?G~Gde|ctH^;t6Zr(x{R%BWA0 zx<7lS)wrqKEf(f~afJES2T9uB|CjspFVvndxX7xv>wv5Hju%buehcWwUZ{K`ot^e_-D&PJi z52tTAfBx9*>08bi%hYuq)-U{_dT(FOi(SvMUcZuDC->-;<+?Z%m)Ol)a(mmi9Gku6 znBLlt0`uc9NKOB8boQ5{&tG<@e>rOW>runLin;qL+~Q*{iLjd-on3Oo_}0VZTMrxJ zEEb5Dy=?WCN}TUj;ikMMqb1$skZNp!gSgFNZoU^y*IzVwM?IJ%Rx$bCcbmWKz5iP; z{;!)^mtL~(^_IP=x$o6--}h`YU-0(slIL?Te$Kn}Ij*5Z?8~0wigd2`Ixi~KP4*N= z-L<^3dBN4WhwZpmJm+{7dEvQV!u;A_cPxG1&EYHeYp+(8*|K1-?b5xy8TtH~`Om*> zE3Ue2x%X|$y)wW2YA$nKg=MV0Z|58%NG7{^3efU#Z`2tM=u~ zzN{*)x@x&M%VF`Wi!0(9HaKydJ`g4ya8+nklo{u_piuTzR*kE;R(Lsw=B~(Mo)>kg z%T9V8C=2|$ApKyaz&tI5l`NB@oPs1(wze$cl32y-tb6{+4yLwC23Od4mM&Z_kQe3T z;~lY*SvxagWy4gngr%x$uCz@xTd+iR$`of$>3~U%lgu)7`!jW8qr9hID{{%UT)ed; zQ}_Jk@N*ej%(G6J&N`Kyq2)cxYyPrJOIOah7_ttG&ShxDf+Zz=pY|;KWCJ3h@&^mK zZ{#}aTP~kI=c4z#OWx-acfEe8`rKsFcBe9Ksgss9+ZS}(w7wTBnHXI%aruUOO=6!! z9z|bpI`>lkdBJ_AchMK@&%KmSH+aCr7IVQ~&Z&vpqrmaM#qxTaRxWXq{^c7UGMVut z9u_c*In<^Ya-)@NdU#68>1IQlhy%@>wU2nUS5|sXu3*lQIMn8SqkvPo&7{qkqwuCm zs&@xBN1R$l-nQV7SjdhA@w1(4bgecCozh;ghjq&KhEHNn5%R4?w*vYUzb-H65p1dyexFsh zIcERW+Szw*t&KYzw!YB*)xTwbUj7&AGc4#4?E88DP|^O!|JL34U%627@VxcxXMb#A z(e!z|`E&M-pQZ-A{AXF-{9$`%>}1SnBJ5<$_n1$D z`>b~Voqr7%dbCZ7`(y5_vm`6b==i7Dnyh4@)&wD<3VgVmG93+cIgVBESHCY1`qnD^ zK7H@}$+yd^-1Zd+r8(1n_~9guijrXeW{G|@`;x+my}4!MjSt2CAntu zVXK`1=N|h#_}ltj{8P`o5A!Cx-Y@cwGm%4F|NKoOvmGl1&HwJX%va}cV|vIp_Rf}f z0=IJHweMVEiRam;v3;9!N5N$obJHD}$HIzaYFuSZjyXn`aJb2QS^en6HB;XYAs?pv zd1-!B)7a+H1>GeUsd9g^Kdk>Wd2R4DTW9MZ|Gob0J)+5cG4i&t%NL#;lWyTHq3$6@ z!80>5^n=cp#HU!*yIZs950oyV`dnsp^3JV(GavT3ot>&8ekZU{ z>g6S~k}JNi)YQYwSI>T${p#GoUCAxVyB_|1_;=F8Tq{4%<7}#-8Y|UgmuIZlIQwEz z_T|EsDk+i6H_m44-1^djt6p)+P7Zs4x`4d3cH1tv3)dxXvH@6`|2pL%Qj z@P9FnRYt&4F|U+2ep~L`Tm8P2=jPcPxfwfSPpy%fdDVXTa%rR0T_THSb#B#6@!<-5 z(r@@P+3TOgWE+u_&J%4!gjajWse)Lm(!6q?1*Gt~-kM=FzqZJ2{>eE;Gi!_7JkM#I zl+0E8JfX!XXaS7|kCgXIwN-gcy5wMP?a$OV-Xw z{JtRXsYuGI87q?2RvmWHR9nS6f8K?&vX{?FKFg9f3iS!+wwrrsdF_uaDeD#5Ja1ok zF~u`jd-Adw8_kTTU3@C*ytqr!I&S7hvy`esC0k#9_Xb5l;*-2VXH>ESw;GD>@z%y?R zOBOGXK6*r}!_Cn|)n&1Q6zgf9L`l}uJ~I=Ke$l$I@ZQ?{&4MB&8`xxf7Bu_5IMB>3 zv?GB{Jm#?F1J(1&{rcg5=^y{u((A1Q4zSHV)6kcB;$}R*o<$S)HjCfd z7QbH?eG4!6c717M)bhrt<%c<66fjxMX<%EGS5)?LVa=~Ov9~nlhow*VJGK1w%~rct zdrvCzY&v)|o?j@?#Gdi2zr$zY3x8O?1V6v9L+tMrfvB4c1i36;zP=d5o4K-WLU&V) z$dg4bywL^`NAjzjyOJ`Tf83+DhlwA(yO5 zGv>xbEuVC4<&sjbjJaN5rvLqrOXgF*_^RHLxo97+`@OFU}9I?!q?0aIl`s)TMwFD{K3_` zK4HVzW$K$|#V))l3L*A(r{yocDL89yZ(4Z9H!~>BH*0TmRQQW8dR%+Eo!+l4vHgAa zWMAmhs>yqn_@8_cT=Z)SU#(YLTKE^uE<4rbo|>6KUb95{)sBLhBEDVjlP6tXGQ~u* z7A(5h^W}vl8dg&#@u@cM_OcRjZGUue;gk{$Iax1{_C+rOL}b1EsxK|H)y(u4dF$y} z{pj*Mja!rFd|R@__G5;B(XGjozNs9ad#zwOSNW?)exa9VN9eEmuqf+k&Wfxkq1TqT zEBvmS$X@f;`jaAVzw%WXGylqh{=3VruaM?_EtI{(G84Y>pZLK3-gh#^<5zuH%B8>R!+fsiD?iNPI=?dEsL=D31@pMhgSgvQewfJ>rc*eZ z3(T5t_#&Z;kMH6^L#rEy(#--6>lQszGvw}FIvlDLlPVkDSva-W z;uyzqiH8!(G7H+7T`U~<*&~iKYJCp;99XFGnpwFfp@qNaLu25VLoZtWq}e+P8szv4 z4l!OUY~Wz;II)pSe#M7IF8LKM$GJ_EIP!S%rrfq}vVQXI+ylRzv2$~8_v|_--DG}Z z>)a;_6&e*D>*P7*Cf+V*dz5h|S748NMgN^!Y**f`^jem?Ys>PA_65)Plt0~)RP=01 zQd7Rqhu-2J$5`&qcp$B~&+wqR8i*tDP+GVq`HXertM3fGh5elG3iFM#5_%yR0z!z)>jz08aG13wCy>}h-C7Z9`mXKq~HhT0G_hg9_yZ&;?v zF5YCl;tfl!?Bex|zpNbNo&WJ3dt<2mPxY8@eD2rMrhW6AH44H zJMXyqU%1F=wX3;_P2&X%tL)+hjJJ<*$g#agf9I#UggYGuzLu>7VgcFIdj_ zsq(TK72}i&8N2%VM&D;ux30L+-YR_V+O9ck zOD&^c7j3)tG-vJUn^Em=XX^Uh*!808IA`>9;ca^AIkA2>cFozqYndp$$#(Nm%iCtp zbJXW-ep_&8+i}j@a=%I%?5>_FVc-^fF}d5W^2OxsMe~+jP|ts=a@KXe&6muwqn@{( zUN+`Wq4i&Rzm2jLFoe;x# zQgp%{J(chaDn|@r9P$$#N zb7V^`tfh*|OrBhMk&^m(+3CuQX3t$?{kq!bh?H7tN)-idIW8Hgw0NYYrdp!ZY1-_)0BhZ#7!zJI!$ycMQm|E?DM3v!=Gp1DTXa zhiR-Skr#?$xZ}k>q%wkt#^eexYsYcJDUl8{S;2(5vHF}da|(m-ulQEkbic!XJAFg7 z)^pz8_jA?yUq#us&FB9+z5M^Dr|ElNo_UwbcYfztwq;AL#8(xs-_@IGdt}X9dN;>7>R8eKvwn-uuF5RdN}PRV!u?tM zlJ;-Bm$_x9sq1H}FUt})U(PT+KOyn*)U(I-+|1b`X}0#f?5wkHtD7u6&0M*ypWK{M z-zgCL=7avig$~)zbC$;DUS?yma3_Fm2IJrA#CeY>WU>KYKnboFOI zECYl%8W0=ves=9`+l{<3iUHqOR6n`)YJbr8)xV$qV*J{0Cu;8Zi({O8*Zs5U z-n8}QT1GaTTHVtsQo8TYz5nOh8vR{AlG^ms{>UZETs$slEVHpy`IkjfoANS?Mg7WU zKYD*#v~)Y~uyAQ}-tngN+U|Ffb{7xv8~r(Ol;7x&!eRcHIScMxSW|AyTyo#_`|B;2 z;%;twGdWBo({*C72yaD4Uv|-{SK3z3MPom7ovU;e-?M1jb4#(=^DCUsvu-Z?w$$q6 z1B2f1Kkn%-Ch7fJ(rveMkwW;E6QYuqii+wfzD^N$x9CeL3AHKXgH#PNX*yi-q zpB6ilwx7~U;}WjV&VTjkSO_Qk_1VwXPMy0VY%^o2Y0=;J#@TO^r*oRN2ULH^h$()4 ziqGG-OLIwtnNEi0hL%4<7VBF+Csl^pUD}dUx&3^`RR0E zrqkbfzkluh`gNKIPxDcO2)@Fj0^vL$f-m)|`gzM5QRgtjl&Ob93{9pU4z#?IvS67+ z)~Sa}C4x>VE|qZWN?h_w#^PD&`@>Gpd^Rte?RR#cam2@Y4}N`pwZ7zs( zy>&z81-F`opVf zvC4n|Wx;k15SPtG?yt{FUa)5$po(VCmDCbwHAwp%8i z3o4r-yi7ND&Y^QLr_Ox65$6X%7VEQ(yEShs%9gDcGMgrBHcdEf%kg7Hhx$C)D}BR1 z1)RE9bm+~u8_|9@qWxw(E>V^KI^&sK^=Z!P)11b0jV{}kIa>LY-P$qZZjj%MPjbQY zHZ7fF@LF^8yiM&>4L)i{pW=)@#rgXrr*s78<(X!DN!x9e)J&g#y_;y4q{G0O9 zf9Ag_FP|IdKJ|Yq=E1J&ag*ug0(Q-+35!6)rQj>ei>1GOR<7#0c4~KbTlzikkoPq| z{?owT|o9#7U!rg?ZXW{*-`G@0E6SnBO-VWNLyY;t>O?v5zVol=3V&^diXD^gwg2K@ z@UOY;SMKxorf>31D;%D`pUC`Y>Upl1vyA_|p1(Jp&;LXIvV)t{hww`c`zNveG0xrZ zuJ++1%RjH%?f4Zm_wSUR}^5 z&2!<$!Bh8+HQe2A*kzaSJ^xNl{*5OW)hoYT{KWXn)?xqhB@^sU**a`y&w1Ay_>OUw zt-@lTjP;AuR^FIb>yMcHE$Og8(@y1DRwyz=EKDYJ5a_57O5(55mw zchXriU$?)06Lo*}C~Btnhb4PlySePD#H5OCo;K_%^Cq<^t9_qhBE!mid_r5YhtMrW z&Z%Ey3~i532-)I$Uhr};&r8d1FD;X*`owJAeTqJL`u&@EZohNgsT2PHX8w7y{)zhj zpE8GkZRXCc`xI{V|KKUMlMOmg*XK;&`LKm?c5kvxF2mQYAGa{(nI-fW_Vn|9*vNSE z^zq|tKW;F{OFu|v-jm&s&HJK=YuB76y>yT1!51D~d4J-r+FscU-}+A!M5pXvzBO0z zt)Js=<0W?`FTE2{v6twcR{no zw!X8?G+v*f`1;?)edQXD_CDG5Qs(u%iD473_l1|IO>kq#WSQW`5UUv%tQeD;(9>`| zkRy|2PoGnT@`I})pR%}~=Kt7rxu|E4)0RKeYoBVwxo(?%`|-`6HrDcQuVgHD6y%jk zyP)2zCRuV~fwPpXkx#>M>(-=ikGQfyhgb~@5#>JHs$vV7w?`aa-MT$xcH^76=&?; z7jjiT>2jC*BmLEOX*om1t+#V3=lEa!fBgRQIn{R0Yv1+E%+$%0IA$i1%m6qk8!Q}NXDJmEJ<%HTC!H_x1n& zVe{VT`@GL~-}jw={kJZDy8}bR`dR5QEOA?3l}b5=-2P`fd4c2cd2e?+c?G?`cX9)p zjTL*|y_VmZqHH%6`A#{MX0YTgVDD-2G+-7xn015a_XCv}LB@%mPsEP8wBBAPEWmd$ zfJ3fL>I2J`*5!#Nd$`^oO8UXG?LhelOwV>wz3Pt zK?z1@T2xc6hTY&_{$Q2EMAs*xsxGQ4Sn8g>+M2we{OJ+*&ub zYpQUv%iQCyuXYL^7J7B1Pw=$#m1-NeC8mptQ|`I(W*t9qBw;?+yXH9o5^{~l7jSNA zkNcpshwc5rpdT{Z4l-KsUT+co-d*#^F>vPklU`!(PCO!wMFHHioY-IRHY8crMS`o@%>sN^Oh_|#?XgHTBYX_1!p z2Z0$JYZqGEu#^c(*>o)Csez-J}ug|;_|N2p#05^JLm44UfEGO zsd8TBRYBFu>25}gXY8C=ct$AK`%6}L>ddJ#uFfo-!8^lurtZwQGh%1h&ZwQqJoE63 z#kY1%J8rPtAl*pZFx=4Gpxlt(@bZjs+1v)nlV=Y0WZ&KuUL8FvvM;hVa&qMKn;kPx z)Mbj;}ei=H!~wIY)d_wt2m}XQsJ?*|_uO&neCF>=xOInwlm-a5{UAkQAGDCgCe2X-WFAJs_x4^@|W;4rXp3O{~r8bKhH{P6a zbC3AhcRZNJraUuw#`7%aSySBITi;G>=-D}GXWPzsJ7?}}-Z{N;LgkdouF83pt(Auj z&%D06I^v_je941n4xKr7=B&;EokKb&bxyB2vgX{H!#M|XymSPwO}g24v-M{4&FPjC zEPE`wEZZz6TDDrwwVZ4@{YSzLrDsLYw4OyhV|y0%Oz)Z9GsS0xX;Pn+KCeo)`10!V zvha!q$x}TkX{pZ=o~0f$>^Af^K5e+#AlvA*k@VMBmluauC~X$qj2Y~wYGzxmHm?l% zVe?Gr8P~I{XI9VLo|Qe5dsg=>@tNnd$Y-k0zB0b8F6*CwoJLT>=Te}j{m1+m?o$Ep z%xq6R{S??Y^}l^hbU<(6cgb3QiNfnISM__W;{GSRjpb@w`TWRtjLtJoZ1I^dnNa0( z_{y0tk;`T*{NC{JdjtQSQm<7i#{Z?SH{DmblY8tAbJ}k9Go}19e#;r0w@qlPKCq$s zz?$z3mhX)oFEHHF!Z(4ZHc_Cb#n6Cr*+HEMhSQ0rYueXtVCOqjXu%!cs_x{fHZk^z z=*LA%G}KphS}mHGp?9lOiM=1?2-9Hy!@6*G*7X>6h!0|GsWL{WB)kmD$a#E8Vw7AxS#8 zL}(+Yi|3aIN_Qswed=**bD=~2!wNJUJ+M6cm{a$iLL_XEz z?)4S7x25PfFl>L!%l$+09p@g#NxwJ_FN)ylPUfr;@J`ay>E%z9%xTmu)Q?+iyv{*w z_M4}lxhh(7>}w=WKT?k1JDtqBreo>`qp*YTZZL0uu>A-3+*-~U0`d4f(he zZN!c#-4LBzU@v!|x#V1#mAZ7=@r*N#mWFJ_iFs$5D>oXK9sK%3HLqat&Yd%khcvrs ze|o#%{=Edg*a`hP%kTfXFEi6~Kkt4^Cx4s!ucF;u_NC78z3_Jf=YkZ)HU8VqG(Ae& zZ<)Y1>-|~9&&`%OeKQt6lel)c&O$Q&u;vddzoVHy?9Lst+#z-S!Sfw_<`2W}w8cN> zyVJS5z`U;c_Xq1eJ>ehH_jFzV$aZf_g7&Rj-wJOZFk4bLY2n$qzYLF`% zWwo<&4AakAzOrttk}o*^@BWdOKg9O+zJI_|BcA@K+T!*58!h)AEB;~Re=KOzb^L?H zyaSVeD9<}|c}83M2c3C`KUXm7Kk~2We6#+~YmOY_+jq8Y&~74&S>yL=|!=#ud@3k8)X}yljWxf`%<=QW^BW<^M%+B1)-+YTbXUf^M&9^gVAAYvQ z&}{nI+|M`mn9c9q`ZJd?`ogiBPGXqhIOSG1Ht!@vI{JKGFwOruSkjhZU(2%L2qM@Ooli9B% zubO7FB5SqPtHRLmtHGSB_GK-QTIKeN^J;|Y#QUe6SFL=tKq%DsYRuLE-K)W?re>|Z zwPM?By+MmZyS$br>#yFJwNq-j+N$s?ET*1&SE;SOensT#u34+@ z1zf%|J8M^!_ujSl0*$Zi&RSOGe>Uj->YG`8vsT*$e7;h%)j>C;`%2PQ7v0d)SK41G zZ*{6&6Sm6#iq_YaQETmjv#&hQTKmiCuk+gJ$FEG!YQD9?Y~|Uk?pv$2t$h0`d#m%? zklk1Ewz}6Y{PQx7PEmXns{)>hX60-)iMoE3B6FtrmW@ntQMbJ zRs3qtt_6Cl=3h}Qjf@SnKP~)f)vjghR>xoAExpX_UvVjT-t$cT2a^1@uYbmMh`&nx zaA;3~{-NFea$lA9_Qa{_Z!X_I{c81r?oXReDp&3P7xn&v_1DL{)~#DETvB`2!Td_^ z7vWtS^A^p1rCz!yZ`thEV!M{sd2PS6wp99V*!IhBOWE%RmS37%DtMf48*ywcW1ub#C7;|NYAFca7YN`Ino&B-py}Up@TgbJY&Hh3>D!zi8M-Eq@_i zx~k5z|Dyiuja75x)~mnhteRBkx__1W>+4@c{_dK$>i&hxUuIYBs`K8z_WniVFT1Oj z)%l;l^#1kDs=j{?=P!T$%Ct8?|5Eo?p}iscm*rnQ{iVFuseVoPEB`NAe^wZEMG z<$2ZGe@^Q!|G)71>-4JTe_r`lW`9ZB>zaS{_Lmsj>n6rKeexzBe`5O6XU)lct{F{g z=R}M?F594))HN$<*^bH!Q%sinWPYBYnJi}(>Ju7#c8cj#pUU8yHc47D+#KhGW{Iiive_>a z=b731>R-P7#jy6Q@v{Ar3G+;u&laamkj!bDu`q2$}pN4+3v-7q-f9qO(@?XySoAGaapb^QiI++_qcc;f|6gox@TdH&JNZ|2&+lK8KeaB@VtIc3y1XSh{{L2PDlNG6jXkw` z*4DS@r{=Dx`sY6-S0-~-@V4Cxvrqr;+_bj%R@wTgZ{NSVB_HZ*yK2>Hsa4PF=PcXn zwCdacg_--a{@mHWAX~L=c}}Y5*;5l&g&K%@-qm8Csuz3rlIfeW-qrb1Gmb6m%*>jn zGBrDG*5q4TP5kc$KHtSMRqtlW|K?j?e|uMbSJJ%aopwe(^46J(m4KXO|i>f54!Bd~0X??(MwA-^ZdCdY3}ersWU z&u@eETfN=4-)+2qWAC@<-RJAlzu#v5wqX8I{*TUodFp1!zjOcb{pZ9wH~Y!{TSLA? zty`*c_2|M+(i0vnxZ`cA7JBsJ=KSBMxBr=5`$t^TmeYo3fuqZ+kj1gKdW%4vj^)l_ zX&O%!bZujq()?-yL+1s)Nk64Uzq1|qe7a%F{7=^oZ{K$6-mR)9*TQy2M?cNa4c)Od z^y9U#rP0w-^K(OgmY%kAjgDz{JANtu(%Y}8C0u{E{d?B&#Jc$RM7}T4b+-j?bIrZ&yU*AsN}xvcK?$M7yHWB9cM0{dtEX8 zRnwP_pYnmicP4i|__pGu(z8$X;j#`Jiyq5Adh);gUw!m9|H|uk&+hv7)^fV(nm`+wfg`cyvi zdcE<5`>6}IhhE?RY{B;Q1xGc%`<%D=U&Z@2>UXW%@8dP!_TPN-UvYM+|Kq;*Ut`N& z-9P1DKYjMCHJmwQHV93A^Sq z$DrfEOIpIO@LsZ-KSj5D`rXrSML%>^sP5eqr@DSu`0?xqreC9~-tN(h<6pnt{DSne z-cQFWg!gLRE6HDGem(k$?)R|D?7h7A!t$qYKX3g+_WPwh-S^;OD$tvudA?TxNP1ldiIUVtfPN3j`1zOX*n(JQOK;)%^7{V3x95z_3WJ6EcNOy zb+r-mucUuft+iEPmf+w{;c{V3V%pevsWGdOtud_e$$Ssmlx7RM89`ilfY=WkdvyR1A<`_LcD_YEKTXj!xMr)0tx!3`v2%*zS zs%!d64H%^pgLC@Uo{+Xm6#AwRFX2#UAQW6^D1($HND$ab0nh=hHc)O)0CSt`?lG($-dk6zBO1?eC$SNS=ZdW^jka2 zCdTH4-`rZ(eAlb=oLzNCjc%{j>eV5+tS7E3{asVXXTM$EdupiQr!AN2BKJ4NA6@_M z`lr{wc>f%$TXg?Y{^RlwyMLUl^WVST{(}6o{!hVwKmJRppJjh|{#*SI(|>CJHT_pr zzj^=R`;Xs$=Kt0Hck;i;|C8!%UD^^nB0QE&STSM7gc}onOb}8`b=GPP;a@3yNnuH* z$LR@Wim^^rEnj#gIWC>n^KS}C6mT~U37k4HYq|4<>D$s*EG)5MeI^u~C^uJf?XgQA zmuAV#E#~pN_)T(aV?|)D(!GG)D}Jqdk@|0|ui=rcYJMx0m8i^rgD^6)US+5sGQWGlFNVH(qXZKfy0~ z-^n@WYPx^&6|)tK-T(Q0=H{8jGm2-*8$36BZY=&P`N+{fOQspwr_>#ZIrwMBPtIb| zVqW{p=VxZmj5oM$`2S$c`9G6(HvSYX7B1E?e+ zBilWLr3VuNYa~7=nguO+EYZLqrp()Q^v$y-OULS?9|h0!UwpR6(z9B1gUrhizR#0? zPW&c!ONuhLgwG1ml`Eb-|E%P#Y7Xt> z#52k3W^LXQ&bE5Or>CaZ&sYYe?cdpFQhtWfFrvJLby`}cEIxZG733F5yG0}5eENH^!IE{N#_=KsGrdT#c@C!GKY+1jN zwe0x18I}okV{W}U!T0-@<&{cO#aOHVYg1@+%f--;sVh^(>kx1miI#9k9{5q)x7_I zWtKuTYoyi*KgTexO@R|yn|=vgX85kXzdhPs!LWbJLXTa!#t$-+Bqpgpma4Y@ zSUh{`j&pVncTyI2MCY14GMhd3$JSo8cN;7_taJSy=}9}^$t@P#zj0^h?=`ap??(n@ z?#cNqxc)}Oqw{9=A6Mx*?8)P{`npXd`@=HbCnk3;@oain(I(ND-ueBZ<)-ga|C-nf zn|qIZF40krQ%F11edNp!VMFe?U;P{I+A2DpcfW91@Jk4bt+1oN%LBt-vdiVqGFS06 z&1+gvt^eX2_pbL%ZaNuzn%uNAdYarcGHROK)bHHL5q*7+KWs~Av&f$Nr-JruS({s& zBz?Q-#%KCo$h{ym8^L_uu(4;#ayBn6YeC`0>lQjOF7TS?6OpU0lO;7;>5-U_uFL{8RbYEJsiXg#l^jH&Xm;i>YnOOffiu7%b2 zg3c`dlg|Hf(%-fpo9}w>Nz>eRGyaX;BVX^pX~uvzn*h%v&6H>CV)5wl(=GQ__rH2}d_lZv>7|IT(eE2B+ht27uR$MDjNuJt9U$38AVq{;G9oJv-Lh6po^_Zn)U-EC= zY?-}6_Ieaso^H?DOsD6aUp`mdFaIsFu=~UIBTerz?>z{=GjGND*RGoc`WuosB#P%K zi3I$e;9$$Mz(cqxf0A1Jqwglxn{S*lk$#+OJj=TEWsb>n%}Ue5WvN56wq+!yPY7Nh@$)P{ICva_+kJsw>WFUFm;cBj}T4m~Q?>oKy&1#2lsf}HZzgOMRD&MkxYVPT8qKfBxp6c^+JIQId{QkK>V#@Np zT^FR}nzmhNf0t!HgY9mDRpnck3h`$LQhqc{Gf%YBy_~4{^HcN&o_&k=%Qna-3eRaX zxxxMXfzq31?*d^yE=8>ao`Ie=T3i*ad&OM@^S78g_Iy*TT+bC=Sg)e?^46}th-Kxh zyE>khHOMN+Z$E$Yc}lGH9lq&bSMbfz5PqX#?Rjnc5X4Xu4bu`pyV%in6n`i2B%TGM}R$U#kZHxLF&70@+ABazw z`^Tv+@#anaSK?DW>k9Ypc;ohc>CzS2uO>-f7oVHSRxWC*;PpkMR>93i`IlpyVE|8C zgkgvce_>LK1ZV3}jfqUIuB#-NRgYL0@_BW3CK*i;3qB%J;o>98yFfB)+3`g2uIO-wQE0g3$|lZ>a8T-S%jK1^3*em4$+A9j6}|*{HAc zY;ZK0FUm7LDoa9>m-UQzN(WD?h@{?O#Zb3X9u=NxlV&FN)HtLyZ#0TJc7SDO^sz&$ zH#O)m1gFmFX*W+1jO1Q++G-PLjgoMxQjO;9(_$MO?NsMC^={gl!#q31`ljHv6MCDt zYjh{42)&tbH?{nRXV)d+vXge3^xsVUn^J#6d;V1B#Q8Eh?FZ{DWBOX0i>Ao1x~Fvc zG%hv@?Q2ag+9Sii{K@JfyE)Uip9Tp|kU!<`((xxGPh?`z<~vGBPt11uKA9GOdahFc z9o_Qoh@ZW8)IU{gm$YasQ7$br^m%^8@R90V_i%Cj*H%x=yP0Es{WiAzU1t2-SNz-T zb#Kf)-hQDbXzt0wY zn=SapeDRHZx5>w*9^7?9VE&=78&bD7Z2NXJeS^JS_u&tfGJVP#`BDzwc-42SO|(tn zjx@S_PRaXO@cq>*{9pA~S*O%*Xn!kMJ>}P*i}OAi|Bn2tVLyBR-TrUIKP>-B*sq^| zUjKk#T5q?(5|iVe>FYk%`x>`Dd*1)Wr+;Vt$p=4z1%91y?lQe|t>C|I&kJR@Zqp~~ zftw6%U;BM=X+LpxNq~^jSIJs2hxiLqB-xypejen$!f~ZFrm@9ASR>=q>`wuALX4&^ zXsKS!#Xl=-neh~(SYPuM8C5gV7j(VMZ*$N!K7FR0Ep1~YPiNZ7NUpPI+MhXR zx+2!|?LQU=-Li$&%8K15Q@bXs*=NW#{=V}&G3ce&GO3j3+lmWsx9)hWbft`IirGpv z(X3h1&#F|M@iEJHto?2`?bxGVIf-JkS})8yexvdDjfux^bRNGk^Z1OEYctj>+{`hW zy0ss!uZ<66a+|nEgAl}7Yt*JMq z{k?^ri{(*K!$plRbc!sGit<|@6&0QPsB6`d9nCLvf?@(MYpz@IRwUf!ok+Nf#Zgh- zxsSTs{0fgw_A7K<6dZH$uI9RmTbk=$ycU@rrE+v>m}lWphUGhwI&Qd~4p_cBX~vJZ zIZLm3manwE6#H@4+vU3-)h^$iwC!@NVS9gJV862gej1(OhToN+evSyi429@~G(YxsSR` zF5R+w)N?ti@LJ|ti}zc?Vx}lR@hCi+xpv2^Ez@#T*NR@Bd(G?NmT8YzGj&sEE!k?+ zw&h#!%=kJr^GUw5Gc{j|gikB#()PAKI+fr0=+xAwicwl8lDC9}Bx?DDEz&VvyvAqd ztANPXDXOkvp)0jQ!xo<@ol_H%8z7xhs=s-9@Fr z@4wux_3%sd)RMw@)2q9`m}^a3)%q~dI6r5o>MnU%eH&o4c-3f_!! zZ@x%f;<0{ax=H=5=X=gohcE3pW^&!A+Baig>epG9=5&9YS5ka7`>9g%^<%DV>-To^ z$X#s@m~V39@p{WSMxqN{gYvGnKl^XJrDDmA;*5Vg_h>P6XBbWi)n!~#^U8h06#u1x zOUvd>6WHPBt#Or4RDt=a`d39Co@F^Ib2ha$3n<<-xB7l@^EtMOn*>~c_Q>2cF5Yv_ zNz^0$gxAGN3mb*-(^mylx1Z3R(EF-$?}WQo!v%b&9t}LGRKHZW zd_F7lU8cJUCRb%^6;%ydR`rXYtvhuw*z$hdp`CAy&Rwy8qLpO%e5bYr^Zyye->1%b zyKYfVxoOQg$#;S03i^xNs+)}OOrG;_-XosxGU+>>TQcu|VH6|iCYiT~qg-;`iU<3a zh`-x^VTJCh9X#P7rIPDbJToc?yc^28XxeEm7v|}r9c_Br0=+R|3iApg8#CT)V!C)F zb4|vpO-vJCY+|~2CY5#3&eQBJ+|&6xrs>HG_**^|T^nPkaBIS|c>;6iyz4rrr!5e> z^O5BHeUqDF4ywPKx9ows>dQ_Mrla3)KCWJEX~z2FURr@1&)qrf&PL%OcjrF6a6gid zdCt=hYc|WUS)G1pnQqBbH0^Lgx+PEPKJLRYa~ht{{cCXOCcpCBzaN@5%ez_rPBgh$ z&l6Yj?Qli9y-&eCp7j>_ZJy_5KMd`Yx%`jaFW}5Q1_p+TTgeG&n^OK9I&kX1fh$Kv z4jwr0fOnzfV~HM#+{Q(Ba?U7tvQ1-QTlU|_fs;+6fUmGH$>P9)-~a7Df2zMPDKTTZ zagmmR!8!JmhMY#ZY(ZQ+XBZk~`MMY?Zk@eTK1KBCcKr{lUcIslbr(?Kd=WBVa*+Xx zV4wi2D%Ts{6Bwcqc>pWkYC`S5`=UskS@UA4QaGhUz7eU`oXV2)XCPO#Pbu0^v}D9`Gsc1geJ%_ER}baT?8 z3g117Vx4!B_FHJw3DtWkYo9o^scntsdb95{jy;R3-n{ehKZX2hwNI0aw$y~ysfC}E zEt+qmcV1(u*NRQ6R_$`VyYyXP?Ul!`Qn$M7U2YdRe^u|Y#ko0FGta;L_UMOUxB3MyT?E7CV8e|7lP zklV+$8BIQubNiCX*0WayZXb%v&)*RJ#&NUz6ye)v!-|jPm`9&cPg`!8*=i}xYjpd| zQ7i2~k#=kHjB?NRrnOt9#~II`x&F-LXPU*$GZjvC$ZQOL6ZF=%{_^=ABmdbK(|RIv zrB_V-WHi}q{j7&+Ew`4I-QKpWQ!?9amc47@#in)N&n}uPq0-is_(*f3%O3yr1yi?d z+MuHe8d6pGLenp`4X!0k+tsQRJmc7@e zXYIYUXxqxYuQvR$yx{n7fk%MN3BFaVTbry7UOiaqIQhZ32lE!x8)!&K@o*nwdEE5z zp!C5r31tTQ5dv#Czp?Lst+Z>0-pbQ2Htm|TZlV6=>92R~nwPhPz0Gt}RLa-WvnFg+ z%I@Wk6%4;~bY0WxhwBQi?@C)Y_4R{y1>bktnYIIleT?)*Y6J)!A6n;&@<_WtPF z;dn49;16A z`Mu>w?;mA<9RKL?$D2JTMNUpRHRbFMAHQWu%hHy`EpuE}xXg7~d0IkRL|VzSn`h>n z`E!PSX8)$kH;-=iPJNyderDagyL!Lhz3IC-dGqJZ{OR&111$snCeBH+R4qRBY{#5c zmS>Btp5B?ic~#8QqR`X1YYg@uy5*H0;``KY!foa66ZfQlN_%?tbhO#-xBDJ!v8sM| z$8wijtE<};k*`Ngep>YYHrnd6HZ1$9o7DHWS@ONRIh3Tnb2kM!?p)v&V7=n^`5oVv z70S!li192htT&q>ut)R^*E5#S&8-J-J%}iX5x=ThqAB&gyQDHU`1-Zdj63Tu^?sF* z`u^_Zj`by{mc|-BkEsm5d$sUuZ1VL(Tg$fZ_FK1F`hi@zaOR!mN0rP9FYYLr)2V&j z^s)Biw!+UlzS=*&r}<9kd!KxteDCk0%#R#DPWbWh$IFTu8_juQ=R3rYct5`S@mWRn z9`$?T_45D4=AT$%^gOjI)hk`^T*{=v^}o;Wu%9J4rP9V&P4fHq|HpT1Kbz8~0Yv-*eIAUGZnJi#xh6Pdfhhj=ags=Zd{2 z-TzrHb-g^Pzj<>1<9~DCEYe>T8u(aaS;{TL9TWC1l2h>w6)tVQD{_ zcX%x_sq^XJ#E zOGx{7@{jP(`X}&Jq&v=UTFAPXD^6#JQhkl%I;r>3O9|zYp(d7UuhQ*S@v>Uzi+c;p-^H zcd`}FS7`MH-M{4-Q~G3a${sD*oW+7`g-v_bbK* znC2$`$N1OD^oyr5Ol$A_IUjz#dilTKUzh&-niXss9Q^O|&YQWP&IT4AnzM+j^w^xO zhnD3AMxUCtT{L&y+Vt1KwnA_I|Fz$JXWbSP@i&IQ#cORQ>rK;}x^Bk0IqNiCcKPkP z_y5oLm#_YOeX_ag|LXbE*Zn!4zV+Yi|6Y23K0ohzsr5(n&$|D!t^WS^_caqnw$9v4{#&oV9u1K!pK&lGmOpr}ZSp#!uW!XRUp6!MeNz|gpB{KuCy8t3qGh^Q z&rSH0=@)eKbYO12`_;XySC1~QiCyEqwJtPBy1dK(Oy0)1S<2xjls*M*^ygj3w}AI6 z!`_wLFBIjM=_QzbWxT`s$D@{^l(C5CD`R-DdVyvsWB9DAuhd?#s1@ojunR6y-MD(4sjzqU^M-PE;bWvlrw$p1u9*2JExHkI>cDHUIFnz{7Z ziJn>dt5@)+=ziU~$0u&F*~#pyVK)PECpsTdRSM^uy0FTxMmOv9#4G+LBG*q&f9g`W z+d?%@`1{Q3F6AE^{`lGGx^;7Utq908^gR?^IdS0ihT{A29uW*oD zwfv6Wt`nw@EPrmlu_{mCc8K=Hz&aiO4s91@OV2y{;obi>?V90gTjKUj3NX;RDHJ-^N(8H$(i!7GQ1zWrF|D3u)>++^aJA&&J=1p9Fl<{hyOyJ%pp;>d^D9cZZ zeacX}SVk{?lKzSEs|Hu&^(J&b5!xB?Pt*Lw`c&het-Ji+O|5>C_jC52&}{*(p-aw% zw}wiFM#ZksTIKbLEi`spknYvoRoh>!+_h3})#_J^!+HksotgA?`Um5dGb@` z&#tPt-cbLOQ(rNK#_&yJzS{jt^_6__ipeV%6~C?ez4WhA?8&?h*(*2SO*6mUTh@Cw z<$B=1*xc}&dD~XMFYOPwKRbW-ZN^(;EkHE-MWx5@Gw`ETF*mTP@tUyA*<&u;^) zukK4*etT)zGTA))t%u*F{N7Z1ns3YIw?fvZ&uuvUM*SP_?i+erD!-NfUR8VDZ>E@cOEV$RnbV8E?*P`o-R$iR) zq2xL3;uqw{$=~u%)cFWi{-D@zuxz2&Aa92U;bNof!RsYjC=OwU5Xc)o!7Rv zER>US`?b+vX?v@iz1*!2zc#eiDfzrsKm7SiaH68El1+R+Pxp(!UoSr}*;?r=JKl2i z>x~U9a^lmjoNrnBW%I+<#K6BX5mEj8r(1LnOMhwEux6e_+>-hH`q%VZB7Ysd@N)X0 zi2X8YUzQj|`|}llnX+L{ovP0IcwX%n*AI17Wkq=ImkYag`H=S)=|s`LX%V6OMW4Oe zemLvb+zq?t$z8ipndob)yeH&5Pxi~mhpAO%5z*&4^{*EnwyKJ&Xq_h?w^F>N^y{Gw z^WsF}mWsE3{W|GG*5AB}-Z&|<3#SjYRS7IT{V*{x);MR?>h|8!ts5q;6Exdc{MNdx zQ8wxRmS$JgoBkow{vI_g+LNK6-jV&Zd(plcw>#SQ;{7LL9~D-5_yo2dIen^Q<*FqW zu~UVNL;7Z{Jk|M9OYHs%vq#!jopJ)NciXONzOgz_w0*_(zs|fu>Q@ppuViRmm5^MK ze&l{ui_Utn(=l6P;uhVT9(uL?lhsz=7!B+0O`jYK_w8{OnOfe-{p9YV8E-VYPFTBo zZ4(Z=r*vskvxWaXt)3kHTc;uy?VY3iZjyZ0v`@Ylz4qzmO?lrj`$7!I^owL${XWM#j>w#-PBU$ zJuT?{iA!4k(?X4(x@Jw=6LEH0>J^^Kol&~kt3y9=eOib{WK~P4%3c>f{Pn-b?Y3*be9zubn|?E;YUaINi!5{Z znM$9HeU@i@+Gp$Zn_1i1_Fjq0dwt{9wq0v8vuA#NrmcO(JZ-7v@p8pCYrlzA&)(bi z>(1(<{hOv&Md?nxdc}QP_glrjmF}+bH&tp^Y8>HBZeEljbGYr~FA%vAwmDR1;w!Z5=|M+V9>4%JT^_}VFKc_FdXS-zP^_eE$t0unQ%ebV~eA<>T z^Hj|%ggv$2n-(qp&bIU9;;FMU-o8~cum0^R{azvS^KRk9-`9Hhb@!QhJ zwF>f|AA3B>u)4?pDb&i2;ghkI9Y>Lp>_E=Bp3uvX6LyX!D-VRCtZjJU1C z)CI}@0jYn#DtA54&kwLkt9AJJx=uo5|1x)nkN54lUKLt>WBqC*`@1p9>G;0|_db7a ze&kT=blh=)*`-1Q3AxjX36*Esn;sU{@=V&j=<)%d51-p4<~ip#&2%}w{lJ-Jk8dZa zUH&L*P{Vim;3u2&%%?w>vPH~GHa__2&pg&&Nml3BKC8$+Z+Q6HNStT?vdRQYxo6F` zKF3)TEZM}GEFVAroAhhW<2ue8x+OK@XZ)=6SWj=<&cieRe|3VT+dcNfJD)ILh%EUd za3;7UhHn{%tUc4=nO~C)=ER3LJe2r-MBCZ!>yLkb)8(GuKW}?(tG4aD{MCDAtodfa zUjH!GYu^`(w(Avh%CA+~w7s_JTlrOP|1@5?^DBGh&d>F|XRzt!W5b(|KHjK*`tfJ( z*NQjWD{ZF5SKIu%Z7bI;n^5+9|L^nn>zOyH$nIy&e7S==C2{`sjwc`QGfz66xc+$I zU)dFk|IWMEJ@~9JaSl6w!=Ag(U6d^Q_OqWf{LSofj`6303Gua9y zWzT9s9sORW@ne#tTDb5j4OrZWyfw>Q~# z)z4)1{Hy&uuy4ZC#@Axk|FIlTbbVl@u3c$;QP|@SzxXGi{%4EUFeRzTuCB6KUflS4 z+L~vDZ$jA(x%Rp?J+Ji@@K-n|EOU5k!|O$R&OH9HlDBF7-KTPAOC#BjR9MA1YVfI? z4UZH*!d7C7RJ>;f{Nc`cn1EvvX>_@NvsS2>+k7BqUep5&!e!q0X=N&n$UG>L$ z50nPpW9d4+*R&w_fnCo^wG*>F-`#ndJXPbJ_-)5Y=C_+4?RzWc@hOcx;Lhs1T%LJ* zc|+2lJW`SWT)Kx@P<+7W|jEOct)FpES3jSoL|~vK7ZCeP?>E zUn#%hVaXewIgg+GT`woXA&}Plfp%=a>5@>^*L3v~u!JJAM17 z`|Edz|JvhorMN_f^N#t6Kn06s^S`+*dhcKLf7gm`&)g@UCAs(bc^8>4-WO%}*!RoM z-;w+CD*1N&JNa?Knp`!9P4{MSv}Nt8k*mm6h;K;Q`*D%GZF>#p{@@Qg{g~?9G}M`= z+gP%S?Ee<-khvytQt26!F9M$OhS#t2FVg#H`k?g7nj)zJ{S&op!E@U0vAlc!Bzl3x z^gX;J4B&uiyClbiSakW_$cO>BJk*2tjQ*AsQ8T*+Uw<69oXzTK1Oymp%(Y|glz z^J!ZD=g(pfzV`p&61je3t=#`PxeI>O?EAK3|4qJEzH62WyVlA(h@3y0zlXc#zJtj5 z%dv9T_uXAkaqiv6A5w2v11}xFRBo64{`2dvm-c;o|Gn~8!~40~Kja=QINyAqdHvO$ z^Zh>TeC}MNzu>^*k9I6gpARPX|B9+)smMM2*D5&1yPs)&@e}_AQ9u7ZPQP>AqiSya z9~rA>f&X>uSr6Kt$UpFX(xiDW%jX;S{jL`JBlZ77*zfoDjlY>Z{fjSs_g&s_{l+K% z2YVAg=|A{g^=Zp>;qMlce#<=l`})uA>ytMh$TqIz3(0<>qn5#^!5I_(^Pfji{}ZJz zKA!ilunSgUca&~x76Ig6AY{PwzItXeDloP)V$epB_DCFd8tUUEsnZNYS}Uz&2S zoepH@gx*;EG2}V(`dG_4p)1BK7ahnpD{cJF@XO#>wpr+%*L~HtJ=d96Epgu&F_r1v z=Bur8^XoG`uEnPAY24vI<&L&h_dPwwuimjdcglr?&SpY$N&(ZBwWd->Zk^jvm(_WYRtZZG}|i5y;~#8D?ZRpDi$7W4h?CsLEI%*>2PSIa)@UpQYo zQ2h0ol(i=}#-4o~x54T|E$=&J;ja_oCGJ0dP@36Pl^x2xLp*$X<(%JH)irsr>N=IdK}vg?cL)=d6?_iKT^_0QTn=Rcoc#ec{D!!OH7=it9#*Bv&M`!% zvKVXTJ8k`9rNnNyZ~uWx^@DpK_a1mH7I$9#+E0nRx4%8!J-z*7-d5cL{TXLwm;FoM z^1b$N!JW$~cdoDCJ5bxdOLPa@>f3t~U#JV+$-c+v*}GqO$GXpZ1E*d2w7W68=F=^! zUw^K0?%4M6Z}73wj_aZ)Z#5l%Z}-6J)a&*mwGqiGuY2~|os)Oy^(-s3eUa@i{@~AQ zIi_=`S80E+@+$q@^=r?CyU#bs$vtnM7nfMiTlMqD`?ph%+1@|W8gYJwdyS4A*B-OS zUp*IDT{AdowQQ>V@qhnr@qfts{4;gIf7xamyZ(c5=6C*keb~wOb=NOT+cW(KAJ_R7 zD_^tW{8#SpcqyFs`)ieb@+M3>=6e<0^!O6(>0>lc+Q0gW`Ra>u-}fck%;QhqTYgbl z?Zse|A_gAJ>#yn4}KDx2Z=i0>P+Pky5 zx5}>%tdyPEbC&7C(+y&&R_w2%mz{q6ljZW%Kc>pNxaNf#oc;Q+cEjtx|2&gc9uJjo zdO9PP@1@s^wKMNFJeN6Bk(dv6pLVfQwanZo2$_59MKRq?~URyOw)d?UceP`>aJtxhAFd~ zVm3?>Zpuo~T-Pj>p!uEM^kC3D9z9lXONAAz(~4XIq;-y_6j*|c<%{TgxIizW>*oTw zh*k0jLlZQgHUCP`6lV!qMQrtN~_op z9u^2XFJQwYc(twJk=cT(td)IiaUNf_U+@cF?MV<=qLIgZs*~~T{f<}eA0#AJIUh9O z(EQi@aKf^$4hBq@Z1%f3dA#16AR@6Uo$=~{hF7s3+4~b@TDBbHUa^d|ecXb0?RtsyA5nq;PAvvrUm!?sHtV^`u_@IpHglSxw9Y zkN@E7sE~WtGU3;a2htrCa&_E_Yweq31q$q)D;(*W)*NLoolq2pRvzn&g~zj7k;{h z^fTMp|C&4T;5Gr@=#l=?JsL3xr+rE-673}|2;aj_Enam2!d8TXQP0t4VW~=z_3w$$68niLuk zwQu63tzX0&Kd$o0R`z|Z@V9yYx|+G)e_lV&_cQy9#Ew4WKYsu6N#k2de*gac{qBV;aDx_xUll<;+hr9 zt8CoXS5KM!#ialEYu*RC>c4#ZkH6F9u&fWce5V z{_LlWxhvD1Pgv&lxtoTbZ=Fzl&!+#?>UsQ%U%RUs-M5D6w@mo_SgF5?VXuVKx#@fU zE!d~|WJdg}K>a1t9cO&IKHK)?dPC0hpDjBA`DIZ_AbCuR`U{U%V<%wC~>`>DQl`IK6-D{5}8YZm~m? z?E2SyF0Qm~ne*7Z!e+U-lgHoAdn}6A+t13K|E?<#+Etrtbf}<2U#Pg7nvYw(Z-_#8F(+XZIxey+KQicz?zEA5{*AKG})O ze>MCm+#*_Y?(fax&-DeuzU=%uqyK8W;+iMLFY@j3>f1MLIzRPzEzf_(hpKk!^FA2X z3LVn2`#$&6#=q( zT=jZk)Bh(OF1}A%Rm{&g=y}9+{qQe3;B%yAk=P@f&aaUjZ;zyQJXGmRSI!gOD!AHn zPf#5vclC7Tu*ns3yMOpxIk?CF**}{j>5sUMqzFy_EZE+uEm-aON7rGG>MNyVlPsb; zc6eQJ{-a{Jg~M?24z7(8j~q`r;=IT%Nuje@b;kG3)rQw6|NN)-to)JGnU^VX`bTa2 zOb*=fefHky%yk#%GZ$0l@g3UZqjBbFiXGqaKi(q8=6FAg^*yuMCHTzRl)BL4HC`si zWW1gQnx2{MqHG^tb6)%(``6q^T?JRe`L0{-yI+OQI%b*8wB%(}%Gw5zr%h|7CcLyt zTg&8KY?N&pu}d#9zG3OE$zN3?X8n)MJ`gmwh^vBs7k9&VXA9mv>UUcYR4d0wRmAVG z=CAN?&}P}=en*t;p8SJz?Dv%4buqkWE;!ooeeUi@2Y&OTG(pVOu+jz5pb za{sA0ZOV4<^y^s+_UT2wjo-iSN;`0VP7L=0+k@*=KWx@6XZ|qH?>g6yo6Xt0d+M*; z<@qz`@K(lq$**oP*>e}ZZTMcb>)V0zig$Dm{I-i_e~>QpuIxeW%y)bbe*ar1{9&F) zIsb>+;&S~D|2)d&KiHOB7p?fe=rvo7{_Rrsd#7JiG2FjiX50APXjj~U@0()tAMBm9 zj{k#gi8({X{<+c|T}7?cG8OaZR5SgsTUjks(LcAE>xbNGX}&$j&-F6wJN`Ahv~ zdFK0@9T^5n;-1_&-cMj*Ibt6Y29g6Jvf5_z?|FVkm%-8WurABJ;%8!v z|LX(pBt7_>p2x}2_rARG`=Xso6)fVWF}_bOe$Ti+{?K0jJ>QSkGW@CI{I2-np7?f| zAGZAOlppL>dzbv+d+83*1JxyW)DOIWT`-^N{l&uhjQfutuI1Yke|#-V-TwAy);;CN z*Rs{E@A%DBalik!5X+V z-c>)a-S>|D!Ev35+C*@e%JnBtoU8}!@uzF)*p&R%4I70*ZgJ{Ilox=Ky~t6&j-)7 z--&=E)jt@E)_FVmY?Qc|-Km+D)OEchNo(1U{*~KYOqM5Coi+SwCiqp)aIuxl#q&KY z-yI7%tz;K;Uhwk!o)=X|t_U9qnXU9{Zqlx4hF9ly#HHVv6Hwz4lAp9n+VE(h%X7i| zY=ZS~`8rliJ5uiGvQ_0Bhv3nCpPly0WTq{O5iD1nGGDpt?~J12Gv6m`Ekm8h|E(7>{K{*1-+b9?so-;cn&IvyWrkP#XJol{WjXrn_3(LpSLErg8K261 zULWfCU>i=6~9sZ;`bw`6&A$^2lI7nmb;eZCUsq%@kn#gK9x8= z!Tb^gDwN3gtPJy+%{#z*HB7TxHxZ|_L5i{lhLTDeC`=@j=z zae+XeV>aqP>P-Lpblslu-uv^O8w{CUtrf~kGVPAeR`8u{@GRSTzxtwxuIf=}aG@~^*wR~O7U-}%UDk(H=?YsaTDA4A#8l}lIl_t!U?d}a8U zKjBgK7waV&=Z_p$bls_H$EdllOkMHlV+TX2U>_F|b;GqkllH}*{rorIBiLVZeyhpT zIX+xxHkX(rWaOotV|K1}UM3(BRi4h(yzrly^HzK3k9jNRpAcboHk_!**Y-#yn2G18 z?=lsMu8lsL1|jUmCi9I-^xCRc@x(Us#6~+CPA*JvyEJi~W83`2fja3$2LkwKt>kEX z6}wDLqUx_?)bi9HwF^St8}S|p_&*_&r|nmx54XV-YoomfKYS0|ldiFj_v_i2jtLoW zjG7N#*mIJH(fPB!^Tv4(pSw(PH#*$#es;RXH{&m}c%JS!BVn-R+qoWA=VAk6KAy8L zdA@c??&51J3QOag5&qIb{)~1>jXclQrZembE80)ju(V~lmq`Vc%)5E?;H8?=daTnv zrIhhSNNs=9m7vkKd3E#BI_23#sb*&*ov&NZ{xv)2)peeyTi)~~WYnefvwQE}6~7rkS5t_?b;WpHKkl+_&5 zUIp&-O3-YdvYKbwv#gz~5?213dYfa~HA~TF%}ZxRChA7a`abm@gZI}hSsc@dama><&$QUd<@O>B$^d(NKDA}G2FsKH1*LdvyLI1)3 zITq)>GMziKf~WGrgbVMFMg2Im$Z77h)D3*RN=puJu&`NvJnG1Xs5G&{m@1d%$g)YY zr8_OoJuR#}y4$s6kX6OI=0yB>a_3Cxz5)0I<22=);G0Je~`$_|6uZe`2$O1 z`PN;qZDwB|Ew@hjFaMlqKAp<5(i22k16Wr%P3Ml5Jfo1m^KxLu5vwytHaZ^XQ$EAM z@FuUNXU4&fna*oCi>;>3);_?t6G{R|PeJl|%dEZ&8f+5TgJ zZo=o?ryrP#vBzhW9MRpC5xmGTg*)z1$J4TR`S&hWL>If;m3wO2cYP&V-)vAhA*E6D} zu1t0n!I>5!dPY`{#dI0`7nG+hh>9KPQ2SM-TYVZLPi5H$yo=*G#(GyF2WL zm2%nqwI{M-^cN+zc8GjER)6`~mvD1&QK_$H=?l~%BQgx`_ysyn++?u&Q2U|P=^}Bq zUH_LndgwmoWAcxFt*GaX*LqJhy;%{QVJyXua-;9xih&2#~9Fc^Fu@x4W|B!cC{#MjvN=!vFr%8Lo@Gfq0Q>y+2qIb!V_;#NztX|)#akxtZY z-fAsqbRfP_vp1sOqIceG*Qneomv+-xo@X`AGs_*Sv5@%id(Tt3?Uxmc7IN+oc>3_r z(%S`A?f;F|cS;v+<=PUj`)tqkX?cB8=NJl_<&Or)!y;ul*9%#R zCOn5Yn`7F}8_Z(dli|a&Iz2+bzj8^C#*xB>9vo}~X@tG&K3em1BcrI-yVFs<;ezj)BE~_Kq_OqF99ACAXxpCDh2R@6RZ|3j*5FYaTXO~f( zjQv`vdY^@@vp=j>(oN_TW0?2jr}@mqXDlZK*p*~F`8a7~Z`0YP$e33t77e0nyvt@B z%{buOKJ)0|%#VWV9eOrL8w$;t&Df4F)co-&(&Uxcohxq^%P&4Ue_5+j`{9Sh6^EyJ zOp$0(Y!4Q1jAx8&@n9%D7jkHg@65(|4h`xvJXfz?v~cT+=Ut)iU(4HUs0!}?_)6d0 zyl>u22^$HG9Y;hs*G2y2zrFtVla%<&hhA%2fBg9EOg8)au!l*@n-&ZIU}dtu&@}TB z)6MtVEsKmcEbe0T)Aisgt9VkV&hY%Q?$(8F4-&a9rtvsbZ8A=fc&M9|tgS1ez2xD8 z%DopwpKmFPUZkih{cL5%G=qPd7en5ex9yc(T&sOZDUw6|lC*8_JgK`@vDLLnH)^Zv z=G8kkzE!EyJAM9+qNshmzDSFvYxk@4CxzSx#8o>Kl5D-NE#O$jz*wxD#Z=CnSgBT{ zdTo=1z48*)VhxuThNrCo8a@?`8U}txxqUY*ZD3VW3$6LM^#FJ0nfvTfQNP${MYGA3 zTh7s&e)*wL$e)jE=ha5PfB)LsCr`TZAC zji-wgNQv>!?%}caxN@K&ZgsNhjELxriSKmv)NXCR5tOr$kw=y7!huAk!!Mm2g`eN;iuN<{i+rEm3mTEpQ8?XZ&-4!=`nYI+PytmpC8DU zYy2*Wxw$;}2mchddj9%C241nlQS2?EX=@lACa`6Gm3qr_acji#XIb3xo9}J7_Uy)vRbM)nUg%rHmT`Rb**Nzrv%i$`>hqTi zJxJKW#x-5?-#)2-d5kBLGD0La1*{ib5qP@bmSw@AFA~xcJSNL81~5*LV^lt&aQNBB zh_&-(xNoWX6Sn=TDDRB33z;79aUM{a?=wTyIbSoOY*S;s;(@g>KcC2cX9!3>dx(oE z;e)a8GS@R^(l3dV|xI%k$W*73Ck=w}q_DcpYtNyVvTP6x7Y6{UxJ+w*N7eC=s{b3+cbwfPM`Ym`UT@vAB|7_ z2wdjZ)Vb6kRPgoTc1yE&=_WCv+|PC{6JXF}__|2(P~$`t>VII!qi zfDgBq8q2nA&O+NCJX4iAp|>RE=q`@3WeRh%R>;5oU>aF-&!KkDx`h988S=~dq?E4S zTCvRT(uJ^?8=*p5BF)6>KPofq=Tgm@As?7veeBArWB%HY%OAbh`29n+jAf7DggS+O zQ=Vr50sQv4Y;6b2E*zhg_(-+U#*xAJ*)oQt8xaOiId5#%xp~8Yi!rgy=}4?o%khSr zZ%*eHGz-@md^ZV?_`7Y|wtN3vt!pdRXdd(H*`z$NaPr3OyY!dc`*fFotto$h;O&>0 zH&&ZFK6CA?f4*U+;|125bwUnd_Vll`2H*V zj16n%yyL$5ayR!c=lNDFzZYlfcuaE%zs+U5v}*nGMcn&a@@;%_><{_RZkYc?L2y+I z7w^=|GHOjxaY_ZYAMA}Hc%CsS`&?<=;#M8z_49T7EXKUm;SiuzJOwT&3Ur)-#%K7M|ixnInFj)4#y@OR>`Sbt*Oe zQ7g}C{ol(lLvl+mTl3Dg(w-Gc%fCcioG8T7+R7oii|c5{bXGaz#w$jvw(w4k5)%}N z^t1JP5V`Zy#=R`_`h?YYxy~rKTqP4*F~{la*01^+MP-vW)d^j$aKEI_))im*C(cvt z$$`Z-^-(j+)&EUcH2=zZ`v!Zbhw8sx{x*2WaNkVRq@k?IS6XdhXd2f9Mk!D2=$j$u zm7aXDu8rfjN#JFux0rU(-H7cB=du?v4)a4D`@1406fC%ABcx>%w(H))IbZ9f{oDwh{(ibIszvQV1>cN*Le$mnjS?d9dWb zC!Wj{g9A>bR<%+qQiANII4@7VC1X?3@U&1z-hHK0&sNPQ}KXwQ3Bg8=|wi5mU)z$y!)Oi_4?q=9rKU4muuIQu-7@8)K{H&>M_1-y5r(Lb>0N& zBu$Org}2l_%_KL(^Vu78;Y{t=_?3@k-E|~GqHP30AnO%xnVfTi) z*Ppp$hiu~cZ**;WOSW3Q_Q{PqEmb3ouPJaDR_ODat&@E7OXHPrm5a2vvi%M%K7k#6 z8$O#Jp42u|S&D7SLN{aQP@avY>6S?k-2zoaxLPW19-11G;Iw>Op{j7WnaanRXZP;a zo-MU|7TcNL1@hLb+5aAv_V0_iZEbqXe$uW*^DU>#W#q3};dySWsp;0=f0?JN=)aV? zyF!273!k3rmuy$G$e$0gjnEDe^knd!w@|2ajgjw!-b;%%GTQqd+0#`2qOe)u@jmJ7xo-u6bJ$&Ha#UDzX9SMcf2mh3H7+uQIUC7nxmUo76!wSYws~eWF zOzJ^r#Kr8%JnVwSlhhR^&QlfP zd!5oAWw}sTHq&kZ9?%rNz{e0Hz z*T0(Xt$ViZ*vIGF&e^fQUix~`x5H^C>weh9>MuO06tSLrX^UIYkBBDAH;1H@xF7@X>(h=y|PGU$_bIscargyzR$OY&pX_oR`-AE z+465&RNI<_zn1zM%TC@s<9XWldD6G9-+0KYwe6aJf-c(;?z*XKRh7G>WUidLB(Q5y z*e*#k(fZ&1`ui;U`;8v|x0(Gj^4h*%oKw?{C)w^WW$nLnfBc9@Z0OL zf?+eqd4Z&J`~1Y@Kdcmu)K!dIlA&E|XqbPb*R#o_;^R^A?Q0}6S8c44UHc5|*xGS1jdf18pF$%Nk8TZPoUY@6NBi!q=&8;%KN8e4yu=sF=a@^RdAptBD?Oy(E$*N$T>tM;OGf z(L8B0nO7of;mb3BY-8uHU3)U3e#i2<^!E?GP5Zjqi~q6R=AFBZug1QUUa>A~*2`Nv zPOd%wC+y&T*$?*wq{P^|8kTf#oL8F2cS8EfR|8JPjIUM#_Y%G;`Eko=ZM?;^vGC=o zw2vAO&9u0hRgaYLeEz0WB_?dIA%0-K?ZG=2bthKUPh-9ny>4Gs`NQ~K_JwOb-bc!1 z%w0FvrY+^>;hw<1Vgh>(bh^k)nC#a!=i!AK)v5LFOZ=MtoqqiM{=E71zdt0-Ib(Bv z&e=a~x5dM}{^=EWosv|~5)xvQ&0y?vRO5BXW^$P^LsG~nY}3LcDl(cC`FffP$BZg@ z|B4@AesDrwwv%`ME1N&xYQn|$Z2P=Ae}C`)Nf#$?f4sjZp7Vc?zt+bV!&Az;RpdBV z9Fq?`)_?Nx^GdG$HvbqN3QlaBQEU+B_Gq;Z>289!v;?o>Ya2hc@no;~Y|9pBg_x63h{P`S0p^dCfei!W$=9oO&J!_pNOa1jg z+lRt74cROmb5mVAm+W{H;@-l1%I@x@%7TCQ`Q+{T=bx}?ZBLxs5&KiETDqp6-M7w{GxTPloZE|r!J zeSVRp+BxvQT;g3hFPFoiw(p#OM1MX!`TEu~K6jT1gruGRb@qMrey8OxTwiUCY!#}S zrz92oOz7B)4)q7WgC)E7Em_RV`^yIa+^&sII^ zEBD;hKPsp8;>Y=fJ@YSJsykVB!|V8e=3~D#bl*;|`DAJJPp9YhO8HIkpPYrd|4#U9 z-|Ek{0?gH0{QUiYw#Ujb9#-qWEHqm^--ZiR1Q#b?TGxtBy{u=Q6nfddxQ|xpywkDV)|7elP^WvM_EWEO;vpi+$ zo<(n-xAbs75a-_1AnwxVwdUE;xCuXxK3em>STZr;=a1;Nj5@5toaZL~k+#qR!FpMI-G*R?$=diZDQ z3-b?h%9}Wj%6LEe&M{}sMI)XgQ+$`hzU^0yoRj#T z-+r!t^zsz@cN2a*X8T!PD1KM@KxY{9{nLU+8dPq(I4!(#tn{SWx-YYq@Hk(O`dIq< znrvLR^Z66+|2#_Fq4YVq<;jeHd|JvpD`E;>y8K)CDNyLLSohABh-{a*2*dMHomX~< z8-M@*@#}8K7d6VoEbkecCVe@|ck1_XRoh2GsoXb0tTookPtRH9KBfFV*RK66H!q|G zuA0TeFn6Ma+?frt|MgD(rVqb&tq)Flyz^XX;Uk_+Y<{hmiF^;}vPi8_d6NW|&p+IE`l;q{K#oK|UWRF3e|Q^ z|EK*FGHQ5JY4urEsb8=FgjF#SR~2c9&TDGvL+6@3EgfWh`t(PfdAXUfmQtJ;mWvy3G%92IE@!yYGLi z?$>lHRP37{cI^F^I?fQkw&|wuP%gNDm|JEJe z>k}|B^VP@On+<(`%)5N*$J`&UyUwne_n)E8?7h|dMV59)?)6;wnRi9uidC0H+vOxB z&J&5eCp(2B8&;*Qk~ROn#bg7`lhXDy0Jr~)Te`A%k&0!Uhxq6zC*JxvmI@Y%QVdfp^Ut)5S=|o=g6*F zb!%JM!`~rg^XnZBrAvO?@J1zHoQEgG!S7(3smx^4Qio2T?#ik~^+}wrXH~8X>}XL6 zl079Ds1@|$idSLaTb6|_$}S;wg|WMmL?f@&pOjcysLDCtnx&ijPt2qI=nWMuN{=r) zKek-(QS;G@O9wvBown9sf6hUThx1*7FF6VFOjYLJadb~8mmrgzYRj_*$AIqm`z13T zO`hPs_3Z16r4^~?82SG9)%#EU<*Vw!x?}43^^4vxY8|)NI#qb6-ldP3zhlc~hs3Rm zn431TWE^ARikp_;H_Jj}@%%}fJ@l3P!-FO*dd$M#vM#M?*@5K=PH)bdvo`p1x0(o~ z8%9^I4m-2r6w`Tqrb;{REYr`aqJI@c`{lwbzK9417A590-{_jCZ7#2*p4zN-XQ$Vx zH(@g(Lw`8f-+>8^Mg=S)}KmXLK6%`HJr(>R@ zGmlYaGNs_|fB&uOu8(vbDr?>ic-JicFul2Qkm(P!gomRPT`Rc8^cdy;7KKpgC^wjeClb?LL9|{>B z6c2f=-(mMY!tt5$wP_EWX5UT|dV00_*%A}ey?AwQEhid|8CY-%fiHa zvC9oUYR#zNR9h6h@8^G^oK?+_xet7M{>HM%?n21(ldY!(w(KeUShG_|^`cs0(M!(F zYR_9Dng465pHb;|H(o04x+qNB{mA3O?bh>p%&%SDp?z0W^pRxo&DL`>^cmFuIo?x# zUSsgwwknSAm(HI@ktMQO%B33Jev7w0%G@&T>6TTOGny-;at~GQEj!hb88b7%sYmtJ|+`H#22>#k5uQ;`cJKTE!HZitUSECdlp4sdm|`lP3~a7rdleO8eLCM^U1g z=k9XtzkhJT9mif1z3Z!v1PXg`zxL$hw>_nKVMfG;Gzr<$XG9a59nC{IN=%&lK4ng* z3$u<2efn|24MC?+-_Vo4qWtd!OLCdf{0@quyqS|NvxuUvB& zbQ!%jE?Lw$VM3vy@z1|XN`I#Q>oSOcr2TQ4RfvYhiDoAK%`#W+AN!LRbtUL*{yF}& z{yO=bA@whtwj2!JsejlrHBqj%Sp4JKDIde9e0==ldzYQ<>8u7fC6%sR#cNy^wo!`F6Xb@|2-Vk7BH_my0uQGPT6{fkkmo5<59bA z74e@=I9tU1?f1!RSKS_&go*oF%8GA)v7aT*^?2hTqNGvCv@T9wr?{Ir|WN7mF3c{ z>sIrrX~oLz)7i449fX^`_^vJOdN|!bmS?U;(U;v_GPU-bLnkffeWQ9N{2*iRLj7JF zImYsH9P9MBmvO2sjQy!EC3RC(zWU@%P3xt~_ZE0qC5gJN^N(l@nJl1b9r=xMhPUmJ z^4f-9-DT^=74y$X^Rjkcm+53%+qUMuN6+G=)e{mn-AKQv+FmUyn7+R0+0KP0PR(NN z{Jzg>Yu&-~d#tida(^voy5_b$`(cP(joq>v7UqWQ?nwEhp7UdUt}fAhs%*_-QBS`g zTfzmNY${y4;^x;a0q*M4b_%?XXW73cWc~9Uml84;+*w=xN>?8I zHH9sTLQ=ajyrY_~(Vw`souA)=UzA z9qp*5XXPIJs_=kzK&0^Y+}o3E!%2(byn&LC96Ygq;#F<^7Vz7YZuK+dFIcoFxxZ8VtQKnZ@*~w;u19tmbe;)WS?;KH`s0Cx|1REE`|e-nwo5C_ zZ~e>ot&5hI-R63BXBPYVd%rK-+PeDAQ}%qzn&iK$3OtVdXFO1E{GpLwW3~T_!X_u) z=A8$O)S}{fEDkigHCJ$)&=9?p^?2cyEApS+y=#}=JGCKf-JKJ`+AbG-vRX2D*)^q- zZn-xK$NanSbmPCk155Us)VMy)zqW1OhFiz3Rh+(`UuG0;U&H&M`B~NXv!eX(S$&Gk zEArmi6nuFY_DBBBq4@kgxrh5c^~|6ARHCtUj^W>qQyUNeINxCOH$C!CMdUge>vbnK z20yWJnaJtfFtI44cUI@}XIjh^+}s|9hHG8fUV9eSI=;<1@YOUZ{pf}pkt9U zY^U1P72m_ES1T#5oAbHlkfHF#^$gl)Hl2I_$&dS=X2%|j(6!HOyv*ZO9)v1!+B=41 zuiKOxacj-s%^-MNjU#UC*p}|Hz-d?=6%1{d{X*JrZ=PH8%4tzS8t!auSQBLb%9w)`z-4b6G7`|`dWSap~E09QJ{+{AMiCnvpQ zTqV3}YY@BctR8LAiq7;aYQj!x-6vy$Sc-YmN;9X=71zF%aq&y@@^_W@fBY%`#r|GS zBH`S-J3GtuB@WK)-^RO7fAJO0;Q7B)HQRo#&G~E4Yr03}sMNdASLf~cUTeG7P4eUx z+tPOMuvO3k&iZE^I?2noM07nlY<2pS!@ggqJvgH@H?g026_j7SPs=2VEqD3qbI&?$ z@0+_^-~U=`Q(ft*862IHnkP)jI_vQ3u$I8`#GRI@r5fFKQQ{f;TO!W}`6j&EB=oH% zWLJ*ggLc13N6+wolhFc}Eg$-8QaqzvF662UU;Om>KwQD@yL+r9IHQyn zGHet#Nt$(M(LH$+c?}g)22TTS6~h&&r%#mDGMgWm{$ib~rPIv%tTobm-ZRf%>#_d+ z9p!KTU#y8O_$tLcFX!0u$uqCtoA4qjXi@hL0plcv$3*ut!O+w0ggTgBDamu+o# zci-Q>R-0}9j|=%T4Vw&`407%_?Vk63Hp?8t?0?QqQqJd>t7q1(?*GA`b|&+{n9dEwf8M4rM;+uhHJ>?OR1RdCymr=s zE!RW#n!nO4{yD4KTcjhcT$=yY?_b7COvGm%)YD|V8KC$*P(yXmY0vYQuGWgE2$xQi zTN=I~Vu#k6FM$*ML_1SAE-7feA(xbU=uF?OcON|VtUG)2UfIp3pcw^UV*w!`c7n@#5IXh*2 zo%+YAGwK!l=1)B)c{rQ>=w7c!TVHUmx)ZtT`Q?aHbGNER*jeV!Q;iZ_x$k+;r@!u= zYh{j#dKX^x`ehuF$QvGeYJ-$|ul&ki#vM;(idX%LJQ>Ut?y7fZz9RoEDKX_4nmd1O znxhnTdF|`sixyLwU)-(sF)Yn}yQT20(v)XPv5o%)S^p*fC>7LKnD3Pl^RIkT&91oC z^_Ndstlhcram~3u>>qT6-tRg2rnyjVuFzEO9ZqYOT{$^1SwBcT*rPb`PUW#ssguh^ zbT+S9mB+?-RLk>rWm>_VCAWSH2WwY|Z24riFKE?Gn9}u*iBo~m@P3i^ zdFJBV*6U(6ZZdn-ZMw}b*Ut9F{G2)a^URC&gkJpiIr!$+Jl(IUlUaRz-{#)=k#4J- zE2;kPs%SN591}zRta;hGK^IGONspWIb%DzvTouvVf(54D4$>6WUE;x3Qjzli z-{I?V-0|^8cIlyZ0QcJ}Gt5;=_o!O$aIJ0ZfQJ(%O5ogP~``&c(O;vPtUt&%@*UDH(Z ztx3Iw#t$wZ7hC?|qM1Pxy;B{0^+NI*SQM8lGcJ49`Sa@1)T+ZF6=d0C)r!3*#1{L`!}VezOMPfIW~KimG6VSGFYONf6htxsI+lX)S1wU zYwQk032u;l`88$p0cF;0bNoauE(^JKk8S$XH?ivZe=a5%6@9HpkB`6qLF><%(D2yJ z?Elwpt9;ZyvpxFv?%Vek{`kNwZ`siQ;-wt_7IB>zcOKI(+LlHFN(pGc0X4E&u%Kbd;6X?5x%9%6EBpv(GFx z%?@6@oy9wPRo3La%F(mTw&&k@w4Ft1Uc{NlvVGx7o&HK9>%)>7i@t<3K6xHo@A>H4 z8bRh~ohu&gT+`*RC1bc~hR%$l<|Q{CPZ7)$E%u$MxbgbrfK$)DlrVOtKV56H_QvL? z%Q`0299p=oR@nU9`SKD@+4ldN|F1e1UH(WuWmX#-d;5p&u6I55&wdfNW_ro{`p#Or zgg?w5{H#AMl2Tl!99!^UF53qAtx0kV4=TKGI<9KoyFkuV&2;Lcpdzh#OHvKxU#P6M zx^uJg$NF~b{lCIDS^SxPX8qBpmPZ~fKQlXJ;;CPL8n3Mny$F46x41`sYEl1@kDz6< zJ}a~S_!iE&b!WZq%9Y~J@2s_{W`DeJqny>cE1Rx(gx)XG?QXoPy;a9*W1E%qL#6hQ zrdOwKEYNrm9J*EF{?b)Pca`XW^#0iu^DZp6;9u7C*45MA?Pdz*$!uJ;XT`iZpC;+# z`JJ*iDq=He%ED#1xn5fOouo;uz_PwDXlp7_DN#!Yhn?8;zMy?TEAzSBm2RrTL?zIpzt^htHx z-g)9vzNXlpkG=j;b^iP$8Lf(atJnPgd!{ApkD+VW-6ImyuJm>mmua1!x1hGZbDcr( z9JUL`)P0vo_*f|^ef12{ZtS+woqr^4_q=JIXZ^&_Pb!|utZ^XvZH-S3i(+PE>FvuM zvs`8@+<5WLOaI)O>szOo98g|8_eT7xIlo+Pt=Sc=7anXit;pr%uh%VE?GqJqyk!{X zgo(`0_|+|XlkthUwNlzG{yU0U)fX(w*52uxBJnFh$opCSvu_Lc^~vh1N?+?+8#Ucy z&z8l>M^9`#`RHSCw4Qy8dAaAKXK$^`-{0K%_SrG-XOG<1-KojyjdI_&;K47Ix=_=) z7|G?oxnfjL$$#uw(pT`xbQ9S=jY?e)Xs=+HWZVniW14vsh|>wB-KgoqneC{?6O2 z@@MkL{>z_d87{ogW7@+ic3!b}4{Ml^yYF+RM`Cj(Jzg?LFL~$PK1CU&gh>eWgQ#Rq2EnyeRq7u|P9X@O=AO%|9=W z9s8Gkt@r$S?&u)iP;Dve1Nt{Em~C2n|NURH;%(cEKVSV@`t|F~hw6MH$Mj=vH= z9vW|Ch~~*ZuhA@|=YeW-9Q1Nb_AOHSbk~@qZzPy%&uy zd1jn^Tl~wbPfl>*|91|%uUcglew;afvhdtDQSpJ-s$}Me_P!4}=KtV*pj_hl`_1ue z5==*wzcto;O1d;}(h(;vho+N^jz^7CReD3-l{Lk$F}#&BJ>-w)se0*3yQN;v9uIDL zOS}IH_pAHdzHD{g8tZG}le|hzO!|5_j6a{*xy#h|Zg$t#WaV%>ft_crT1ITnUAJM+T2GYi_8dYMUG$tFiZwC_kH%j1%;BC(gN z1vf<{7=0COtm!pLIJ&u|$uZMi_?(N@!pk51+#<@~e0cl#;;F|E=eOst{_}&~ea6ks zGqR~ZWw&)(30I{ zlT>y+FgH5?aNZ&x=69#}w9HQnORKTgJGwqkIG6F)-6{91RqCpoOzXm=(s|a$uANu! zHnU!2{~{^yq6z-a$ImNwl~w*>tm);r{F9@u`PXAvC+$OXj`7@34X=37sCM$GxR;I} zm${!-j|-E4*rhKW^BNyE#KtzRXxf>3de+q5t6}w-)z3ESypf-BnqO6B#fNOQY|R5Y z$0yyhI=t%MTCd83bKWlMB#+FGUEW*XUZ(3ZdDj#lVcwfH8)|5Zx+n0+g z>vxnM@4NYY`TW~v-+Ny^cbRqFqpY2`^1^}(=}q5ndQ14FADeL{&cNfip;bZT$&)?P z4i^VaE-g*mc0Be~!}Hv*&8jJET1$@JJlXN$m&IgGLb!UFInSPoV51EKOekjYp=1Z_Rij5ddYH0)6V?(_}GlMTF=&=m~nDP()xt0 zD-z?23tS7Izbc(_KVz~y+ZI9fQ#I0mGMe{aw%d3`deIac-_>VR7j9f(JWsSGgW*LR zyV1X^x6bTe7ume{N6xd!(c2zuoo(K2!~FhW|Kaba{&Ft+{8im!!atV#wM#WVcREjx zWt)8T`2iN==AQ3ddCuF+s;#1D=LTnOep|M3iUsGjw}0nvf3x>}W^B^Ha~v zym{o+w)v+^Mf90%rzy$p-IlZN+%?smR_FHYw2I!m)9Ui+XRmr}-nF$0i`QA?pYoe$ zGJmbttn*)rGVLC0W&3M#{sj!-LHNTkh68jYQaw#jwRX3GCl3flQfndQv>L;djwtEb;sc6sNv%p2#_ zSFY@S%~$)cFV;Hm_p9*p53kn$QC{fy@6YTXvRcB2RrC*VHXUOWy4YqM;aXu6%s0(9K(pyJNX8HGeZY@;_x~jKd^RE;ZoyR+IdEC1<_v~a>F4@$y zZe}jaT^qmB&%8e#ulm?wRM+s$`stF7`WJ3XWd(Fy;SOs^>S{c;=CD=n%Dcymto&*( z%g@NQGPv!qyqkSi(&hvut?iebSS=6k+BWTRR`6Ee&R?s%Cd{ep?~ePOex`cv!l#b{ zf;T)_b@;h{i_Ww1Zaw=mH}qTV1pW7L`R{2_PkJ2le}A|B+j{o+W2)gA`?&WN>4)x7 z*p(9VM|*GbM&X)X%4KJlIzLSYZIMvOir!ZvAR3vzzx$2SMT4xdvBJP*_F`HRqGRU zcCFBs(C4eR4-aLx%+VF^cl(wSSRJXXDe850gKAl^=d=0ul>O{o-si_KUJ@?Y_2l0% zy*1_~Ohvypo{SJ)pR!f$u7MM4_p0`i6B(BzpKELs?V4!4_nrYOSJrC}L9>}p9#qH6 z@4T@wKlT2L3l9AkE?&EHC185-*5r@XJ8pe^WbpfHs{Z2J6N=wH-mc&A^c;6Q%g@%Q zAJ?34-mk>}d}+lF3%TH9_72C6)+T1%WY6%e5xIJBAIpoq6J*Y$>|_uqVZD}h#G*5PPTRi9NYwDGbmR1xwLWL9wRJ^~CvDsnp?gsylrQS*guU^f zlw1#GUcEc{{@w)!6^^CSPrvK?V0$O!aX}B7p5)Txq7eZ%oVFU!&@ppzB=2n*uihZ39dN9rZ4j} zzNkh%xx~jgbACL_+D-N$-O&^F&3vujmM2>IoAH+ZLgufF*K<5{{a*HJXWE3Vng{B| zH8y2*u)8ihv{&=HkbmT4#%;?&tkyUzJ$%QBtFUL@!!Nt1*W0|GoO$r}&CY=I`t9qkbO$zE64ETjMIsZ%yB8|K<35J@*rJYr>wq&-}xAbw{M+ ze);`Azl}N`|6XeRJnc%ao!$+h1q#v$m!ljV*=pkgCd}EA$oVwO*V8tOOTv=LereEz zRxMV~J=RxCmwaewOp!kM%k;f*=E3`y4i)O&)m;#H(k?XA&1uzX&+dCqi!ODiO#S^i zKIYd0*7D^wTAy#LhR>{fyXa3>5$k{XiJuHs-bvq7Wpdr`p6mCeT&fpsn{>H!L>L9b zn3c{XZf)S0T)x!r=F~M$7Nu>Bs*x-{65ji(FGTicziQIy8Oqyqu3o)*@|By?ug6ag zgc{#c{40)qJ@v!) zO1NOMdg%uBGLbVoleexhc`v)VyM6kdjk`?G%dWocb$b5V%6AdGR!o837R&Y}hl+|R zm#;BfI?3xn&%-sT6Wg9CeUEs1rteA4dzZ;|*FX3AxzE+Vcq^hlc|pQv!&m)B>?<-J zEo;1Y?9AQOOn>BU=B<2rvovXssnh$X!VmZQwr%H#;h8V4a5W89ZD7e? z8T4*T=&tizr#<(|U3FKHnzr|Sms3uug@BSlb<75~*{W+!YtB*0J={^~!?jPh=yI|3 ziS$1_jb(cxw|lqTHx3JCVED|t^jwtup{LQumeK0O{+Ay$exKj7@Xi19 z58@Lgwm;DD7uqK+9QNtKd?Dr4Y=18ASjzGz*!H7fTk3g}>h?8HroIY|TY17%RHfx$ zyXS-8%{z?W7yWT6b`YKS(=u+MO0-P5xL%rA!ouU4`$e>7iWh5U8%z(aIba{`U2@cl z_1|)jHO?0~^H-D{vgcUG;xV6Xg56q$+73U3OYXU8lZ1-aB!_LrKfFEo-`()uC{)=}}$J&YO{Vvo$cbnEGa$h*@X{W`Sn z;NIKJs%7shL=Kc%cfIafzvtMSbzR4Iue#o@9q!GzMbUTl%6mKFB)p5;Z#+8G$#FaA zg3PRXN$H&F?ne9H-1{dv{prF-f}(S$YLt8v{qug)orBMp{!rLidmtsn^oDnTsfU<+ z(#e_P0UXCKT#@vQ$_o8@?demFi2{m0Zpl62J6aheD6#0~_LC`LStcH)O)g=t-Xv|a zx~FFBcTTPR(%ZQKKU%q4r@lQ>o$@S^(`IVhLNwl$n!-{<-C`(y2r-GM#pBaTDeV4gk>Lh<2!wpZQL)J z`f?0|SRo$T`P$G1AqiN1F&e(k8`zOtP^WN`0b3Q*y{&vmft$Vlj>SmvQ zzO4NE_WZp`{~e!gy5;tk-{^Kws#;slsoUSC+V*W)*!b&Jo7OI6UeS5I6CXZ&%zmi+ zOYc7;q28;-mnY6py8XcPh}e#(p2tRqZx(8OKKk*zLGTo@@Fu<|Gq+EWoT_a#A*S7t zdmnEI>m?!P@^c2$+W)^VU2wE%!qPiVr@YUuI5KN7v$6~4vNMr?)mQD;kDYi!=Lmbu zFWdH*!=bmXE&J7{mEAo3<9r*QS^6RwNpZTT_8f9I{`yik`Z~|QU3c^!wH-QD$6m0Z z|C!vqPI=Z$m)G2{pWZn<^?79%zg7FKrTotxoa8ln!#-)D^R0_f45CXT4!2ggt!Avr zL5X+t%-jzqx+E$en zMu%SN^>1aXR+hfj|MP9;$&>wYbw}OR)#dlp{QjM{r|9_C_q&Y* z`q}?X6=i⩔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 U|Bv{{GaLS=zr5yR%fi3_03@G~A^-pY diff --git a/FiraSans-Regular.woff b/FiraSans-Regular.woff deleted file mode 100644 index d8e0363f4e1a000568d782653291e14c66ee3485..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 183268 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

=Eu2DOQ_0KoZ}L$@^9zImV$%EEt+|o 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

nWLwX^ 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

uw_-ccleOTvRKe~q;A@dVCKH_r8Y@YUT; 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�V}voaFqxt%Zg{VM#@wHx_$8V#Cr+my$Gh|2HpY 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

!^663JK4d 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

>-kQ74AgZ0ejFujFSLpB3A)#rNjv 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

-7(&`knvx@xQTc^{&1Hdl#=< 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

`%Zt(*MsT=U0tt;ZWU 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 {D`5z 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 c0}lfqR1U%yV~}8A%t_GcYg!0AlFkB>(^b diff --git a/NanumBarunGothic.ttf.woff2 b/NanumBarunGothic.ttf.woff2 deleted file mode 100644 index 1866ad4bcea609c1008f722bb47b8207534e9c7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 399468 zcmXT-cQayOWME)mlgMEZWME*BeY}Q&O@aq3#()W=#H0meq}UP|d^m(Sn~DVmxZb^R zd34*6(Tqujxn(5}cgsov1{MX@W*c?|9>3Xz$0b+mr0%euJmsJSYh78r&4E)UtFo4R zc-9?V_&Vyv@noSu-kH@5HW!U9W@Tsd=+_E_=rUx#p2Pa+nAyjq>qmM#p5MrN;4(?= z&y>xd|HHxdNq;!%H=7I3xOw+v-aZEpmMKh0e?!(@^IyAl?ccjw%LP==?S7!^{!Vc6 zV%Afq7K$bHUYm45OKn1?T-w}o7bibtP&$&n!7xr|w&>ggmLHeI$j*`!BetyaD|He)7BVqWX%lQA#ZTVz%)biM7&lYQTUbMx-4Q+Il9=8I^peEpu= zwA16mIoBUzOXY8!+IHr!vRBmE)$bm!TR+{qahspw=G^pJX&K=;#cFoD?r8^on%x>H z^Qq|ZnnP*sVLuIy{CKjgfXV)>ZB*uMH39y{E2|6ymAxhfyIsoR^xWxiVppDam0a7d zZ7ScL*q>Z}&>1dU^5_EBx2DKdmzM7oZC&xua@Lifn!1l4K4&$Q_r3Hk!;H7*%c&N- z@<11xsM4lOcV{lY+`cKQHIBO|mVFM-iY^&;i+vsQCLTT}=(v8;6_(gZe_e0Pv=P5v z+rF36D_~!jKYVd>#kquG%&sxBlvXRyGi}qoQ#Ykj@(R)|E77cO;blm_f}p~irvda zY)7ws^>dznq;-O~lJ2S^udX|bV;()w=8LLPjxx*WlC5dqwN-4hh>Mz>Axp)IGcsR) zZk=X#@Z{1jk8Grhsw@-S%$C?CwnlPHJ9GB(TKBJ<+uwclcsujgd;5r!HI>Kep8k3) z?x*Nt8LFi$`fZ64pZ|}tUz^q1{(ih>xc%L9+sO-7lzkCeR}y*t=Hs@&J_3C3;)vhhJT*L-W?CuZChip@8q--s(TkspOmO|!+27yV$LKVM}yR?9kc(M z?rhGFG+ZZt*Luze{m4gYKK38}&h4AK(d^uzvd8=Gaes4Rn>6DupXlN)+sEz;)}&P3 z`nN>7YLaeBd{0h${N?=bx=jCK47yeyIrGElci&_kVdg14yT7h>Wnof_e3-)JxWez9 zUy|DOV~4yhc;=+p7f4N=EEW^=GULusdF8ko7A^Tp_t$^h^}RTA>ZMD0&u@oxd#&XA zwRVwMYwj#P98Hxp&wa%pAg7cYJ;N<9X_N+24U1{mkPOOoh8jou(|Fkn0te zDqi*L@3#)u?vhQ>FD{&N%kbGR>GZ{G>JO!2;i3so;-CMoo%@%2$M%KKeO`aAIbl}E zdAjo0rSB^X67 z{rkWF>Y|%}jFj3Ud(sx~Yrd)BX7=j(f}?l5D%?aDvu|GC8+aq5f9i+OAEy^|eAs;} zW{#L|sb@WlF|%Ct`}+(`jQ{_a>!m+Ad2*HG)dt%MvnQlqdE&>vQUC1grwzqNGACW~ z|MW*tAe?!vgZ_jSkLNnXon_wGGHdhyztwZ4*0=hWmfG=h9lF93ZLCw4s${u4mpaF%1)VXk@l29WPTa-&IC)NqLg(hC6H{t; z6>1!~^YhcM|8^~mSKb~`T^cksWYypIuLbw8Y?&+PaNBaTSh&pTtKVX7aQkk&#H_z6 z{qi|3Ba@e#bd`SDx`*tuSsM}jV9D7FDMqg9;XeD4nD@N>S1bB`5+Vht!yLn;Sm1E|1f{PZO`Qn_iHmUySvFqnA-(nIqco1^v zz-G=s7M7`()ymS-y6@T>=bJ@rDvOMm7$Cwr<&G)~s|ruZ8fQbU5FVW`Yq+^L9I$B? zNNvloir#ayOH|9_=#>BGpa1{-@&A)aCaZF9EpfUXBC_#9&=!Y_yc-Q~u-QrU80PS# z-I$PTknrOJ&xhjI@^P%!Qx}|V7EFF0Xe9QAH!8DHQ1W)g?P&I!%#4iOE!GDu&KwAS z5$w0WMq=Lev;Ug~Qlt(T7@bgHG4^OM2vgX3GWMpqN_mTBa%A{)u3d#8uWvl~^X_`q z^VM5*w=L*sdema}s4D9Cx`faxNq;~8U3Nb`RF%#7iy2Q$;o`K_vButNKE?)97M$D= z>v#Ee>31oX}%&hHKBt@12B`^idS)`^v(%X_?kJj%rzWxisX?kJsmR z{yZ1?c+DE6Ta~fqzydfbfDO*CLqGn|%wYHr8!Mro_?K{p?8BR6Tdu_`+I>R)j z*rw?f@#YCT9opuQYL))YuKxG$VrG-=eR5m6j%d6TsoI@ezJ1m0gvDY<*m}Bh6*ML` z1uoggyC_29Z`}>Yh=jyz4!7Uz?tZbh_ZZ7+b+b?|vxtV!aOOXEs$3)&?&yu$z`&BC zbF;xP<>S5E-J(5v-|`v=&d8b4a&O`EQ>n?ht;Jdva;VL*9c-sx=&|wjH|mqmR8L z^pk&Zsc+kdZoh3Y^LQ??O(Af6W%ldy-kfXS z_jP@1X*MvJ{AB8+A`{=0YfirI`rf_bgX_}W>#pQaTR&N6o%AL)+3ucg`%ZB&DK9*n zGt=}3LyxpDN7mC-Q)fPY8TBY$-MUrkuG_!t>pYxJ4@C|}@Z3w>wl*cXWKHBUha3GL zo1P2Y{`Fj5Jfuf$X;p`$mP_^LH}iJ={B(T6yVd{0T|y^yIk>b-XH=J^J-k$ZUc!Yh zh{x&pyh}56J))u$E_&@@^4`WH@>}MME7!u+*Zk)cyj=8a(e>g(?>@!W{mQp`_oRMp zs^F^@rY8)$77MJJ`{0e>H;!^ACQT7Fo}#;Fuf;fTsNdoIS$>Me))hQA{Yv82uW=MO z|Karm-NX%#ynXZRmAtMMx{};?y71BMkc){q z%gg3`(Z4-^UXqYUL&u?GH|{q&mA$w;C8S_7>oU!ZRqW}K3W`SS;+PjOzc^pAVM5uO zV+>cnfB#d@{h`DDMuKw~(@lqx!|oq~|NlE^ZJ+yxY5PahwT_Mtj>L=c$oO1&w*QUZ zh7V`}FxguiIBcw`yNsS9J5pxwYM!?CgWKt`{*8x^_chr-mBmgg<#@ z-+H(oaZmc`usQpGhKW^j%!JreuU3VtUR+nG=h?)zp>0;Z*`ELZ?dN{o|9g(Mw~^n{ z_fvh9Ca;SMH>=cjUUkcF)&1XFc|G}sJ;SShR2`o3%G~#QxWwu2rxLu)ZcOsb;S{>< z6|^a(Lw6!e`hr|$CTX3v2IJ5ZK8$B$4)5M&kYnsGUsg5}!p%WH%f0+}v`k z{Isjnw7u8yc(2pEEWP>Pf1|DY-tK+RI$D|X%7Tk1kfSeSxLSp)70tt<=r{YozT>ZDWK6aT);pL6qU*yGzeX32Mw zY_+$S-2S>IJvD6eoV#fi|9(%tGUxy7n~{4yoUvwH_0Y+>aZ7`L%0a1HkqdsrU;Z`y z-NpH<=U=!XDLvC5ce~1Ro*9fiyVt%84*tAu+p>Mv&mFZ-ynXr7J~?0SzQ%SBhRrkM z%{Dl&1>C>C<@Kz}IV_Uvf{H&cKV_#fBf*E!_5614`6l<)upHZe;M|LU<+_{eXUQ?R zKjWx9$Y}Z1-1_skv^2%a;uwWW2QAi=TBq_v#zCA3gOe)sDPm8tqHC46uLw)Z>Bi;fLvI@auqlKPVTq-@D<-O|!XhlQGqM%fI0#ny5! z^Pam*vD<(97sD~vNdD}Dm(xSz=jX(P8h1*rnYw)Me}OLsF)0-(V%w%Fe~O%Oa%R`` zM>nqJG%-3{P*h8sm$mAZ+>4v5xo`V5Dme%zoczA?&9~sUm#_I>xR4&r@oReV^j2M8 zQev2TbDsQtI`-GL+MauBSGk461{$tPa&fuZ(bc8C??;vRqWjjDZt4beedn03;3#CN zqr?9%I`!Z2of{+mhYGJgudLCgB<4Da#dFeQsf%AM6kCq%Y(K{N@uI}_FB1F1gLCW* z7(8W`EUq*|I=JU$!W6x|ZIU30H^*Qb~7Z=}g7h~3IozbCu8!R`Qq-`!>U z%kQ0?m;12i)b-%ydnY7BWqD*e@vLoRS88!$QQCdN=Eth7-*>4uWHG%De;X&rDK4KH zc;d|e{MGi?e^&pj-d>>dLGpQ!j7p2gq{(G|IlK|?|JCFL{XU%gt)NnS=Et%l)=8#bP74J>xK$Jd z7Ul}*3n;U-ocgmr`rm)9zt+EY&)*Wh>awz1I#Z6L(hOGKz@~NuK^3P5Cu+|A{LjAm zwDte>>5sLSN*(4=T9owiq6l{hcM`McOREFA|Grz@f94gt3gBq%-q7oov(xl>d`*&lqqL-pA^W=?^DL)R?wQgAd{WROJf}IxZ6aIb4T6yGp zV?p@c-xCF&=<6LYe>v-jp~%~h0V$79>z8>ZSxFpS#kcpV{dwlnqppk#9#4$dFL-su zpnK&c;iZQoJO4iyD+@ip^XlDKk3X1(eZ7(L?Ow{Q-^{1)?Z4utKk?s8zmAQ9YY!O4 zYO^!yEcvjJN&k)ho2ZE~?a>_H@8$W1f%188y|^OY{7|ai9_z*}^u_(I`t{eIS!+u&XC1YP-!j2vQ}D}ahD-XJ zZyfje^#9fOCW%%t(JQlDl@Eu-WQF<(zuZ<6XYgs~RJAnmlNC3U-h9ePyEmolL^G3s zM*fLEY_cw&j%^P89Xo0E9;4dVoBlTGy!sFzyNX@1dx5YdgYJ_4oHO15nJ>@X-Nj<* zdq*qkK%ma-GHu@@t_wbV`Q&)?Hq$MU1=rrnI!?1~sNXNRoG0P?S%>oZM=o-6$OMK~ zSwHAyTv*kHn{q8^#x3JoD#a|;ZM`Q3xvzUrvK?v%5ZVM|9owG zdD0Bw1{veBPjc_QEBy?WvKx*}o2u|?^I@AMt+F+TFZA^*RB3URZCJ4Hiqy;x%&8li zL%x3s5N>>F!CvNIpE65B*M5731{1GR$OVl|*7*zmO!>LUqd8;KTW0B}w2OQc zbE?<<&SO4Fr|@&8qoP=~prGCik)XD342<>6MZJ@*%ItKE`mNio)bjY$r&%hyO1uR8 z7i=y3IZ;KVbdtwgnL^(4DVNN5g{n?axB(e}?~e8?MHP+mrtLaD88GEBrRFa@iAZ|J#oe?x{9duv=@|o$J=V{AusK zU#yF+*~R>llsNZsf;i*1HxhXcH-t~6wuGcc{%Z78F3M85+!&|qExuuK=P7}U!Y3N$ zE8F%|CvXNR7XAu7C-O7B;DgBPjU~DsDoWa)6{DJ0)Czo1m%n6w^@Hzq&2=lLKKwKH zWcr7e1J#WFc^uyur_V2$p77Liaf;*C;0?9x%yo8iPxZyVUM%v+tMj3F?FSCiHIA~W z>VdA3M;cS_{CwW)^zYOe<0gKK?#Bkxo=F${H5Hz5YKPz4Q^u$4P8{5<(@2N&Dy8j| zu5ECG)~|2#o&GVJ2ORI<{B96(l4Uy3)A^lTVzS`mJwDeUPU1tWIOjQyfxT z`!96Z{aqA&$Ch=S_>9}K9}bP3g*M6?UB3n2P5pB; zQen3Lmd)P-f3mnXJu-ESePmTp$F!ojtLx3yHt#7@KeAhKT>tm$af%)_%%f<%%_`H@^A%*- zt#)0X${iE8lSH&e7Cv01vOg$mU@ryCV*XWuA$GchP;@?g#EZ-J%%>J_Mj0>8d z*&cekT{IBMtUc$avQlYDXwK!fH@7_lEuHt*8s77C61tev#I=XHQdo6Q@(Ek+eE$EZ zEDv;a2LDyyxYu|~W%8qETMt=p_{4igUQkR*v`ocu?_mSMWpB@)ys7Y+PbcPrn((yx zXJ6{|&318IlMeeQRB1MC-%a(DiY?QFr@7Yirm;HhoyR)6BrWQ+`p)-mpInYB=STe2 zHxKj@Z|(fxn!8=iXLIbnO+A6^ZK z-UqW}zw#FuZ2B@OQoY@8y~oR_W!K_v>&YGa)!`}mKb)(;AcA*-eVhJP^&hMKR!scc z*6{p)Zu$!YdEvC|13Bh_^GJxi5Oa#76eAJgYWU6D#!&2;4Wo+o}UBlm^ed8_}Y z^uWsWUv?+htMoQ_``X?=rl`BaV57)oj(c7=tgl5hY-%!Z51kObD2#b|QJk{l%SCUT z%geSuTllc(a!-`WrEZI=IWPN9?PZ^H|D)AwrN&DW-!1+qx_t`kl%7Q0W4dBJQc7H=+*ByEFT<=L4rlD>~;CAK9QWePY`i z-9NKmU%k2^a6|D5vYKdtUn8y%77byH@4%tpa_@&+qtAb-dj5>Qz&IyV}1ulX<@Q zS~DK^yzSX`J|Zcp{jZ^CXZ1PzziU3mPpjwkIzi{)eMnxFSl`nRq*N2 z-@jvXtJlAIS{Um4bWRB8AGSl`pU%8h(bl)Vzv;5j=~bmaRh(+K$m`EJ*|z7h^qpVc z68&25ql352V>rF5{OP%}urB+)oJ{4V9KPIrRvGJX$bw@`y&)mR=wZ|eP?l1e1`Q3i^hx*=d%}v3-?Tgqx`aWxY zpT*+;al`G8s*8_{_2}rF(S3UOvPu4HW9`%5`qj>-imewZW^`L}nJxUQy|LiWkki$c z$3On--j*(+>z;km)Mg)p{EP?La?e+b-8<))6!L1zG?TgB|GovtZyZfawi(LNw%B4q>-f0{?tg0I9 z^JvoJht`_!He6(Ba*eWcK62r|c13eyFp z**7ScZJT?&@0`nzh?J;LQi{5lZ2xvWv+JtO-^n;@g^)m5AJ z)fL8^sZV?Ks4~iE+volEdk#$R6xmr5Vpk&96}<7(>U-U6>tDEheWKv^=m2}ejqc>x zkCyOWT$K4i!191Xk?g7nPooZ!wX#*`2EWmT#i>mon>|l>Ab8EA znfNcakJ7BazL_(9?2Wts;%xpS^JnIN+-l}|%WQ0Tdz4${#!i_H9m%$<#4cM;?5%ZL z$Hr_4{Z7G#UK`J~M;URC9{kfa0w*2tiUov;t`1?c*tDRy$F@0JU_G?PA zfNzMjmhq8O>fFAYQzqu^P2v?cS&$HVErSCQHZVcr0Y!=ay^z>N$Y*Ns!eJw#6vt7G*CWa}U(3`kTwOu1|$<7uI zL8n7ZK@9>)f}t4;Ocx3An%-$>%Q(|pzIat3U-PX6A66)DP_=B{ceC{Ut7NtX?y`-# zCpo{chF`kl95Hvs+~haA9z11#knqewLE@~*jfNdIfyee=y`bM3F8Rdu$|)_@+b5T- zRF{_r|vnOXwA%frsV0} z=FO^cFVYhWDz02OTl7Tm3v29YJL$s``R8smu8Z-=QdRF!n)2d3L%v<(#SfwZJql4y zi@z>%?zI+bx;uaI;}3jh=PFl;-^p@HmRz>Kd|hKFXOorCG+FEAhBFqlacsBT%)q7* z;LzNpKBvKQg8TC(rPQF8D;u6h9C&qZs*~OMLw71Q+C@#?F6Coc8gV4XfANZAPTRCr zto_x+=284#R6#{V&}sJsCl1dOP7|FbI4QNhnCiMW#`$=i^#S?Kr6(#(WnYHxlFFA6 zzQ{c7%eLJ%^=q#dt)ISkA?Mb`x*7bt8l~CXk60{>FEm{_F>H(J=D5wP?0Ii4Q)^=G zf7kJ+XKr+^NA!ljTN5j6{2Fum~OC+dz+KQq$-|GqH6D!bFX@_ zvwt^VVfl}R{>^7O4jxc=yMAHO=Gwen47;3f$hC=8G%7Ij^WW<@WG}zODp6$WrfC~p z@9ejTzIsG0`APxXgJpZ#!!O+35WkGeII`x_qQhlQQQM00S08ibVSb^s<%-YaV$0Nj zb8`!O0=CQUPb{h64h-J%_~zEWZA@P+r*^59{_bcJS^HblvFw(#`PY9TcI7XMc3H*3aDY z+;%0?*B93w#QlGzA*U|u8f^ITM8)UTbLEaimX|-?cV^CI^P`J8V&16oZHNiHTN)Ws z8o2z^GM>~ejV66zv2$c(z9TwXHPo>POK`Gdcd2mg)DMHN4%OxG};;e_hlT zo??rO)1qwty?SkQ{mtYKEcYfy)>yXTcZO+B7+-}wPyRvg|SShi5(W;QHMOXh{325fo zwnuK={jA0#ioG{-c4aKR`YYqqJQ%8ND;N&c0g}Y5HGS)bRi0qTpMiC$@w#+P3e>9E0gIif0;U=kecD-MiT7{jUvc z%%|K_TJ}fVpj~zw*FK&{mx95Bxb2+p&)S_;uu&uPnl#lC<*KXu_CAIFJ z#A^=8&EXIBoi|!Gt1tK=o5_vkU#84&N^$de`71bn`K<>9>+EEhVmKTwl^wW#VyazD zo0`;j72!GO!y;BH_esCFU@Y=H;)TodTPp)Y&pq!9D`~lYm|5~*|Xxiyi+qdxGK2I_ojL3)mL}s zyw{z}Jb&k;LKQn93n4=}&uz+5371uuhwE6krhCa12wT=ANRu#=spFCH7 z_ch;*YY*1Vxyjhkbz(Ay4Cg7sr`I2`-)j5({(g0h{Kxdq^R53_9+{u~tGK@QeQ4dA zd)Fe&w>v6ZEYv7lX}TmT=o3S1zWvSc(1peK%R^os-?y$Vw|!sVk6Vxbe)!F|-~VH& z&ici#{#IB8lr{mFMba(S=u=4)?w+fll> ztN8YH-VH}LE_@Imb0T5=iQlfPA~?<7zFCp0a9sC*&O=f5)o0TZwkDLOf9^gy^_hYD zj{^zvH>}%a&9i+D+nMyV`;=LhJr&nq?UZBC5TBq+s;yeQ_5E-)?m z5MUEfaB2>doRE#l=KyWhb|VXmDbFsfHJ#Ml%+q&7hSQvD>7D4@4fRY$zBUy+Hg1(W zA8oNS5MRw+78`FckEw|F3ZLYAhqo+K!`9!nxub7jq3OrdU;pe;1AF6}PEn>~OAb8j zx0v+%;J?VW$7{tZbJ(9&@k{Wp*!6l}OxyR}VSg9ydhBEUuKajX`|gKZZWQkR{kmkT z_V*pui+3-HQl4~EsIBMK+#P;(pSkXRJoNr*?C1P#_m{Zd7MR%{{*-yq2+eiU$Zyv5M8-b<5%8oik?>XFZeh)JjcN|7&zJP4>}B_JAZy$ zn6_%Fh2>P{pY|b4TwMzcS{KY{{n#M7XJcGwaO30@yr$=_i zA&EDV|7U-7T-6%XrQ_J|dBpYL%#(#h|ED&sN@UH?E1Dsnra4P`;ak39?!RHnCF;sH zEEH5?d6#Mv_F}uy)4DmoE+9IF)gu2M z@8kC?%1`>f)Ssoq^)83OWVXqB)@;|rs|`DO_Rf)EPP*uGcB*sev*7wECHx!e&38nz zmzHZgtG{jACNXFB#?W@x4fXrYRn#~7{<9W- zU+^iC{fx!8o*(mbBrn|KlGZzVbJ6P6Us7j$;BA=qckf!ONBe^I`SvvnuVJt`FU(f{ z?YQ{!*}Z3XwH;LrUb0v_srS8J^IAQ3r>+`nU#DBK3LA~kYr_^4?wqVB^H#TNccNQW zci6&2#<#chOmyx`Pk&{0#{Hn^xoMwnOYph~Z8Ux#QV<@@b?1rKjT<`^!~GtI^edi! zW&Sno%DaxGsk^vugiQSH`uESulLj>}{hr@7TWxH_`!oB+^ls7B8p|&|e5v>HoaB!; zt=`oeWgjKxUpU_Qx-(;)R#oWNuNr@zl>Vt%)gQaQ&^Gm5%;Rq7$5-C15?cSN;=rGV zKs$~TRdPGSo@^{L4P!H_eEzDiYu~JrqlHWB8Fd=g${a7?3~%vn7MOA2{QU2A$D7l( zJ0AY~IMw-l!L-Xyey#blR<6^J^}Y3>rH!vYx9&RnT&mwigM~rNICihC>KPly%TbKFX#7gM{cKRX z)1}jA(pDPpX!h8>V){3qusk7<&n?su=Qe|LfF{!HgN>#98K z?1W_-WGBY3EMM`9`@isyslJ{so#*V?SJ`wu?D<>!PZx?m?b5#()_*Z<=Y_1*YxV3q z*!0EL7Y9WtAAD|c67$c+T}*Viuhcf2CJM(&!WQHtgn(K?RG{JrPxP0I4#{N&)NGvde7J7Jzs0L->X`8>qY{*?}Dy$KF;q? z_o>dcmyFANc>K&A^BN}khco*>q)xhcV)io8`H5`)BEKqi-rm`$a_-On^&zS^L?8VQ zm~;D7ZQ}+zE1i1TtZ4^|1>d&$KbR^0tya3m?ZXb&Q-Ap`T`@lYs{PQ4yH|9*&%Hda zG2!6Zud~yXDjeUh;N8)+?l0GFwu(>>?!zwHUkz3`FlSw861mVM$I&EXdFFs@^rs8) zo1EsTmhiu7=6L<@@1l3R!~b6T+y8XRiY~<;*}s@#Ph4PSZ~TzC%VW>JFST`hBT_HM zo-gFrsVn>cP(Zt`o6n^nA&;F+YWwCr*LGD$q)p#m;2Gs{WbXVmpC4%3P0Z}P#U1@^ zhi$^nO;K-z#bruY6`Jh5`EZj=z^PjqYi-{b|G%bwZu-0Drc;+*ou+z zcO~rq|Cd=z@)n-H*&;Ap@$$JDy_U&!@kge8x?ORz(PPsb%UlWTz3tK`*IZ(a)Dsa4 z&=9+!br+|`Pynv zPG9iROEYY92(!)eCtEkn`y^PM#DY-CGPnkKgU6UnhI->Ynno@8UO4 zsQz79{HV{o#-u`2&G`KCQ{}z?yWY)Kt4#MT*Pj_vSL-i5_m*Bm!RD%WduK;nubokC zzkSj@9&uIMW8VZl*Y3RdrSYglC~Mit<#sxGyP7i&b2iysaMIpw`z|Wss1A$I*^5W4 zR-Rq&%p0|JVe`AQ@0cv!EweeZb)t30H)-|vaqT?sq~dqHy0dUk?W>2s7f+vG_%3Bj zVoCcI$I8dor!}&+U)asg+{mJ>yLINjO0A7-&e9D|i*&;(a!jvhcv?v19PCP{Yna_~ zV?xjI^MbqH-G3zW;N)f1d3Haa%vP5(^Z#0N`d5|B*C(=mf7fYlvRKbMYm&Xty#v>d z|7EqgX~$Q_-|?;F^-)NXe&>F*CyCi`^2cQhWc~Y}4B0&x^zz%o7AQx#})>e{4gx z{Usi|xYfnWE3FuQFa7U%+o9SbWA6PcwjyRl>gAhme*fEl{&=&(<$mP}jw1FAc0wB4 zYJNHHdC_>G{Q*~MTGY`4C%Pv_%@28h#NySqpq)E?)QmQ2D9wq}uu&|VK6BZLdj>_a zt2z&BvO8@#e|cfHgJS%01%JQ!{pZh5&Ak32C^y~c5064->fbYUOBsTryi$wqws|L< z+-7aDZQ7L7yLZlPNV#R6$6x>Xs=0-y2-D`zOUwIy&o?l#-TqRCPhzd?`((=w-2_kd zjQtb8n7eQDuC8Bb-W>R$bo~#NXZEj8ygf6|ZkxvTlY32-zWQz1EW9lL`gylir*8H* z+*I>E%J5|UF8gz(>D80>{tjQ+?Yb|}TYP_lDCgK zn>dzy4}Ep~-`?<7r(BPuZb=CEsr|R9!Rf>;B^NFQ@fe-2xmrDIcQJ6Tm>?x|LnUhU z{r!=mv1?3bEN_tr+0yYmmzVKPfYwJgj_=vR50{+TF|V~P`t6ZijsRWRW4klHi0yj* z@ph^3OcU*&I&%yg0t2m2zYDgUS~hQ8qtom?x6iKF;%?<{`-uC8n$gE!p|Qspo*v(S zRDVBnvbdgpwC|M*m;XdPE&sXa{rwmH?O){X{}%k%uCVJ;T?gBb;_2;2<$OEVsc`J+ ztO&@ft(#eH=PR)5URX1x4z*e24FtO=w^F z=py@s`@43oJy&{bd*$O@`K7j=Po=v;p6i4~PCaG)ZrV-epGXPS8L4nd7Yb+?GurzCHMK_ro5U`F;O>rT-Ou7WHDwecq~5ovYq{ zDxJ_&)8PG_DgM-6XVzDaV(0!{&Xjn@()VG9*meD5JXgyjc+Gx2v5{Of`;>|8hoD8S z$(NYi7j0F&P8xtGsr5>E#i_J{5 z?JqcVGQCYqvZS?!L&@z+VN~nx>R7G)rQcQe?%%hz^?dd7)_W7qZCvyAt%2O`cgtV) zroMJ~mKk6@wZ81CM6a)NGnbt9MlbHM z+?F?m^ZxAmn7gh}pXJBI+c9m69wg^T-tSzvw!rSzp+9d{9@2T*HQ89G=-uYn%4&1l znU@tDB(6K%+BzYwBk~iUl|$Xc1ShXgA-=X}R{WOys_>ahzEv$Qujuid$mjn)@4MZ8 zUcGznm(MF2vJ=(H5AQPl@$9&*s+fd8;F+UNXWG`x{@JCQd*NdS_jS1mc}3|m=ikoU z+p6C4#;<=}`FFF62fkmuay%~dcjA`i=d=5JKYXa&v`BtNj8gZx%J50aahHM$*GX*- zJyZKf^sK7GTqf7rBU3VNZ98@|}LYY*IKK5weB(4jGM{xPA*6+%I8XTA2j ze?0Aw=b`oo6Ga(#4kTTERKY5mKI@59rk}xbk$KNVpSDgs^Zc1s)lAP=vA>13 zSB={gk1^akCt#J`K9gPl^_d%2YB?mmgyTwP1cuHn@v^?E_Gsm$&8^{vygqxks{QU- z@k{)rn`MpE!GDsHI*gxxD2iAg^s~LFTm5`?(B2DA(?4FdpWAW% zsYL07+P1AJ`WugJO|Sm#5Ggn#XW`BDe~TV|KOkKkpRpv}?xP0lrm0gHeBaCoSih$0 zPpqev%{NQY)pG;SvnQt7F|MEG*%)MhZQZFuJKuf6V+f3DP2bH|Z?@Uo(qFES{x7NJ zh|@pT)2#Wo_~aKjyw@)(`Ejyf`~48D9JiCw4i~)MYyaosJo5IuW$xzMEtW4BINn@{ z&Sv%LJbS-**(<@BzqQ$>_b_;RwOI=XtIWFc#7c0Vhy27GM%MRJL^~(niCHjZh1=T` zuCE=QKmUCFpH##_bEX@g+hTj>#fS?!ztAmt-u0(@=9C%F+4=l77%voIZ=HI5Q4CAb zFPU}sqSvnx{(9tVh4a#N{YpiO&tpt;mrl{R_dcfirRMp=eG)qJ1eU)2ab!i%>`d;| z6#Z!$Ze81$wYI#Ny$lx~);EhI|L6n8e>ozliPq*U3p=+Q zICZy%V^g{E?||N!t_pcwd!v}&h2QSkzE|q|5$ltTn@!*Uu*o^|yY=nOl?7$($Gib?PdY8P~Kg@Q%oQx5LAubZ*_$ z^*2|)4bc3ilWzNRroquOA1+^tv(hL(Z+bPD-FoevnNhhM5A;&p??$fRmG;c_x}5yp z)GFA0>xz}h&AHq8Wj>hy(AoJ$y7icV|FyF1M^`=Byrt+sZ`73a+H3FE&OaAxchNyS zYvGnxH#fSv75GRCeV*-q%;Ac9hHCB2_ERqGCZYRoM0R`@3hPR%6yulVT<|$cFh>?fCjp z%q@m>X?OJZiO1UZr0_H`Fm1&z3tENujT6x z2-wbfN{3S}g-M$I=E}TY9wvrAyKeK%UG!CBYv1z|VXtqL=4ENsE=m33SaD;Mx9Yaj z`hPT8TyMN*skpe*P4n@ph&{`XOief(=PNdI!tBD&OwCK}->OXs?SH%Ds^8y$h~j;> z*_(y4jE?M;Iko4o*DDW?DL)M?ne(eBWlrz0LGrRCGlg~?;jDFDs(R3+sAyxYrNQc>x<-gsN9Wt+~{$EpggU9pC zv}NZb7A;He)NhE0F>6&Y^nP%7|B6o{&-(s6o6kITroa9)GiB+H)Ai;1e*f41b3whJ z&cE~jVWYa+U$zwX-@K|(_~9$J^-=e(vIvtq{J~n4)2e0Fg$kD~o&9LyIhi?o_?>18 zbEZdaomHf{-D-)(GJCzK!nkFsyf3`?bC6DM?yLY~qJRG@`=dSzs z`+CyKpHH63ncCVfmjAeE_N5oCS03+uQ~T|ly{%=PldGG1-{oT$WE2*8?G@(P^=V$k ztGt@4`;QfGj$gC#-Y&gqHa#uw=jTY;%j%!Z>|$P`)^(E8&*o0V?w)s_4^9lW` zcST&QX;hu1{OXvue5Bg$rgPe_xAU0_DHwj+_fRf$f2pFn-lQc8vuiKpJmz*zJGhBc zDR%a0T}PkEnqL!I9E&rfzdKd${a~tc?QzDh-NB8K@4o)BEtVJ8%l+Hfo(!8?MXUu(o z;deV`!>h@HiHwtv>}@T&rnEpg^>Lr;Mwy_pI=ziww%v2MvEJ7~!PWowiER0w>1*3L z=4V(u6a28(X{OQo6(JT~au3r#?<~LT_HxZmpLcE|y$0tq_h>FMEZFzVeDl)=p(`;h zE2o@^I+T~_ptm`+eWJX~|GV}kwOh8-zih8K_F77(?J{5ZdCyB47b-44ON^^$sM_Yu zZPzxXq|ael=~J8Z`{fB{yI*p7e422od1~@HIkANkLhLn<`z;i6HhR1G6Ze0QKUW@< z{ksx)07masbV80d3uTY8Dr)Zf%y zFiL2}38%w_Y@a7Z1QswBEIEIPXQv61gNy0*gDZUx7*#Y~F!3>9UAp?i-j>}Pop~(| z3#_o`n0xf^^Zf@s3UO zUto~g^H~42f79X)Uu-qqrc$-g=8}WUA?~$iIl_G}_av@lm9Bj8JLl#%1GcjJJ8v%e z$9|}xPVKt4$AwSp&dDu%zWa4ZtnkE-w$Jj4PmOPGptt1MqWJ-jLNc&6P=$H+s|%$_n#tJ!&~ z?l7mgQl|CikV3N;2Dua8rVENKvg`WJV7Ju!$%7Sq(O)&5NwQV^)CoKF^`PyXsa5%A zzPtWN-OAu9N|5|!FBh#pMf*U?&b-_e-|Yn3?avFdPMdJu)7m z|FZM7O#vHg#gFNAi@n1%nwZSj1zo>>IcmDOv_znVCeP%SD8Y7{9nHHv8f6$C#Jftr zxSGdxp`oC{C%=z9>00*dWlL7uO?fA9QDXYpFP(WMJo{Jv+;>CNG4H-;yu7rQ(uXA< z-%nJW@uxcB^X$*B#b?Nz(lOWOebN0mS=;Dv@s;C8ogU71);X|Hr}N1Umxb%A8<~3c z>}W7LBh>y(bHSvA>JJ~JPV1J?ztX|(C(-nQ;pB#(t+$-`HM^(ob(StjIMS(PEA6$( z-Qd?Yv8CN6yB~yq+xw#5?!Z-dR2zFuy}8N=5y%s-@y7GC)#(-oH#co(lLc;cFl|v#X1>2vZ{hU zPgG8BT$+(rA#?V|*X=V-$?MeWO<1vNs{ia0Eq2dlCVnzalMM4rMzlsyKXjk9(8C{sBfAZfZzh#@|)O*bd49}bT-XYCt(KWW{HT!Fg zr+;V2&w2ViOXle9*Gv1EzipLdH(q98U+O)(!Q6kA+qxaV-{Rw|B+4EG=NjIq_QBOSb-pflsfFqJJG;-SMBGx@c;V8aT?WBRC9HR7o3m>FdGg_>D{t+#!h?n?b1RMc;k-RX^*eSVqr+sY{OlV<5n2V;(_IG=Jp zx6s)u#>!hTYx%i=5QX$Ao8>$X0;`Y4wobUwKJkr|#=`4ui>)l!pXtol zA6xs@VWH>cT(`Vayi4lN?d8xC_L|(bIqtUS3x1~f%aa=Cwm$oPz;{J@WozuoHz`odO;>Mo9Qkx)<>bM%^+TOKaLe)dMj zKN*g#I=#BtUEI&n!DM2My4U-3=Ed()(mJ$bxzhgrosq3kzriL@^O~$d{^AzC2@e?* zh2Gtc*mC&53KpmIpa*Ya>*_psT@TH@a;EzEvp;j?B#N9ao6YU@Ie0m=V}tmuq8-&z z@}|4AUd>C@iO7xR+&EWII#=PXuE04NUI|U+|hBPv2QSoH4Dp!txLUlf{({sd;z*-YlASY*j$(p*h9R_f|D{ z1~E6r-u&fR(5$Im$l?BUZ;4{&jHfSJuG|n(5|*>c7KxG+5_+q$pXbA$?b-)w%&yEW zD+}JWTICgI=0cfCRg1fq@a@*P+{JaM_1E0IiiDmQJrNr}$s~j^8mHAUtZ11bcu=#dm(i+1*%5!9MkANP(&>}Hb1B706l2_N5rhRu&>yFx>2ZrJr+d0>7!pioRX!{x6-=O|3tlOnNDGX!4OGw>%Ey7}dVcT3dEZF__;n z$HPBq@&Z-ouPoOVGCmKOG%1{Ot?h%;O}F~*c&SD&ZRVY?&GVz+*>Yadg}?o!QXaQ1 zy7|tdVxR59tY4QurOoM>SWvxo=A7-9EG~FQ{EA9@A+`Dv=gWgl24~{UkNCK3E4BWt zwe;m)`=gQfr@gfFW?y&i7Q=gyP&PA@T_!U(TP%}ZbI)aIq?zrOG}Ag}<|u;;(%@ip7uvfO&p!{x0zmb!}WRL_5Pcwh9!ZRc$^*B+Ymgud!LVzyb+D(q;bx0u6EC?QnkT)>fa zTm7yF?t1j1 z`10%1w<))}ranEUQF(a#9p*S=rV3B)ze2w!FXDR6FlF2C=Lv0mG7oMu{(9jMB5?g? zf{;_k3#Zc>olkr-j(zSZ3I3^}c-P*fvSFc5*s5o&1xnskZnt~=w%z}F;nC!(hQtYZk%wfKdB|n@e4SCtkuT%1?!M#N zIWt&&6lMFnG-T{&+*r_*=UC!o>gS&OX#N&~iFzq3=6h)LPc(VF`2FVF|690A^54D< zk=<7!p>(eD*4b&MSHDSkU;84ZlvUkl*nF>8#*yjxoOvzo);D)A^0*`&<$b#4%>9WQ zyZqShUKN>nBr+)S)QxY+c`pxWw{0+QR%i4uoXN9(c@$Uu7I{8_4W-crEWHmF+26Xs zdA5M>>T0)rzaN&CF28(dUF!We*N?tBDsTKSRFnPfueFOCR>g|D$A)Y5OiP%xwDjkp zG)X%Tg^e1^WL(rrLnJ>^723b|tz`~EfZ_|KZq1 z;0U|%&BK*7=FEA9!@U|Odfv|CKXZWL-(~?z)s1{g&v@MmHP+OHi3z+jeA>=xe^y{( zjP}}jOyXIqqu<`>oAKz?jGoKiv2d$7njw%Ij&Ou z>iPMIX+5uqOihM)pJD{#x$ky2J}kZ)|9AGfrn7rP?t3+VR|#E`nf`*;B5S>~6LXT| zQf`K$QUcO#yP_Dx*D*8X1gJ>7&9Vqx&Y}N59`&_Wj_OMBR_dB1pS$ND=^K#z_bIVe`#icE`JPK6y zMZB@OuXy&FUlfOKk?^H9+Y={!CS95;b8&N|tJ*WplKVZsT+^}?oTvUfJBhuszxeTj zPsIu6ma02UT$_58_uy`?({B!Qoe21CaIrWU+ar>^Va zs?C}fa{Fzht3fjkO!)MHN;cl;>pTAyA z=}s{5)?ctdNL{V(#O0YhZR?J$D%8o}{cfAo)v{yT3wBJpc4Pae`h<;V_XfOO`uS6a ze@SD7PnXtjF4Nj$#vl3SEE4|{DDCWE@witdeMV8pO^Iynl=`pl!;buuoGoqptL@^$ zlZ!;($IYB{ai{IwZGjy!|BEx$J>=mCy*|b7WOL%7qXKu>VoNrq6m+Y{iX6Xu@#<2Y zBMqrDFWu{!9r~o?_1h_uzrOPR5Rdl?`xyNyXWE@<7vEQYG8UN{QT- zlh00$j(t=%b>|d4t%P5txs#>EZ`|1XdXcor4gNcu`XsW?e4e%O(7IhZSDk-o1@`Xz z+N8W}`N1uZv(==l^kYAp%qiYD^}MfUSNEK$cTO+csmr-KXU`?Y!s?Z$S|wa3R8QZe zBJQqSc*shFg@MDM!{`NL`t`%jwMCDz=+f$$^0Rh3g!wf-yzZU;&}PF*j$e)+ z|IB+AYv+)--8VvE<)y@nhA;Sd{@W0Jm zncJ$GI#!J}<@n)80)i<_g4+*gTzEhApsP){ z^tHG}`Mxz@_c5MH%s!A?a81%9kZ;ZtjfR`?7JWZAw$+7r|1XI>7HxR;>O(f6^%fr% z%0D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

0bKPVRdWOH@rq&fFb{-5%{$JvcBK_KkW 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%0DFddo!j?Fr6q>A`r>< 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 diff --git a/SourceCodePro-It.ttf.woff b/SourceCodePro-It.ttf.woff deleted file mode 100644 index 8d68f2febddb04dd6e768a4939d63eb7a1f4a139..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58444 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 diff --git a/SourceCodePro-It.ttf.woff2 b/SourceCodePro-It.ttf.woff2 deleted file mode 100644 index 462c34efcd9d6b70b42359ca1a1d9476efe43eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44896 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

Ft|q|Npdl`S=v8-z47)#r}z2HojaZ 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�a#*^;HuA9amThQz2(CEmZ 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 TB%f)pzl=#-!7A{Uhk*eA76{#B diff --git a/SourceCodePro-LICENSE.txt b/SourceCodePro-LICENSE.txt deleted file mode 100644 index 07542572e..000000000 --- a/SourceCodePro-LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2010, 2012 Adobe Systems Incorporated (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/SourceCodePro-Regular.ttf.woff b/SourceCodePro-Regular.ttf.woff deleted file mode 100644 index 7be076e1fca99ac23aba68ccfb6e4b94b776b772..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68152 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 diff --git a/SourceCodePro-Regular.ttf.woff2 b/SourceCodePro-Regular.ttf.woff2 deleted file mode 100644 index 10b558e0b69a74b8329766fffbd5f64356c7230d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52228 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 HjMai9wA43vhA_c4c7r^o4=q0R;)@s< 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 D0=ucW diff --git a/SourceSerif4-Bold.ttf.woff b/SourceSerif4-Bold.ttf.woff deleted file mode 100644 index 8ad41888e6e3f9f4439052ae6b14ece2cdfcd7cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 110552 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 ChpsgM diff --git a/SourceSerif4-Bold.ttf.woff2 b/SourceSerif4-Bold.ttf.woff2 deleted file mode 100644 index db57d21455c94e80aa7cca25cac803a08e1b01ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81320 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

;h!HL`TlXw`&F}- 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 diff --git a/SourceSerif4-It.ttf.woff b/SourceSerif4-It.ttf.woff deleted file mode 100644 index 2a34b5c42a8aaca17a3c6a37a33489ab0cf2193f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78108 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 diff --git a/SourceSerif4-It.ttf.woff2 b/SourceSerif4-It.ttf.woff2 deleted file mode 100644 index 1cbc021a3aa22e1469542d531e9115fb78d497ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59860 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 z 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 diff --git a/SourceSerif4-LICENSE.md b/SourceSerif4-LICENSE.md deleted file mode 100644 index 68ea18924..000000000 --- a/SourceSerif4-LICENSE.md +++ /dev/null @@ -1,93 +0,0 @@ -Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe in the United States and/or other countries. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. - -This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/SourceSerif4-Regular.ttf.woff b/SourceSerif4-Regular.ttf.woff deleted file mode 100644 index 45a5521ab0c77a02ebf55a3f7305faccc02e2894..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 103604 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ä>{ge#)@GR4TVa#d)Gs!sZ)OX1V0X zH?NNkz9s#+^fxQZs-T|+f+8L(?w;iOYA+BP=z8Cy(1fq+zwm^umoLws_4Cv5#*h(X&zO40?`uo!s;MhQS8vODo5U0UWwx~Tk*8jB9hD|#s`C2Y?e*Gz zEQC#Gy?4yI&b=EgUy5p_wqExYkUi<6&Dh0gSyX!ROG?p!zmasa^^(R)r;Ro>{J3 z`fAbIi!1;2Zr^@~WA#b}u7knhU+%(0F$CtB}Us;;G&>??A?UC5%_;}-*{JHnV zy-Td-J`gP4yHx4b7MI$aUElKJH}71e|0a9G_ho0^_I0h>vi@vo`}%d;Zpm$Xap;Q9 zX1%>k?;2M;(a7@(^gfnkqIHRP=iyVmjtzR5JZdp37pN!eS{6(^bYDz{wDV$L)PpTk$)%U51}WL~;3Dd(ih>fHw>@gKQy zjN#$XJV&Q)|G#tI+y^TjL?7Y& zQ6pxX{qXbj3!lAr-fy0L;q(3C{p`~hJ+J5RJNQ#re2%zIBTMc2;t=Wo4}b2mV!X?@ zZ$|d^tj7-|zH(pjvpJNdzRu-sfK(of<|8df%}FUcE?z#oG+ZFwbjjjly_+{n_fG6# zu|TX@)UJ?2rDrpE2ue{rCFi;n(Xp z{@%}?CdZJNq`%blWudL@H^bT491I=$=a?A|{JFL)J8Iwcn%v3Ja(5;F%k9w%dbj9a zLS&W0hu~klS%3cD2=DnfrH+}gbnf0O+_To@w&~vx{VjLKc=B$IJ_nYvAOHV~xC{9- zDfT*T-ZSq)Lx!f~zpoWb)~wllZt>?GQ~kEzURiRuzjSVD>csFnN$E=!Cv9|9(hFL# zo&9*pycU;9AF_@&n>9};aXa*_5>b(4($XhGU`#ci46uiaq zQ=GW(y{AW?G)`Q!zJJ-G!A_*3Es$&$Xxuql^P%4gM0ms;PE+uRx7eeq-TrpfSHRg2`+VdtB_IjCOw7kQC4q;75F3GIf%=lYblv3Diw88a|H zXXDsx9VRp3%8#ppKT8}0yCq|@X1WC}(%Tq)#;tbi{+PEPW>01Lqs6dvYMp!J&il*F zr$oQ`pe@vUCQP_rlj-uO4aeez_g&BFd9o>Xfz6$4)6OoNNssTX2od`9K@nZDnRydi=`r>27ySH!CnwPA9t!L?xS6Y+fg4S&GvY+s-+#>4o+r<90Yy48?ar?i?U->$7w@cm{ z-pJT_T0$}J*7h!OIyoWbTZhx->o4C1owQzbxA;cZKb40mtMrOk%?K-41al2Vy9kTWyad9)_gLn zeOqZ~)UqrF# zG5d}vHr;(zhdN6pI32ySlh3UB9HXYT+3S#}MKiZWEEW9Lw4T?%Zu{)kRIT9l`)^i; zPxtaFF^v6nrB1Ro?<((ReT@kQ`8~fXe!2%4E1Rto?|kk5_~Yk0=e~aa;JEGC{lC6v zE}0t#EZV5T&`^B5;$AF|$fH=p9WO2g9sK$wAw{hvht00|kNJzX+wy|70xKoGO*@5L z9+@nkzItQx?0-xDwp+zt$oZnl^vY}Nwl^=&bl;VK@oGWxdgX^Zj%BUX3!Rf^|osiaY6vAn@e z>#T|77vK5QPQH@<+P18|M~h$HvLwXv*Si@-8Pz7+k{v9|WGb3+&9bWnDmLxs+!mdi zd+^PK=x4W$jdp3f{H$|IJZ04PBjp`a-F%fh-R~AJ;VEw1`%=VCzW4Tlx9<&ppRd+8 z{+`|N`NUT4a=EAp|Gwtw1pnyx#CJu?SvSyQKhN7c9d^F_zjZRo3~suxzGKLcR9H1j zxAWqxbJrCnxOD5qxbi$%*RTK4|9VH4?^|B=6$vXWlUJ@+?DpEJ=ghcZP39*fkNp#a zpN5^jUj5JPQQP%4jaSa^?d*I64zJ%H$nVd5p>EmSUteO+NVs)z8>(#*Xo|Kdt8rC2 zn7dKq?JJRhh(y-KlTWxGw+?&l-hIq}gV2K)O4k&xu}Neq-d=2>JpIwyIZ?cGCYUW> zBY5rbhCQ2&5**DL4j!C1k8`Kvw7;z!F-)r7(QEJ3>Fi1WWg_$N_0=i6MDw#e7z$q6 zz7x7%(x8x5ZM#=7EA_zl?8zsNFLU}5c-FgAuIbLK5Qc`y%TK(W&%jag&2;PZ&{OvO zU1|&~%JOf@N67rw7CrYP;a$|sx*rN1Z@Z4aikigmhgVN%pQpX$-IwqAMfa689pjNN z-n~{bab4SMyJ+*H9XEGn%WXLl5`MVlR+yLbW%iQa`bG|Szsd{999?@XW!JO?7X!|` zGFhrD#>OvuyNWlZQ)3m&)YbDQA2Do*QFYrQ`0%b_V90Wlqo>`?MQi;HrYAC@J(d}Fxy(Z1LDJHmax3RSrtzbN~o)TaEw z=eHNvSOp&0vi;h+pqtry=WPjITC~j8mwi{a9(%$A-7L#0Zmv_JP7;5!Y;W8wSZXA6Ev&iLf9?BA)}X#XqR9ZSon-BY>JB0M)&@Ww`^Ge&E+ z{FEy8OJ$o9=Tn{3y7!yW{I!eUJ@|J0<y%Q~>P@ds3A4XrtQFO9>)JG{{uJ*$ zVXIzz-pXej+&!sh*3TJ7-rY#v&e6C$QBj7M_4c&IanB!U)$LCB`Lpszjd|2nUvGQm zvWu&=&Y7g2H{CeRv{>4x14+4aJ^mhL^fR<~u#m(*4Se`~1F6NvTb|Q23xAY!6 zj&IBh=Dy3BF=0j5Q#1d4SubXP6h0EOeC4#QQ3_85PONZMo#)A1wdSPe6zx05%H75F ztF(2Q{Q6|iX^12+ObGZSBJiWmIV<>jKf6O2XG5I=yMyt~%NB}(V$XHg{F}+}$N6q( ztnEwogl&hX^hE`f1gJR|I%ZksbeSw;Soh|Gz@`m1j9GOJZ>%^N7I!dnF~q_4c>u?b(stQ4$ProA*a-0aq>*B-jtMOfDDzu51`#K*xh z=Z(nCQg@d zPk8+xG(+}C*f#zO-59&w53A&aryrjd@kDCNmTULiYZyFr!?R;I-?Q7HGU58k=`1y~ zs$CvcKAAYRq}*wN>&EMxD^{oM_$Aw^{5#Ng*V9;U|LVR)qRWM*ED~8}!0_+k!)u(b zJ0E>^Fk!9J_gVG+>hCRYqmvfe7T3!v@MQ-rI)1SFL)=0awJ7d`yA%&UaXZR8xoyKm zPl0{sveNw}GJ~Xh6Ayo@7JXV2w#|Lx0fh~ZUj4eJ@bH}D!QIWXW;utgS`-jFy_dzg zW$os5zc0zXI{(ym@AOjhlE{uX;+)z1jFV=+dTp+%9N>JTEVcG>=xnpO8FlZce%W^H zSZ-!aeyZ@2^pva73;kWYi;5?+JX=0HUf#xXP5G}?I(iCP>jS2q?%KNPbWv(V9`l0L z*K-WB&#FGUv_ZN0a8cjc<2$Y{ToY1aeZPzC@>9)=(RZ|>j_((VB}LoAXb{Y}V5 zbEw`; z`#t}I_AhbQm7A0df8Ku=wI}A++USh)i)1Usq_4e=6nVa5f=hha`jeM;)b3Ijz8nCm~ z_v<{#HIcbvI%}<<)artJ8x~GpT4|knPW`i`h4ta=UGGIUl|SvOJ#pm!uUD?W7j$^< zuPl$dY8PYOyl%olkJt$j8*P|{f-X#-ykn#AT$`_wa~AJ=ccwVvT33}nPkh9pg==~| zoGbSz-0uqgymHdi+FA3>c*M8FJYCKoTN|wB{9~8!_JFJN*WB%6&`3;W+AqAJ{Pu-c z8m)iw+w#|G#4P4A+7mE!Rr@l9+4A}UD_-St9u19Ixr%4sZt=HwUVkokT(n0{-{#0_ ztGypMlJ(!FrO1m-*x-Z@T5SM{!8ENMHg2sY&iGbUTC}0uAQ%xf+b&uhKP48 z*An2j-x1o#Rnihc z*Am*7XL)XMi`&pN^V-$wb)u6Vhy~V|2$fF1I&od*|0h@H-aT&hOKtP{2`y^_>u!ox z?cP#tKNMtf3Rs?tok@(lhgaxE7Ek9s6V_V5WBy%<(%*58Ll^t4{XrOezEM> zvH$<`N|N0dx5x`|NNB(F%s3huw(XI?_a8dj-gF<>(9~LHT>DPuq7v(bY3ZS}Cq8#E z*KaDX@GJeSa4Y04kJA1N^->p8d{d3Cc zt$)|uy(t#<=7w%YjJ2=n`5gV8r+M>M?z7s*Bs~9Pki(JAQiXHh{Y2P)MQ_Vb>gCv} zzT!h9gT{TwDWWn_zw`=QZYT*Xl;G|vSn*&L@8+D4PL>Y!Lbu9E*YpaGS#E8+bHUc| zBJaC*GiSUwX=in*WW(am4wp|@EBpSowtm3A;9ay1qr11*uixU`o6SY@&+mIa?P|xQ z?z^_!nu)wiueP|XY@PS+=oAf=V(x$ZD>>t*RWMHJVa`c&6lp!br@UTyondCc?QL({ zw!Srcr*-Yvy$adr`YjjbZ|A)^_UdHy_KwXn@63Fkpx59tnOWRThPj0C6dQL)N+-jQ z_VuUOD$`tVI$ny=+$~`&KjmqxdV}udFup}cRtEAZKFwfHG}#e(N>F5{@F~M9JJnBd zUf*?p%H#}=Wi@6F?jJmFCTKo+e}0+0$gf2?8^pY-V|@2(#w^S+5WL4=InQ~&>YwnN z30i+NEH5e9&M7-L;mQKuuvbgmUVMBv#V&K<66C2gw$rIvK(+W%ziwz{%FjCYAwd|{U7-W!KB%{KVXJ8r92=xX;Y+ptSG$7t_? zndR%7C4Y;l-cXLenD1TsN3djAhId+zFM zmHKfhHSgxkl(clZ#h-ukf5Sw}Te0iXYxuui+$*&Es27j^A+go^u6u&r)IYEI%lVky zXf^J$y6 zT)F=aD4#rY@5K8VGnQ=2&E34O^NQ%{>Q&c0=Ko&0A^K^`(}XQfq5An(jP-AP?w7K@ zey{r7^wlfxAGw^Du(bA6*$>&7op&!Un^f4WQ{%KMO7(~Sr&;GOvZ}vi56fG0|C36c zO_`9rTiu>@;uE%Ch&e6yZ0@Pa|2CJ0%~!ZD``f$1@LT@|saKL_{?q!1a$m zqc6*Z9bbFyk-Xr&uBi+R6^uCtgPTMd7#uEEv)|nI?55nagPV`fyuGq^$^K~*_BNYM z{Cn4u=fnB+*Ps08e|Y?W0%KDPhp?hoj|JzXB_5L%z58rfyQWB__7tkkNa>pFV|-Yr zc*@FvrEYWCe51C!ys*@Lex+DMN@r?V#8W2mo#&0`eQ3z$vv@J#@VdgauVdb`neRGz zHm`8??H%vR-W4><|0!y>zWX%q`;O`2cb=^LUGc7tzv6LT7D)}~*?1+* zlCI1s6jt;7*fxF7qpg|yW*KIm+r!#DO{Vlrq57PXQCb-Fk9FiL zUdz0%IFWlgY)#bWyu-_MZyF|1DSNZJZnz|}v zb>M2hy==X+OtLR#ttmYAympt5!9|tHzJ^z~>@kXszV~dgWZE)~R!zT5uQNusWs1)l z-)G|1-E>39TX*xFt|^f-zfF0*J|cCiX~b&VsVhCE_Ju^J@8vbSm9klP+pV5RvI7BlOX&nY_=`Fu|KLD%UqWvb_6OV5^? z-|=aV&fC2>+JDxi73OC%eY@@cvfU{?U(0Xvn0x}W|3cB{qXP?-kNeHBDt>opsrL1} zJG+YCA6%?{KJJe&3;*j<1_lwf^WU!@+gI0D6fYh4_DWjL?Q2^l7jMhGee6t0nnAF# ziO*t_D7LR*rkhRTLeE@t_&PCK&hlx{^j%jMg_*AMJe)ec+44;2@<*n=%_b3(O;Xmv#4&4@$^b;Rof6$8+kPA+JR1vi4+|=Pc@$M>EeAOe>!AoJoA=k<@hsQ?p~9vzhNa zn)|LG{9;y^{ZWmu$~%wk_$y8*%YANHZu8huzv85J+~>CKdmis?s(GM1|4O{=uSMs7 zol4*LVQPNO^Y*q^bMKu#?caMRq%Sp#cF4xwq#vi=e%6+Zq=7p zm-7!SP(19`BW0X-Xo=?Kv@^4eK`De2R}xX07rU$I?Xk7i-{t;sHnGQ8GcYhD=)d$$ zzr8KD{`R)q+uM3|vt-Y&=p%IY(9)K34OYWt4ktjpb)Cov2MYM^~A?Hp{uS zDfjp~+u#3wJqLxm00RR9gN_c^N4dA(eZBRMg+oL|LeZ&}Q(Q4@tR+z<2z=cXKYpo#|`qnOL~!7F2vPRz+`) ztTcYE7XwQZHdUYA99?bx-md1?r?3Rq6l(k=1oxI$i2O-5>#>=UboiU{O;Ea z!TMjWxyS$gVt&A(naAu%z+oQqLmrEJ%#KAo?lC{;GTF!MXvk$B^TR%y&zK#L`Fv*k z0jF-AZAXGm>uf*dwR+9AV^OcyY(MBWJ7?R`u-iG?5Bu$Yv+X#v_?9U<5_nvu{E#O~ zv3)f3dQACY-|ctGj>mq#^ZkHxzsw@Z6`oWtG2Io_tQE#+OXMR1B4 z<3+Z%b9w<^)dFrwdd+ss5^?QzcS!u#MWJyk zp9ZB*HI84kYz3R^I;}k`^xgWK;!0J6~ zqVV&|sY|rq?z33pkYP|1w=y+0^SP)W^R*9Ou4+B+WK}M5I(I@s=EphdB^Aj_BYX}V zoDj%dFvvOzqi^}E^A?e^h5v*X&k%iGBIT&nIssKKZ=VxXm@? z&fgy6mo<8ma%%s7mRJ8gbNgrGJas-Th2u}A@SIePmYuNp-1EbXM}-S6KCc3sW+r~( zXO>m@emN`K-@Cj@7M@;GvTq&t*XZ5%`}-4xjQ<|^ndh`aW}@)(cF)_tFV+QA#QpP} zv-aY_l#8J=Qct&S|aXBEhMC zdNRD5pOsu}zh-jZKG%Obt3WZ|JK${TDjP&A&aSHOIc! zt>s?3IV5#;%F87`1eSeM>GHdLSVd}bu#t-R1BC*kB`4l^ny}tJXqyS7eWtU;eC$is zy}fCow)`A#+U2t!bGZCW(kI)`nIvcN$xrX!Y?JfnpLxz+o;9!A@ADsX!}|JJ`&a&q z{+d@Z(Oxq+H1D0{%(xk@)4A2pZ&|Qw%GJAB!5NX|`k!_g_|!?)&y4BZpTlP-ym0c@ zWs@3o3^~vF?9j?8>BLCu~im7Qglt<=S-x-FZU zTN0Q#C;kzb6qls3`-s9$jVIF-Cht1CC&c=s&XhAwDPpZ>lvFlzoYZki3p}C2HB+!?ebk}^Z-NM+PY0uPKIioj(R&XieCOh>7Cjs1y6H#gwEU$N z9j}DM#Po%ZI(vRxMvbe!%)csDgD5+dYQ-#_|Kz512m){$QzL+s6>!n17)B0sDf6;snk$47@Q6 z*$K=l2mBw1Phg5xU@l5v|HCWdz!~De`-e@hQTu_^j)%vu*0=|s7B@Dj^YHom`s}E?`yfK z+4$$KTdTa*C(QhIGVuDJto7wF{hssZ%#qw*bN*t}oWqgwJ#H#*9xuGVw##Mh%t8sa zCmk|}_n+D^uQ_o37asSx`A4eWu)f=-H+iYo<~^4zwjNOb*=!Os!BE2Ygr=pkvylw!D2L4;0dT;$*(O+|i|JRA*e;4G+e{X(PH#c(E?G={;!dHC`$=$w6`u!=Dvzsr= z_r6rgJ2T&`*Q$1&`KP6~-cI@Km3uz?)w$Qd&dvUHZu^qoWwTHGk14;WsxEI<`8;{k zy;YO_SG}uqTQ#|S_7jz?dF82>jDLq#PMiLH$K=R6z1k7yQ$vX&$0QxO zqK*A;_TGJEYE&{M^IgoWXz${=Q~k8BUd{RF7A2CN8s)R(X#BFHBD!f`=dNBdJNfnG zMVaeN&W8FHo6f#%+N(Qzd1P79O{s9xPt~t3tlAcR^>^6hZC8)vnQo6>`!?+L;;_%# zt{yLAOa9p|dPgeoc8!nU$q93sH?sFVHdb}kzuLL$zSd5&FZ?GGkEiVae>^Vzx8b&Z z{H6y_?MZv^)wBQ0$p)DT&P6VLCpj%u(^EX$p3Lbv$@-&S?G4k@JO!==1$S>RwK>Kr zAM5_~`mWQjvcEg%eUqKjqgKeKYxPCKAn8yKtG3x2i-JdobfucbWUEkmHDZ&6Hy>6A zYvvOc%SkeRvEiZ6ZpU`c*%mxeg;G2-Hgud$Jk;cU$L|ZKS!|eQEq3hYvt{dV zi`SZO&W?ialiiZVBCB2dCAG^oMt-?b*nM}=@t#;2zU>yeZf7EnJ~d1}s+;$}=i@{B z&&kuSzdZeX`lW4i;^OL-y}pB6T3ID8JLlB` ztCilX|EW$)v=GW+HF^XEf~5AS#?{jK``n{9dj)lC=L|NcF<=-b2B z`~9Dbr$3)B|7r7^r_q(R{F2<)tlxfldUfu<_NE;Qj0zkK3}Wx@KHXD4F`0Q8Mn7o% zf)z{FELwH#wn=~P@lb^>KdbM)uWLJdQg!%MCCks%K7R3Z&f)*|=XQ4Jetp$>(}8iR zmgUunae1FkAHMfr$oE&jhSkfJf2t0dKK60{`=xi5b$?f1F8A~erV&@(bUCv~8#Jul z&~f|Cg(hW*gM4oevRx76uey5IH0;Xzp7OV`(+=+cZ6+?Uf70*8>+d}Iv@gj(FR7p> zNN@Arvp&~Ozg~HkL+z}3`}L5+vv1rIzMSTsDR(dAaCOg}cb!F=QM-D6JKQzt8I7$&y2cr)qp7ILuZW&i4FLI$PGR)y>WLtX=tg?`_8yO+OmEEpge^!1FS` z!M)Emw|>32xsqqT;Nf)c@28C!?o_ceU2dM+KP&J5;p-OX#NCpey!hak1>IMK znM$vhvRH5Uo+a)gp;ECn`R}dgSMKu9Wv^Z0xz6ZrUc|j7!7sne`&MP{testQHGfCe z?JNGx=AQ%huUu#sZ8Imp{Py}+8-KICIl!<@;a;Dz#(B9PJ6Ux+W4LAg;k*VEr^*O9ndYT4_P|6Ww36%_rQnN!NSJ!<_|Js!6W zm;dyBH}kEueWu9wNz&+^_y2z@JZeHz?t~k8z1Y>fEM~`vg7~dMygOo)ZmeFR@H*(i zgp0jBd)E8LIA7e6B_&m$>bh^|45eMaU)k^7_wDsn|6A*?*qD3>WBy)L>DnEe7-%mZ zS<`-{`2F6$7uz1^PUhCzRPL&BSW{H=_|NW51!g6G4wu*e|918LPxUEP-#4k%-2Ssl zruJ)enB>2cn|CHNT5K0;xEj&(>lo99Ut$e+|2>iMWVp5``zX`(ZsQ1sbGbj?s)TPhb?_Gq>N4=wK&dl@ud-6fz#m7dX zrhZ?d7bNedSli*E&54;qvxniD_hvY1ZArsJw&Kx`6%L1BSi_ zay}0hCS@EDl{jE}qe+J*1CDnGSsvwIZqPPp$lkzep1`s_f&JY9Ihg~3 zcbYkm-0w)gE&1r?I!0!RgM3Hk?qg)W(Y(XhB!NNs#HNjmo$vQCMjJF)%wz(|Zf?%$ z-+A!!|5KN4U(^mv%Uke#_NBdxT3auz^S(W;Ecn(BgYKmL(fZoTwVCbz8QHk5RWUFy zFfuSOa4;}1urTm3FlDBs<`?DX<}t9ixcP)INF`Sm*wR42=Jy!6ql%;}!l-fN`8uilB8a9hDEM{8%U(stQx!s{p8_ARRR%G>|8f9L7e znKr`DKE=#9|2gu})4fc)SA`!nyT@i-nJ)9Dxv%XF6-b)uwe!s~@^6G^p zcCV7xF-kQwn{c#eaP(c$kXdYK5%;)oliFh^-6Kb%dbGD(S`r#{G;Y1`4%g^{_Ob_h zZ;$Q0)y-Za(Emb1?z*SV^5P0d@ei}|9_ZdZ#$MIX|5alCOUZo~vTIgv{}Cwvar3?h z=Cz0C|7xxOdfui&U>RqoL99o6q?6ehd9H++0c_fBT@kh+$7d}xyT)6(u`Z*b*Eu;y zYF1MBg-as0+7jPbChD!@TKyr$qP_fZY>mvk8SdR}naNQ)GTh12Z?IM$v%8`H?XY8^ z0AHtbVTDZJ;zt=W;>RB!v5-tZB59$0?vQGs0{1(OyC3Hjd+YGlubZ%wYqdfB z#u;8onp4ffBd4ZLf4qO$pV?E&Km3n2%~(^xc;z~4gzR-O)(2a^&y3M4DJt9@P}FVf z#3}aZU7pLUBchpd3&qMa?`V{ke>YoaQu=+`uHDvqj9+)#{`~TD?)yL0XXhDLw>j`I zDKNdCEo8CxH=kVVgCpFlv?rKvttzry7SgkR<)NPi3=39vnlcr7IE!pa-+xKqlH0Uz zJc{o>gdXJVaPK~x&Lz&tA!}!x(dRO!}Qv1qI_;&>f56ImeWCy?f?D_X3Po!5*Giz8gG5R zuRiiD;{;9x76nlUp#}?vK!zBGx(0t+mbx3fO0qjO+}yt$ahS4*jeDbz^bUUm`8E6Y z94=LjIJ{eaUH3!bXyr!_f}{O!v={skESP*}!tBRlyWZY?mselDqk5I~xw+5Im7FgZ zKa|h^*sm~s_iF{S?&#_raYZ}g60e)SW8{c2S-^7PW|{6E`}OYEifr_6r}SSrExavn z^7AL6nG?Q04gMKbH|2il)%1y_}T0K6dMNzAF!{+|FO&wDMiO#V!5z zJ*U{b>gaV#yp1~oUD&(`u)7(<+{*)WHE>`~mlx}bc&t*g)Y7#W}ODPC8T z^~|d|a!poP)<)Zq-Lo`gldsLxeI`^adOv@`y`;PioAZso&uBlRSA4)`S?Dv#-KW)N zAHVTZf2R2vvEA=uckh`iKU@Fo_h;ekedp!Y2|re`%=B9}`L&2u?%Z?Fyq9mjeEH>j zo>Di<<<^hqX!^AV=k9)PZMS>*X4_}hi{EU#@~!4v>p8aN*B;iEJxe`jx~+P0aeMLn z&1Y{uzHn+qj-zP_3El z7RP&$Mas=_vu)t%Hy6ZAI?q{B7QkgTcW!E1REP_MP{m`Df0p*?x;Ozr^|19N#nJ z+oHuQHH9z>Tr`WWIUr4zA`-e#UWA{ILT6LTrb69eDJ-0pa+<5lw z($!z4H5$bnJ2BJ9ahd1TD<^UyHBP7Y=1j8M>9lV1-{>cLl@4Vm>?~FMPjY{nwMSR} zR%M;_6_M^dPi)Z;WKEHhV#W>1g_eB%`Kd0unCudsmRy^`byZmJHwxs2K zW%+;ZmPHv|FFOBti>!6{$5*oRcJ$2^e<^$?_{g0TdnWv>-Zka-{)GMVwzH2_Bxx6$ zvgRgkop_!r{a@d@=T|ju&6@jrhWh2AGPwn-XNTSL^Z&;EQsUeD<-BjET;ls8_v%uL zze(jUwI9o5zgMg9+3jxPP?WCJ_*V7F%4PA^*;{?Q6*onRMZTZTzQ+Ev+-?4om&=0o zt$(t^)3U?rmv!&{^8sDKfo+~M8fRLF7jK;Lo8h8}f98iH)@Q6=Fz%W??^WmDGs!Qf zzsX6jn`(FDoc0;}5E6IaONnls0P zVmf$N98KN9X8w@xPJ8Z+<|>=U=l}lQ7y9DvAAIzW;pfaV{l@*t_s-mzwzIL4>+|F@ zk7vG~>7V$ot&;ci_cP)K`;Xhq{Av6w@=U(b`Gy%PlS}T*Ut{^d;O|}k?90!uRG9rc zFvn^4MYEEYP{z+(+DZHyl=SC{?%khyH1c*t;XB2!mZMNy&e=iE{w2-XKXsr=h zAmFOumOW(wFI%$Wx?{aNIDda+u{-kqhjR~$iUwfG9ENvk(r z`4;q?|H!u7+jo*~n_WxrJ$7T;>P8VIE6uRwHXr-3CSwVwv%mY^W zAIcJ)9&T(!6WeP<7I37la8O+p*j{C_P;zaCvvt*lc1E5gj>8fMRniRlU3C&AwIdFT zm2K#*m3b(!|HJIAbdGt?UE`jK#y#b|_r%%mvGl&j)pZZl>mG*xTOd}t(!Eyd!UQ*y zWt_g5ZpBd-CWUQT#+#ezUTt+@qF>1}?%0>dB#s$1+sZuVNq1Eif6_OjV`)U^)*Bsj zEjqh*bnUL_-2S6;Ka1A{7Vj1p&#on2vr@dKO*y%L|I&i*?`s1O|G&KB-}?QhX8!uG z^zZ5Xqq297%P%|47}l@Qb*S8Q-pbtD+j{nj98bldE_n^Q3!sSN>_vUeTVfA5JAa zTgUk=*k|*~sj}K#GW^{&MS^cK;t5~)B-tG6w=O3&) z%X@mO-IQV@3;8=d@0?ZdJF}@iY5y7~{kgAgu9+-PxqGQ&PKt?jltgTgoV$Ib+qGG` zDcv`{w#~PFcJrslzB%uoi2qFfH)a1b`Jd(g!dsN~YiPad-nMA>3vIUUiAj4bG}d+9 zH`@M2Q~dPhPm6`Lc5AKHTD>i6gVf4rtG8xtzO_>BRnx8=daJcxw^eP~x90w<^T*5& zeKBJ`TVQ<6$ISR_UGbG8Gao-&%e!{7Z*IQzg}!aZZ?mee%-gd3ZD{rFdt1-H4R`n3 zxkYdP>Q}FJPg}QF`bFFB&b)omugrGO)q7{ZJB{(~v5QAO-n_eeTiAx)QxbZ`hu>HK zF*G)wHgo38oePT&XW4C;v?z3ouJwxIi06w+wO(`O-K*OleLpxRZQa*@ySHyP{y%qS z>+85%^>zQNf7@%gnQdM8b7!y5X5OWZVS#4PGu5R}$33{cZH3ych_zc|tCXWJMoN3e zS20(e{xa{xtBiolZ@FKEN-r!Gi}JP7mfR~V)|`9R`u4LF=8EJBWgR`&*8y9i=3Yz4 zERbS$xye`Y`NOk|R!+MOsANH)h8Zfir+V|Ki+gFE43;X-lL{+{~`qu5g#dPZgpFdG%+unY$QJCGR zd!Rn^Kfg(n%?x%i#dw}+4NDiWFkN7r*7!7mHG(tjCVR;Ax$Cvc_T4*jZ~b;Q=eM#| z5)yoF4HFZpH!$B2e8W=4R==75#s22{gw6Ul`k((@$w67r%2b&|B6F-%@7-jCvTe`MC_rR@JA-ZoCC2iW4 zT1(uvlRM>HmWN&h2dxW|FVJ9PKkL*K+6aeNUm$={|LoASr(Lf-0U8qvo7 zH@eavyor}z%X+?h0q>UP)@^Pkp)=k!uY6@Q)2X)j)p8~MwToVy?wr4F@rvs&ce(vi z)K%ua!=>n~S`Xlw&{-dcGhM(MX8~D?O z59ipj97{VnLv)*A>Y9q$6zTFq{zuwV^wJ(XPqvKPmiA`7;WwA{`pZ{Ncj3)%jd>cA zCv|DN)1-FGXVI4u>hvTR^;|X;F+L?TeXEv~>aqB?EnQn&-2P{Gd%i4_o4GjUnnq;w zN#jXhJGBS7< z+chaY=eg(pd+$9z>ni<_d@*zPghe+;HdD~2nd|={Hl{gil zBFOecwN}~KPfFGBfxXm`162xbR}MGXpE`C#XqTbdqR3;D52U{HI6l*Rv0k!ZqM+); z?tZuOS+@_k`t(<urcloyXdOn|Ljz(XeOk`X1;BDGboprw>jP@@&=6<|k{-fn# zbyokRbRwI#yh#3cIxF$6(t)Onm&0bfn6Q0~#vAnjKc)7+_YJuJA3kpVFk<^Z{ii%y z1#DMuq)NWmKJ$rpj*4{GrmJ7}??^kmL8NWXy>o5`AsbF5UOgf=yFFF7ddrMAf%$XR zTC@r0@_0K=nSRjyxp$P*XMt~LUu+19`FFE)!@VB;a;85{%1+8DQyK)5&L1cfw3)r& z?u<27e^%`D2;w%0KD+px3GYUZ4H}PwJN%jV>@!IDm@Q&@|L%v4ZT+b=JqbtspQSM$ z(=m7^vu1I~?yfXbNpb(fCPI^cbiU($F)iq(TE(Rnby1tn4=M3Bnh#GdEr@+3c_HC@ z`{t96Z%gh`jPq&vZMDbZ(EanzK0FcoUs51;Ui_xbW6=+em-1 zF9#PHZ?jIA_9FAh^}rviI(3)H?tT+~`Frr}A9McR{#dd<^5Km#pEQYW?K#$$Rz|p1 zgdg4QS2e@>J;UvXvMk?kp3GY^M`Ko*xxeLgwZ|{MWQe`gR65;Vxcq2D`6t#zmyHdc zWwM{V)YQF6N$#!VKehi6CZmUDVfrQWCXJgl=Ks&!!CGgsr;rslKTmd{wuQQ7fFXM3CX3I8cPwXVNDEz)p49+r~py7Jo16aQ6i zf7g>OW_;Uu(mXL?(tr8I|3cFY;$y!(nz!FW?6gp%mMZ5G=V>R4A{DiNp8DBgbm#T= zaQ1@5`~B{&S++Xu>Y}L7z^yA=vo=wzV^xly5Gedm(EZ=U;S!M6;c>A7YQ8Sr)XSehoySQoj2D7UU z?+vVJlsqo`N4zHYr*wQs-e>mThyTj{iT!i;@7}+L|03$=*w0(9-u`3xkLAD9e?I?o z^hwbFqW@m?i|ivy_NN~aemVbb{R*Bb%`Q0^^EaHob>f)9mPXxO%UMEC`8~Mxa{aR{ zR;sf-o)-U2Uu>eEnP!*$Z~yk4#jhFemVW-VPW{n2m$Q)RyG*mxTdr)a-w)U59G44f zzaqHyp8c))-I6tbau>bdcD^pD7eNgpATh7Q`{u7?uYg#Y*S4P`@{)e6QrqAro z%>5FcHfwk0wjHw{=iZS#UgZ6xPa}%$#IOJ97i1dr?F3_c3!6bM!R(cudSHU>x9jgT# zCr@ggHBH*l_f5x!SymE?&4*2_P40vpRAp9mci{3;Ji2hn0;9wuiKR1wFp)y&@ zakgaA+q4CompptY`ek)}2@+13FiUZ=h}^Af7v^sA6r32F)hDCD?OYk+CJ=gosc%|_ z{=0^{NB@Kj8I+GGFYK-HIi_VB+sj*2=9C}&=CEbUk;<4$fAt?vdsi?0>s9;jiUnt! zH5=T61o}S)uYWQ9s7r8nD(8g@LQz63o0lvLPdus1Di!VJt?8G#^2kcvUW>I$MVD{> z@`z`ebyFe6?ycg&U%aaqN3v4g;uGqZS>2`ID6#mTHRSQ{~0xHxOVoK z!k*r(oE-_mxok?ed}cR4GrRsw%l`f|?e%}zKPE-5{iAogRb$)jGUdihX4#Lq>)*P{ z-A?~~;n26+bx*c4moaR7vq07*&pM@D;O4nokw2fm-809#%u`tJcB=1=q;Qjmt75OV zWS990ue)8Unty}WcSolA)cvX3O&)H$>!`9j`}>5;?{3$AG_LM@@$Jx;a=+?K{lL?4 zH?==zSL@cLzn^gZ-tFowTll{@{<&z^Wq;HB$>#UpWG}wi{?{$U+&t7Olv&Opj=xGk z*S4iyp#95)M*(tTKW+B3hpR1e59xg~F*JF{wicUp$DQ^1-+w&HX`}e6BFMje$Gpqj zircn-30v_tckkLP_xCGq9o?-k@B5c|kM7-z-n#yK=-cOi1&;r&uK&m&uOauQIkf#( zfaT%ZC9f>xm)|>S7in{K`6|EfGgob{**58OZR3v_^3Epz-^2^t-Ty26$cOxYyj%b5 zuAlz-cD=HY_Xd`rO)B1sqTZXg?BF@waeCvNtjcNbQeg?Mg{onfE}vS{bY;!4tWT>q zxBa=brguxuA+<-(a`djX@od^`8m(-*RlT|7&56Df2lU=F^}IQ??$hqgyN&kV@ZQS* zTS55uru94Qe|NJNOsFtmUtO-zzN%cJU6H-Lc*h?>nU!ZW`h@zQW&BLGa64zwH{G~V zxa3sMIXBL84{fGAt2yWHsrP{Cqm!PCWLCS^o}SZB)<59-=(WxzdflU}k5cOd*FTM# z^2lnPbK<(^Ra+jhpHeaY9rb(X z|IVtM(0-)7GUEBav-^+!{~(|G?`i#`|3CMivpS^wDA{J&AI^Cq^B-x>t!_&{l3p41 zv)D%6?)>Ld8P~a8D>|o7*?H#luB)PPS1)JpQG0H+elbh_r)6`Z_bmOBdr$2C!`O}g zeytFe|G;?bv!MK9wfUbkSACY8zffuZXG^Pq-N~QgKbx-l$a}x*{>QmS?|;VqnJ9mB z{twQlKWEMloD=`U^;~$})t3A}%g&V7xf}j_;QvwoU(ly=h82<<8WuVqVAkVfXJEySrM3XL9Bz?MG)Goe7$Le^u=AS3P>) zD}Njc@0!-Jghk;%o>RA7nXDqmM7gej%0mKreGV;i9aNN#UhJ4=&t_OAxUplhP=Cel z78aEis)C(ClP08yPv}W0*lvN^3*pnTfZ?aOWtl%y}{k`_lEoD9y0K0ycOuv zc&O2rRmF3BiTv@xuk#Lge$XCXy(&`1VwjYc4Y`9v{Iepf?L)x0_KSupw%Rln| z!#SCX{_oF@xYwA72Tjb%Te8?qw=`qYX357zehF?i?UlBA54bhsA9-)BX*5t$<6Y<3}GV<0v(TYBK^~!HE*^(Q~Rxh{cmR!t@e!0;7 z&C>8a)3U$r=zIM};d*g%g|d0puFl!H(%Xwxf62Y0S1VqAv+UjTx{r)<0`iX%x7s{X z-hJkHO;-NTp7U>{=6~M#gEjs}?Y<}8)&9AvUKc|zf3MO1cYwdFRsN^voKqo%QkUPz zU7nd2KJy??^3=QM{T{n(J$tFRi)Gojl87EQnPRB!$EK$L%b)dS)KCIN@m7Zn4Bz=2^$G#WGWkjv4Mg!|CTS^U0Dw!E=QCi`{HaTYf!P z9C%7-`jePvoAz!z|4;qCjpRIzCWAc|RoBxWvMYZ4BWhwMHB(8m?b)Q7cU*J5^|ce< z9)26+`QCQsmw7kKpWWT7zVo;L+x0x(=ilv5llba%ZF@Y&4y);3>yLHREG%Sm?l!Qx zB6KNgva`Ka#;QZFe`$tJKRmVQ!tsOeIds{>#br1rzV@E`Dv`;>*JO1RQ-|7;_CWr{ zua|qo<mEkZ{EK$n&ebTlT76mycYf*>APnu{B&}-FF@KV=k3>wi>-X zyMBm>R`=FdEV{S5F!xe5hxu#!s+Qj+ZgqJJPT!N%Id;iw&%%3>`@VHK$n46>Tw26Y zq5n&D{oOmvm-G(Z?>1XHx#&gZJhi;3A%~JLp6IEPO1s%3Rw-4rKd+R9tMhljVzsUF zS?uKY-6{@v@OIBdCHGFL_bWbD)$n94p1jL`;e?I%%zAb@Fuy*g z+o)>7-|$bBM?&oXEq|uhaNBJW1CRY$74^Uqo*`*z&)QDrNe2a|@yHn)8}rE+8(%(P zc=&*$Rf$Ex8A*!^w*QSKr(2rm$!`AsHcC75?)S{patqzq<3>d)j}70s&N{mzv_~Yt z@#U|dY#X=wEZz~7xAIBG&8d$ve_oyB8fO;&c#qPwG%ITrFEefDWIqA-$9~f~j)k4P z_+ztb@aq}cH>3O)E}6Jr^TIDZp~v@Dm9DahJbhuc<%>|oywHvaQKc}~j!;Ei?IX*% zUS3X`vWjJ?mg~w>0jr9ptYVtkl^irRBSe%>^zgz*79le2T_;uco^f9AOgVsi!*a_N z!HV}nI?P2M`nF00FSJoR?_qc;q{(Eel5eU?3hsv|F5Y({Q2t22)Qg&yau=wDKK;EK| zW|^xB?tdpN{&ynK{>cjaA`=G7RgQgG6BbK7S;1&It4GFE!Ts`t#ZOOM40xhpkh?5) z)`!IhWb*o^sEKGAxX(^r!s#uQ)@Q8lCA>&v#^kdnFSTg1J_{*cWwOwlahHi`EZ2pl zE1%^QZ!<~s2|l~?SxlzWET-apmhrPbEISaBqj&B2^cmhuZpLKkO;%&cnz8dxjIOUm zNWwbP>t4oEqBCBf{d%dzlXb?GkmALG{wC%#XMZs^pFMji=TfeKRR=Xfb-hB{gRU+P z*{TtmKP5}W%T#!&RAjv(RWfK?kcu3AjV z65YHrJu&q0+r@7er-~(+3T~8YkLYz>b4)30vcT$%9amM3Wa%VrJ!N;@EY+{qHkGZouDt0CI=(Ar~Ol;?^ym7%QM?+Zp)5e7{IV;r7 zt}ug`IXNeew-s$vl$SnrwC&S|g*7=E;?l1=d4Jvr5Hov{>|A+cLO<`<18pF2(NBR3 zV?s2#xKbB8*~vY5?D(@{LO=V{M~##Q@R;{N(AV!P3dQJy*Qua*W|{3PZrtRUYsv;=lJp3qQdzychtGRpFCLmsbId$ z5q0*Dk_|t6+-jC7+7-_&TOKR+$h5cOtkROSjm161Jvs-opIO;k>_6%BWT{|fWXn#S zvfsO#Q#j8VaivE#Ztgi08TLR&yI`86#c8fNsUqh#38l|$+`Q&MWZGkp@Xfr==tXe? zJGfIP-+p0sDy@9u?g%qweX(ar1!CffhBvyJS6TF&$_||RbwyY2k|l{6*%yVy4I{g! zT4;10bibyg{Mt~EoxMp9Tm|gbaM@8)8 zc&_>dyl?;9lNYUdix0bZuHWa~5oXkV_Hpw&t-G(yzO>A*nX~A>TlxP<-Vsl>oxka1^*v~R-1YPO z#O&tXX*NEdqW{?3QXSf#GYFS))Hv4Va+Mh~0*S5Uby8YC=d`|n|%de`w1^#%J=eF+e zH0y0Q&%ND#<8AV%j&GM9?VTm-b0kmJc2eQW*9pCsW4ZRIeogZ(J^RwTQgey!|M&Su z$IeXoaqZ!J%{^0e&uQFp-?ve2%RjR@g-V6%ICr;w_L#HIa(DThj^dW$Db^~5dF;;) zf4S7HT>C}nVi3RDxz?1wx`DcHz5CoGbRwlvJ5sWjSTAYcdHIfJrPM|@o8DVmJEeBU za+&;kImtil!j1Pg-g{WN$NY}EE%?aF-O}B2)-@{^olV-?s;5?q8rM84Kl|a~qZg`8 zQ*NC3(D^{sEbh^t<6CSs!l$(|O6)aP-&UM-+sx`!Us-`b%%1wf4@}LbYyR>?|6kQV z-GytuRja?Pb*G5kR~A(z4QZC8jSEbKrl>Vt@(I{hVt3nWzSyjyC7*95YVEd~FScn@ z_>8~FvMXw%G)^m~S}xLYpYk-|ZSk2XKNI`qN1pcVn3G+n_wV|jE0?Exd=5UJpu`q@ zIzj2I|J-NG=N)&kNoziC@?nOX+~p(5vntPs^>gjp2g_cStyHCv*^V@tp z^PA;ax#c&Xn^ez9n}7LD;jCJ};)pvMd18ED>~+sP3;2K8DUa{uS;d`}O6Kjq<|qF> z&v(=^ka6y&ImXk9*D>uxz$;?%Huq z_4?0qrSCv= z2+plublJOPSEjFg=gUL`+b>JoSAO|8Nlx!mbN8BpiJ^L*&bfx|@X!|j`AEqULY&-r z!dU#|&J*H-m1;_sf|ZI8LRIOLm&+-gC5PB}=W}0)^mTa}GEyi#Wl;Ju~oG%BeXH zF2|-=Hg@}H6gL^EYZNnS&J1|Q5@)pZ4Ckyl4{GLIc*0UNSqS`lU z!(`U1O(#5rmRFwg5Sr`bw0>DI<$me(wfn>?TKOlI<&+|u6=qpW2WJzVe@=;x4SQJ zSB9d__UOfjRezTFzka!R>8rYC^Q*>BKmU|^x`1u^jSJ7?i-g2q@V5oEzH@Uozf<$? z>a$vY3)N>ErHV|x`TTUT+BuE4W^MoJ*qbKI8C!V$x_mpf1_){|FqrV?cH-H_zuR)I z-t_o*Fe=&Ms@|m&JLh_;)fwhjR~_0m=jp#mPxuVZ*lWy=;(onZcUSGU`QcMO&ssD; zM(pgl`KQd??0*N?e=^Mui%l#&X0f;Gbg06pR`_``9@4s2i-ul(=EvGBj zItPl%&hY3C*qD^P^5xz2a;ooiE*HnhJy|W0G5^t-4v!rlreDinwYSglQx7fOAk{N4h^Yaz9ldY~M6iQ{jdb(-mzbX-B z`B$rTKh8Z;<@S2r={n;z;Z|!tZ9SVmZ}ZK-+_Mt%exE7&Fz?@=xk0?OH|`l5b(KW? z|NZAIf0VZP*X8$i9M z;%_Wv1pidZoYhGYEAaU<=Xl-6uOhA=&AawKx_nUX#;3EMMV!@HU72Wleofl6t2UcwMS25+U)ahKFrj$+k7T{+s`vx^CO=c-%d$8zUOwLQGWc)GkTLFlZ{^c zJezxR%gi&zlV_$Ho%czbcJhqj%t*D*hf?OvJfqV)bGae6N!r9?I)yVL`92>?oM(AP zt^MXhgVQo;vk$Kkm?8RYlT&P%$7!w1n`t_?V^Z5!>=B&0cD+mL^c8Carf(P=I_C3ynp|9Gbi&{5=Sd0s%#V`|>nBwpRMgp@q_oWG znJ`(fsL0hX?&L{P%Su&s-y$O?KerPnJM_|G1P}X9>i?6{H9toqDah4lU5BTr;Z7yB z&?8TJQlkVXYa69O zKC3|Tnh$4&9C^|;BO7e;;q4E9r|AC?sPo}F?Ei3iiv1s%IzPV73ywcb|IDfpuH)YS z_1;h0KlgrrdHK?Zt)BdL^e@jr2;~Ti$hEkQF@D5#ZJ$*9jqxHNA_xz|4Ir;({`WVCJq$ag^lN z+OXh6lM?rLMFj3mlYl@N`hKK3nvLZZ{ZF#wMdtm)AwuH ze34Mkz^NivJp$*7go>J{?^$uCJL}ghKGRh}iy5;*La)uy%KpW9iNSG|@RC)@{?6{j z%ND=9utdst)uknEWzTvvr_Q|8(Ddxg#w-W-;zQF{)vP=<{T0`&;8P-+!H(|6hi9#_ znq@5O+iJ~QuzXeDGN<{ctY&dFuX>rGrIO{~8~iZvzj3+v>)yKwGRH*yo=i3jzEL#e z=aS=c9L9H@%2W4Ej7$%`HD$Nf+f!%GoH?_iuC6`ZNMKuPo!m(u``Ul28)vTQ&?+hF zoO`Nr#in?_wI6n?t~XzEQ{mK!ciU^um$|$6ukmoq>e}nw=ehWr?yTQwieEePS2otH zR6Fy%{^0z>Zr)|je=Zk!)pA9~|H`iqKR!xNSm_=x=W_M^^PeAtTc*TkZo0VdS*4S0 zX59aDuItm)e$NhnxA^<~EjDu=-}%K2c3t-K zg~jdVw+>%Q`CsyTTmQ}9sc)vp{64ns@V36KoDa(_n3d*W5Q2*Z);atJirETl>By+xYu$x2l`{{$YVZ2KBX)=OI|eWP z9_bree6INUoX1b3FO==8)4dw8+clOlnUG*fqW@Aj3KkJi8N{@QtHZE^c-CQ)&)hJGP)r}_gKBdmZ5|0$` z6o?qgJl$z`%(#ZZP{y4nTJW&rkqttIUzFPz*A&Qyy*SSPch9n0nT%5m9R8MBhuvrt zW!rejZ%qM{_M9VJyEhyXTT>vSDsz;bKe1_XNJf8R6Z4D*7HT)TIQbqmEVf8c<&!wT z`2Ar+oz}+ND-Px@{uwi1*o$6&o3UVi*XuH^b+;!TWDvdn_D2G{k%SAI z^~8gmDFs53Z=BeeuS9Ks+|0OY&GHEcjZ!vwEE5mhNQ)t#R zvS@-B!Kc_5g@$XXg}Ze8wl`d!I(bI&1*_g` zOHZCM%!p-;v}D_SIpwLu6F=qh%_r{Gf#}RlMLc!p&S8CyAJa~rGF+$Er8qFU4u8&t&9y%Z%Vs~Gz&j09@qkr^v9JNy~KDYno`hb<@Pp_;s;{LV0 zmN)#jm!CK5~H>7IP+kCNspV{zLk%Q#P;R& zO*wM^h0na#@!=IF=R51y_i(Gv|N800Pp%I~wO`dP>2;&T-k7O`?-m|N3EOwv_G2u*#D2QpC9L*bH!VLt z#{BpCr{#Sg;vWaM{<7}gCi*k(OfxiKQ+&|`r5XJU$o$fGWMEyzqK&z+=WwehZSF~dGN6M=E3XVZnigL9P5u?2-L4XA((srf6SSca`A1GGd3T-{piV& z>2`rXPC7l!eZpn`$!Pz}=WTIb^7~?P)4oi*6vBUeYmFAyyWja|wuWDS(wl3Yz2jB! zy_3!*b6#I_wEw-^ZvOsSgT?!A&e}NDJ10>g{;%erJ2&P%lvcOfv}8w|RQ&t(A`{)t zd_EArE_MO;I=v%PPw#9iI%W6Nxa;{IGxNpoO=JJ<>h$|%mnkLu(zo}fcV@yO+dCb{ zpMCayTp(w`?&kBeb4S#@=S3@)XxG?Rx5ed5<9u@ZY5l@ImA%KcFD=;mX3-Rd{XTZ} zbNrX@h}xa9P4n1HAKvo`Q&vy(zf!u|^Wu+ZhpcuAzUBUEzVPVpeU;%3X(h({{`;Ka zycDtE{@3K|%}vGMb~M)%>c_7uPd{iRSM#w@=H2qLUXQIRruP{ps(w!UQ34VGFnwQccSGr%g`;)GV9l< zZW7_YKh=4Rlc1NDi|5iUOZ;A#&A;@CD=<#+)M}s8 z-j&>1iA{3#oLdfA*#2wMXcOFWh^6*#Q`D^IDlK^u+xM;A`zPr|Tk4lj+zaKVUHs1b zJ!7Nh$A)PY`$ZnAB}`nuX-3Ud)hfQcsT+!C7tdZNU-oW-fgZExb3I%0#B;tP^^EOr zrl_VYuQ?d}v-j7l*(TOYTOT__Z4Tb&I=^!D=djrN*`Leq9d}-jE52^|y5-EW^+hcwwoW@Cs#tW>WgW*vZLZfEN_A_ucEo=P z?GxC4?T{^#)X{yqvtMkKQJm)5nJSnRDI)a9$*F6te3bnZ)(;cpUaMd8PmvB$VHAD2 zl>hVD4HM;VobUya9!zGJlK-CiHC3l+f=baQP89`}y#kZuI6P&XE+wZ3zgW2a^Vxz) za<@0>zHFYRvOx9q0#(}!lUiiAE-vDhso5^OIeC*rU6JsgCG2&Z`06etKaqOTIK$jI zP{{3Aqnw79zU|WdwxwSrB-yJHG&z+YJLv1E@_9$Hd%tX5x~6%l$l)NN4O8SIybhhV z+i)OGfjiS)$?g8j33qeMPYX$SGab9ceL0>hQ?qf)n&c}N$|}71_oy=FYc_5_@=#aR zEw4$a;AbyDWMq_{`Fz^rm5(2++}vcQ?=$s2J~g^^dIQVp zeJa~Lih_4VX5Nrha(;htcW`OQ^|;AV_vRA{un*Keu`f2i=%(+Hewc_<%MP;_{zNZ{+=@#srnNz(`wK#@l z>+>}n&kvoyoS^Z?y|gaid`FRQtX%p(?!DU93zydL)xOZTSRS9e$?pZFGSYY#U0PFU%1|ON%YSx9eID3gamM(sI@)zTlMq4f7XY7 zv3$Ax{O)x(adTPqp8X%pyxPk@aCFMNn}6!J-jn2MXHvYMZ9npJ;j;c4#dBNze_KwO ze|BNosznuf39ovCXRLYhNwK+po^0Ko$IHL=l+F%+IN{+et)m8Wzhu-+ZT(~v>h{?9 z!#?kMhYz}b`+r%gT(#Y_#xDH1Y~yR*XWFt!OoCS*e-U4QZDn(m#lgqtB99fWIdH+) zuGj4JlN%l({i#iEoEx9+d}iKTF-J7KG-mlHS#j?DcVeC`PrrBNSK#kfLw1|+2RnN1 zTl8NkycT&zXldKQ<$;ol36+1DFWP>-{PFS67e`iD8E4BpU%zLqj?~J0?|< z{rcPR$wvY01vk~We@Z^yyeJF4iQj6T{_y?1-*?)5kuuYhf6qVR|Mk{>zme+PwI)w0zby}6bzD3zmh0Ec z;QybDc$dxDKfUdHnC6vzA7{4N*s95${U5jOtkssslkVTnF)6=q~sw!$C zY;CfREuHhiZ{^b+;ydrn=rF$JH)mnV7CF9&JI{4ITYTMlo!aMbc88x&m>1(|^(RPItfD*std^=k@;6xr<+zf6Gneo%Lo?xzxLyln?*ep1+FKSymlXmGo@q`aK43u7B&^^F8a_2JJbFo9}IySMQ@* zxVT_&(1Gr?R!rKCtA?JgU-hay>gxOX-d8T{UHsx6XL5=| zVBfpBZr}S>y!#tn`~Q8&_r3+y$JZ!kdz|K&%^kYGd6L8TzD3pIiz~zzR_vaVAhUM2 z%hq>0js)!V4t?t9aZ4|Bt#ww$-9Rr(M@{j-Q<^4kO=guHk&vI@a<*?l+Vn+f%fHH8 zS*aJBpI#y_Rby(Mwd$rt8}UtKl)@`|OZbc*rYf@Og{st0EB6)a<(li6;ZTeytbOEP+4&+L;si7)p)EN2gkk0OeX|4vR^=70B zo-y*dquUngmM|?9B(Riq^P8r~w!~?%w~${>=L^Q41<6OcJ@Iug+`V8%qDGpy z$mWg?nf9bXL8@o zWIof;JFY(Z>dX8alh!G3@^4MuCVb!gkdgX9qtl(Ab|=hydgS}dBj1Z6o|P^7BNFk9 zCnC*KXY-_vc*fH@>hJuO-%S_(zFgpY`T-;D&VQMU{_8EOSJf#N*D+>2J;&*bzWOhJ z#b5sFzx-8y$+u;cNxB#_UA)tE{~_D0Hq9-(Qwz?@ZV{NAsaST<^!9^UPqzpJXDF&2 zHoaVM_GH1?%!0Egw+QdfP**!_YFuzuYR9vr8L0wkFAwQB8+ePS&0OND*&4aa;IzP* zBGxmPS|g7oOw&7K#J2g&C8p8?I*ScXtAIprfz^T)2F+N?y*Y+?b4lW~ND#Bf@_q5W z=M%lfi*|AqNjAmons8d@$)%-#UpIi5VJA|1#5M{Sy>!x>yrpmH1aI-8nXMoRiM45* zPmDNsZc&`B2cmhL^rk!N#hysz0jW*ivO^Z6RHJ#PMK$U7Ue~@>QCAgm~JUg z{>k(GeNTqWuPx@YK9=6|IQIUteX{b`xF44{9Q}MJ-LCTQ=3D*Z{~y;q*Qo#O>v==` zvCR7B`6pf^>($6=hj0Ei|8Jq(-QM4S!yS+PzTb1$dj0VoJi+}Q;uX*RefWQ#?#i>1 zopS%)=bxhfC2MO=&9O7u-*rXs+tz};`@<&NPwT0Zd>W*`@{i8R6YtkXY3x-zC#`%T z=-!LXD$!28rj`6%I{V6P?0r7gZmJ2ECcT26TTDM={_tCRnZ~KMcukMWbD)984e(9IrF|VqZ&V0xF z?YI|L?_8lKi{)y6UNt_JY@ev~=3{7`Se;Q=dRSFb?b?F1?JNQFc73(4TsU8L@0u;; z)6Vrv6n5@SSGjUM{>jTVqJ_T2Us#n~W*6T{;Oak^qyHlN_zt}*bqQAUmE@bKfEpe88XZA`K<}X6Q1o# zU$d8|z5e*tIV<$T|KFVc{nuBER~vUvi>baIo`2=#cGaaeft|^I^;1>$DTwb(SMckY z96U{PKI5jng5DNZpW+0xExGE}*6XdQHksTp{c@Z8-}CeKPul$M>B<_7?WGrrp6{Bw z$zs-epM@{PA0D0X3t4-gW*0u7^npwU1tJAX9x7YZzSI^v09u@m)Ub8!UeD8g$ z1$Ei&S90H)l}7FkzI*juaQN2i(fJ$hW$cZ-d*$9Ly{uOYmi^0oA9#Pu_m%Ops+O({ zzSVwJ@onFE0IWedJ>D4b5qC?$cX7 zc6Y!0_{A%vKeM0Z%Z_hdOOIdE?~}V-_jiii{3BmD_&r7ZcUsIVT3T^x>I2Q`2ZHt1 zx!27<@^Omx(cpDH-Vb>vU72*DMlMP!f11j_BF#TfPkor~o%wQ)^QkQ@_f!jGo_Q6_ z^xhK?C3HM~9Z&sEk$*+0KTaS0INf{Y{yWE)_?*t4#?waTKW5$j(|sw;1s_B@9( zbEcWs#A&Z(V&^|UGkL+Z_cgKcFLXqrPw({X+OkI6)8lk?=Z&amXN4{n#cLgn`lkK$ zXJ{2$*HrzshuwQW9JPMX?ftO(_QUSCAC9ViIGXh1k=c(&PCt?)YYMe%3i(n##+`U% zJK^YV#qM%PF>xoc(~8~EirvNv-QJ4bw-vkJPB^MM;b_u{M`kA;Ih{z7Oexe(DdbBj zR8RS6cH)uWiAOdk9@U&k(o89|OW7#0Nupgxu1)8dVt2b@x9WtWJ0~2KR_v~JJF#0H zSz>49cg1eo2}i?DJYqVLq?}U7n6goF(+=rPJLEU*kl1vCHPXjfY_>vo=7}WX6hq#~ zoF<)R3f;aFj+&%wq*}P})UAx%DS3;WMK3ONTil#> zRlzDGt0ZH3)+49hW37HGmGr&{i-!q`r$yZj+pe>@EP8k9{Hw`dPZTK~$%g~f5ButNtYlW*x^T(l2a6MDtYGEcx^SUlMuvoxR7-Q4u7$>% z%WYM+0{q!uNj8@FwU)Rk&Nb{v6PacyJ591RRm{6!2=4b){>NnL za%BJ9j{R}U|B@^{j_jY>vA?Us{&eIsoylVE>6N{k??kSP2}r-`>Rm8lT7uYPHFKl9 zBH_ns=EiWUndR}^r0yg0z0OSB@|Hr(^CJ8?fy+%Qu{-Jo(Dh-`hUk{4-Nd>r8o{IO~^bb6)QH?6{@q@ZQ(y zR~TQ#&Ew=UVLE=;@{EeZAM=>Cx7wEF6~xa~{Q2n9Zpq*G{;xLFDyU74KFx{3KI*Oc9Q6)h9fJD&b_7VkYj?ZfP(HG0Zo>ll4cC%)D+yk(TUu`)X>i4SvRaYnvh3rTq9^@owyy#=DDSGd zmT|IfQPkVYy5)1C_cGOV`GoZI%0B$5>^xt#s`;0Hjm!1_t!M5n`t!;uPjCCe{J^-J zlQOzX`Yi)~?Z$sZ$=??|w`_jET5g;TccKYX8cByPX0+`7;4Us-CO|GKs( z&LrZ`3|lR3ix9J!Uk`p*EHgpGq^{)u0VAW|9XEs~HMpoKn%%7FS{ivzx3F@(jndsB z$LHlI`JcLf%G-VV-K6ig?w0lMIe#x%ehUAs?>G5RtG~71^xx6%#{ZQ0Q}S=xZ>iV# ze|u%oswa`lkFA{8eNJk5D4VK=_6bE15%=`Je$P0HMOK9@DekeYVw+rNU#fIo`jdt%b@nS+%IqPMmJ24O9Ex&RTQOy#shz{$ z2)DllCuHT9q*+|)Q7}EMR9-XT&PTJ#MKVRl*-wgX?ac{P+~n$dLhR`zT`jfylNlo& z<$fxZ9$mK1;z@s(^v}g%lkBrZE1zti?3!hK^U3zf-dV<$Pq$AF%rc(&bo=D+EaS?h zw@w^T!x{^i9E6fZ6^)d_#_UCNE|kSp(u&N zG7`?JJ&L@^D_RUw5_rrHOXM{gUO6O@*I;<%phQ*zPpLthl!UWv&qB6i8$^x;Fek5Q zHoS5`;#C5VsX?2S#9aYxdhL);>pmTJN{F-`+|kzTfcv!i}os zwac^imESDSD|@%-MT=U$|B0MedG^r#mnDN-dV3V791O_~Opa7kAuB z;#OSz=^1OEH~&hlMe6^6_`eft1LsR_sb6^ixA*V=FTVeaU+%KV?~rF!jGyIYQ@8U4 zT1$f$mu=l5xb?cV@!Xl0o~$VgJM9*A!feZfqZtRiFEq`**ff0stNCJ9{UF^LZ`@Sb zg}!@ueJjde=w`6Rc0v(XXDT1(S5-9Ie9`q%uAcK_7h_0@Qu z|Fg>byPc13GW@@a!MRdy>74f}oBw?l7Uf(gs=DY+Z*}3Rxv5_^r7wEZdQzv_xqI;& z)upNPKc2QTUGrwXboI^dJx-_Xj?P)^E4Y1TkI=6#1ydcfuk?SNyJgL;x}FmT4)Z^W zU)?#GjaB1%`M$&1Th9v=-+T67@5Ebov8DX4K3T172%4|5ZtkM@Kd(;>h<_5xJm=&4 zy*JuKB;Fs7^Pi(-a_{TBS6@3|`8m^F zE*)OWTTcBH`R9-Tzv~EmFrRQpYV)=V67Hn+z)J0`1fz~-!`UJAv zTaxA?wv&Tpf0wL&0QR$78| zRO+rO;tH)4UG*s|E3VIcBgNf z4R3Cx^{pb=TSdCJKACNK%Jpl<`-T10`n7keUp(F?eRgM`-MhOQ=WoAwypQ{DrQWY% z)nA`|Uz~sY;{4?c^S3XyzrN7^`Xc*$=lXR9U!JdR`xn#uFQ)mQjqu-{Y=0}&etj52<{6K!2m_=RsyU+Bah zxG?wD-n67zF;S}yuDgv~cRRWE3XAR%7Oh&&BJ6&0-F&Uz<&&mVx9s+f-L}we;T0qP zPj}3EFZ_BDdpIQP^}LTo@pkI#yELEQ>ihp!=jfBo&p#^e*!}Wp zKJR+^j%9z(KE1c{dTjmr310tp&AXhjbW?q<;1?dfuwzvo*WZ1!oh-ehf2PjWO;Pc= zlg-}Ex^moq+u<(PTVJL&EA5;9PPI0^RZqLUZr%FjDvMPwo%?!;#otY==cLU;2i8Bo zj$fSTy!hPR=||)GT93!ydVl=I!pJGXla{6T&-$9)&j0j#WT=Ed-Rk=VWMS3utD<8Pi? zI!MZy+$uk}R*>;!@*MZ8*5-w)?%fb&-(RPynVg!n<+`}-uPI;p7F_xx!&mvG*VEkpu zJm>$+T^}SgSK+bV-<*@{54?YG*%{Mrr+=hGMmT)K`OQ2%&-Yb_|1-3>>AcIv>dO?pKUSY;$?W= zJO7%u`ImJ~+KaEw>%X5kU|mwFp3IuEW8e9!)~XBN?>q2X+(rDy!C<@7)w0oc3;UZd z++w`D>z(v@o(=u4t}T5%y`)iP6Myrs{|v_q=e(C-pKtrke!1!M8SBnHFPo6MMCa$b zsmG&!cm)Urot*kKCUcTf6BWzFNu4u@oP)3)Z0aF;tSo52Q2OmT>SXOg~E~-Lf@bERna=NG;!|kAIrD>jSY@ zjx(wR7RtG-WY_z;fL|_B9#4qNST7J9cq=3Rh~?tE9>{hd*E+8>$^@K4$B$KpfsOulA~Mn@H% z`Ey$yZWeB~JMw^Ut3dlnf%c;U?G{HA`3gInWs)|uNlaNNc1ob#=*U8zLXE>t8i#E( zoF!`(^6b075Ff!E>B0V-P5i{E2a6skMRKM_u%@1nn4*{*(AMK9sU`_y83nY7Oi^S` z^^lyRmg6HT=Xrk$cYQc=vtRujn@!=jhn<@R{pZxx6qr3|zTC@vE>ET)u6gmmpl%>-0SblZ)bYf;>wo?0hfD)&&FC@TywlLP20~Tx^U6W z9`>_Uchb!s+ijNoK6CAlb2-Nf)3p1HXBW(g?0JHFWN|vBaN17Z^qD&6jATZ{61(Q!s3Ql6T zGm13wc%#tlVlAms_CV*dBU`8JlfD~_;j3CTOdaaK9jN6yRQ1g%<(os|w?~4-4E-}= zcN}S5!5uhqo0sx_k>lw;DT@Xmjf|8LK$H8Xo$?+Ch|-2HD(ik|Z2xJm!j zvy85`uh@T1>S;sV!^)*@XE#aCEm-AO%6atJ$HIHJ^9`~N*{DC?TNE63*2qtI;-?jE z(O(LF{WMy*W?i*Xi{ zux^TWs;EW3siaj%29c5%;y%-2dpZt^cD_(02Zp;nTv+-*uvEoZ_FG z&Yi#TU9i?X@5BCqy78Z+Q>y!m-rT>if7PZZR;CrVEgd=Sj@Ac$+H2R`WL2|gPPqEI z7N-w(-{$W!c@y)=m-W}AfB#Q*e0}V7;`rgfv%z=tX7Ht4QQh|Lz5e;Q_p621o@Bmq zi*d^Nc<#OC1(zCp1sUf(mz}@ZbkUvm=XDP<>b1HTM)_}Ay1D1s;`s&t{vAt;%lwrz zJH;p6>-moj70>#@iW8$+u7tBWPiMFc5?|cy}n>;%u}AZ&Id!yC1dN^ zbU)4B^-mf(^VuL?E|UA#=Jt2@eT6+S&V_Lbj4t0d*VW|~ zTOHXaH)%=uq%EO#D{UU=?7QKuV-5PlX?CRUfWmypUpRq?W$=% z>fZb9JJVC^IbpSm-*@@jAMa3JarE&oZ{zJ%v!wp;JpUrOR(FHIyx-n`ui7r0Z*el` zNYc4?5*i|J^zUE&K9Mu|`jK9ykbIt)-XF&n7ur_veX4#ZYFMVBaWrG&BCR*VLIGR9 z&OhR2&bx4GTd3;aWiBDSS8dj;O8w_{|9|yW1$FlMT=S+Jdr;5+Pd~C{-zE|97O}fY z%F!i(CAuPa6@KMT(cPu7POK|ipw_g@E$g!XZAZGT z!*#{7jSKvOTFRuHt+&2h`*y*CTVJk~T?lkO7-691x?<(V1RIIzN+wq$3N^}euL-*x||-TB=1WZr+jbw7i@s$2dy zuN1i?*J{=8R9keuZ{~5~XA=|UD&Yk08Rf$^QZwD>Ri?~vzxVw(&u0yTezj*8&)A$Z z=ofodIIVJvQNQ__51kEHCD-`3U5W0csNeeJYmNgxlG}=NXpEnH^CE9xi+1@zb)bf z7q_OBR&sZT$jRGcmA4luFMg8SJ#mVJr?j$UvP!DkrGp+;k|(v4B~w+TMe@3*^h}y$ z7WAoU%9$INY=b^EOu4gt_3pB%s;cKbP6}wg+_q);k|!NgViZ-kd!Ez{`ZQrmj0#Aq zwEMl9>U7VOJ!|hNtMYrCtlhmgdwXQir=BT16DQ?)*LivE@;GUx`BF*s{U!C6ldn_< z8Toqs@;u3)`BGh#S<7G{lc?y7fW|H^pH&X})|Th}-f0|~qVxrsXi*9gNpup_>M~f# z5!`iQF`PIYmA7G9@tV{LTX{B3lf7mXZyI4b!%9K#f8ey|Q&fYdIYcU@azYqx8r}(F{=LDD!lmBF}JIWdsoet2sJlZC6^m=S4A?^ ze)5`nGs$T4hgPR|o?8}^ZoF>uoY!B9=DKbY>?%p0nA5T-r$snbS)}rOM^1~<*GLuV zM6KVF6MF+x9CiyX5Ms1yWO(b*P&Tza;E97OUx@{K*7WLtX{78egRvU$GiruA1CC2U2u+PS&qawRw~D^ZoKu_4_CG z&Q<+iyY1?kLIUJn4@9^e1trE$%2ZN~h#E zZ<1}}xU*n?Z=Y(x^%<8<)AFv)*cqz5#J1;DrNq=H23oiOa!Ec7KcNw?S^uX?;Ck%J zA;Ve8yY{m|IR*H*b;AW`laUdx}@G!s@wmo?NodFe@peRSdXBe zbNlA`X7}=Xa-R(QcU^k&@xew_POSRuG!gdf9jup(2t!ZtMjMj|AtoK zoHdKCyxIG3$G&G#pR4a3bL3C>HaREtw)oeZ|Ni{=H}&nA`K#9dea&0{Lvy2SvH#pv zRlA(Gmh`*~`uT2CoS$B))uA8Uo`1D>9C69R=O(Q2^|oH~m;Y^iolN8(`E4%* zFVFn8Izw%}Mc3D*Tfc1C8NOHZ?xAV@g=?xO7rt6&zh}apXNITc)v~W!>6zYCzVgS)`0559|F=CW)vv#>o7~e^HEs1ZE4NV5gzOC^UHrGhcH~bWl z9e4R>7vCqh=kK}P%s)r!uqa)2J@-}Y`zwvawlW{vm5tsXUvgYvM|=IO z;H?}JFYo_oci*A^^1K@PT&r`^U#4!kR>QNsdjFTw&*fptk~8fdP5yf4*1rP#Yu+Dc z>z{vAcz5=-Rj$vE%w2Tp^O>jb*T3z07I!(W>*bo;XZD$x~)QO zvi{_!#vlLtb$D7xx%(gb4%x~+gkRyROQye`gOm}_gad7^Lu^C)ArX| z&#ONtd#?TQ*;Dt2c4n&i_sL6^{ocG}+VAc=`pM;YH0BAO?{dyuYdlY0zeD_3_oLLp z)EL?9kFP3nqbBy4ADx|SyRLKlvD=U4etfrN-}l!)W^Xy|dFkknLCe_CX@XGOF4*@v#OdouX+qx!|qD!R(n zJ)5wIFUaJ$-7Y)LS#Dico)=x0yif@$G1Ro0FLGAZHMVEPe8IVAI(EGb;Fq;(<^Ec@ zuugA_wD_y%PPH)^%z7sM+;dO0J}X}Mc;^Ksy)BC3QPa6|&$U|ZxFDl<?f2);e0hAUlT{IJbz+m|Up{gE-%LxR-xKEV zJ$e4zll0{uZ8$y^%lwS=s4M#zY1RE_&O71Kv}NYk)t;n3_AxtR^l9^iKXcsb%#`e> zPoCd<;(XxF_s{l8_n8Ghi{RR_+y7b6{4<90&n&f@nfxa`_}}J^|2e1X#XinI`sX>% zzhajEk>~2CeV8Bp^Ssc%V(tHthwAg5+Ry$p-xaD@=b63tkMnE)q;vk?IrYEJL;LNY z=G*=}KXuFVf?LHrZ!3F$nr@#FU(Ee8(y>nJ$#Op^;Wo|cXJls0%E|NDey*H6zfBM< zlg|4ybHaR6w?$SzBc1DBJz4GuA`){}O`dh`>!ilss7tU!dR+eWLO zJI_Xhfy6&YeJVEnxl_wdM4rq1!~EGl&YS*87yVx;`+sNC|DI3tXa78}@!zufPtT^sSH+)-B=`9p^Es{uF9`f+oTU<*r6QYbCv7<2==02@HK)#`i+#52`FSSE z?k$L^d3j#hE#vNQIlk5B7TcQMDsKGp`s$W+vA34}-$F9Z=X73wZ7@IFP~P)LqS@P( zCpO+|{uwgkeD9g(F3*A!?c9y#3(xd-?fYu=#GS2f#f167C;eOh%<-txdZO-Lx9Vs0 zr|%|zm!GP4`{8f;zu@0PfuH_U|BL+a->Q1NO5?xJznKOejcytNQ<-=J7HF}a3SOYa zy6V~e3H8o5+E_y)1LlEa(LgB6(_pA_N+M3z3sVcaOK6iJuhEYA=Ho4o(K)*Df_n}HK$&!)Jm2P~Fd5!fjuy7D4tTK?R_eSQYjuVb1@ zn5?ZDWp$Uiu?H`1UU^aR$_s_85&=`I4k_6SWnQ;6A0F7Y`Sv+KzxBDh&16nYwe2al`0D?vid7%=DqnLsW zZTlv2{m%p8iuJ4iK4R@FZ|fFWeR0+OC92bR9*mXS__9>~*Dw2jVp|vH&1M#odB&1{ zDrk}4Y{qt--FJH5eOvK-&qL+=H~d!Ie7C@*-TGqWrm3s0=Utd08ouMCt=#85=CyC4 zS8jX0MU2JkbJlBS?Ws?HHlF=;Ytw=A55uipJc?Q-&(U?C$>+Rm?XF8_-+kR7zUQg% z{nnG#u3lwJe4d{OUFWzw(fC@-Q?c)rhq~{5TlwDkpI%^)%+r+Tr-By-P8ZyKE%t5L z_v%aD_dd>)KV-Js)w^^{@ErB{rFn~=uJFgb71sB<`NhSrFKhCDko|-6-xF!A z1KVy$yFV(K6a7dn+j(`Na^7*S62ormhjKgQZ>bq%&+M6V? z@`JS>5^RL}j|cByOU<=(k5+{^;@#txKkV$o|1s*AoAr{6}}bN(1YR z1J_QLbV|SMxVurG@7P2Ox#f>?VmeL-|C7A-C{5>}mQSKw`N6#(>MJsqUDEBA=~aL9 zvO+JeC;ZXZ3hjHn{ApR;!4r>vu&m*|fB5_d>-#GbScGqwO_sFMxg}ct*g>W*xzOm` zk)Jz6!mIiE^NzfYXw*w9RKLUg{c!Wg6Fzy>YE?G#y3!xFR#?V$n?IggVQ)9<6Duaa(e(UtJmRxe_L7-f zCQR$ywRB0k?VC7$<$1R@A29nhU5hjMMZDSS_Sn~ntE+CTmD{#@bCi|G^0rl0(NjcL z1b?is5#m4gw}Af+=jInlz3CxSABM&BYZn@xJNnW>(Eazd&xRZx+L^k!OLB$twO

qi$2?gqB5n5Oj3+M^{rvPKSGRYo*{zh#x^_jg9dEzg zFgY^sYu5FacR!*Hd4eMS%H2Mc+;6#K^e^lB4ztk|Ni5;^LxLDRNTQV*$^j`l$`cBxq9e;Y>7dNb{lK5Er&i(6jTigBGawo*M)JL~o4UaqY zp8vJJ>ig!y?^$y;_Jt^LN9OqMx*S$JH$C%bv0jrsqqiQBCCr`@t{N8-)T`Gbs%=%Lg*m2%UJa?XprW-~!Bn>8Bm0fbGZUBPRlnyE;QH))DaGg86aJil z^;7#ywj}cAH%#m++LA2u+G1HoO|ae7VEeO|E%#2g$((G<8f+GN*Ov#ap>B-+F{dE$a!V=z8=c@nJD{klNlB?_AneLl*{ok&b{_1DH?rEFKf-aMXm`v-sG|V>9)DE)8~{% z5m2xAJ8eVb=c<|||5f;FM6SJ$zOkVGXj?7+>hJOq+vStj)@{67_17)AE-tdtdik8P zw*JlMEZ;NP|I^#0?JXTm|$%c2k`lJuJc8I9%nqk=GI;VnDNY!&%lculQG@YA8 zPfksaKX^vVWnz-5*VIJq@P(HOqt@5I;!U_PAyL__ckjF%zc;T`HEp)!7SoN~c$mbdxfd!v{Zejq>CAKcHg?tR^+stq%WeoQu$%6Y<~>t8Ij)bjxW@2&IQNgVhYwx5 z-Sm!J`kHmpNPtuPoAc}CbuYJ1+q%g9_5X7RTBH1KZcv-`Ufge0;6k61Ec{!wrfSP_ zUhi8O5bJlLMQ^*|0!eS~zA&3y7A_Z&F3m{+I!j&LX3nW%<@J&Z<@wcLrc~}ReSPzr zl^ttC*KyqqTDmG^t<=?JyWZ~%KBvoK$}VF1zsBIop_b8G$QQnR1N^w3Wwh{r$S<^|$Z5 z`nT$T7YP6OcK&MHU+%d_)dB~JGJzUF9{eW>oK9lIayn_TVuKJVMy9b(@jzb07}9{qZ7->)}0im{4~ zo0lH_*JCR-=bv$rtmd=0d5>QtNlv|TLe;?j<#YwN>y!O`9=(3bcE&vLkAwV6QNhzE z{p2E_Rj|$9Tl}RxZFYWW|7v!PJI2o(UjGYGuG6zrGPGV>{!Q^q>Dw9YY%=Pl^DVie z?&*df;}tBbx$A!7^6rr6Ep3x+eEDzeO_&~YqQ@|OA_v!Qai^lS`aE@i?%(f8pVYf= z$L+rhEcT`_Z+RyvuydcH;+re27W2BTxx74{TBYyEn(ZuLA3CAFkYxu$>_)vy+ZE=X z47mOK!z-8aKK{qO>&w?o?MO=Sh`Cw4i8D4+HkI$=0>x9CydF$7HC577->q>gr!;NH ztxyqltLZtrt%6sT#V%Zu&Yd5y(ne#+y<3lO{Ad2rYwMrC#<0>zFKYH;pPNcy%iP{e zTn?Uhf9Z{{@9(vCvWHIS@a#WTT&u3Jd;jfME`4i%_-`@iT)M4)yZ7R2rv4Fo)Heth z{$3zpCoWBxv{ zll=Rzy4EEy)+O@qnPp;zx1$cd$(m{KJF52dvjFMCeb>#Ng;dWdew(USI$`Iv!m>r{ zB$HQ5ml`M7u23($^0`VhKVCxdd38m-g?Lp-M}7ZXF~Qg)6)ClX6;9#-f=7b<_hj#B z713J%VbPCnO}_;#Lag3>E0=6BYB{B(p}(C;RP?Dz=+rAw`(s{R3XW$!W_seK>+8(P z-iv>)n{lhyE#3U)`ZUwq*3ZALH|4(7lU2A|QmKJ|fzKf=nVlTj3NyR5n%e$lvpJwv zqn~Qr$daolbkNizFxFqk(|mH@McI@|#p*xL-d z%*&*%Mec=DemTMhQV(700;+_iP{qx6^eYEOQXT(epJcLZO=f(HeWJEvPF zEjj17L43FQoHu9Z`S_gwm1$J%Ipa;-_s>sErkclz$IikQyI1VarCaxe=TF!pa9vaIa(C%v z)AVA~a_v*A9jl#L_VPRm{Qo*@{km8CcbfkfJHlA#aCWV8)HjafHIiIOe-2BncmKM> z&pF4!U*%I?QYB-@q%{(0Z=yUtZfRTa=f23jW#1M2L<)@O9Mof@^YCr_S!(`(4!U2g8n^7g%@v?s#8RRQhRJg=0W{ z+e86_Ew@91?kV`Rc1>BmWcJGWPBZGa`2W7}kb~#hW~&3Y?LQvnR6ZPetm)a;Ws^6V z-FbME^TfC8!)r7|*Eg@Iy5_e1OU(1+XQ}HB+W!>Gh8mm>3mO4>*2GOU+dl--t6>RpiDdC=Kb%7 zEf_1MB+Q>aTB>08dHJU4digurtpj@ZzR0tiL~FKQ&$oUGO(^{JBtc=jgO=kehb+feHwDc20`oVwmLHm@ zn5^HwZTlwO<3DHk|L9r&qw16ItZVzuZmv1bpQ+24voW|(?8f8+3Qb)Cf&A|mgz)c* zNj$%f<7Sx4M3=j6*>bfxQYArD$!3n!k6pMOTa?0-q=|65mH{@Qnc^X0SE%U)len|kD5>8{oB z+lqGW-p|3jdj(hMysGO*?&n#3)piN?+boiNDsvSv z+($=eE_(F*v2W*<;%HB=KX0a(?Df>>F6s$h`R!Ti&39{K%Pt=b`Sv?Ka{8O)k<;Ia zM^1lhK6}?6v+6$m%XQpScb;z2yS`*WSIEcJMmsl4Snu&vYY-HuoRRIJ^-wByUa)9; znacC;t{QcVqTGJCH|^bcB;&Z%v7>QscL*KLG;KdW>3J=Gf%6O2xKk@9_R3^VuJW9} zs=bHBJ?+u!o!;BpGUgR?xUNfkbSaB}<;!Tm4$-O%*54ue?}~5jaqUv zYSGfWpSJae*<9alRJ!(>)LPe~2}biKb-htrKCw_a@6g$E70U0NxSYd`p8VU%;8z!S z!I)zu=O$71H`b>E?YXycIkcJf{}cJ3wny}O*472z{`+r8a|m9TUb8KSJ(qipGt;t~ zXt7Q52~5_0{nvl3z7Vk1<#e!Y9;3#;4$TK%?6*xLs3lw4ZO^C)JhZ z`xVNzFs%(3EcI$=r+c;S#21Kz+ zW|_WM%Wz$qxvgr=F}2-uS00)0e9zNb`<>z%Ri58`zHL76_vh@_5$D;8wd~E(IcKe& z%ecYVS<y>ueu$z`c3Gnz*eiz`@U@S-}vvki*}c#*lwNZt6pJcZ@n*0 zn|mz#VuR4~%}Z1@D`QuGEaSJbpK~|k|Fo&EqpWY{ZMWABn0EI1ZQqN}OQ)^vU-fd< zrn_19qh3m8T{rx8I%3<;ohP3zw=>!@?b@AX^PfyEnvuTdhNR$qgB3zI{$Bb$~x86^ja}lw+FM@GK8g~r)SRZTJ$NPb;Y6(qtG5L&(wgcE3HDDS6P1L zGVPIa^*wp!M9!(4lW$J%nclkao&BoohBHfJY3bNswSG_7`V?ef0@&0UH|Dvta( z!gAE*=!v9FNz0PrlI)Temt^kJ`8(6a`(8^3tBhuO*t6<(?cZfDx6GSrW4Q7rOM_*Y_e7y3GMu`CDzA*xvhMbkEdT%1c-GZZ zW?NS3=Dv3MxAO0rr-e2LGqlb>ow1+M&wlzjR@pP_ZSt1<; zJcHBEhE}fqI_2)~Y0Og`CTUi1O;z$u4Co6i>0J5p{jMpiLe~dw4ts0$)#F&uf|$8s zvB$2IOppjxEB7`MHVR%@p*7KKsc_RRRq5;d<{9!|u`aS;KAYT^;?>Ae`TcI~k;V<~ zrS?+2Uwr4~+E&m1s?K41?r5rCTJ~w~uWKHvZD9DE*uU)|Gh>0yPCcHdG8g6qPCMHa zeqi#2%~orkKW0sr`*ma4wi4g#ZCvW|H~&wLH@#n}JE@{TcF(n@!uL*v>zUZ2>^knh zY`B${=U4Xps=Ru^6Fr9(mCC+jNiiEIygRr1LFg7!5qXY#ObM|?$EWK|OUdbM|6RyX z(Z1yef8?a!U*A5R^la7oo<~csh1dHsH$BMxxz(;BQt(PyPWsna{YA_iDO0L1=UvMaYq`Vk|68*P4?Q^_uOhJ_(`li0eE7{5bCay^ z9@^`&B6c~m>T52R*%zMi{Am5?{m5qLw2S=$m1j=7XL2lEIaMUBVE(q$>N#sJU79`N zM*6lA`}@xu^I~Lot$%ve&iK$@1^4i(Ux%6xEvi_2xYtK$=SsdB{ewTIcjkWCU?lw5 z{o|I4F*V=IALxoa?NF2rGlqshR(jIvO9a@vW?rWX8W(*_u3|T zPO+f<^p9Ve8{ZWj&7HAs(hDy0p2<(-ljbO&k-l`N<>@|l8&zS6yvAd`6LyHIzdP_e zj)i~GE_usI?w&uoZg7j#_(f<%UC8fx6P_c#e(|fnnpfnT<`$gI{OH$N8g%Bu@6{O^ zru^!=bB|<62l+a$O-*?vy|j(p{?@dKRdVHV$7fD2)iT-BVX62mP@BKs_y6%fdB(ji{A})}oxQuO{{1d{vQN4-f;o4CNk~Fj@;a}3%AKFf zJmVbeWVUYElTsR2zE!R4_N0B0w)^+q42h zitkF_2)_DL_4?m?wdeOf3thfj?*T`!>OWDABT9Vv6_=kDiRh=V>^7eC;zRY}Z94Z3 zYM1EQ-&Fs8fbURh!>e}>xlTlQ^Rl%xPYs!JH#n~NsM62WCwteHU-b4S6wXV#L9FF`0Us3;(b^6`R{x-`TlX6g_ozSyEFI6N0rua zfq7qER?J}5zLs-yL-KnI^}ah5AI)yQ{m$mxrMA2&Lc{C-ui`%`F+c81F8Mg4z0s_& zJAV7G+SyNUuf6lI|DMe83;Xw8y*6v(y_*}%PF|}&R=@wn-k{Lm7r%*H-^<$|{@4E- zKi{tdVwbLkM9fgWGxM-tsP$SxX$A8|m$nsRyLw+H?A{@_&tF2|w|Jw8 zQop9~t0`uS&r5PYo3u4)y`}WKY1<#aXJvmFSRyn(mj7$rrhU`@?3S$)Z~ZP4_g<-J z&xU)S>$tgij+wMbMP8j1y7#E7&-R5JKJK2aB%JI!*cY2r} zwNLSBwosYD#>q3Ay?)G&eJ)>im~$sT%PE%TW#w(E0_SCmUY2X@O(~vUm#6eb(q`V_ zrP3$oskrh7eRa7kyS#6Om12pSqqs=F@wsnmH*T67&)UAv(Ck`faID$&MCa9iT-StM z6XdZw@Mx;W$Ec7BTlWg(RePjT?G8N@wy`_<+?dJkn5o{>mLT5wQHxf(doU+SbuKwK zvB&eoiYGRcCaQ-&{wags1vLgKx9IT|Ou4*} zPgk1p1E-#xLiUx{@%F|AAAcBMG!8I*&9&vpr%7_QlAfmnk~Mbj=q>5e%PE?BXih}x z^!PZ-r(#y$7MGrMt516*nJ>xoYkmL2a<$1X&pe-R*K(KBH#=v2&M76=?x`A{O&W%e zcEluGKCNB4$yh<`%epy*(>A75{I+_r$3E8h-RH;Rb=T%RR9!T&I3o&^yH9lDfx7Tq|I;3e1=uuZ}%mFck9sX_@pWexGfCv8a#i#4o!md!XU z;U&?t^v1y*t&eyfC$j0L&Dgnc#zCDf;WNwjr1Cx0EY{SY;l8o`r;|QgtKI^>hzt## zBp#hz_M&39b@P-X4lUcTL^eUQ`p~7mM9Jfu*G!H)SE=(}DXhR)yGmU9Cx`ZLmeoJ_ zR{PZ_ni>fneWk&et)s!4eJE-LLw0@u_qBx;hj)oMNAwqQU0c4XnO7rkLt7gL_gGtek^tSf!u8&joX5ZH})x2-C>>BD%&ai z#>MZ@xg*kLii{hyJCEf(Q7coIy|MVxW|Mc-6CJ;~&D+R-RQTIcqn5uKaU1^EwPoxN zn7T$)SR{MLjGzW@jouwof;vuXG{^X*vV;dj9+(=!9pjqH79OmA$aG3XjQ7k(R;PG( z%sVBMx8T>g-jJ|@;Hi66>-R6sIIwm_T#@us+3mqI56Oxs@0gs`w_D>?fqALW9p}!& zdqw2lEl$`u{}4C-gW00&6#@Je9>Nb2a~b+2IQn1l^uJ{9muB&w!QdYyI&YJOO>Snz zF|QA6oGZ@V`|#&y$pcot2Jy2k)9)NPEq7Qu?`dfH$64kde|=H7XEEjF`uO_yAJ^&z zinMGOJZrr?#5E{BLn;v!F!#uj8kL3neO8?OgMJ@aP|UF2NC> zptJ9YTTScIA5z*Mc&|OY{qp>a-tD?mnf8BT*88Mv^igZ(t=V6l(m!S6I4X?Kz_dGI7qe-kw$XkgqN2qh{gci<|N5ni1Dz7|Z=5bi~Xvf-# z?~ePfm~_+fJGY&N=bMh8zw7uo3b(XxSjAJgW0QRNu4jLa*i}e~O)+=B($!>dbjC4z zPlBInl77gsOvOiXUcRd4QTjlq zlyiAi!Ma~9{Jal@csUt+A8_?@iuyh<^5v8~%fWf}p_Fb1OVpw6Emg~ph8=i&OMrEY ztWEgAS%QmCk9VHs=KOQEc#6b4c3J&^TQ9ArRCt@8y{P)$ zve-q#bq|Z-9-qv|q7w`nE*)_QFwD68$Vt4BCvNc8`d6NI z+Nk?n?Xr6GA?EC4wLhL>Yg!|Zs@cm=33_&5+l=2wp3V6FH|JlCc;6O=IVp;a5iS-w zY6ad8oV?Yqr@Eh!5&F+q9>wRsq3Oi~-HLfrjgRfJV68cjRpxKmXzDJT-MAs|@TB0* z2zKcUhuyryW;1;Krsk{GHF2k!z_Bnd-rIbnBxMd5zrTOy|J```E1DK6S58{UyfTsD^f?}w6e!~?D6h9X zrG#tF;~#D6moFC;>MeiT_Qp@~(vL5fs>-=yK3Z@9HaGI6Et%6nfs-BOev~kk@pMM`oZ~k&d!oZ_ea52iA$I6z9atQ!5<@++6g;% z$qR3^tvkBpeur+M;A1^O^&hhT{|Z*L+M7?a%3OM2^`E^PgKRHtYMiAk7m&yz{g2n@ zaQ$heSCbYrWFJY}VVAsr_B7iol8rWbtn13GU1Z8T{_W`Y-cc^ONB*eessOG%2b=jf z?(M%6zd*Q=qe^ha%h2gZ=Jgv^9(-@wp0HNo%&St*rtPe$-`0m0{k`^Cd*!0ze_!76Qk(8+P!;*yW1ru-bF5Q%BSSs z=c}<#R&I9-QGdC^udH^?)a+MzlRwTfk7YYEHSR-s)MQ_|xvB+GTYQzByOqCw7T(hx zmtegp{^LzHro|l#kA|de4Em`(y>xoYrdrb&rsGF-c1RaLO5T`p{)gb_(kCJ@YS+S& zr|5sK_`A$r(&0_V-d(r&)-CjQyS3|_w?W*Trk{`YJbR@v;9tXi&x{C{2$BK%no)GE~=`%F*)E%wUQN$7w;u@Sc=K)&mG^6MeHhD z?{2wsQq3mSry^XRw|KpJIc3Xb-IwVOMjuROF40Y#dotzh>YZx4_m!U8rWO61%g#UU zL+Yny{UYNTDy*h#r31=SDP!dacl9B>w)gC zesJ}jsj?_~J$GJAsnLgw@{a|7ZGv|9FPA=YcSa|_qSZ!s~J8$;y`}zT|g$z*s7HQI@lLVxS;v`JzR-Qdx_e z=URA8a!8+~;lZ`jbManh2`@IolZ!MgkCaMOYAP79y<6JxY|4cxT<^+R{;qtKm-WI^ zc4OuOecvz3S|5I?yde28p~$`Rp2c!asqh3fp=Y+}~IrdVR;i1g{)+#VM_? zx&K$+abQVRo@DW|BWZHSbIwTzgw-alRmgm}L{ZY`8++!K4WTItlh-!7x)@e0qQ z6|Lqh2cvz0G?#UBedv4p$oA<&=G%wePaQY;-S1x_Y@8!Me64q2uA5oTVt-?2&b3OmT-Qv)&97o)rIgEPWvCet@MkjiM>>KDChk|J>C2d zH$3|*zPt@;_v_cPIJQ^&nC%oRmc~7KUC850%j8~e{*vOe*C_pEa^Tdb z`*Omc+?b~AFi-X;)7>qr9VR$ccg2Lh*)Mc`%B^rUiQA1udxaIXGz{)ItvL0cW06;> zS{B=(D?tXOI~LAs%68b{*5xd$bZ42sEWwqnPFb!~%(#}yUVQh*Jww*Y__C?M;@@qR z>r<2N-``UB%w6EQUhCCY0B(*^t~Wx z@`OC5t+hdS=glxb*wS(N@(c|{|A`MHJ#G|tUFS}z@_e|L>GbRO!XMRqXS-IJPE38J z<~3*TlP!WqIww9BDnIj`GyBPwi9xz2K36I)51Ejkw|Gf-jq%CM#mi!sC3uRQH5ZAx zbL5kb-Y+c=k-Pnx)672dbbDW#ZPt0G%UgK1*~v9sr-Npht*q&~dD3TgiQ3VpnLf7{ z%5-T9%`lt!=Hwl(z+ESwxi2%ae5p2Fa^|WnOKv}$b0S1trS%DO*yJvz)&>5b0%lEQ z*|>{mO4yry5w-WdwM%2xEWEyS>Tm69H*Q|ivK74~5-zV;wtM!{P;LEdd#2dka^Ey6jeO$~cJJ!G0&#OiYQHGB1!npP>6E$3cp`da^5;Ll4@rqjJ{1#Bssdvupp zOw{siK`W(qU0b{S##gUtZPx;H_Ejz2`AY5Biipg|QJp8lS8hqHJ;E2htjEz;?*ESO zt2h@g%}P$4w@*9vzuX_0-H|r#?`!MkzvIZe9~g4qaLc`Rj{W@wulpV!<9_;?Jx=2O z1Mzdu<@dNCD@5B{Pq zpdYksI>(vQCU>oWHVh^M^y0 zSubpCN*iDOY~}bdHSAX}$4-ycu}T&DFGtl21lC`wsuyh9pV@r6vVfDBs-b2c+rgmOmJ4{-)txvVM zm45ui636L*+CGt~ho%+Zj#=AxocE@s=QkVuGmX=Wovq&&>8;~f;ksbKv6#}g@@@~v5`WnYy%UvW54JnQn_ zo3*x8!dIT>{rPqLm0dBveo{l=-RB?KDn0otb}3dR&xn&=xc%6RsqO1$e>_pK{d?V^ z$rAG(anAdwa(;hBmw4Rw!%r5xUuG8l?cDF4nh%D|^V$4O4o|MVSFC=M9gWbQ6v#d2@%=S6K_IUeF%P!s9kvBI^pZ>pj zx`9@gCLywcvgzfy?TiS~bN_=Wo4T-wJ#`Qgr@uS1m2YjYXYAbkS7FKq@o}xp`9g94 z(-##H=Dj?;4(lBxFT4)m?|JZxV{)6Bfn)~vVymoheF5R$G@PkL5(W(I#+Ly|41v@9-a7 zY{bxi*ysjJSeyC=z6#dW2kka!aunPSsoUrW zXTask1HXJ9Za?tr><6z6b;U*b5&LD|@LqfGa*yYA`7z#vzj{xaKl};2;`-p{;+3Zl zem;KSKEru=?{&=Q<=L;dKVKg=XWHwCqC3fw*So(*pD;hahxr9RtNwZ=%l|*W|G6@= zb@9RfCcNLW#XD2)9KNM|vHop+L%{M4E9dQ1?LF7a@J};&UC+gNzv3PqyvSXVAYFQG z^Oh3k+YM3&`h2V3=lULU^xt##@9`%GA0BoJGc)b;TBR-a=jWGe??15KTk1OP-XG>m zpV^MT4PKPfTB*NWN?m2fwf|k84P+yqCJ(cJDf)<$+YAl^}FKFq(CA@ix z=T^pK#O+awQxXk2+Bd28woHnpbj3`+B0i4`P6ca^J3R|?n%3dG=-p)FDQp&JmL$oV zTlOEiG)-}S&m6tJ2}1q1J$rlWvleZ=^epRg)a{iyJ9kZ<{Io6PZr-kob6kC1PGvGG z_;ju%J17RS~B?@oaV~L8xC&GF#NSC&OzT&z-H#5-IpdDHd5JYCBATKxd$aV|>B@axL8$oX@~i%?%(ph&U%vM1 zLY+mCY|=i--e){EUAS_k^-EY*-{ykeVPfl7XT`8P%F(`U@ zOyTj^lZ>*wPv$yUNr_GqoWaXEDU~hnox*H&3mt6>U2BbL!dGUCIN5&TV_EQbmD2C{ zt8CXg&f4%!Raq~}t`aQEwqj?)E9NUU4rkdz>=%eJtl~VBfJpZ|_^pU;b@DYfYVX02^=A%wOAuZ@g-Du>8gC zyr3yZ;E~`8|Xoc9Ey|OD<7CijL_xifa z)47v3Ml4C3BFuGt=PPsNChsL4-IB$BKbGEpseU`3FYm6>jWxwRY9d)*0^=6xa?iP( zv4&$)YaQ>gq8yJk$4i@guF7sH`ulO|{21RR_H8nDSC{bXCGK)&RoC${VP2JZHHb$k z+jSp{i&TkQIIl-uPV7S#)15LBSO3m<^&~c5JpfWVVeg5qT9<$t`~e2U2Y?p^Lj&B(C?HB+`;RgW-uJiIQsI1U030) z@Z-HN)mj#m%}^1ZCA%QTCQa^zNQ>CqAfZS$KP{)#ek(iIFwbneuq-%A>Gpvo%3EGf zk(;>JVTpgn{@|or+E#%*63g};xmo_;fI;?lEy3H~tGAdO-MFdti}$mliQ#Xq?FrhO z7rM76X0Kr7*`Uu+rmJ74KKs>sLVDUP^Hpy%oZfJMY_BWc#msLf6Js+c=F$5(Kdf%< zN@Hq##Qy*3l3sCLj*1VH|CP$O``3SbY#qmzRA%#EKI`}N?%qf2)w}Xm<-{EO@>=@J zmzDA=GW(jZov>Q&nZ)+Yp|6YoDeJN6zIy-mEj@CRNKNw z&g*$%b;-3$UAi*^Ll%fMW~!+$_>{(ke%j9YeDdWv6|LLm2)^l&70j7`eD5o*LgGF`@}t(zENM~VCn;}?e(V0+FAML z)^RjZjBUZ`3G1{fO`b8O0ddse44p!ff`o`n_tFWwro7l^90PGNYrvtUWzinNVV z*J|!q7mEekKl-)3LRfZ>{J*H{duMaLY+nc=gv!B)*z(#pr%RvL{?$iO#2NPizMzU+GmCt zEZMR7%KTfCTJlxQzBLKDt-Erem)CTniRRx)b-Bi!jB1zjR4#QccHWQ{GjDU$$%&C! zq1s)YJFEiiGoJEkSN)#VBN{2jWB>9od#l@PCrPE#`9?l^?7>dC-?sR0?+@bLxT(6~ ze?QBNR$Vj}bZM8WUQ>$Cei_qYmcCSIn{rjh ztHn3u;v*DAOI>?!x!K6d&N*>q!lyMq4)#^e956ZP#genKatDt~rhPEhukh)L zif!K;;c?1^i!;#2muKpfsisqtBj$b*y=#^3!MpLrsu#| zOP1SgkQ2f6PZ zDm#1M_GxJ9a>Bt8CTPu@=8Fy4@v^9sPJ?~+; z>bf(0uR`a?8zGye3}e~un*Nsf|IjvST6^I-k%^A$K0J53zwfW#lxg|DcE0#pu=w%C zm8Ugp{XXmRTnV22P1m&a#Y0nYW7Faky2faIgcaM*^#rcDek9p2o9K3$sl8d*xwQ@8j zFOBn;HqAfwuHN64DYr3tiF@QErVa}&)g3CTew(?L2l6uhD%0p-*yDCh??mPHH$~0H zjy_?gULBXu{@8xLDhkTg(N}^$y5;^ddgrZ~ynNCt`RNOyqSwCI7H^rjtGheQ z#`@FF+*IM)`nD7M-h{U3BuATjt*R-7Tl1jU^{6XO?kFQCE1;5$5%1d;N`0>%CoR9UG@L z{0(64C8N4GWj-bv1JrnFT#3a;E_wu`z94E3yh33i#f>g?`8NRM*&yihhKFj8otSU zb2VpQnas?&%hTPp6mueqZ`CsDIA3 zg`a$$uwL$ruu$HV{Pn%b`h&ZEcppjjQ~D&yy@ey!PQzZ8``pYc+?)!0_TL##ar`qs zvTa7iohyB>n5Wblvc7J}@}G25SaSa5E9)OV)s=lvU3T?*u!GT`OUIU-=#P2NZ|J|P z;Htz$&1-dYy3b4wlb);H*Zy^d?XmEcY@dIuUGr4iR*3VsgT`j}TTiou3{NsWdZjrz z^YPuloaF6xpH+?5GpxG99e2igyBe#f(=}B_^~!W(&sV)ut*pF#Y+eMcIW1M2SH1gF zcgfao8X8(k_Bs{z6}xSYJP&r3p77M~!&4u<%x}DmQmal1yZl>bbS2otDG7Iug~ie}9QF&tvT~4f%EYZ7Y9&&93j@c$K~Bk;UB1^7B`O-#rk0{dUjyAJabl{Q0-@ zn(2|1hPxFMdcPQL_X%mc;XT>g^7`F(64T#L;S2DR-~Zv+8uwlA`x;i)ERBx69P_q# zp9^oDTefw(;o_Zt`(BIlr-EN?R?2zpK!K+>T@P4@yk;|g ze5^M8{Cdxo(rP>2{HfcUP(R7w_*`4x>V22Erb>H6topu5_!L^ob9Y9B1rc zKeo{Ev|1Ott0rT0!%7V!*6VRgYMJxcrIKF+UKLy^?p5$&8oO_Hh<7l@)*lUxB4YPL zGfrC0Ou8hlYBIHBIfsJ~WA3jZeJsvt`~+YTxh19xLzY+~v?5lq6p=J^ZP7PRl<1PqAjjrz%fR^Eq_q zRF8Zx-$mAz$)fR757o3PwLkYuXq(iicS-V7S9-puXMwZ*XTdDjDZXke7u-7dqt3U! zr6A>!tcKM5=&sXBU7s|IS{kbs+Pw+dTBQ9iEBzm{{5$8PQ0rkKgtST z`OX)&=lR{GX9S7^z5Ev+x-9Nu{^^<{i%|B$IgN9~4sV)W+4|2uJHzeY${Z7E10NPq z2JzY(R^_qheu*6Dx{{D+?b*3yVNeH`rfaKVny0yz@7pa?+U&kRQQ;Izn-F$$*0g`w z2kjC+&YqAX^x7b*JjgCSSiyCcCeq4WKRe*=(zcn^nobA?633|rx zXp7ENrYVIldFFofr?=id98OcX~_U1T#o>J#fvsB-C*3XsqGjExj_H;y9 z9NFHw@3c^k`j0IV=XibIwEh#Aea?mdY1D(Ad^IxXe?ORWJgV%*{mA3;?{}pAXRu_E zNcR69QPcW9;Nec?yFb4>SWa2+?Y@?YGKWRlq+5TMdQMDJlstWUcGHzbPiM`l`}`wr z+rM)X{IU1AB5k@`wrBEvey??*^4j@>9}fw)%6L7R%`4n0v|4^H5Bm$=(ldSEEazPJ za{QY1oH?b+Q1U_K@}~}ezogdr7XP}$%vB&W)tRShE$^D2(|LWW=AV$f8M-2H(kzj* zI@LBee&ZD-o%0WH&WKU3FxkBRzVUC%MLEe|y#7phblkaomrWRZ4@azpgTek&uNCCC z%?O+)AQpZ@dDq4boYf{`b42o=&pem=Wt)K_Z|ml+#gbBU_x7Hz()zF9#Qgo^yoijW zpa0n?x7fWn)$>iV*=N~YOY3kec^1ayr&lV+YbmJy%{#93n88@fD-XQyF!&=eS8lm;eS~QupTYss}lAQTB_US<>)ilZL z;+0Q0`X_T6oGCV6?D%BCZ{fJ>C;N8XEPAlUg{Ru!crKSw(8;%%wPH7>I~`&B`3jRw?s}eQE0-&8{rNyyzu8IVx6fp*6&x#8{pNhU z?rP|*jTIN!Zg1J7$=O)%pR{&Ew1m@X*J%llS8z?{Q1F>0#O%&vdb;S>Q+G)pmKQ1k z=XCz5PteS}_F;v$^l6=drNWIZ+xMuuxn_1P;NXndxlcuP6@PAw*`&WqEen@F%gg)h zRBmu}_mb$dPg24q?i`wYO4WPwo184qNn)4guZq%~kn0t*vL}TQ z!RZZlt{2|AR82LuX>r@}ZQfMn)^eKy@w6i=m+W9VFZ?GtI5i=$nSBWhi;w35Mo}-f z57nyLRxaOkcx`s<=LnoAq~PH3pJkTvt6N{ElqRgb@?lehkHDkYWBPq&bu5aNU#CCq ze|Ro6wC1jS-s$FFQeCx&wsya?x=|_iDb)0nP{gmVb6D(kmQT%NDRfs-FfX@%Q){{T z;lj6%mv6i4t#70Ab)sd^o7;2uDW1%od3gGa%FAhsSvGCo;WqiB=Hq8s>nx%rPS2gS z%JzBM%*vJ+sT?jtz8THk+96ALo-F?EzW$aNe~#80$78E|?nJo6D&%U1q@T1GZTh8k zBFpja?%gXYkK33(K6P1r`uZ>4xeaqHYuci%LslHHl3DRI*eHus|TrA9`k z?%5#Pz^|7q^+6_U`syW7`{yLh`uixPydwTU)D!=e zdYn9W?#}~a&S@9_TW+z)bUe#G!Bk6s-p*Bzu4vC)q@`|qdge<{i~7^*H|o7bzBwLl z)YQ%Lm3p=7Px2b}g6+mkHXmhXtdBnP(eCwB&P;y3qBDm~n@^jyOuxNVP=Y^eOXJ54 z@mKfm;M(xis)8vh?`D?FktzBdj_X(d%A1`0cz@`GHU3+l8os|87kYQAd{@G4}d+|?9 z&pz-zxuNs_G|6Cv9&ty*OzsjpWR_kL+G+CQqiA$u6FV^9lG>FY2_x%pxL@T?W+UT zdjD$2PrP8iAYu1iuV2~4k9bozFKs*}`TNZM-O81F4>Ux&wTHamv;V^L?q9MO3-Pk*{+=cqVY*pww|$MP?EXTJUGE~f&;9j0lU{gouVa=$ zubRH4k~&+3mCp0`%siJb8lHWyrRU)hr5^cztuJTCmb~9Ned_j)&AaLr8fe}6W7D6x zEYy9Z9gmGOH03SsJv$P@ z$ky`V%InaYPZ^2x(mn01Uw-|WY@BV>n{Rq6Ns7^v^?CByqe|_IvU?4t{Cy(3TQ+!d zBZng2aUp#t?t?Fx{{6MkTIATQbf}~_E6;J=Y2BC4)FtOWEbz@#e*aj9IawyT(UJr5^A+!}^#Ze4tTg!_tnUBR5T|q9mA67&G=66Ce#7 zj5vwQ!4ggioOfS{w7s!wSCyDG?{Jb?^xtROtc8|beqYaaF(pk(z+7n73>&3omj4a? zYYTkV%>42-vCnhCqCXGre6(D2ZG(*1!g-Njgie{N`vu=W<>t@T`k*WE`@GY$US_^s z9xg99kN^59Cfg-R8?x*_c<=9)Nyy@ev1zw(Wr%e$O$tD-sh9&J<(lqt& zTNk{wKBToaK7ERV)0XA6=5AITp`DXgSkKiDFo=kB&I{IBkmOP2F=tBTm13TyGZu0M z^ldFv<9f(oaFOG{`NqaKmg^f=NotScb$H~1j*ZOdl+HSb!d?h1wiS)LjNQbnv z&2vI0I7eH*=8HTmAU%EF)JG=9CsJJ`l!ZgDhx(ZnEZ+J0>~D6S*}FbJ+M;6gBYob_ zvIWOKyRKm^a@)?bFpcX;-%D2|KF`-5i;7-ko9*N2d}GwOwJtE_?d7`c^h=Z3cHTUA zK!-m!$6%Xbp-$pCmF1y7rmWDkZ&>fRBmC5>)t3*a?P{1S`|7Fc#qITzxqZ&ANYeC~ zUA{}pRCZwv+u~qP=5%JIB`keRj7}`V3VvTx^wpww-J1GG)r_xF-}Tg|g|!p5p0L?% z9KSU2z3IJ+!mrd9I5_ghJZxVoz9>d6De1}K%}>)G*H8Pdo$!TX1wUq*2%d4Fo-QS`Ayh$zKI9s?Yr?c*1uox{sFNC(qA^_ zNpUBM9}i3B5)?65QFnIoCpOgvxr!eT>Ly$-zdbtTE6PS z;ms=^^7kbr-@T9=7CHH4RQ;LSA5Cm_&U}hnivAWdER1Yqc)~i};lR!!0fs*%id)kc z_D$dNiPc1_>2Fp|X~AEW1s^RGtQijPoG@vr119%G6^rx%)gt&U9LRIkCaY_?YNH zt2oV5@x^Q2sA|;B%DA!lT+Xi-)25v=JZthJW-jLh_we|wvll;AJGCVF%6$>0;MZf6wuPd0Apb@r1*Nm~<3mRoZNo_ix&}cw0a72ZI&6e=Xp&`BcZyU$C+M zZQ0-DN2*q-zGU3^<<&z0|9Qu@Ha@=Z)^YExUEp_v1C`}+_Z565@rd--n>!rexaY5k z=>16bTL-hFKJ{GLzUY)DyS3ou|8WeWxs1l0tUC7b35QHr)s%S3KCUTf^17mYbemAz zt+njT=c2WB6Z)B4N~EGf#0BmNL>X;=yX8yeiu;baU((%MQm?O2)iyaj^|YksQOhfn znIAG)sQy3myTOk|#Xvaq>iqPTznhI%mT)A5#9Uny`^mgwTef?}4%vUP)sHT}S+V5k z)LYt_pLrEqFCBS&`Rm!g0p}hTeY$YaE9#+f1mn4Y{;~(=H)e$%|MOP#=IUPF}HI(17Ws+g`uSN0awmh!8JAINro33cWiN$|H^Er70 ze>aHx&Uq1OGcE63-l=En&TPJu7N>tcNo%sByvWJLtT%t|y*jbC_IU3iW4USE>GoUv zA52iVRpZ@aaAW$^UG3j_tMAWT-D1wDR(Sa^ci;So-Fc1jX6IVhec!{ox%bnt2KC6e zfTB-vj5+Ufg?P_1XxsmFv#3&bP_!$k6|P&_Xk2i9qt3Sl!Pr6oRst*DDG0 zoecfP<~k`s&u1H_a&G;;V(s+VD(Q9XjQ1FIb>2SO_uVX*?cctZ zS3dd=w=NA{`u=ZO{oK=$hmKm?M>M`^alCHCU)J*B!SUYbj}}H>U7yr8r%UVNlvT-J z&RRXtwmY})q(&mAzE^w9>m%E%y(1qwuax9BPQ4k}qq{NpRJKLOH~)t^4#x2<+xDGo zWQxC0>Ls`9H~Ze-SJrkN%E%fs0k1v5&MOoD{R>&~<#QlQ z$QOgp)1ObPuZRxuxnz^No8NQxxixtf^5PG^H!|0*I_Pt%eYxF(g$WtAw@y{`G-T|O zxYFBot5Cb_q~~KZCd=D@+ocxn`XrGsBTimwoqR&jyOrP6)vvI`Z{*y5v`Bx6NCkJv zqY~znZMDQ_oHQM z3$ABIb^BN-uyVDR+s_ruJj(RhdimU$Dv$-vu_igoogQW^5dKZ7vnR2+IZS&m6 z&gWhw7#piB2)beaFm?KzSL%#gmf5_0`0-+?l8REv&dHyaLZDPwmZe zTPI_ud{=S3wtvL_IgBBWuG^F>3MUp-xwW}&fBLyhs^f>d^2WfvIiYvY2li=9i>rDp z%Ncufsg`@D_8pt~_7V}5IvO46kB%iCp8YM-N;1{#gNb0ijf>FiNq2sHHqZ((T{Knj z&p*B94@%AXmw%mI^>Oq2@c7>+4koNPevPv)SgN8=-=6gAs`>m)6@PzE+qvv@qQ&h0G3$=0DTqAz=My-6`oZ)I zfASqRelk7kRv~DqvaK`v=K-I+PYd7bKFze$bm$Detn=b;;{O1)x94i&OKeh4^7!_L z_*VKq<0(HICo@0i+}F5`acg!5fA2oE?NJr~4Q0x3gZ;SiGvp;sDQHn{M?bi3g9Xhm`s) zi`_15bY5ytYloHKpW;VBHl6)Td1@1K$j37KqN`9mq{ zdD$)HnGq(dCIoIf*|n>`HJ3YbW6_PW-D_uWUvnqvOVs{3I?HCt1>7)tH9JU0%X)qG zOQ)j6zYExu?mEf0uK1g%yZ`Hp146cvAB{v8#A|LpGkINLv4V7A+S6OI=2AE=Qhv~Cee!fYG@DzDgcEHhc z$*&CkJby6pM-k$rX zt*5QFmgLoK5v!i^zSQecZPh}`D*`Pqs*SE=hbn6k| zIPr1Q0**6n(yvxKO))#O`r+b@Vy5r!ge>R(QMI9L(@)8d4;h(K;?}(5+WM{RtW{&+ zVqZrm&KZZ>c+PD9GtJ&2JJ~$yTU~e_55xCh`y;Myk~gka|GFR?@RI+*vhen3ZD(zh z{>@2$A8cDbp+AG0`DBV2_qGkWO*_8(Zb-kdPVc<0%VR@F_qitiLHwuM+xS~YNI?c^=M6?OI~9s|O)Gc%;lO`aYk9L!%?~a$7j1h${rZ!RuYb*5 z>15=bTi22MyvtAhlHXH4)dNq0LnkRdb#3&hUJ<$`chhTMZXfyUhr*SXPI<|p=b0^a z)y{tJ#BZvp{lC1!83d$Fjyzj%{q5zQ^Q?=W-H&%Ln(EFsfsua#i6xo%EB_|HdIQ_>hxVJFfYXXZR zcZfqA!=8M3V>$2?Vr#4gVmr3e+ zof=q<%AA8GlDDy}oL#Zv2!BV!<$(ED>coS;u1YYTDX>0e!hJhc zmqdXp>7jZtkxO1Y&-?IlW6{LbIsK-g|NXZFZcNmS`^jmOC-#El0MBxn0Y4=4l=m3=baPA6e$s7*#rZ z&6%d-U#Em$Op9g~6?9Fw%zeT;>%;Cjs|_3!z9cPtBK;tOe}%z%6P4R*p2T(dPiGHF zZrL$?;$$Q1kH@B(EfhI@wKQSJ@fL}-+|sRj?4mgjiX6&oo^Ur;Mp)cP{AR$nvnVym zu=A*9!vXX2+1iKRNEeADytqAqX|3hFql{uYe-|x?dUttW{EJ^|8~8x=k}j#?GpqaZE<^X_B>1ajO(j2rqAiFZ&@aqofiIJdcfbQ zS6eoJwpU*sw7;TCYT|C8b<5tV1kMWmIaPw!cf;#d8qNL@=XpZId$I*}L@nq0H=5?o z>ufK(KeMQz)~~y#DWP3qpWU6vsvAzBV*iYU)ueH0kiJmik3Kt1WiS_}s`V z-B!0?o5ke+m#fzwJ^Lo$Z2jp(v3W@*Ynpm?hJ0B#XWdsl!C%*36tZ!RQ)1bRSM)ELqr~>Ke&3xc6SZ9RtT>-}Ee^Y7A4%E#`S9X;g@(^LmY%&e zbB=vT+I+ii!_SLN$3KO2U9&Gdx>)4tJ^6l-%Nssb9@c60`t|zXRI8IyzdrT9oiX|A ztx`VeV_*O8;`-5Zr17eQT-I{on-?6;uaeBW|8Iusv_s+l%?%c8pBb}0*ZSVe!ry&! zP0B?Suc@qG`j?5->iqr>S8lA+-fR70leFZsz1$*SKOV_0$gJ>N{P2%)lK8AQ$9Jdm zM{MjkDJS~))XbzH+rMH0Q>K-i-|^(Ph~~6}lMlAX+Hbvh>X(`Sy+t3Un>-afZ19Y) zM0C^loZbBzajPbXBs8*j^=yjlC_J;8Z9nspwf~t{Hcd{O+!)|{=%7gG=1VPC+MPSU z%sHTNGn2o1x8X03Q!D5HOxUIz5_3>w-UoAz_eI*jRw!&+@guR$LySR6eTw1Xur#j~ z>$Yp8t~IIp&{Ed)e5sG`3d0W;EFt?|<=csHGES|rSlqPg&e^8?zYK<_Ua>D(@NM;z zkMmA*I&Qz!wEl~Wwt$+&4Th~z`SXk4$2IV`?5@wunmCT8|uUFjHl zWrKR&(`K#3v(i)(9H@6N|VJ zAlGvF)6vfd79M~9VU=!X|M9qp>c5Tgvuq51AC*~@yzBMZl>K+UX4_Y=LhaU&JSFVisN6 zP!PE=ur51^<4nxM7^CJ26}uj<{@^cXN`H2}UYTXOCO_uCarL(xPi`!~vbnqc|kqmG0VQ{l5+pYJX{Z{4{&+{kO?{ZONv$xq^XRmC>X2tRRDv;U&$ zN4M2E{55wX?Vf(vd~NlakdLJ+7urtb(Ap`!c5mas##`U?ZXMUyn_pwUysdKA60Mq# z`<;~~CbjMC{$#zAxk&yaE8|4XrAKd>sD3|m%i1^L&CPcSJk$3aIb_myprlOnKPQ*Q zflt}n<}h9Rw(abd2mNVtmZe;@zZCFl-Nch&S>Yba3BFTy@dleJUzw~MAe?10)x_(r z=7OZDZ}^Wz?_PYDSK3K+j$6a!Ohc_%eLWe9GcxS%gb7uP-}cL@&Z{!dx>Nb|#^eLf zZv9P*2&+)qAdr^mma*XZ_t`Evv(`@Hs91NS@~G23hG}Z=Zihaed_M6+dEfi8!xD`5 zFSJ}Purj^3W6``*rW+nwX+QnRy)L@KB=aAyE_Z&+g``9@?FgIN^E?!!5^st8P7> z|4htsYK*tj;p2}^IMu)So1GhfM{mnFF1>r+ufh!Cg91v#nRX}!IVK&?PAmC!SHg9r zc>2j#w>eVOc3(Lh`h>|S>GwwWox+>aGi*v{FeGOyui6!J|A*K9bQjIJ&)#J#SD1F! zoDSMQGuUbQ&M>)$Q{A3~-`N;H>+5dKH7EYgap?Z{WUuAcISqj-Cjx#ivD~a1^CvH= zbnCG;g_^Ib!d}O7*UxdYp5vxGqxS0|sp~nFCQtdx+LEGj_6PTWdg`#^kL08ML4p%c zyqq4ed%ChL=aCC}-QF(K@-DtRSbpCBhUKA%w9R*qsc@eRyz8d%Dc&(iWNkoMVepjI z`TO>t>bNcbStwLz(Wj~F_>OZjy5+P5?Fl&3uefyo-=dTHd$)-2l*g`PTy>>Kd-_e@ zAC`~TpVRIAb7i@to&KRmk&%L*W^+IJ@Mir5r;3a+`M%d?I=3fYGMU#m|GjIb#^dZ6 z(_iMhV-vbnt>qhje4VejXUP1kW<0vR-KMk$@@E5RwhgCJorE6ZkS1v=(DfSH}Gw-e)8{^^q2Ro0dQm!GAam3)=GHClO^=VUhDRlae@zqQSt=)YW%vtU`h zTj8Nu$GQD)tlM-gcGUt_Hf#CR!-a-C-mYB6z zF7V`;4eD7jf2Sus%Kf^}w|CuC)7Q5zY>{A%IC^<))Q|61{4DG~nYK8Wsb5>ZVqxaq zY|UHSCF1-2bPtxh&b(;1<<}zKvNS#Uty42k-MzJJO?a^M8C?zQjTW*DYbUh+o;_b| zp8h-TW|11v%fAgjthv6cu=-?y(RU_e-@Piz>lRO1by7&=EA#Xv930CgeKLzpT_hAO zE8QA$eU8NT?|1#auCVlYW1PM}e9EiK<#h#q*X~cKD@k(I3Ux4jzW$r!so4)#gw43| zxNMc+u~LjPfER1wD#${UAAgxml%9Z z$v5phY^&F*&2JSVq8ujl-cZIZ-|f2jS(%6b#P#1UNXdH^`24@3tYjVA)aM1&aYmu> z9j|`=dHUu4ibK!;XP3zT>uh;`iD z)DN9{%TERNKAf{d_JEN0&+OdfWh)gP1n3#;o$Gt~>lwG~h}X%54}*LCcPtR9zQegP zF^To+%sdNi+fav>0e2I0dxTzGRId+l3FA8TUYs@LRx|%4DAU(V3s_DLrf7oO(4ksU5uAPVZo{T=w#~HowNt9N(_0 zf5~mvelliUTynSWy?pyanaKF9nX6Z7vxLSv>KHHMJ9~Ur5@!_Shag$!M*WoVC66q> zI0cu6g)KN6kt?7&YvZywvF2~<1El`-bA3B&bHMn}jtj9LW*#___4a(^>C^u|c^2PY zVEEnl>XSuxm4%Mp<9t$MELS;~ZByc})fc`k5^e7Le!H7T-MwW0wlzx=D<=zn7C!xk zVeQ-R7IEL@UUaTltFb1+V&TPed17b6OLJ?hIy$YEORjpmh&$JO!6JKM_VmX7O=~kh ztm9#>s}9l=UG=a#k>^$AipbvRSArKrrY3pW{dkt9+{y57shv#NQI5s$kMFSC_>V#K z(9|HwIZ6lGU2mibuMhMuE_6!{XuGb^U>_Xo(Y~tr^B*RA{llhrE>s^VTp_h?=d~}2 zIg1*CjMuLeKHJ*LGd=CM)73v|J8uN5*8LGU`&n!X+o`*)K2KjUU3O~Ba9aAL{cG}3 z&vkyUK1_~`Ij~#l;nc7)qnF-S=RaTmf2G4c3kJK|{#drR(fMB<>~3AWx});j&pT7o z*S@hz&JdfriA5@;%>VYU&M%_>BlqjrR!%z@Yy3ZHsnm1H|J8}-xff=OEPd!Z^L*k7 zueU4D{FGI{IQ{pO;EhfWN0q+soVL#S^5LksL<9NUzpoxmKL4<_wcI=~+n^@e;B?r} zt=8G=uE_0sHD^WtlwIttb?YXIxX*R_uX*}v#_O^${e)dSd(90#b3In~^yaWi@!8<2 zw9GX@H9_}B*{^e&7oKl?vCQbn!Q$q?-|Qv%@g@~dx9O^{V|ZYFXKDZX$8Y2Unf$#^ zzNr1Z<>UK(<;lWKrZZRVcUiaIwNQca#kYMw?@xXC>Ig?|K#A&tP5a|lRNp`So`2hw zyWVV$EsoD7N#C8>{r{S}zl6=ZHMSFTZk)_mYHO>!E%02yCzi0-EAv=3c=b%Jln`2) zTxcvOcG@(gdBL(sQKH$>&V(nh7>Cxq{ub0k<|JG)?cfqa=AC-1qJ9;|w`V{XiidJ*| zZIZXl_9vcTx zt8s>R^c0V+mYhq2O7HoyP18+bm@hgtQ^9}63LUjuQbqsbGEL7leO0)lZ^Fh?^dc~p z*@6GG5YOdzip!>c3C}so&K`G_VcQBG%}LTXRol7srEMncmM)Oq?)+EJuSYPwQBrcl z58aY;xt(u9q+VLC`1srK@o27Sh6egY!R<>}zFr9UcZlH`lyJkB}jI`LX2K^{U z*@I1Pxm$P6&T#jhx8d!6dro7K^>s^|kJxf5E}c=eV#%(U8GMd4lU=@8B=J>N9#AqB zu3zArHKE(f+-&Wsi#*F_X7mN^%MkDo+~&Z>*|aXcNxhJnds6eIJO90vIx9Pv*LQGT z6bRbrDXZ0|UacRoyIn6p)W1jkQnRjpiQ0FW1%9XRX1Gn}_)uhD5b`{r_0!I29SMEE zwRRcg`|fjKk=!NacldDhwaG_zUYjJjJfKOa`so~lg+~@Az3%ajb}*bEUg5l=BYegN zqc2YxwI2%hmp**Q`8W64qqENziq%L?o;J1EA!tdx(!ayU&qsWaj@Q$9IqVbamc4w$jrIp;>x*a z0!20J7M&}3)3e`ddAK3_Dy`jDgR?mnMJoPwxyv#AO4Fv@SMD2`xvJjXk=eX5(J@Io zLZrsN*4o?F!%EaulQ=GJaIqd~>j!|&8@@2FMtCQPZx3c2f|AG~zV%!z9r zZ?ycerKBcHOV5^f`Y+p~8#`rnw2rQ6>3C;1>-!A`<&(Ek7O76veUv*lP1J2_d40hA zVo$YGr=t%t^rU^?Gxc(e?5la)k}W(us-}t&Gv>QJ4Hl5t=P{!xN_Ct2!-m(F3ikKi z;(p5dY5M2?M>YR;+sygC&hwvLW!thP2KSa|Yi?3qCa`_&ZObD+4UW~UI`)1`xZGcJ zmEFf4%;vvvcYmFr_bGygE}=ib@$_YV*b8?q*+jrOxoIJXQ7e_1vJgIbJC%CPw9NlH}&#DM`E=@5eSNXYr@h zNd*^eneXpVYu0(pczkBuiFzZ=Xh#N{#g8=7VtCiE&Hco>xax%6G3Nsjx3(wvooo>N zIREYa-*Fb<_g9OqU%Ptp+PSL&h1H(CTEKMWxcp{ACmYST_r+`LQ&iXW_s6&JnVw{p z?wunl>S7g9WR~$w(caId_n*>4<)iO~9a{r!pG@Rz*y^O>^)x|RXNk+_V@WQjWIk_u zr^Y^Wew|!()Ykru8BYVQgmIL!h4!`D8mp*)P;1oUjb9fMEc!zG-UjybPtM1sp4ja+Ye7uc_Fw$kQP!74v=$%aNqui^ zzBl{Z@wolhm$tQO%xAIGo)f=r?vJY2>`7{mm!B={?WxRns@2KdqPuQkebnnYHjiCR z?TwIO&wk~-)TdXJQtB7Fq`5S#|OgwD*F^&^XTKX(=(kR+g z>AN~RFeZ?<@oB^GPs zW0Rl#FVT+Q=~DQ4dgq$;U8{D2f-?he-C^EOzV*?uyU z%V?uK3kU1%+v!iYP6?8*$W?UnjMKjDsPNOUY00*5A78l*x6g$fInL&O-=fsKRZ$^g ze-c-skNhirHPMan@*Jt1a(6ENUw7yi*PFcO99JjHoEKdg@<}JXamvgeO?-_-vNr1H z6-%F3ewK;6KF6+jqp7ZE!COBqw}(BB3*Uy{|GN84h}FkOw-qf5gWSDyvbt7rJ_uR% zc=jYcm2Laxui-wLX7^yp-8i}FJ~=-eY=o@*vV)zsnkt`rQuwx9ooV(ZwnC>nUf-)# zetq4YeDg@v?73OxY4zbL*4O{>6iWK2xXR6W5odC7Q&v#;k2aPqQ;qHzzrTED>&iHd_6_jIhdqNc}{zz zcd<@%eRsvR;8Y-~8Nc+%63?S|*RuwSoxe{934hKGWW zUPh&8Ep52%ZYl5aV`A0c$2DTX!Db;%W+g33=PbWJ+Mj;M%;wf=(faUs?SJdS(~Z7n z9l3w?YRC1jFMGvW(|_&Rc`tL?W6sXwf`M0=tlN)$+-6+5tIX=ScRJVG`q-A$oW*mS z_x^R7)?)NxR=4wNy~LkZ4ri`%_OR`pz%AiY6=OGV)w7!u=ep)yk<6OS?b)W9D=#Wn zB%^$A-j9h^&m%owxIE(R3z(c=UmCmY(1&h?T zf33E=6ZGt~{2=yyUR|O|MWIk8_l}g`Yv&?Waz^eipuU=D*@TnSiNMH?3AqTy5x3GGn@a*Ad3v)dBKev2N0< zR%FeIuiZG~kxZeP^wq6w>l_oGWb&|DIo0e_Efx*lx_=RaiC<{<^(&^4zs#=6xGLu7 z{(HD>ve5Bz|8MWE8nfhiPWIWcWK-mpy=Qec|Gl`N-u&<6$!~=n)ZT4+{bk)xZMK}Z zuUt>e>AExL{Ov1s+oN?hdIF>1J*Hld~t^U@=%UUwi(d zn4ZhV2Ad@$v-jL++SO8PGy8wp!^?--cjr1wKbf~q!H8@7(dcPQE*^b!a?^#Xw=1mw zn{ADn#iq`=aYj#=-?dV|HH@ACnRrS?-Bs$z#`@5Z&|S^qX`-`)Rs^bF^`4Pwoq5y#7Vn0#H>){TetZ%8HgxHwvoHS? z@Jv6S#(g?s=_cF7uXIX(A1HqQ`O&OblUm=;QIGMv9(i_k$eO>`^%iu$O(|!P-M??< zQ~}dlzW=AS3O+vh#QwM0^hcA{t*>LLT*r~`ud|rna;^TXH_WHx+ipufE1vZ!yea=|yyi#Y=l(biqZ_3z&9!(L+{3$ZKa^4CV_pJeEQWseN{c^ld=S{Yd z*Ssj-pPQF7v>)0glwEo7+@|*rzT9t_a>;Afo`sut|5^6AD{9Fk4_B|VqT#RR)VEAX z5OcBlc7A2)*P9wAJeyYWXj#M_zdXxmvGjkn&>4nxr3<<&_paLPeRu7?J!Y9xGz_mD zKm6o#i;pk=^UvI?j=pk;G^qWtEbOXA=kg=f3kwdM`ty2MSE8+%KTmfs6ZhWGKbh&; zQ<6{dZ#nYH&wu&VM{i&0r2F0fU#7g~hT@FC_tSJEIG4)#<<9@%}FJ zD&c+a^|$_ur24Is^RB9dbJ>I}n*MqB=e`c@^i`#~XB9IWKXUd9TM9p%cJ%GtIhu2( zEljN5y7zvZ&E2?s^VFX|9DdtOIi4P%@bBx9;t5}3kG@*ESdHc20Rhh1uS~p0W|VfG ztaN*@@vTC(R;6U%c4gn$OFh@bG)H!S{2O6=YOTzl+Q?gSMpLSBBZXWT{+Wr;>N8v9y2#EtkZ9P z^}lqoEyv%GgNe5TFXhYC_9%wzjnC^+UJ>rJ{%~k>Q{Alnlea9**=^rCGx1@?%#xpr z+{JEGO}E|dk*>GHKXARu@ii@des#jVYF#f>-ptQv+-p8pbdTp$>zP^qYy0@8eP3Ak zt3oF}X4azCGp+x2dQM8#&{`$1>&KPj#W9KpZsvzMW%~YJBN-LvuG@dUbZ=beo9f`a zA9FPyyu2%C!nrIw%45+?^K<@%oxw-XX`Wl(+awpdha>dD;sa0o&zgU4omLWK?DF>i zA$g9cuNB&Qq>qYPn#yu7&p0_Zl_}FpCV`LfpRH54<+RReY`-h6oK#tT;c)t?J@=AU zPB$&iS^i)3rG$j(_C;ZfwbtuKe8_%zRKu)NOzf|=H2eJ7-l7w?Zr#Ed@b74H@tx&8e9Qn zynP?+EdEk9JM@2Do1D{SwU~g;f6Sae?guu`{`lj*O4mlC7kw=@<^0MncU}n8#=8ky zwW-@pfAT_#dpG0sb+bQOuy0=~U#+ik?`%ca^c$bftm7`KEZ%f~zRr?bn~?M`Pal8q z)YA@l>fd5|AoW+8jq5?FQmvQCi+26LT$Oq3CRdJFxz3+uyatcs-~71V;C){_Icyo{ zvAnf6*R(0lo!V_>xU#lD$VYEZ$c??N{mV)l+43 zor81rzMY=^()ZsL7LNb(-$rD|-L8&yi*&PH$8ZgO){|!N?7lEU?p>p5wG(9V#f`AuTyt#*#B6UW7?^I-rH0k~ z^;K!ROdG|>dwtdmnzaP7&sja=vn!9!o1mAX5_{urvCqY z_vM!Di%*vx+iH6CSgH0Gx$|A|(fdwqDcgB5SbwHr`n5MRH@}iz&VP2Usljf|r|T9S z7BWuBzqR`8LZ*-k*+0;M%BxBd!xP{H! z2Wz7;owkN-IX`!idil>5C8z%VHVh~4FW)#r*~a-R$F2(&+j`Euc`l>X_jsBH_rA1Q zd1t5WJKUa;5dZnGTg^3@Y2ST(o)*4%azOWf`Vr1Yms**hgoxHo^Ub>YrtF!pjH&VS z>5nZZi~Kn?KT+IivAXM=Losz~)|1tv_UP0b*gn7LCm0%kxiIPdzH{BBEPCJDq)y$G zIeSx1S>mZ5<76{kzVF|^trb3^oW6W|$%IMlPbBYY`9-*;tA2R;aEDsNo{+`^7GC0I znHyru8rCKjJn}ibc;=y;`Ri=0Zhnlk%1ZBaIPfWGr74%#qEn}y-#W49u}FB6$B!^2 z)&Bz8SN#9QYZPv<5MF!9$iL=~kfYtI+{F{~7hg1Ao?&@{Z?V|rOu-9RByu?zmUwwJ zHC*JWaoHW#`_7Dc3sc>{V>{+muB@Cey+7%mw8anebCbLie(gDGqQ7tE+poQ$q8`8Q zy`QD^hD$7uA*3&<+~L1eLhlu^Q}>>qu2;WV{-pn~#Xj9%8LOcuIzhTMZo@t9(`OToET8Lo`fbc=Pp_hEy$_t3N|PcPicao0X}_(i zdq;^stEY~RTS?ZYBa#^oI-<-{>UP09R@D-fzDrjp^ZANovna*oY%0CVccf%W3pb;j;7*1>_oEx~ zn$)+ucfYEdw8`l4{jK%cHD7!C)&-URzLTfBaJR=1{nd%nW>u{C#Mq_S!F%OW4!`cq zy8^dYBnb8&)_%`>Ron3Ghjrj zGT*H`oAu4_fzaPe&%f7dTywH*G~FCMd96=xkBD#3!GjN9$@nDJ`AN4)YAxDu>82vaox#>yOY2t0 z94eg}H?Q@?`Nl%-4V{dOn&M=qbt`OiI~4WYKekDx=_%99WlkrXpN1DZ|19a+bM(~# z&mA0V)@@gCn9}i7>_E{c!OeQpi(-SW<+|@_&==g)^xVNofc3)hg52%M z(DZ7f(DR~32Eool`VFEw4$ktmb`pu+%NK5ad7GC*n4v%@{=)W>79~59X<=MT5?}Rq#wkl0G zisX` zH`(_;%w&=3`i14(Uo@0MX z^gyB3CPf!nCJ}|r?p)J9`M>j?;?G`Z;d9NBVcrra-nL`P6@eQg;-y#iebMU7Hp_0;_!uO#VNU z-|I>=s0)=SbXA3lM}&YhJ!rdcGv!>Yg;qZD;l7xM-|i zk>6LqQ#bMO$&!oHc3k_Z)n$>gzF%vBHCKH{D!1_hn?5gzxl_$Qn(Nu$MibHH@18e*W^G8gRjhybByYq)6Auo#uBEr9RJI<}pZHKTg4xzR z<#SzpW%Vw#;|_c7oLifdu*YNGrewQnzt)F8y#*3jmuBqtDs7m&w=tvo_K!cw*}syP zXR)u=*uCIF{&A-R?b{~QEW6iuN5bXB1m>b?x-NS}B6jI;ZF0RBdTlbZqUc)A156of z@2=G7K2{ayVz;UF*uN_xi@!QOy0_b)$3HOVa<8ax+m#sEyvVE6?_SFg zd`othK}~I-+M{>_ugqObAF9O7t_-~4_ercE_)vw9K#=hdbO;o}5oO!!YZj>e4|aZKOb7~peLRWH#*h8Ww$~m- z1x)%o%O6;avuLs0`C?`+gKJ&FFZxHwLM@fAq>+W1QwD#U9?(Lset#|UrW!+=pGyV+iU&GeQin}wsS}|9q(V5}K<}-nJ&KQ2Z z{KMU_@WOlW`3N& z(n(tm@aH`}b(!~-=(Y<=f-xdnXFXSY(DJ8z>DC*k7w&%Ellj@^!lfLM30*8ILJ3kF z&m;1f4o>g-e|%e{;+YVu$F9q7I$hj+{l-c81&7nSeSTbD%MszAel3-2m)n{spHh=Q z{aPZ&>t5XDe!cob$}OjfOsa?9m^eNBxc+^d<=Ix#XU-R6eC5uqS~9)UEbVD++XVBz zj7dj=y2=_C&i^pY*XU-X$QcJ6wP{(Zt)(aaor|1$g6sZio|<0kS$F>RU*c9NUGi4W zFHmABvr?;n6vMvUfA8Wm{@+cVqUGUde0w9)o7LBYcr#8z&t(Ph{Q6QlYr%^;@u?ykpXV-YoN?{Kj7cn>w|*E;y7+K! z?%JB#Txcmhu|qYU z<4^9-Mc;#X0<)d+RI=9F$u^yId@dXnv*F$Bx!os4k1x!=wO)dM*H_*iFP+o^+l+Lc zd%Iq1B&fYQ$@9$V`iGypoPM6T?fpdeO4{RL~TurMJYi+B%Dk;wGr{7GCN!QJ%BweuDSL$;Th| zX{o7eNv)n@FjGEpv5`tf`2BRv&rc3C?A*O1*jw;oS{&O6ovF+B9@mkYp})T3&+U7s zx|V(GJM~OUI;_8Wu29*mLup%Hth~^3N3%v?CSNMI{=9I1i7P47ZmpJ`q+f6e8$OVj_W>3y=EWP7T5P`TC}J0kDq!=FaKD5a7pja zx0fn1w$Hkis=&H;@wU1DN`D?aw(Q^Six!$`2?r(Y9j{-x_rXBS!>;+-)>pafwoIB6 z{qa(?FM)KTTh=ou9+zj~-!|>R$C^Xyf*)Skbatm$ zpUc(~sebk8y0g>Ne5d$^Uvyoc61Givy`%ZsDN#|IXYm{Ff9Lq5fm!q0&f2-6-nP%K z?9W};AJTY$wb$<8;&}buts;M}8%#8v6RkDpzR_Zf2VJ^f{2~($_q0t5e=hJpK1Y%N z6!Yul=5Ne5&gs8p(a6&txw*K1-rHR_xs;c)DwgyaKX2M2;Apky^yVv))qQ6BX2kXQ zIBqf&WtyrVyhZBD+qUp}hZ@oSHxPCetY1FF6bDRQuYA-iw~P zt;{5Ar`4 zaYSs^E*G9=uPDxqcf%SY6*MF`o_y4bS8H~ZZ14YNAu-E0VQR%B-;~O(?vuYW&MIfv z37&V_HAmBTvaT;@#IB4@Je+PTn@%rPvRd|Ix=6~A-lP48l+)h-I`{kRnKpBQ548p- z5)wZC^cFt6F<$IGNAtlOaR-eOZaT2!eEs16|2fx|*7Rk|(=Tnv4BnKYW>MPK*D%jl z`r@aR56AEr%3eZDun(f5!gy z^g<2xGj$ezK2qz}HyvH{&F9%|#_b2>Uo*&DUwG=}iM}4E{k#m3b0#Nwtk+U5d{jKK z<&4k%@?{l^dzR;1oe?#)NkPufS>m*J=7*H4Sx`b+cT-segiyr23lq0meCqs_h$y~IYP4M)Xp-4lb-O{}OX2zIIy>hbrolI|4laC=&~e76w36-m z#NyZ6g4>yu3~#kPzMkW*e}c%AY5GT?l7n#IN1b^Pf%EKm9j0I{E3#)v;I1IJ~%;H91x0 z@VRVSF-s=SiDRKa@q~uc4a+*iiypt6QH{$7UV0+ye(^(T-N3Gj=5!f zNJ^R4#4gwA9A7y-w9QTT%dTYF;6J4)Y>(<}r9+>2lZtKBUq$*Ib8k^GKbLXsqBqCV z&RMBn;yy0zIl!_jLUCP;mbO{?))lknt?>Wi?xfKvp?WUj-qPzjhTl|T=8HILS_@kL z7th|Ax`2}{T1v|HX_l+v{OCaEhf9nE2{Pe1?9nNR504{i6V?@BD2c5j~cJ4AHF z&Q%TpEnIUK$*xgtEMPr(i;Jt3hxxMn_NxpMX^orf{>@2{5c{`>ZK=w>DYZeO!f*IJ z!pq#H?!WL_9(3oCJY$?(sQ2YB6L?<>Or0cQ{d=y+iZG8|A1WI-GT$xA+21y`P^0t_ zW4D`P9D4wFtk>oXr=EA_q#eC$p?bh-BzAo9e2eQx?Ol( z=cSuWdZcHxs)CodN}KD1t)@oo(}XA%-A(s{@)xlzF0~P@=D&Y%^Yq2(N$Kaxx$oUt zwWs3Kr3XK|w)(hg{JgUB>AnjBlMly9y*nDc)8F=o#nX-Iu9|PZCRW zdEK(QpUh3KH@&(Pa3pTgbSnlPyQ1y?l!X!=`MR@jd)oTBZNXkOw?wg9(h5!iKLVDl zI_E&w8T%2~~>iIQHJeq5kQk|9{gLCvKIS5w~~B$=x$M=5Km9L*cpb zuH%u#vN2Lm9P+DfOg)u4Cg=|9}5yq|wTIW{>7R^)%Koc2s&XsV9HI zg`@WC|1D3EjXL1?c%#0{0nS^Uj&7A=p}8yaFJxr+Ts;21Y!%!5*$-v}YkkXBn%2x< z!P#tZb!GFMgGz#-XRMjdOfR}Muk~7SL~a!G);$7KWSCa$C<>lbh}(k=EKzuy1o?wi%eR783If3KhJw0P?KiCv06zwN)gV3TvF za!K}Grl~4Yv8styTOZHA=vDM)lUCF1c*(t$XDkJCUif}a7gvlBGueBoK)UvCk5A>A zmNwH=151&(V<+IjSvU4v>@qeh#?lM`?_?>Y2j<|=@TNs47w%-@+J@{?wnI}uHEa~{yy)Wt2 zv}?KQIu)B63KZTRcI!%g}s;Is)$9w9v&o}?_Nw44D$1k9_?Bu4u zVqTd#?>-z`YHMKS;qvHa+v$%fiQAHX!f%RiMjgv?5ac=#~*LU?YqqAE~-7R}^7k0f0&*gZx>6jQ_A^W@yTNm9; zG2U`hON3c}$@%!Z(>_*MNX_j}n{2kPYR})M7l#`Cl}sJk&Q`0~t(>pG&3G=AFZF2% z!{MGfrqqp2-+kG*7I{tB5un<7jx)Nl_{{M$YZKk7nK*jHOW6fd-yCz=P?;__b!o5V zbLYFQDUyB4)8}S;X*MnX(N?2%a?;lS!X?JjKgRcc$&%5IX-X_C$WUqbaH^|4IQ?{V z<>e17TVGsmJW{;-Zy`s+y?XVe+q|3)PdJtNv?}q);@3Mabx6)}XL$Z5Bta})IQMh* zowQvIdaO&|+dt0e{`vmwd(Y;JlZB*ZYL|VgE56sJpdrQ0#dr0DnINx_(E`SG4h9!A zOYNBCcW&xieKw1IX8f$^*#Fxe*hw(|e0ArW-?p2or85J5`gt6a3$3ZH^f;^hB%e|B zW%>kdz3(p1MaxtoA1}(Xzplgmg!98iqvM=M)ekClF{st+CoufiIpTjno#hdqlCx9Q zyr_Oe-P0@Gw~M0=6&?DLJ_YW_>oR{@Ua#6*PEk+3uewTlJk~{xn%e4Ck zzM3EYBAtGMaaVDCy2zEyPi#B&R_y%IzadlTQ>Afp@ZT%Pwk-Dv-}+JVj|l&{6=vcu zVwl8UOps{~kFwpRu_p1Ph>6QQo7%m}jd~AnhE?pSNILSpednEta&smN7Asr|SYfFC zsK!Zs>6Kqnub(Wv^r!W4yLQORmS35t*^0eadOKHGJ5G3T%F?dX{)lqtSv}jId^b8S zX?Wh7|Mg?i^JG!Yj`-)r2DPV?ABD^AS$<|q{X6YX-XhC;UW@8f`b*}ia_$ve>?~a* z^!9W)v)eRbLl*DvceIDx=KIW*^;thOq?zS{-lur$rubz% z?$eEAE4?CR`>$r_-;sYOXjW*P%zmh2_mhb`@+R$S$rVosWq^FI>@fk}h|4bL_8fi0 zV&&*Mi}~Eu%G__Q&S&OXZWjBlyE-o?+Qis!{ps`T47wg%3i-sSd*ReN#qCO?3 zb8620TmE`}J#E$LQi z-Yu+G-}PJe7KLS&b|^%cF-#0zZx{Vtrbf>*YnIH-kmHRt&B;eg)@khi`||L?)|B4c z*-M1ZxJt-H&p*uE)cr7pZ*tJvvpY(r%wGH8%9O3M&Ytu0KKd+ldY$*f6~{%^^|z^7oP%YrLEEFUP`>v-nz=Gpy6>)hP!nEs#GKIh10Z>P-e_cb?v9&_7s z_Rp4ID|i3e`FN+|X{oT5lb7C9$_USO-4wSf*SzWFKGvK7ZL_Vvv_7kzobAXon^)ZCwR&pW-Ceo+OPO@!dS;3~_Ot(e zI{nqmi@%haAD$?@Rk7(?z~|k!%RCKQUK(=j@ztEeVA!4@`|?gZ&tp;NSDbz+3q@D* zP8SghKgb=Q$n~$~(D$30G@rQtKKge5$=s#es+rvU^ww*1m#fcye&VUXtfrt6GK5^n+cRTX=eBKe@E>?e0&rgpFimse+9p|!W2Toudav`U-JM5KYB~~=W>zXkM6k~d-F^t??D|@tCMvSb->qX-7FqLW+l(2xAAhd(*$u!Hm+52?i7w*-unIC^2c9m9JJ}3H) z<@@Vf`445pKW15(n5drCmV4@?=mQO=1w2#K76m!o+WyyQo2Kz|d!eKdIW74~Cfh{$ zJkD>o`kSEzNz*y1H2Zfu2U7 zIJchH&NDmJW=(%&x}&XUu3Had=7r4L%=I%TD<83&yX{Je^;M}gi~k(@>*|>mW;4lE zFV6C|)3=UO(?xo^7PpGd<4aez_MIbm#(U3!&wn<%_-}jq>5gUL|F_LYDmqFVs&@Rc zmg~B|Ye}%Uu3=U5EUk6+b?%p1fB2|>X4)(9=ZEL+F-?Za>XbLah1 zzdO8>zO&t!TiNQMgT{_Pp(!%H`=O0xDpz5QdUbw#RwG5?2})e5(KqL-EN9_hX*5!OEI?vZDf zu3U=t>mza?&*S`yJdIo+`o2b&V|hp>-MfHjQp0=Y%eY6nR|8Xs#mo(>|bP$?c{xQ z)~V7X^W9T-K9yUW60Boi>ODWPe&sV|&6-_K?0=;c1>8P(_RYC(SH&lPv*O6qPD{&e zwKt9IRae9a?sq??B8TtO8y|Bk`}waq{<1NsUT$NxT!oItIlhHwf~!{i{a|{kS!Ld;z%|WV z7R`AYq3h;0$3R!;=u2oAw>;3s7gxH(?jb zRG6T-an%y74L9Q@ABe|YTGz{Gx~a6}+q!1!blG`_7`b=+U-ri(m*stM}`Ybt&^4h0txl142ji^5$7BXphe_1w5_Umlt3u{eF^lnM+ zICbVyN6I|aqJK@MzQ1n?3w@V!zGuc4V<#OUjCB1vkOBRj;G3ez-d6>H^_AS~p+qU}IhLznEeD%SoQ%Kc>%k z`Rk4K&uI$Nvo^$PXmYrpy?iO-<*|}3&9h$Sx00aM5nr}tx*p;|TsI>1 zY@RWniaM$@X$J(I_PsY>TYZfGd45%z-Ikg;4Xbt5DsTJ{d((82<`UBsza*Cr zi_-tN|4BWc((!TT`H6=%et$ggWf)(`$|z|snQg0zR*Qt*r+4_ zU#co(9L?L?A+mi#{rdXl$M>3frUuLtl7qhg=MoG$8EK(E zPi6m{{d1oPv-Vs1t!E0GIcJ&D0*ySs7Pg<4CpKR2NUW7P5ynthR{h|tt(Fo`yy-8+ z8zOIa9@r{%=ARBkI+F~u?LJ1&O^$6p_pVXbUh}o!v!KRX z_1|klr##eQjyhTXb;lv^g1nz5)qiYa)=74@XNP7i5-T~SCSW{e`~C+pH%`3U)6^_+ z??{ZVVqjQ?KF_|`@<|h%!MMTx`wDky8|z zH@!=-CdusS!cg(WJGfov%6VO%^-m`!So5yzr_GCZOEuYDnEt*`Q>*Tk&Jkt5mKIA5EyUUT}wL+g%8Gfi(}Hj=Y+X8vy`Als|#%0A8W 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 diff --git a/SourceSerif4-Regular.ttf.woff2 b/SourceSerif4-Regular.ttf.woff2 deleted file mode 100644 index 2db73fe2b49e8cfcaaf1d5311a610e730b8ed502..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76180 zcmXT-cQayOWME)m)SSY=$H2hA!nA;aQPYBfg^`T`3y^e^YUPq{y;vjjN{uan;bH<; z`;wg2pXJ=s3K$s8m{ge8#;_=`PVr-ZUmAUI!RG5xYtH6a-dn505hcE0TJ0_kAgX8_qTJ+qDQBUGa3XNX%|wCx?6K_tInY z%I7}kI9jRw?b7Kc{Q%BLdENtjoqSS)IofJRIt&B9CteDjBV|1Mu~-+ER$xR%$Cdw+ zO!q!H%5n0P6tmVLXF8< zjm0o=v-xXDu@4VcT+5b;YI=LR*s76jk3WZ?fD;RslY>TClwbG$tn}8#NA_8os+M1h zQ+96DwQni7cy3l$z=2YqDRIdczRf!(Uody=?fHUFT-j>nH73qVQH%7rX6PO-DYZmX z5S!s>ks=bO4-$UtXEuC{;KwI@(X20Cd;oc7br=6_?2{Zjeptw zvS}xlHN9bab;8l7E?|xRde*!%ZR=h1UI>~QYMJ(J4Xgil;?Hw?ho<#Bxe1DPZBJG# zx!Dr`VybYArk-dM=VJe@+ZT5JmRR1N%cy$v2;aL43)dd<@ZW#guWRzd$4ejnt8NY| zY5vInDyzcu0Y_nVc8TrIZxY9jxD~D|xb!c-@^L6XUq0Wo7K^D}3Cz3Rvo|qU99wkn z;{T@Q22Cqn+aEF?QLpkVn>p|DqECCn-4d`F9pi$cN7Wl#90u1xto^S$Yd1^M3UxA?q7kIvNmu76}kVXNe` zH79;Z8XIh$*Xxw(<99z}_GDF&BbV-OWMy=Wm5AilwEJhpt{xK2y;jQ7{5Kohf42BU z_V>{#2m3gFs@^=39qQhB>8L|{-jV-L*f+mA!BD0$`OGpKcDBbx3?5ElA-*qmB}N?* z>w8;epSkJ7kN8OJa z*8mpflL3wahFpf}>kci|`DTvPJD7BaWPYNBzW*7>L} zE@x-h)y^qCes1NS!<}>LH}^jL`Csqbxkvxz8hGto$r$PJq>I&}fz_;$h3QOg#Ojty z@0(VpvVGO6t&BVtf311KG1e3I|Lc45=l_Ad3SKdjdm6=qy_GN9m@06ip zTDjM`*}LcYj!?amsVr`FivJ(v-&#Jq{P;#011XKnCUsSh)VI&B+kX7E@@?m>cdt8l z3SQ|Gd$NU-Uv;4ZXGa~^&*~GNpZ3YhI5%!+2-Uceq*<;ozlTNr8mEFtKLu03|=O3ZiW1ui4$%tDqZ&b$y7y4cE7zP9FGI4e(&EOS-&i! z_YRBJv93V2Wg!YGCZfrq7VA&$`FZQ-EhYtvD>K6;9`n%(d=aU~dSc1G(n(xTZfsiH z@TkD}zd>ol?$WtkD`rn)Idfgp^;4>E^?u!D9o*qD=9&GMcdTgE`+qa-s=ZUVocc`T zO}C45Uak4MZIiBL;F~WE2R#`xZ4dkx%y_$DP8c)O#B+A%CwJJb{rjg;;N}FLOPs5c zQ~u6fe^UyoQte`jN5{P?Np&wu}K zUVM6g9BLv&Pb^}*aJ|0UZmzAtn4UdYp55u*`XF(E_F>evnb&>XLyiQoFvudaBN z9XL~?V}n)5RfVW?q3@4(PmY+wwvdzQ;Re2T!}^&~&yGKTy8iTeUj5|@wr;+5Zp-Hj z=N{bd-pp&{_~_clkbVOBn7O#*yH}A z|Bl#l0jY)m7pOQTXLsG6;4a5{Fy_RqwR`#I8Amn!3{iUZ|MlEww_iS3l^W@wc2g-> zsP)4Hu{k+OtSdT>+t;hAJ@?pXy(h2k?X7k3S1mtga%tDIN*zfSIQlr_qCoA*-(}l% z*q6?(Y!dTT<6*tYb(mGL@hq>>oXsU$*NRQP$Q{7gYv$p@#b@i^`z$(aAf9QnB+!R%SH9dr5hhlF z1J4ee3>ApK{qIQJ$sYli4oy8*@^SrV)AavNtB&q+ zu8d(NY0ppYh_HK6KRdC5S+Zkg?d?-ub*Tk%A_muH*-9{R_uwCoj*Btx zlh>Lm3$2?-Y}GVymwQ z-;%{IJS@BT_J)Z&t$H^r>)(Il89zT8@)$2^IoP4Z(j~^|wVUITC(Dv(r3oww>s$(V z@@byXY;4$}cGOqJ+||>sh$m|Kl-=HeyJoC<7Zd+{!Y=QHxiN9!%OYYgmbi=D-I7;e z$XVmK;{2t6t`!lM)x7%yBCe_SU7x+6&HwqtK+P+mAu{LlRsa2z;d^?4uk)zopa1c* zF8%!fcX#Qr-J2&xH;c~dFDveQQI*KRM+5JXH(LLBXuA5|KdOF zaxi1-`%aAq3nq3)cE5kbSI~H{%h_wbRF-p3 zg`fmann&SI#iO?jr)ZY;#)>xwI={4D^{edSF3s8)aXl;Hsn08Prfe7GZP;2<6zrh& ze}mfTpgs!Y|1 ziE(-_EqdtQ-pkWJr~X_X_&lXr)AiL2fo&2CSpLn8-)9+q@ZF<5zB9XyKj1qg`tH-! zyDQ#2y7RL3_WioU20TJe8yuZD!gA{WJuGtG<8Pvp4v!-OLV|+M=ifVZ{jb0K(dhl( z{ocoxY+m zj?I|b$fzUQm#f9pRHs=gu>9H-wYx!kcK>H&Z*gP1HO+G6-9PXBYx#RmmhImE>C%zr z)XgkRDkc|pNR>Fu+_@@j+PUZFm6x!(@PGOBXo~&OE27MrQ|~?JIeoI~$)>Yu!IN#- zn=%)$-K+AbwBc7UoV!b7^8RyPF-tPJ|JW+96tL^m1fC06l-7OoN`&~Gb?jj)|LduR zWk#58^P0S_C)7#g4FgA)^}UYQ+Dse|co&2QN(KCL*H~+^u-9zLzhA;)5e^Y)mJb&+ zw*>nM&Z}@bVZe8^!|_OXjbP`LW{)*CA^%KRC;q>x5Omhh<<*T|kLY&6mrre!np+i( zZZo+&i)uQ-lzqX}L@>ALp>EXo4EqI-J03c^wMhymJ9XVmeHIpZtz4UJOK; zU*OwH@5b7nc8BV!_HMAhrS(RC8!NlYfsIR8EmSXay>!p)T#+w0S2n4@p{K9&r6yw= zhl!hjW>Y_>q3WB75pz3!S3mm7dDi(zk9Jq0*QKr?Iki(g8xpiGH3ms;)}2(-r?)5f zws`07>k|ukcJUoH^NG7Z*C2Y0L&LhC?j53cvTB7-i(GT-TXN{^R3TmOUwWMDa$Ie; zRG-V}OVX_A-EVcHCwndXnxD(w=H{GS>n#5INBz=C`r#*Uc`5k6ELz$Yuy2#LscX2Tw9<3--jb}D+bDq7nqEv;DYbo%E1_fs|3M6TW@ zt9X9@oW(~sy|eLuddGPWi;c3!6ctIXP5;G38IB|@Oa8g&dH!R8SNok?&t7Jj!sOw7 zQjj}C?VHpK*%g0_Ka0#>7`B=Tj5_C)RTJta8J$k7XyzUha#EKdk@c^@p!N*lG^%-{_;ZG5dq`&$CTFJ6=zce;U3a z``GlR`yXW6w)9_NuHrF>dCPyQbm797HK*$)`ZfH%*H(NlwDVo%qYcRucdcHvp6&R@ zoCQlx22YKwJ0|n9>q_Xddu_9G^n$fjQ}3Po^eZ4x^y;-c->X*TZZPy$3bj=ZO8FtO z%a^b2QW<--&ZQq*ac`DCTQgCOi6!EOQiG651GAji239^lp~nvx?OPPQZWYzAezdzP zlA^?Ka4J7Ppt`za*-3T3*)3+0@@HGmuw3Yq<4IKVvCmjEqm}2|V-CMZGSfC%D#pw^ z!2HgZvE_l}O_3y%oLpSo?`t)dA`E&(}O#@p|{lm3Qy$nYKmC-ftc6Jh`97JpD=}|RnqAQ3J$Rps^K1LEx)rOA zJ-F#9{^i6K#klDLH%@yw{*$V4SCcWUG?+Qjc(sAd+fVvG(tp&R7w7j|-p{y5h(nDp zQMtc=OQAU1_Ps8~$;+mz3rW>}6gb{G!Bp^PyaI=E2MgOv4!-w+5`{k^suu2wP`8?~ zJZ`m+Ot|aspnN6XSsTo@E%TRDFcO><@NHk>4ht2#-kuq|J|rI7#CEdHcTQ0b@C z)lyO4AIyv4FsW-pJ2<<-|N@OTR)h8@8iY#kKFfvwkGPlh){X=Nc&(>&!mc_r$SE}Uasl2 z`XagUbkANs>z8x1)n+Enlh@hgq@KU!=KF6JFJ?r1)Z6uLo6aM>iFV)52=;%dpZAn~ z?xFogSzkl`OB4#LetxeND!KH3VPeXqw3DF=GVbn~UAL|`{G!|6-Of=N$(pHC=gVGK zyOJ(gAgeIx^^z95(6Y!IX-5o-j_iHZ`RvaB#^0|@)yo~fHQVfa^(|XVG5X;5RcE{z zPp#-_c~o(5>*N_B&PQKtTK2a7zhw5W(&-2G-SZLN@$SjIJ9oF7u1}D770Ns_LUy{n zf_mcT$AQz*eyefmonvGO+L5x!Z_U?B@42ovDwG~{K73%`w=>EHbAQ?&Wx9Hk@h+eG_zi&LDj;Tu1l{l#(WL#BVKe&x2a2fN=k z)ZMDQv|H|TpZCR6>-KbhJ?gxt=y!|Ec7}rUu|LH&o{UTT`t|o@zUWfvEz_B0o=K=% z9UR$}zk8FM_q>1J z6Meb2$KSoXF86A;qviKXTg#R5tIFq=)yghco6N56X=?EC^#c`k%}Ff=Rt^p|$~!yz zcg&o8*R{TA`~K6mPlVq|ir<~Bzf=Fu+qxg;AH2W+r0}=x_bJiyO0Qn`Jg{c#FSi?f z2X4tPN)=0q%vq~-`IW=7Ei<1O{@dTa=|5w`#{)m^$9sjlnEsz$lO?>8SKY#)DP8l> z#K$YzZZ-dJ<=FV1)kkc$b8%%&V}Od{v?;35eKD1vmih!P2#A`Pr0O+Q)BLK*<+BFC zZmnLStFEpHT^`q5c6_H?_Cj&qpI(_W&L6g!ofxHldc$1l(hb@>7HRLBbm#Lq^Z!m< z+M8w=oqCn*DjFV?`LuT9v<`>vmYug=cf8}iT9J{IXsxvEa$fb@@(Y3K8-xTyCkiMZ zT9n(jds((^tLWqHTb{1XNL?-2`d0F-W18ja$n$C2HqZVm^UPwo<@wZg#j}6gJhNP1 zc|LvL=h^?6#8zmXxxPEp?`uWFooT97&OA(gcI%Q&?#%UG-8$!lJpX;U)OP0Xrf)F|&d#|!Iqt+uZ+m4ECZ3rUsuNP% zUX{CiVK}vhVd)*eg;Ta%dL(u9?Tegy)(fZ}@gk#8ErLliV^Y%#z%;{L}v#MTVWO`?==P*1h-EuNTh@{vP*$HFjzESJ#~v zx(f~UuYIlK-Z5`?&Sdi)-R7y^bC20=pKhKWf4}_u>c4*vY~1_c0pG`pxf7UWJ~%A@ zq_F&RkL<5Rxoe5@OZ8V>(XipLGI`Q_>0H~Y8%o>e&ttL)Z%chVT{d$yQ}>#`YQ>>- zS+dWC&Q2Ad?z{C(p<~-q!FaBPnIhKGH}z*~f6rYK`E7^I&qo=y>*A(vkw`Du&;EDu z-{o!#EN+(+pFA_Q+H6wcVW|VtJtyoiDcbJ6QtM4)&4EjAY_on`_@I39!&a%xmE(N|L=!(*Sj6B zj|L!YOo>fJ8yk6;B-8Qi=a=BjX zA)Vre1qUouG7da&-J=}1P*jauJElU(q36jHjYXFh9ZuP3S@^l)gYX0cAd;iA%Pp2pEtvk^heP(&g zvX25Qii{iCU#~W_|B*LKHC*(`q}{iC!rT2FJX~CTm1Em{A~!v~a`{wc*!k|yo7&zz zTC_m$=%NMUi+6Ay&EEH?Dt2f7r*FId?fWF!8(;Xj>|phpRkOb}YYMP+r*HadS-Hz~ zt6!zSE4HY1wVh0!wJYuihv?sLxsdDI>^+P9{<)jpZ#Ny*-FC}pi)h8`*4&HnCcBEi z%vc|}tgG9>?$$KtoW5NqQ%d+Y?|5=0?Q?C+wj*}@Q{K+fe8J}?v*xkStF%)a%%|qu zJRr9G?h&1^8=mgL$BPmlP5j|rdUn^;CgF??2UL7~+l1Nm&rGel$s)MM;)_@3#B(d! zPTy`h<9yR3V(nZ%rfJRAAL`wowaLYp^PWtyD35HG4*0xq^_txmD?G!wdA+wLez@iI zdGp7YuFIK;|88tshfQjj!5O*e%Ui&MO$L9=-HoL>+Y^G%sAh;`Pac+S0?10 z+PcGM?$6Lo3zs}Rn#JC-IkR9k=cKERtHmw%_01@luGmo)yYyU7kA-ZFnBGmX&UEMb z$ImbwRr2T&)925$y8Wng>CT$4o@oqv)jKaZ&H7;KzUJ#qsqc>%j?QY@{_B8|z2v%I z;a4`@)aAdp$!yks8Pn@?=fBzT>+^Ii|5PqPkMz3kbH^0}xP^`5cl|WH`eXL7uIB>h z54}_9OFuh@w>t4G9V$sLeZ%#wyV#U zMK9Re@whZ?lB|pr!~f*U#fg@0iiD1T-XU7v8hE{7_nk&Q!M*ivlavGdUs>6yHTXMz zohrx{^YE(JnT5=(FRgy?3LJcOZff+xSB5dK|GlZWX;b+|;?LB;JIQ<0B!j*!Ymee? zciS2A+hcRi3oT#wFH6|JS{W9cUeJ6p+P;Z#-2D`(NF% zXIr(@{X@dO;;$kq=4pkAxe}RQnyM!S7DY$QnR@+j&Zljg{1R}}SlIj1eX%F*Je)e| zrbutfOLc?AJQLJ^PnTRXV@C5f)#nk1T1vE?HfUadnp5#-il%l<^*?zT^&Vx3I~)=U zF3;+X*!O?b{~KF!GBrG=^lYj5os!eJZ90p)9+g^%tQxlfwj zC+_M$!5}bnsa163)6kH}THV^!wmFl1RnN7WTt2Dr_{`>0Rgn~w4wkG);$o9*cxeQ{Rb*|K+^ zW4}I@yk)RFxk6d$<_UMhQ<9a9`tJ_Lee$lpssH}z{_^z?L>J!Of8c=imh_l}cy;Ct zwe1>xhZJPDUor?{pYY?!ijN-d{4pWBCwK?k^W0ca*DS!`xNra0k8fo=YgftC^DH^F zu9oXyvF}oi7rt%J*Y>)<=UK%relfYJ{}IQdzm2Thym@Z?V^rJAJMC*^(zUE#%NE2f z`^2FV<@jZZ;dN`7>F?G5J&>{9@S^4EzLl=|A5A7qvp-mxyyT|P>F!xp{!2nGrKC)( zuvw@T=`rn9E)^0YY^@G;k?o7JN`*I^NjK?ird-$?@FKE`)Ojg zq2!)Do}!xdZ~iJ@d9@^F){GNty;wh=jP{%{;mUb|xl_8mq<(vUjEKDMHG7#?)#7Xc z<>={pNg64uGqvXXGQ}GDxvXuPxHK|+^NAKSI&Ct`Y^K$0o1z!|E2?peovX~zGL3~(m+jV2j`G`^7BIiZPP8iY zRk-Z-fW@ELKA6^&J1m}hLF={0YhI<@x2kU)4}5m>;*bBC0vyLJSS_zs-uRiPeD|H) zlR*EVd7u2->VN8A{$F$C)5h~R?7p*pTB^TseU0m{TNbfuXTs7}$KMZ}yQiUH{c5$` z$lNM_U$^+&X92#~JaWISnl;CC>(1A&xV|X~++M!!g$C13>no<)S7hH^TX%lWuAj_O zd~!m{Kgu*-%5HhXd+hh(KabUKs_Ps1-%XwWmt*1M-CFVgFFct&-(%lj*N40BbIJd6 ze%rqP)!!fecl`a86u0eEeDluWxciZpo$vqTJo?nMd*83u-`sZWf8DI;rgu1iXM)I4 zqXQYQHbm`uv#sm$#iwPVO^r?#Uo@mNk0kd`YTa6N^71jYPR_&AXC0a@sd@UWsJ4!# z_FB<}+d?#|D|)gkWMcBx-l}rxeX6pg%J;s@y}yu!Dw*#5SmahtN+tv+de`{ZSB z*WBFp`Ppr~h>n;oH_A>HJ<*cb$+kWA`0aNor``+SmYZ-}?$TDbYwtaG#OpUDdZ|ll~R%+JXd4Am935L!p3X`WrE!&jza*KiF^s~QW z{C?Uv9gJKP7(e}(+S}YEMqaL0w4%OG7-XWYbLo(k3UCdgO_J z__ZXVfxCT4MUS^y&C3vXv%^n|LpCZ*_0GLI>q^d#s3%L*Iep$ge93r4_Jr}Y1Nsq- z%-((X^6IVDScS7U$gQLez9%UTQP%$jqGoTwLtL zBc(Vm&Qqr~IJP97SbSMy^23dm!TTDzU4yh9dxg5M7IeG3VAG=L*s0gAe>}!kwfkgl z?nkTYlzMr2nS%EATZ@z5J!#3`zVmYMy*E9(UsYUwYqjs4V!gcV)hWFTYwk>$;c_)E z_`FEg@|AgFyq~ikH?7>!v25?MeYF|33b*;9_^r>(b#mi3@lNX3Zv%@5 zZSDqk&(zcpeF-tQHa>e^)qo?QqfxoRja7%w<&cwF<2eRtt{9e@Go6wet&X~mt6BCk zZoV2RYr*{dtbk6?j;KYvkLGT;aro1LwSIE5H*eW%uv=Q@-KCEUE%&#bmVWn3Ebsl! zbxvQh8>?L9dGbpeYtag6aQJ$jULy_BV_}_`WWsllUmbPz0~i_ zC8clmZ_XV^dayq<_+*C6cg0!GFZlO8d}G_~5qJB7-9*zRi(Z*KDnH}$%eYyyT(C*n zUF6!kBORA~wm+|xEATNWzGH{=wOVe$>CqRK-Kww1e#i3kt<}+0_nN-Kclm@Rr(|e7ty;zwVzQ;=i{yfkFqx@> zE~!odI&0R*iz!UW`Os<0Ugjlbq1rv`#3b*|>3v=W(mSMAC<^y7MOpnSnjnV zGhjG}RXLT>!zAN^P1b_8sb3g$Gmgw-7T>t(PIMr<1|O4Bib)6yZ&b;n$Aa%xuE>sb zkp1ZCU~!{`Dd^({gN+tDckJ9Tv&+X-OzG6g&J}`z%0lYu>g%&oA9XL~n(-!kyMMiV z$(3b}huwN4Os~nC%gr&k`_DJ4-0a4Mf5BO)=k9P!JEa@)uAzIXOj%6s2EknshZEl| zV|%@0txLW1&C_L7E&loi(;EaGb(g;T_u^^8o#vMvi>F1G@L0)RKiyfv5;Ao$Otj+^M^it)M4s&P}wS86n;2l_nxak&7mPe6FrnKwfvrX*lFTa4;>TXuCp!g zjFQb}ooWj*Ettag^#3akEzbEtD>PYWW<6LsD`DkqkCnF#G#4$-b5eezr}v6YX%%0) zl9tsee*6ZrTaIT|p%{IsRQKy!uwhoQhkNs%KLc(x=>;W{>{G3*orQ|KdkCZh>` z2l{7PhAf-Vzhp(mfhNiB*&7eY>BtGFO;Zk&^zpVba5C*lX37i;_7S%>=sx}V%bqvy zlV2pQWhp#;-8n*U8vmgV)>xicpPmSw*f|kBJ~>kpKYzA8(66hb&vfp_BY$SShhuNYjEShOE;+vExTjur%mRG`gJl_XwlJ!jf&gxr;f9|Ib$7OvA58REGj_XmH`}CgCnh37vCf|OSudP%!KJajvBTHANuHO#+UEwq9 z{O(Qm-z&u5GWFtfbN$C(L*?38Rn|@r->aVWJHK~^f9RCd?^hK5t$t8so8KrLzrv{V z+ik3x9E0j_`);qqon+P%rWg$^gS<`KSAJuc4+oxt&6HWKb8u#DlfmXL1jXb z*`H}<%O)>8e$?&azg@>V3r_C+dT8tS6U*P2Jxw?j#J%kEqC4#O0}SG?P1$O({?*NC ze1T_wEYxv(y!x?{W~#W!L!MFVq1iERnL0(<4BWc`E3^MGS$oX z=hy|mtX-OWb;}`V>s#yI-U+s?M{Wfyw*cllED8^+U4{LFbb zowsWLio4hOR>Z!$-mLTDPcI|W!utIdt2)=seBHfzulH8YMaGHC7ApqY?0Oim`03u~ z|0_ylzXhpiMw?C3p1#U@-L&B3KEXAwLeECOyy~-l(bYq-*XzAhukZAqX>hLO#!X%R zx^E}EmAGBIKZP9DSl^zsEs3>||LpWPwa?GbSd`g#q$~W)&V`TWRb9EUNoToXrjOLz zV+ogLWPWftl(af~%Y+{hS&zbk&i0>KttI{|BgvvKG-2AcBKbqd%I-iFFIy~$38=~JZ)u($Gbf0B>Jufw=!rMv1vfmt{qd(vowdZFhs8f*s$b7D@HqeC@U46E z($5$BI`N;{yZZgQceU@ktZzN|bGk&Rk#D2=C7DG+p({I!-ngi7DY__TDIHhjy4d0M z#zk?}?pU?5|1PRoyqlLOsJd#1NC)Ly5}t9SLS^lfuM@mdUKuQ5Y`ze;Lzzu>i}<4# znw2ZNV_zAzN^fzz<@D>g)XE7<`;3A*E(*sVX_{)al+&n zoK7`cVq2-G`NpJG#tv@&50-I+^&hWInss=-6TicfXSI57J3qF5_g=7DPDPI? zBf`2d%O`K&DR-X(IXr)NZ+I(x@TOo4%TM(W+jcpfcx39@Qu!{rh5xYXtwfFxSuGZdZDqpfh zes{)i*@$HCFUjv71jbkMOx?V09?#`F=}h^Ct?6%`2{xs!Jy8<(KhPqV^N-X81O5u7 z;@E7Zzd=%!OY1VXu$W$)QXeS4c5Uk0-OgTxx82s>*)4RZ>y5^gm%k3}(=s_X`*mRO z(-LW2UFR()zyD^4Iq4wJ%Vcq`_^-W!+CS@M&yG6?$(79u4xTF*cR!_tXq?hxBS?Gv$C&eN~wtJbYz9` zvTk12lGWj|w8wI@or~Ob})tQ-U#4qWXuap8&0G;vX9;@GikVq3>T?dfcKf$`z% z7PI1fDPpBOJ6PfZ>q_s3j*PAHBGMBl1+*0~OPDGI%F7x3IuIbtIn#-oZKtl|2d;Y@ zY>z$(*d2PTEO3e;je(`(q-WAD7h?-%W(FPw1~v>_Cdp_y_0*%r zxw%@}3pa`^*4WOZ_Cg@mC7RK4<57hVO(6{dk&3+moO}QHm+5%c6|Fk>aet@UarbFo zO&emFfB!AozpzJtqvX*pN!HJG@lSkgw*NoPeoQD=cScLLKf`;k?ykL8Wy>zMr!_7O zy{z?C-`>OPZ0Lzxr$DC6I}7WXx>9*mFD2`(w4cen=LS#yRu_#Q>k@dsea#U0$Gm-M z`XfH8O$?3d8~i@i{Xdk_=DnfP_>PqN%B6(~W#S7s{6A%%{CUvUP2^Bu+k$@!3xu^+ zWPZOy4zltgRjZAe&R$MQC^1`AS@*6C(pJ|Dt z%6-=RV;{9=!jt+X3;~BdtQMuO%g8Q>C^K9AFC;orzA@4`dzRe91-03-@%Og2_7|H4 zubW!;aHiMI{zKi53k0+|*8O4-&3t)#4*To^;k?X<-*rh_CvWus!q)cU%6nY%X<5U6DK3z zoGpBR(f;>3S=k%&=DtmMsgdEzcq^OPucP(ul={0hWD)nmkiJ<9cF4FFCWrJr3bI`n zcX!2fZn4GMBZhdpB{W30Dm)OollWlUdEE_gk zSvD{*o28yCS4=afmnblYDM%k=S+jw6QvZe{VymAr=#|ULrWqfJ z6Jj)GOHO-Xd+0;TL7gtq{q~2u_iuapuJMjetf;v_&>H)rX^zRVOOLgst$Z|h$*XgL z&5NwPr+g@mv|4-GHevSU2~(EpuXWBYoa(pT>(Pa`vzbMwF#ogqF>jlcpja0-*23&ocK!5CCB}fupHb2L@RM?^3DutnK%C>sR%Nr?MuAX7Ju{M9H>+GY3hZk}>A77bN z7VR=kIOVFa6WymtKd-fvxQ9M>ofKTu}-}9<*rS@(gXK5 zUofik4N~U|S2v$qZE@yD#B%0Sx1<)V=+8d4!P$4Kw^3dH`qJyrN9QXQ< zx7|!N!h|EOw{E-OH%tELWz)P#lV5&Y_Je3qu3 z`|2y=8RoFGwLg)(ww>+n)ffYnPlv0jJ)%P=nFxkS9qHC;+qo}m(jTq2&))5-s9Y7N zsWyAHg1^TqwmmcUKGO(2t+Fa|XU*khl|nOJ)ZTAfxap_vwI%nXtG=boTWuL!Q}@jK zrnmn51>)I9kL+iey_P$1_1vu4v5N1Fv`R`=+X|Vo?*06(_KH30`U`o%fA$q@x^?}9 zLrOK5R>I`UITrPNyz|!g6qR%@f4yuK$KL71*EOy$5BBak`R(wYMaA(eZ5qlx9&&s7 z@O9Gioa-+4tTdj*n>_D7+jA=D=xdIAYXhzD5Lf9oUjem*-<%a1YQ8fXo|^~WTe|Pv z)8?>@QwD;E`@N1-S9@7n&3Sw1Z0BMXfyB_0wR`M$+wmWJ6Zh}g;Q)yUVdFXHBBpQJ zrf_M-r1&J>!UHwrUmcB-Rv5@qfWVe|Y z+Ja7~CrJiysT*E5`XPLdH-^(q=-OnS9h1{ni8<}v(dinpK=qzU_?4y!My^_ntAu1S zJ8jR3ZdF*~GtsMI@!3QJLE)oLJlzjCZI_oVh>dh%QtUZ6Q9|sXB2VCb!_8MOIxT(8 z^>ya71uk1cyNt@))UK8J`1n*MB_*Alq+)2ea*2A_%!o-|l6_AUI}(IkJT2PGWkOHL zUjJ^k_W1t$>6?xaYMLLO`eX9DrJlwL1rL-Q z?kLP*KT`EZ-|GGt8hHo~N35mBDwz=>e`1r$z zXYN+v*l*pPnbUnfRUZ#3E&C*H{`Jsl*NZW)4t>t#GCH*H(v(BfE)_13TD9vMi+RA3 zV`*16pPhcS+}}BVQa>+;l<*W8-(bxU%_A4tt9F=8IA!eF_N$PsVza1#t=R!94Kd!m zCu`Ln&ED!TYsW_;w`ZYOm!>exTdyA9u|#_Rq6rnVbo;W8>b^^{jp5<*XqlC@_RH*b z{Z?Nzup4yZ`g(I&8V(ww=vm zv#LPCx!=Jz)$Rv5mreI|aof^h9erc5>>^opUx{fUc|Y#jb>@6FX>Rk_gxDRvhXL;9qbZ)lN^`lWQM0(2wJ61lrbL)Zk8s4u9P8W%t z{b0RGZP`rmX&$wUv*xTZnfhR9mIm9ssGBQ0gAV8w1y6pqB1K|KrmSdpdC!Y^C5}?< zt$MDK$NhAlX=HGIHuuh&e%7^TNA8*=&z&7hK0dTF@Q#{3%h@zWZ}#e+Y_pbnniiRe z1-H*h-?sDBW9~IuZpFz(cy0H1EPZJ66Xvr`le=!FcP;+0?!oWp{wr?Qh+H<(-7AnA z9xvBzk*jlUO=+Hew!hA~h>!ExnVIgYJD;0cD7>rm)AW+V={c+7?sKnNR%^F(IqU7! zM}Ns5`n+XAYo>M3xm~?x|J##qy}9?UZR7fB-HYdZx-mufX63!Aqe)9QB~8iLeDCi) zm8r?KY>!f>uBgzM+RMWkd~Nla`el725h zrJUs<+2&=NBYiVhZ4=9w*UFo>^Q!LctnBEGvSvMpi?=iv`S7>Sh||)qJreutsXez#+}z=*r64RFKfj=g7)l;=Rmbf_tah+Fe(UOkMQzsDShL9lC{` z`_kv7I(dKW)Z;BL-1{Qv>AZzWE4PHonXV0;xXOB`xYo2)X{P5GXK?tM3WY3PdFjfv z-7KOL*&Q|sv@twlYGU+IY2i5H6yzY;SQ5%_xU5H`ZHgeXC$pMTWQRk8Czs~rQ%www zJ*W6*A2_oyW!aKzi4(UmO!5d83xB52!2OVAT~Bn;290%c;YwylrwMG*+}@3Ko9=JCGK`g`Nfl&?CyXIW>j&WYS)vf-81s`C2M;)=WC zdzfvu9=GhtOek_ydwOf)-l`v;;}fPH+y3Jp*ZWet1v(Qi{#J~)EA+abZDxc>?cx*k&xR zKKWf`LQl@-WUHynZc5qtp3O|cixQ8fM+epFyzunWKBJU8^;zs{w}c}L(;H*Xy{ewI ze#7)h|EG)0GS`bb{4^?|sj2h9sj$+S%@=;PigRqZw)VKoljP>l6|alec%n}-wFWh* z_Rns3wuu^Sma;8=-R;nIHDYl|#S-_Uw-~P|1m{fYx}vu4ev8a$+eEFSFWW!0U3Hx| z>zFBDZ}1hT!#{4F{_*Pr|A9Am^fhc|wCXLDb~N3Q%6``F8%y4G@4zoypZjuqzdpO9 zcc+_UY0%{@x9)u{IQUT1`!4=ZFFC(snQm5cV)v;^$!??Nw$?RgMSrq1$o*7uNV%Q2^wcGhC(m9e z9K3z<@CJk5diF_z*>bPG9}J9^Jbb0}{z3=qAKSLeEnReBQ%1_>2USz`UdFo3WI4Nu zqe(bxcI-FHCo_W2?R+vT`d#HbhEq*qElCSoMFUd;_lEf&?&{N5jOet=jM#0rb&FBi z{?5BbS2Cr487!-fI4pOrpxwSnu&+WzS@!CRiDp-~_rw^Uz9bQOZ(*T@<22jXleN=i zrDpQ>dblSq-#qc=m5!Xeo}A2*ZRTOSq|WpmJ}kbwSm|>6>o-ed7w_G<@ynA6r+o_Z zzH7}Z=rx+FHgTrfshsH-rU`eKeQZ)Y<@H?i%t!5r6T+RYd%CvsOtfCsxol3SLFlVG$&=ni|O<0 zew+(=ab5PnbW_!CN_j_GhHcdc(?k((jy`LZk-b4B5bB99qP$ZA5FC$KS~x# zek5#Icdm|U*(US$y_2hF%>EnydBa=QOi2kb<{K7{i^ADTYENFj|ILKO>*$XVGox4; zNudeHHeJwQZWmH8@k>=;nZ>wKoo!yBP|P}o^qWjh2E`kLPUSXoCx{6gn!0Xd3ZtV! zBtxeR>%~P3ej-jC>mDv-FcV>FW91folV#}2^5KCxGn>B3iW{N=ObtyJ{24y(Y^!dH zSf3%Z`rP}nWy#-m-gP=w5&PDmxlFPb zC!Ktz8?`Ot=lp{<3{AFk!VgqGaqzMFqE^YDoAj<;!P~jk zZJn=D=N^)_HVyh~wJ=#_U1|1>i&fbNe`Y?GeUQTty_zq6f6dV+UTQ^R=MS;$+G%>^ zN~+vu#wOFoRZqU{b&gxU=uz;iSxu3z|Hhbq)5_tTkQDY-rSa?I`{7;z?!3#cw%K3N z6kcgCEBD52Upc=J`#Z78e>S$nEp}XT(sSqP9gHl`w#zaoh_`&#V9}D7Dn9ndd%1e6 z-;vdK3<@}HK0oq1S(h%Xr?2q!X>LX#&$mgAksE@VWIUL!mbxtpj9R{n@#-^|OP5{z z4?N#!aOimKKJ67u+>;J&@jbux@%p|0V&9v3C>pYN`}=rh_sloH`*eBgUhyY4k{z_~ zMQ^B@t9E|rY{tOVUk=}>U3vN$gWs%%!>5gcX05w*|4__(YoCW@t6QYQmi{{I=HU^= z!SHRN=7%!j>SK13Wt(4Hm9F(!vCQ@5>cCw;zE-W!-aBR9_ZL>zt6dh`6#U6oT&*Y4 zHT(9yS8;4J(ziT)>Mz@D*Q=7eX@X7irt2H`>*c+Yyv_Te+=8ojLB`GWD?zfliv+pu z8#`aSxJZgM^JZ54le*>?Um0Y=9(nIrUvu|pSj_(AaZK;ei07`ic;oy!c-Obh@=G0} zrWi&l+{>Qv;MrulKk-**c4eVO{$JVih~Z}m-!%-d(L zu9V)Tf9|fSb4BIf!xi<>w?DmQ_TBtm?tMVbe-ZcR>?vZ$I#dk5zBh_|b58T@W3Gyv zeI64k@`BgM28P+cp77ObV=tTL?pw1n<=r>R^4>ChUENo@=Rl{QpvBe9oaNU3PinSz z-Tk((rmxoXx7J6ebPI)#ZeR3z-{j7H7}+8EyocAiJn?aPyl~mN!m0({7J^Y5{hiZ) z2x=9YO@G53cC0}4NYYVDZ|9x%ch0_F-X`!ZSz5~e>lHVPzo!g@cBW3SHn&+AUKq29 z!+!b2&pWO>O1VDoRBE&4)roETr+zq|_{F?LzG+Uq_IvjQ2XtpIkCOby^kMdb`%b^J zd(7$Unu*@1iXCb==`it$S*AwpteJ zDJ@%>nwtrRCxx#*%KTW7WRuHX$hl+5?j-eDzQ!|mRq_k}660uEu)2TpBaOvt&P6Ui z7RC}=JLk%a1#41D@4P;tt)ZpiRXyRGLNK3xfXM`pC0p1t`HehOF3nie5^zXbD)Gw( z2C)N7Ss)_9M2vRg9Gn@rU-^^HU|c6_4Nxh;@g|1Iv%-xqa;5fr-L`Oou@q_ zC%A)m)fx%|0&Tsk;_nBnL26x;#;Syddiv;BRsM!FNpeEcKvILK62Ez z)M#t`(;b`dXdC&l8=KxN_W!qb(f{CwEjMfD8eE>7#!$LJ_v8gO+S!FmI94tQejORT@xYTu)!sVSFI0P7^k?mSI*E%-@BF1DEWG}4@;gK( z#wDbFoj&z|ja#OVZ$;M4dGGXOL=_@s%MS}R8axh_O-MAAKYQow#*aO5KN)={@HGGJ zS334VY5g?OB}V$6J5|>>sU-Ycz32Gk^jWj3pGUg+^lUhGk9*dd^u8Y|VU~686uQ<1 z+q-Z4H}6y2OoxYdx7t1JjXmsJ9?Hzs)W2F@ut)mf{)q6^{TyDNH#0ps+Qe7B_+1j* zo30YM_4YEQXHvd<78S0XVUlC^b=k)w(;Ak|c-9j)$4-GMD=$kb``*uz*!WL^C$8rG z*TL?>*B*iyu!;Bf2>&@ zD0uz)>5r@9|JoYg->&s$+lH_9B6i)cW^b9hZtb7!>jAnOei?TJJy;UhS(jzA*G5}6 z_r}qm^E3qQ%o{CxmTpd)wbgYZuQb1o$|~AhiJRYCIIC<}n z#~PgH8hM{AUBB{W!O_)+7Jps7&9dyQtA?Ub=$D#{74J%RO?crjqig4mjH2f04YM3}T#;6r@p!Y`jmO^dKC_yh zsh&98_rKJ&A;8+n#4+RG40od~1~YBMqPg1-FWnhcQL~nb(O=_=lF-LZtD2WS;oZLI zC`alni&&<-HM%QTF3rtcdUjfh*Ct=Vpi6E>X-*-6yn?)myyi+$d9Fu~s6LR&bLmmt zx<%Jl2Mlk7-O9-|i=LFbs&m4mX@-+S61}fI*}i+RhUA9{*CKerFKVBk_hw^ROmx>I zM*hs+qXnX+7FMSiIQ~e_6M3TRuxi(?|8M6>xrA@eGe}vGdNHL~dXXHb`=N;izbu6M zT9gGnSY#MM+=@ANeJ$z_Jy>Mq+?_O;AMEt8)jlz4?tuscu``-yB)N|@?F=v0dvR#1 zcd7cihz)CuEBtIuG?jWe9Gl2xOlo=oQ8b9gFznc9bm^aLN zY16M41rzHN?5*WyuH3$w@tJk+vF}YA`F$nW2tQwi3UfzKbUoAqt;B`M9Nr+@C5wns^` zk-N~Yv0^>nQm^fI%AQoNPFZ$i-MZrpcmIDC{kFJdb~As}ENSlVt7k9xGf}so-dVZ& z;@*E7?sBlana%oki%)VU8*av1O}!eq z|LLobJY{}ME9O3Jv0Ro~D?NX`0KTD^_S1BUQy|~!KuIV`)lWdi{JG&^&6naiYGS`zOOJgKM>ogZir2j| zkJJh~cf0f1e~fR==_m<2TeDtDkbC))y$2nQc;)w0yniREJ#p#Uf~PiTdM!8B-?*(} zpv&_q;&NtoyR7&#Hp#pVUoF;|M|W)UaId@U@c0bp4Hl;Jtu{W{tZsii`)4Vxma2X^ zao+uFNqUwhyKgTr5j@=NqjC4!HPvg53d$*0gz5wyT(Qf)_4Tu%Qun64sjJVemG9AA zeqHY+Gq<#U{^!@{FQrZX(YHLVFm6x&rS$iWXYGkd$aEnJO8~t-$soo z+C9hlReWC`WXaloWOn6A`<~CYt%9DK2q-N2V-kRR{&F$- z_(|;B`ppet`}Q?WbXfSZ{wLQ~nXghU$0XGQm)_9Oll*A;>cVzgdFj*dg=~!9+F4FI zAv1UB{fAj|?%ooN@!I?`)I=!WS;6-IR*%_-YErzVL?RN zjejq=G+(9Qbup_=*h= z|IZa%dM$WumaOv*X)Yd~H&PNV0&y%=Rcvf|Z`=f=n>oJR*>jyMNrR*P&zIt!WaU$q zZY4!7qD4I!k2_vHoN_kMYIzTvA7A0u*+N}eWdw2%nRZ(Ggjebx zzT)K#_9!$5xuN$t*5WP$Ig6mu_Cwf$@YHBXyydjLX+@qJC7{cT-!9yG=09< zs<^%>H+R|cwr|{=vfJk`Z>)*Rm8wqB2DzNPPf9v>C(C49T#{FNz9;CHR!_THb-z)} z&A!m-)8k*Ab_m@N#q@iBqu-znc7t+k)TWQe z&Ysw&aPMP~LEzanxf@lY8aW+KESYC=N~+>GhkBuR6Q0YUiH_j@6nzrP;i}GIZf}gdH14p-yJKOp0pfp7k@F`EBiq` zTQ8@~4*A^Y53+AxFz9_XtF1>VRlEGm;?QW%8xzCQr9Hp2z1Z<3+sI+Xo9J2Bb*7qs z-m@_=@{EPR5*?pKJDbxc`9;0&ZLM=q37u%Xd#Pl??+8yR{U9xV5Zhfchm3z&r zPS@#3?-P>tOc0zOwf(t%=gizoN1NZ8x9|7=AGx}2@0qiu0&8ZU-MZPD^+J4S$y2sF zYp*W1c4-jLzZGW?`*Pv?|NE!&<}xYk@&3Nt@P3zE#Q8Y;Wj>2DE+vQW`d>3KQvROS z^19FZcV=l!**ouN!kL)$wP{xZwKIbpZfq?vo_tiTxKp51TKkw^psct#m;w_#& z({_D0cvQAs>+h;KhXXJ9ij@{6-eLN|yv!>vo8~gUm z4>R`cNVjhAk<-ba-6*-B?AS~zc18E^26q;o^=$HN@|>jPd25Q#NnLHTtLrTPdXzRL zxICEZ%>T+mP~y8mez(Hm^wN(R=3J>FTvCB+{9IyBJQ6C{w_(M64pj~&77l?s4t>|w zzTT4Ov~@)sk53|_?lR5=uYHZBWCZnmJ!ZD5Dt7+YyR%!kRO_jf)%6D*1({B#bf&P> zHQYNFdZ{{K`3;fXUaTM1Jc=~so_*u}La7ysrc2sFY*tr=pNF^d&9~7JM#Au zjlZqBx=do3%RR4cXfyTa&5k(y?uIN+!hr?`CS{%(j4Ttvg&$eXUH8*va@4hBrE+Iq z2H(ty_Z9OTVeVBG6(DZ7Y z(Z8UxGk7BR3#a;?=$SM3SI(BSjt4py)?E8C_e{Ob)FUtE2Hfh2WIlW0oMv~q)54uQ zcV|g2*j7I6D8u%!Z@ihp<G>}E=d9LVT~ysGXC=ljE8O0< zw)*zGJMT8jy>I?+RlPJhNAa*ejOJ?)7~=kNaNVd>|sR=Enr{pYL=|aQ8e4ZuxqqfAicq zhiXkak5%`}e_M6t)tBB^la2V7-ClCk;H1wpwH-U&-(>YatZ2C+Fgj$GrEj%yKyl?u zhj%(cs}HoKh2*1)>Q%~#8X znI0;A_*tQ*d0N0Y%5mMVEFYf46|-M%c${4!WndbW zu=P##S$XS4rlv&YuQIycmb`xPjilU)2l<+ft#?gpCdF6z?O(slE8@+c)#0bK=1crr zt;um&EdP6HM%5>$E1i<3Zh!H~WD{-3ayfl}=H}jK?<6*^{JOS^cg5OX_gl7GENz(& zAD$yubotRgH6`_0m8FMfr%rq;9kEQG?-u8>JyYeTneCo#C1kJUSj2ee?o|cZk0lNq z(Wg?soLx{+eyv|>(+t+1n_0i+mn}}I;)s}~@VZp9!Dll^y_ZZ-iNZ4B->(E(bmz(G z_i}h{5z5HEH`O)tMnzowll~PqyZk+tE-BAgzE|nb!=7Tjoj$LUTKQ~0{WzoOdP-|y z!PGV91Ud6rZ zZF?0DAIb7rc`W5sr}%~TmzQQ}^se-(Rb93?uUlFnX2%DnkR{7MT&OXTKRdh41w`p9 zyl}m}+TBml#^uG40|Ig4oQ{Xg7$swD1$hJ2`VHjIx_@4lC?J1UUtz`DiIa~x)Hu2D zFg#>nw>ZGKrn}DR1+yZfq*aWqV4zx}ypUDVF*Y|Nm2O?#W$%wnb7nVNv-#?g94Tpu zlM{5dZJA;BsZ(q2#*LdimT56$seAm?ds@x)w4?YaV9Q6rT^vbf`CG40yczShFdE;q0)Z|P#>)~>PC-=eIz;XzKB@tZA7G8WnQY-h+{?7aNf zL@sPl-aMAtI-y3|tfnmWEBY^{57vy{sf7-X4+xtsfH*fG1d;FyMjJnSKhnsUd86`0*o(>kUUEHPWHs>A$eMl2 zdh*V$Tg$%9yHMnCX^GR8FZtn&@*0hiUY^I#9Be%le95r*!>n7U9FBg;zuv&Gf@SH{ z(zCL$D{E3?i`~1|WJbO4v;Xz|)$>;l99NvQs>J;AOd7l9wNAFpYCZFEem;ZX1&-4z zUPb>ZSk4{#Rd=rJU9P*A?eDWBEfAd;YP{jo%Yyr>{_^0 z-+x)e-3zy_HghFjsh`Wc#6e$ed1A`r+uf=l>KXUZf0|Q&KlS{3>$3Fx=j9CYhDBE% z+fep4d1G2D?dzG3t}sYBy_)%6 z_F{#G79JMO&|apWLH{2oFlD-(NwUb5Jf7=6>v!T@%|CYa%|ALOEOO}OJ8brQfjpO> zz|N0?DohP6cOI}GR&AQH>S|M0+5@TI2eSob7f8&AxN)s8rv6=>+}mRZxMSx3o%8=A zOUJ~_rRU48%wv6Q$)HmC7D?xH_>lOo{;LUfQqrCl zyn{Q{U-C-^SDwMHy%CH@yY$06Hp(3B{Nb+=c;rCkCc%Tj&zKrss!8Rp_*eC6&D(pw zK1^8lYW2!Zo4T|$%-8troqIVxb7I#Y{j9jD0>`^2eQ;#znBY`-_3HJQ>bspf`F`g0 zj>=_!wobqE>4f8CSJcM$voun2(*k@qR~fp2^wc@@zuiHcB`ws&j7O@XLB# zT^kwiY=5cjYw*hGGZWkxgX->G_*i%8gq87%< zK4uvwmaa29+Ocw3<$>g7)%*K@Y`J;wOX~eEwe}yi_kR!X7n@?VRdT9V=G3~GQ$lY} z_pS_eXbtsI4U0+*cN7gzy&CTQcI~-Wt0&G{_0uZi_^XoG6<2SqTV1+a?%L+6;Q850 z7W!&uEWMTy^Z53n+}kT{Z>@K>TJ_j^sj>C?hkEaC<-NLl_nxio6=B=kzkhqoe^b2o z&g|Nq`QQH5UAyz|R-@ESMt)LRW3bE)ATYu*X6Y3gtq1G zlWa}f`pujj9W|R4EwY+@(#TK!(kY|OPaVQ%<#JuzGikH1s`E?>wu{MmdP%#yEDJk! z@O54n_7~kB+2&zr<+rMkPvgiXp7mFhT;<#y#1$PH9P}C!cF%KI#FP4rMX2=ngxzkw zhfW>IkzBO4@0r$F&x>K|S1r;5JDyE#nl?A-LSD6s;KD7P87td(J}y-`72tMlPIJb- zD|6Z_W=+;`o@puH8MD;#D3?ddghNXbdtdBI?!C2rX|&GX=Ik`h%>n%JOiWC#F0wvI z&7BcFIdH>;m_uG?T3pxy)p%!>+~wG4+RWF~(6B<@(aCDIZ@K{2C9h85i*pWE-cIp! zV4G4Bd(?FJ)&2rhPbyqmFx6e2esK?&Yb(VAb;UivWG&^~WGIdmc zxs+bco9#Vq!GtZH8gDABB4;dPF z%5>*9d1vH*n>=?&nCDzQM^Tx*iQE59rRm(@{CCewKNecm-7@`aIsf|1(s|sci*~L{ zjG59n>+{*BzGd}tf=e3TcW@p0^S$n0=-VGI|1U9c{F|)zf3G0-+d{6I8_`EXLv1$l z*}U;B;9}&`G)o>fuj+@B*G|%n{$~EUm_@Ekd`TX4AkQpGI<>h z=O}dllIrd0pR{Jh(!#4%&6i!gJb7;Iw&%ZR>m$E0EW{-Dg~W_o8#jF9EP3$YQRwCS zkwxlCYActiJ9xSIIeNPKI(r{K<8=PO36W)oE*3BIti8V0Z1>@pk6t}{_weP@w~x7< z44RT!R=tn(yvTFq) z;vBJCdY2EZ51#hK;MhOjd%l?}r)7Vaa%^tC?65dRP>eU@MaS$FuO*6C^Df%3D}URm zfc;;WPxqNqdahDDMu+qN#5Y~5^L9&by>(?>-m7(TuU5vrT5I=eb=@m@)rVq>>byCp zy*0a$G5KuW)}#5`Zar&g=Cgd$;o&YT{M6!=`J9B*e5RGvem|Y(Tz(|JFm+>d*^SKU zcfUK<2SILx&^p!s>a*Q0eWh3zclZ7c&k zdB2~Edv#;e<+{Us5?Pb!}yqZdCi9XOf%PmrFE_+7_TqLm8cMK zWD_kh;GBK%W+=-%2bGDMSM=9j%d=`enN+;PW}kzGP;^98r2nSdH{L&O`2PN_-pOY* zT2_%;CzZVqwtpKWn(D0jdf#)#AmLu7op#fj5W3hjxpc+c{Re-no3Yx! z?sHzA5{r)ZUcJ>uFQiMKxh!xHJCfiaAXM-`&he<%^YzNH9t$3&avkxM=UU-%v#HRy zg>BX9n1vORhZ`b|-dvH*`_SsXAk!tvZB2ShnzD_la-elksdBJ=(ZawCnWcp*SD3mR zv#d3X3hHKJ$faTlS?e@?_DT1){uq z@9x@sxeMSRGXX& zPd(02SQ_)Dlf%4fT~l=DibrveR#i?|^3sMU$E<(SBsLgdho27{Xd&%8DC)3sMGYMYR|UHIiaxf=_G`>pT3 zm%i80BXj$Q8s8iVr;w+;73IFU@A_O0U1{YIWmT;?67F$!qiKso(1}dX>=g^|&TPK* zt|v!yne~i2jBK~_5+=X7q{CO;^l6Xt#|pa-SMnCroZ?$xKYzP}a$eN74)wFbpBD=q z-f8iqz>d>2=EV6#y|4tv>C=vJ#l*?GKRDgjzwX_W=}Z4znZEqtoAm1?7kB%8-Tm<2 z_ea0K8XUhb_eMVNg=W{R7R7|Rc%wWH!9tOjZXXWF8gr`lRm@rPLA_p)W9}=X^<17y z3`Me2w&rdKHM|wP$!X8kCbnZ;VcM)!3dyU*w3%jwvHzfyXTG=5gxB8#=#-zqteYWU| z*k+l%JKwxDe0|@y;0;^pi3h%wCnnT>K5R5aK=slQftH>s^_Cx6O&9Iw^z)Xa2rRf# ztq_tvS;#?m_r^%GP;EI`u?9v4je>Po*?u0~ZL_Ja>8bA1d(1Q070k7n9vL?98Z78+ zV2$e+V5mE+u%J`ICiKmxUiNtZRm$A!c{&ADBlUHkBco0x^Z}q{uC4Yoh3QCDY=`&esuI$Njo1L{jeO}eOrQ(--Q@UnX zbWBR@I1*KDm-$;*;cp3CR1TxU8p^j@v~l=SK)j~?@;=2SIanszoPIC1uxqzm`* zHZE=b=J)Qao@d(azqi(=MXfOUv*qty`@b@ZQ)PTM+F1WDIx^qp+kwLY6K(smFURdo z|M%|ewDR-c|2sq$zw3}~e>7__0o-kzTJk7jJA zljS`E8S_NGs#~5|zwB4lE9uiA&U(9#+j!@e-IT4L9`ELQ)T_Mu{;L(s_qol^P(8Gw zcYCLlNlMq!ydTrH)k>a@e3^A^Ph+C__Ez28RO!=i^mnV6Uhtp#qAL1jzMfC{;U5`Y zjVbCoJ?(-TL{wEh)P=68+3bG7cP&ZqTY;qi1Iax`>*rlRI9u!{WB>O+k^PQarZ`%L zOp;&`p8Z2bHPpyY?PL+t>;>KiQ3inq4q{6~KD0``%3RWFw(G@G|LrUMIJd6!Pu|tH z!E1+yytZn<0rrV&Z?^Tm-L!Yo3OA8SYrdLq-+i5#XOd)k{x9o8TM~3#&)vVmz%cQ^ z&CSm=ygD~U9PFR5HuGYm{r0^(iXMhP7R$X=p1acU3E9(-6t|!*llsQ*UFw{sDEa9qReat#}!{l`~3;5=q?wPS^&exFJ< zi^rWwbI$v>@%g=96^)$-=6iphl)ikMf?;mEF8k$*IY76K63Np2~`^ws0P*iXEXg9x{{SVOt#eW~% z%-1>ac=Z<7D=WW!v)(WF?0bg5bfz8kyaoToGMAdnzMXT~_uYT>|C01 z-v2-3Z@J9s&_Bs|U~l_=sSjok?y(-&dwU0CdVAlZ#XA9q75B9a!(%#+BU_RJy(a^o`((KgpIef2=$V{Jeep1ooN$EKgk4G-5^Ax?? zXZz+wV*PvjNwbaSocn#{le%nHP1F158A-nXE?!oA70k3UMcLYNlc@e)-SW3tt5&Z} zUiH2%V+-fYeeXnq(|b})Ue2GkcU{#KeSh1}cewSJN}Eqqd^a;UuW3T|)Kh2DuD+Z# z?{e7eN!3%Ubqv~L_Dq_6-RtCrS=>K132Ct`jA`ha8nn_Vt9419L{|GEzl)Pv0IkxYRWr)e| z?gtJNWpui{Qw#RStlN3J`rY@5)wLJeStARyBv@-pDs<9P4m^x2-eb`xa`@uCf;ACQ zZYd#NIcJ*RvhG=tWwKxX_s;rHF|V&S?LAxKcmLbvJ%P)MbeNLwZG0TprMPFE=hKv@ zx42hd-qRS<-Y9%Y-D4jY^R;`eiyoOA;_zH9lF^a4!N+f6I_HKJDvCy{HiY(>m9m)Ta4rPiC@d@4)*^=Mns(~y--*CxIYXe~1})-Y(EoaSM~ z3ZzH~m?7yYii z)h_Z)x9YyASF>I1W*?URS+V?V_2*iH>D#5kohN5yM#+9XbZLQ>RNL~vt5^8l*IT`i zoLxE7(7re=?Zlg&nUgt-jZ?$iba)OuS`#tJ)O&Mc;Iug!^Cqhn>~c9b?aa;~i+HVc zuSa1&@9>;^d#`AD`6StI|BWr|c2$epPgGJn-}kir_JimAYrh`3zD7vq{-3D#cOG7> zu`(^&|J6)++cmeAZBaQ}K8h*1eoOP#-F_--591bmAn)M<#n5bz-U3&#iPBK{w;KbbzT7m5EcHr?zH~c+o7i;Qiz{mS_5wVlgL@uN{iGGAnK4g3pbrFOm{8rI>V_ zl^dQ)NN-^3WeQt#wjuO{dc)NhsR_KFSQB)mnAaS>(fIX+O@i~Qok__#PLmtXN-%Cq zuwsh7=%K*t$$q2lBh$9Uod@`~SZ*+WTD(#F+k)MVdo|B@)w=gP2USOSy32&#GE@(F z>uEZ-DD3#W&l{fimK}5zjww3&BqsKYM8R33>*sY>KQ~+VtORi`M- zZS+Zznb3NMEk^Y*|Gn!aEETMQCwP+{m>y{g61bgxz!g{4^zD zo-U8ldE3qhhXj>5$&C?zJ6~zh~@!*OAQF?jUwsz`JkbuF53d>o;`1DQ~k$ z-hQL|Msfe)B>qPybp6cz=RB03e%-bx=An51QQJqFx^dmcN1`ig#Kb$+zxbhhPN-gx zGh&W%qY`uM9CgPHFjCdzTNpl>Johsb_th=JI>S^=@;OW9|DM zPJW|Zqf|NFNj0eG_=Nlo9+waCUg8luBYKsk`XT#FnYKxq=RYTJ6gg;k;>#nYgVl3q z9t}0p)+_GzPKomo6Ptc=k$GfPjN<8}&3j+Cl@&ZoGL$_q^}WW#|H~e35R_^(Vef5u zdqHD~ZHCzs{R>o31#XjzKhi$>SyrTDQ zwIAl)bNf5%YkpjIWO>}$WiNxIPF>w#v9%yeHvH?XBikZpt!LX&enHwf;E*+6*p?Jw zcH_qfm6jG?+O4qI+i3HrLvCjOG?WbPy=N78&$8$JUseYj`46r6<$F5jGweIv;m@>h zwR7c(+|Li&A8oLCv+d7^!-W;|%FciIaJkTBUg7z#AB+oA<`tj+@u9ddWZrfKJN_R( z`_6HT9T8{Pf5EWwX44O)2h*+1)<+1$GyU;8{xp>P(dmZxw?FpeIo7a#cs+N5xlYG= zrn<$#pO>+IG(C`C7Id#{{`JH8$4^#XZ~DRZpxpW>`@VIjm*+FpJ-kwPFZ1W2+H3sv zg3F(4b3d|f*#D}h=51Vi`~E)T&%LZ4Z4cZp39H+pu#f-8@pI?Siyh%-_NH>eEUmTYJh*yA6c?vPRv(j2ca-<TZ3WpLZyk#S_Z7Egeq6CZC+6IJj0~n zX29md8H~jX%9iJ?X^_1z%VHt#o0e@yB;O{8Z&BBK!N9&i`Jv;p~$>m({1^ny|epeCbejuRJ=%&+J zAHn7u!S{b7Q`QEdx+Kvn55<4p3R?~<7IE`ASIa2A5#Y=%m~y8j*+3@niKPcJ>eC*SZ(}zfXzmGxdo7y?p!Qs>0?c zx8JY_z7fe_I#T|lRK&`?|B6WMm#@{|A1`=((cW!Inz7okWnwQ_WlA)~qH|_0ofdgd z+v0`Sny#zsm&IvsU$arsY@gJczd7Z(6Tfb|X?A!^-rEViWw&#=FK+%Wb(gD8;ft7s z(?+jGWu9I(cN-~oK6NSXz7!wXfRwB>L|$9%uO?XQ8%; z|9~N9Elc0Z7qJCC&hML(t$qo}7+*O4Amodd#oHM|5573(HyJbRWjyEbMZ?1Rf=Pkf z0`&uuopJ2xI#sN5_Ak1AAW~*8%eh}G#ZTR|n6)5XA+zq)WUpI0^0i)Yd)(T!T=a{m z%G+Dz;$L`G-gf_eVXg3z+~_&7tZ9lZSkY;1c~5%_Z;IBm4IJFG!r)e}4O))$bER88$3stk}wGZSaWk zz%+dZ!Fvq{p0XZb(_nL)c;je$mi3~T8SKpeJ_XGNJDUx%QXZZ!@&C@==+0^Hdp?oo!Ueab zluVqmaGT^#r!UU!Ka&f!dpESrlxtge!C=Y?y~s-edD9&?t(3T&+Nv&jyF+)aZh%iy z$FvilIE*qH`12OHiy83MKMFHGXVIY`pdD#h9T&Ig<(q%|p6&ST;k0gQ%YoY0)`AZ& zB}=SbXt!q9-I9muT+=FTs_th^;e2SNlQdiHwros#4`X`N#r}PVPlac>=r3O7GPR%~ zn2~qOui0DzOSx`eyc*FOmfEtn%cw6#f?;FNy9%}a%HP%;?pw{5aL|w`Jo(s-;wc^% zRlO$c5KB3!8|Ndl_I?q=oHKo=*S@x}QkU7V&6)Y}-S<2*)_>7gIx;c&gK;_|e{uim zU+0+blxqB{uD#cspxn2I&*t+U=T9vT(K!+>V)1M4;X%xJ!0MSc8A8S6@lF0Pj}vM{Qk4kUg<$yPNK4W z^ui{oxSCbD_4U8M{*-X`zvCp3sm_wQw_0NpU$>0R3Z;Yb&eeM_-L6=mHNBa!#$CF! zl%4NQR>O%Ig(->i=lzvE$}X<`;%9J^cjN{M1^5 zmE!3o?W?QSYlRkGDsUKN(;KsMfz3kUT=N%FJ zEu=Ipzu>UCG#5)sdtpLKqV3lU#dX{^ZzK0dT4b^A5dC;a^ng~G$4;h>194*U!as#8 z%NT9q&aDrh>_75R6Cjoe#7 zOa4dZC;v^Td7Sd6V?$qGR^k+q`4=86kO-2h`LPFO~ao9vHZ)U4ozh1n!DcH z)BJg*w+V07x;|f?p#3%n=SdcCnG$XtY*2RMXSkJYnbkv+6AMBnefjoV>qD+uQR778 z)%)fI%Gs9H`Yo~exkFLvnjr6EpSA8Ut{ismIJSOqQhF-Mo3S@h3csnd$bt>x=2 ztFYa>_lM6s=WuXs=z*K%IHl8U5yPo?jjv`ed&6nC`! z|0Wu~%TlXW(>r&mYw5DUntP{yJ>i{a6!U-_>o$0`?1Jmb=`rMSx;_v5a*gM<$MrLkY6WuynZs`FdDiYMdvRhAvlegZ;vKWj2G!*LzT&oB3P(E{PyF{~3j8%w=$yo{MLDO`zx}?;&Hb}x%ci**-|cfgPruwI_I0UsRKzEn zro(9r(Y6}ruFjj%{qW7?spcPh=d9+@cTutOS1zdcubxJtXLq}=eCCNTLj-$xitM7F{fo@zKRG$OEMP+O z)QczDG7M*K%6)66o8k9-@uRK6QfJQc-T9HfJnX5%gl%&@UpGI9cokBg@TKaS+2cLQ zITz$xPtKG+e@I|=NI>GedxkHVZuOn{_%Svx^5l7kIgEclHP9U^9q;G zUAX&(n&&l_qf0zZ8Qov{{#)jke7o#d*PX>ncFDf<+&S5H`UP#Br%ks`Zr(TLk4H;L zfAc4i;IOQ@dhb`>nC&OM{pZGa=DYr1`kLVS!>-Ti&nEpXXMcwVNpDDXtna+Zb7<$N>jov%xaXic5wbSSv$;OFkL*PmMsRWZrOop8Q#NW7AF_uTk+uHC!+?ChQ19j7mCs=1?}m9RCq$>Zm#dr`{O z2iUCl2peBDx%WXt-8yZtsr-gbbKf)_ioTj@Vl3AdVm=^Q97PbE5sGUMXO5-pRRh z*3nlQ6Ar9RW|pjOTr)3;nI++o`{~8P(|qSokXYQEBxUT;zp^Wh`|+3D*||J2cC*Z- z_pZ)aw`AAEqouv7Y_`)1=PtE*a<1f-$IASj!Ur!JG__sNSN1xYYI^2LlR{N@umy_7b)!NO= z%oO)ux_2?>ZuEKa3P zDzM(}cf#M_H&#D2I$=NMVCKtok+~M$U zrXWlC#YxAiu4K0?N?OJ~Z_4Fo>nDEkD866W+r|6*#fGme{dH9g)6Oh2aNAdoUx-QvQ zeQE7!|0_=e71v*V$}**T3cD7=lnYJSHQzePCntv=~=gf*>I9;$;5Y_!DaIfUx@l-c27>n@cVR!A0>xQ zdRi=OeW&kR&9u|y#2?n(i@K!mUFMWuTB9^=C-2@H6K^fpC3f!6$*!X1r}#dc+;Pcn zs%(L?(PGy0xesjCC~#dpaHUP`#og7sr}$T{Y?;%|ZKb;I+^#pj;>0(e-@RkT;@@%G zr~BksFBRT5YrC?f!uhJ*Mv)$=9<_gWCajM&+j!Ldc~0C<(}gBywg=hWl|6Sp{{1e= z_lJLNm>{Aq=o>iom~728)zsVNj_h22HaqmmSk_&RVOl6!D%7^+>l@#nF8T|bBl`>l zdWu5Y=Xb4++;%(Z$nB5Kdas)nU%PE_CH-W(wR#<6ZO$X>S4W@RezZpa>v7qVM2)HD z)9=a8_;zTy*gw~ull7{y63#HaaSQ*mCEvgG;@n_t%-h5ruNUMJaXJeWoO4p-GZ#&ub2IE zyqCteZ_|V6tYSYSFY!zY-FQ3hTkDBOX^&=hp0SMAj`usf{KSLVB}EO7)$cn+ob2|G zc&^Z{B=C9%zk7J#3At{)E{$gUUnMiwB(5_J<;{N^wDz7(+MP44ee0J`*ios*c;v@# zdEJvQer2iL4B>Lq^{lV_we)$))*7SVr?|a@eT#K(`-d(6*|zGaYP07jzD}j;em%%Or_k1 zcf5bf%PX|qm1~P#oc!Vm+X6B|)%Q9(_jDCx%TgN8<+SVueX!t3L92`&5}*rG-*vtqQlO;LP1q0rwFbK?=^DN zPL;?>*)RS2;2y4>QxjEJe$$oztF^gsmnPo}_Cp6(2<#|7!?4hNxu zl$qdecg^zGql5FG-F%}ZteceHUUuh(#%0%%+o};KE~|Z7Hz`zg!sH`c5+z*3GyJO_ z?C-QWE3$WS;O)NctX?0sD@n;6X;-={KDGRJL6o%e@+k#{Z;tbr@yyY5Hk_TTYqhTW zZ%T%Skm#p~NwYdmK9ZE+;8E7p&l6n7UlrD~EcdMVdtP)6H&Axd1uOL0;84G9IUZ^sWYW%y}=TortKF7aWTXzO)Oq(juHtAlp z^2xi>59+2?OmXaN;fa~qAMt(C9V53ld+r(Tt}Fk2`OT9Mv!5^hCmgi6lhNHgZSwJ+ z>SX6t@;tNaU+&#oeEDMCr&z@wr&b7Rjr+E4-9V1 z*zx$1XH($fKmS{%*ND9=yI`OZvpD4lw{xp+mT{oeW^3tN*4Is{nTNV8MFRh(~K) z)-KYk+wxy{^0xSwa_g9K1(r5{UTe$o;)%~$ZVR^5ir|UK58AovHMCu~9lUsK>)GI) z;TK=-7Gl`1qgE}<{_;~tlL~vLnZD=Kgk<~DwYr(ko9xw>)*HLjGySaPka6~(e|O5Y z%SIFPMQ?gn73J>OUCJ}f^fmW`_BxNH0`GorP}1&eH|3oe^?JQj?U6^HRNki5+GRYb z+N}01Likw5h4|@KXKGG|utG?Gw>@$%J)txh`dD0Vu7eAa1|9R1R$UC)!Gk2-y zy)U|4E8_|mp6mTNeWi-v)yIODy~1nNcc*Ab9PLwhrJQxBzA|R^N!k3S$FV;@M7bA# zeZd+zeb3ce*=uE=8Pd%*yc3P;L zojp++@m}PBpZ$k&*Za(q>{>f~6YTe1^XpWZFzMy&XXitcnF7@(=eipw-wU|EqtrNG z|A%eDg8lU?7A-5*%gL$^iZSlEeEYn!9@o+fzkeKN+1k1yU`rTp&s6mgHx;f_qj_gH zp2^dFmy_r|flC>)0wP5;7hqbbU0_*|yj+`-Y%T zTC{RXiQQz8ne6+x#crr%u5XWGJMq;&iPzyiXSJGK^rNk9yf67?x4UvIHM=J7=j|oC z%Q?41wX5wyiCmWDfxBBL>8zRQ8o{G-LY`&eSBM8!x!>Fy@euaPEIESD!M*51&N zGLI{Id6|{mP=aanTTeGx|o{-vE@%sG+)!xS& ze+D@Rq+E1k+G17Vx=-QS;{5++ivDX?I=u+1%yvDH>)Rc~re8McjB@AkZF7x+IrrZ& z%3VEAIrF5(-$IVY*FO)h{r-;Szr*!??)FSg8s9>6XIVU9%H1IB(o;5R^^%2>P~6@!|Dskdn*2kRfc+){qk<>#V(EWuUg z9@CXdp8k~G`5?tyMbrA|zgu1R*T!GW%3H8+*8V)FB@BC+nF5NlRCcXH2a)ZYis%Z$zODS+?0AcJFnnRZppr~8xN9exsSL`_A7b6>cu;L-FvZt zQzXU3(_VDciU{QWTe9=zJllKm9Zpei*U99*f3V(a&Xa8xXJZa6?dV-mrkB$f7d;5L`T3obBo5?MES!iFD+ft^9Wf`fLmw$c#=jW~ePhNzz zbDfkDVM&sED*5e_#SFtg%4@YlokEOfOgTM~A?HWjrK%^<+rr9@eLQlkB+C1#&B{Z* zkGy+kvzUpscLpBu|KWXu{e4g@>k*UT_kDkT6?NIABJLCB6 zs$b?!;px=}b7W`zR#yJ8HvPuWqr6!*AqmH=r#@EotLj%jv^HG)z=HQtr;qVw@E4lh z#;6t-2Bl9gw2Ysf^EdWWrR_w%cc+rOXRfJQ zJ^9zduP3AL_bhNem|u5rertqMVZY1b-`~0SS-R_Ks=n5X zov=Lr^$UJ~y~AIxcYkrKPW}`6vi|$(^CIj~mO^b74_}@u5#PPkXWItN+=}P-9Jl5B z&VHF|CpBxnM8v%VZ8=N!{jxj%VNb^YmhfAXcR57&&$OM~V)^sN8L2mumj_Rqp6Jf@ z{ru#Z{X!2MFW+%l{bBz85UX#7X31Ut2Ufi1-o&?bSC|HG=KHt$63?rpZfr=4THUMY zn)=aD?`d0+i18+Fqvg~3XDTFKnPV>cc6|hw!0oP7TS19g4wk%|`p(#?EU+@In+vZ?WxZN3!FQ#?sT|j%za(}|vz=5}{7*MP>-XEFZjYtwcg6paFS<5+veXF; z>wLAlJLU&W4Oy2W{iSec3FGy>XKu%3#%QHpWhiBih}Mr`@JuemgW^b~`#GOr!_W`Aq;-rgP|(|t$Nr1Hm#5^bNu*WA{xb?{v2JF#qUYuB}^ zz|;*j6@D&jtloRs=1y8Z_viuM=ON4~C#TKQ`Dqqg?_;)|YoDt0WZ#K#euvbzPyJu^ zp~p-<+2yi6bCR^n8?z~=a!)vReVWiaVZG-zSJ|$$9$M40bW%PZW1YRzGk3=st!Zlx zU;P&RwT;jDp34`Jt0`wK-}Qbvm82@OYHi+^FRst`&0=`NC82*e#Ncjk=KEalF8>;i z-G6q>$Vj=x{_U=V{9Ucg`O}iQU%WVVTA6*>-c3t3wA?W<}C-p8(yT)mF#yypA0nYX_rz0Y5{Va|_J=j-3D zF4wQG+l9tL(fjnbxmtbSpLJ5cu-C+fDg5*G02leN&BqO3@cUK&#A4RxJ*w$nUo5n~uQK0g za^?4rv5PbBf3)I}UwuZyd2^|eL{0A0WeZ}igiF2eY}|GC){Na*d)HLlNSwP|v-7Up ztTsN|79H;eJGw&}bprdh2MXkE-}T&$JC-N;a(()(tJa4WN!YpPie9(d2f(dBzu)p^_Vp6^u>t^0Bxor*h|dZatYaq6#(^kNzP%Er{v*NV=Usia|yY`MrK=5km6|)-x+V1&ipS@)Fu**lHa+hP?uURWf#E_&A!kjmGNt;cdc zEQnwE=0{A)=jb-JzaIlj@5#o*bUu}HQX8ergR(16FOcMNfAYdY z$mGQ4muXv)96vK0NS&2raN_xthmxyPqb~e7yd`->{AlM%bt{uQQ}12O$le>HRsG0sb4u^}4-1WUEX{f{S5ErO zfwLFqD$d^|B-deaTm9^^mrKp3`90dbb+UC7@8sIF8!`@QA0DuBANz9CKK1RNlC9s? zi~r|*(zl^?^BMMCN1n_`u%9uFedd`5`{qo19igXrY|qSdX}3z+z8v~~YwEdH8`Iv< z8;6%apgcRw};=}veJJK&tff3=7kS7JQL&<$XTtD)G_0N{sf1=S*dKB`0q&iE%os=q*zU}@inRN}f zEW>oSzE8+nzuP)Cu99)l@0F_CCJLO7xVfqQw&~95)qkd?^{~H}?X&fA7G@|6J(h`#NX;%TNC*RYp7hdSi9&;OfVp+Mb0K@9X{+&Z~BG zRvcjs53aE(*mMuIIdQ zx5dQsshZ6{h2y@39l}|8wmteLt0tBBmn*%S=ObC$&OW!#lwUR~(bA~B!{zU(C_YgR z(F18~>aICG-to}XVnsowNm_Zv6(f_59a}sn2~@K9@Ao|Shb^=H?K=Mm*?Y-vir2Q@ z;FP!PSDXC8_-o{iGe!0`KUKe%*(AhInXMtAeDrhL;+N&E7xIguriHYtRIqz5S<@zX z@lAbCxN809f9p6&jo3Ad&d2evQ#!l3x|DfdhkvP$ShTS~WpBsKvITc_w+3C}pXqft z>xIIGvYYGJKUQ3K+MI4@#&9!3xUp@k*Q_-$VrN!*1W)C?S+O&5@y5F8{aapFXy&E) z94?)BwbIZ=%kXN*C5D-|y_btk4q0vf`fLJYzkkn#h$laDd(3$MNDD7tbMTtx&Suzw=gt{|{riEu$EtS2k*L8zScH`BO7A3<^LAkckXM*}7xaM}qSvA*)O?uvb zwv|2d;V!wVHy1B=U%bqGk=wRPp6xlm*lin&ZA&Z;EVTL=TygYKrPI^ppI&pvl$@RZ z;;oCgfQjGlO`Bh=72h;Fnsrspttd@4rAuC7T@IdV5+)~Oq92tW;9J@oxo;cC!J9=) za&2oms%uU54?y)R& z-In6Jtm=7L9HaTIyaUTmKKXW`P{XOn`j*5!3#Tm_4WYkg_Xa53HtP`;MY@hYQVFEmT59ohCe6?D@I*!40jH`c(;6Zron=+}Aj#Rie%MpY85P@`CmA zg&UvoJczq~?z`N4-h1NK2R}Yq`AgLD`s>N<^F>S$X&Bg5zVPAw?&Kve9t1ip8;#nial`_iu! zFW55ne~@SWxHS8V|1q`oS~7trm#10*6l6T5 zfJDrL&@Uh2?Ds5ub#>FuRb1+iPfUL7wNrV?%ezJg*`%j(8c%mfeRS?dc#>O}G_Q_R zosEh3HRy%$J>N_3Vswh+U9#o3jr5mqsu|_KIt{)5H~JfV;H%4NaW-7Kv(WZ< z!(ExTesk4bQ#~i%TBtW^i{Z94FZ^`3_kMZsVEerqo{9aFxc6OdbbWYDe7B-&Y**Ls zFwKIHeEoQHi8pH3FC=UT_w>#8OY+j*%R2G+rK#2-u?N(5OzK|$&1U8NS1dm&KI}58 zG^pTZ4%+ce^{U*uIp3=Vn&w{E`ANmvSC8R->_^p2zS}QaOUtjHyWe=TG2`5mtvmA< zImX19?0cTIdCr4F$0oX+%bIV^SFz)7a%}b0$YUJ)TQ6ogANl4y-)Hh^z8A6Y5=?#b zjJBL#mu$A?n^dfl#mA#1ZHH4!zdvC0qR*NXKo)y)G9_Nlr~ zS@dH9&(oPryWU8xDN>ab@&EhuQdZxm+$}R6uY8{N|I5nHm#5y^zwPhJ$VTq;nf#xA zG0tE(EBa!OTI$N2C*M{I-A**Syv%sXQ#rRUsgad4elK3Iu9vN<_Q38~L&uXxODgxV z%$^k`Hu-dyT9#A(CSybU$@}?P_hyzo7OgCe44!4#u11nsPENQ{O(i4@xP0TZ+#TCzQ1ddU7_QKs+AXnJUW)AY`tz?!CjN1{NZ|4 zn4IkjZZCuG&o8cD?F+eB#KC-5H>50oecG-0r;i8BJ-Sv`^}TNGY>U(d;;XG$?(p_K z3{&X-y24WaTrI&=yS&0qgS6^+rQ#vY1jdS%U9(X{;uTjvb`Af z@87lV{^CEKs|05-9=^JN&AVVn?s;z>-i`ZWQ-AUEZMUONA@KqXI*(lAWOXVQU*>Z? z;i0Qkd-(B}ucjU?vXyq)%qe@Xa3^f6H1*tkaFR*+rn3&5N1m@}uIoMdWYVuw0)dw! z4ry(3W4@uY%4FHQfa>K(G;NGIp8H<=_*MF6!c-BfC@Cw+GR|p_Pg*XVJ9B-O%lYsH zU+>I1V#G7EWcDkgQ(wgvcYb-48r8q7$>-X|UO`lpm6`n;NT;im=6 zM}*rCZQ7G$o?CXw;n1q*fBabuYwqwp>JTkx`TeppYvz@LB{n5SQ~2k{#Km1$lGVRJ zT;sy75UI-xA~(lvPCvCu&N6NS&!ZND5HU?_X9iAH>)kVX;$FFOcnHXGhn3dIcChYJ z_|q@+Co^p^_YuLr<$t0phkJ-dCu1p5h6Po8c3yw*>m$*C)0 z_53To#tuCuDyiz4e*@1Z8HoR`e(VtUWumdDQ)c*3 z5$g-i=x=6euiFDHe>YB?n`Ut;r##bu_j368%gGJvl$oYDHXVIiUKtWKSuwV4L)A24 zM^^(;r~7yQ=@m{C?)sCLR5ahW@%op|F+Tf5_w-GCKl#S?C1(nRd9A%0&1wV`H?Wv? zP3g_IidphbZn{(8l=Rmub&uk2oc#2~FS-4W>SWDrzo%W=lCV8=<)^Qu41YGCxZAH( ze)@>-9xbt)E8Z-vN+KQ{=iaZjzqw}Nmhhv#EQj}=INu>3cWZf^)P$M2&Oui{JXuhu zykDa2h_WIJ=b9IL65WoS6PVV*e*H7!uIZiL>)P@nqs#3D=KkUMs9YyCvHmV^TGhn! zg8GlR>#v=i`1<9fZ)L0r9Fm-ej@#^iQ&Y?19bXK zuso1n*OxNwz$sb7?DU7q;&vA{b8T$@s$CawzglA(mtAnixdws>+aa9%cV}P`|reNA)uq3Po97=0(mcCrRu z-0NzPvGWgGRi1a-(kIe;)+|`N);UYzikNNeBwjQ7wZ-KtqlEg8 zt4=YwAm{xjb*9B*JKNsb;vw8^H}78BD7Q9hjcVP;+4@pZQ`_|!u~IPm)oZKnUec&Jr3*to@FYP&whXTv8PJACMBfz&(6-Q3jMv?Ts%P0TuZ1THNWDi zqQ$w(Q}(}Gr`M;XC)={e`{IwT-o5L4JXd|1zGHj#ul1)I)Hm_)Hm(%7e@ z+~P}(>)A6u76(pd>N`AL_wKvMz*P2wg^#9Xn7meT z5xX>*sqfS2;Lxcub@T4c*O_)D)j4rq`rK)OW|7`J2NruwZ5KYYOkj4=@y#DpnU8IM zy7AiwOPP=pbDq8Vc`y8Zkc{GP&qeZlEMFJzHF7PRe8xbEN20A-RlVeylV1M2%ddTF zf6iISP!TV>_O5!iSJL_9tzzx|LSbBOm3JOp)Y}@gME&2pM27efOQ}a|)8tmq zK*4Hl%ew9~&Wv^)sSB%X>NhpW?>n5Ea^>rq8&h`dF5kD$>|>KNht)>c42~ETm07EJ zmcG5TYSJ&=o;7J+pTCCNUwOU7>7~_0H`s68zgjKQ`#U5w_iWJX`0^HkI5N zd~qr(@>4DwaGu}$Nn?(!uDG>w;6E73KGG*0`K7{@D*Ckqa zRSqXzb5uzaF`2)kspyh2GuJFh$yh6?bmo6?KP>K)l~rH*7n}Me{vkurma+(Dk?M!d z1xNS2owRS)R;ybxW0^lN-)PNv(*NNt#}Bz2=dw?eViw%tmT%mC_O9vYHO(AMx z&3;m2oqm6(!I#Y{4ASCP?oHb(H{r;ho8lISTc&zDtypriT*$36;dSHm$GayM1TWej zK8x2sqW<5nS1y)X+a$VwdGWIT_L}(NNjv|s+nrC6crJeXq`&{4WN6#=gOhhlYH#yQ zjrra1<=n$3eKS|8@m)Ob`bqLlxpe;8fLRv3Y)dAcPjSsZ!rg!ObjXH?t|--;UYEAd z`5K;PF|qT%_y(>5{qtWNUuqxM`Fy)n`{_yDe*3e@^L_p7q7_0hYoo_im9EIWFG+w!Qkvr&oA z%5$d;HhkE-O`BO~$?@9M1FX#^AtD>N3J%}j8*pvze!j^(8GUN^946TO*v))La;n_j zbFxai+RN`eKOvQDB<09b7gsaQ?45#-uA0l+*n*W~c`@f~mcJ|Nk;uZ5)u1$YCMTcF&CYZ9T6uJ&P=tx_Tw`qMXdDIiNRqRvjmgJ~+ zDLU0DQ`ETlqb)C=e-b`pX0x4kNaBUnH34DfhQH4pJLG@fNi3A-(9Lc=dkyczTY^t# zO1RH>_v_sC*dUAYe%lEbtKViat&|YnyJWf5=8oT`MiZBahfQsb&*WQ>xwm!M#i{(ADoB>ht3-)BnV+M*BWuY7Gkb77C}>I?5< zQnJNUcCggM=i2{x6Lw|0mvi8}X}JrgW?bj3Ic(+S&wcIXBAd?ji4KLf3qLtHe@pwA zSCaK1Bk+&Q@s63*wwedOFKBn&=ge(uAaY1L>F+(-)2d{9?z+wilK-Y58}cmu zZ}jE60RO;B|$13HMP50$h;{vOWbT!Rl7oUCd?!7ZlI@oKR zEZy|aJYbvW;BK_#m;|HOD%<|(1qXEg2eSoi;;0VNWm&o@&iMM7i4qgn7PGC`;CkZy zs#W*4eqQ%vXUMai&sXP#e4oZ?eXu2BgN?0ia`FdnWp8e?&zJu&xw8BU4VI9;@ARwH zQR3ej%O758d)DlqZ65HZ<+j7xXYNk5j|GHg&eU0YsZT~la7}2ymrbI1eSwwvl|h@z zZ-p>STDmN8m2c#P+MRtZMRvQ5Cbj$cXD!Z^atfMu!-&N;do!=|hOPC7#Orrm*_j{n z@`uDk+2qY9)lE*M&w1#4TibRj*Z+-qXPM*|T{BG9oELU2M0rsXNA>j!&!hfaVyy|< z7JU5a`T{12mEp7Mr%3I$y)&unc*D-ww`&_uWPi=(Rd0UX&BkOEd_nBH`RiHoS+D%9 zoSBxe_4zFcU*ns_75tiadON3*T1Hd}uMFdtvYbQ5X59~*{mxu*_m1*XMuE<(b<(#g znl5ZP`*z0ae~Tqs8T@2|r`mLA2KTBTS#;)9*{zL>IHz9UANOK!){P0Duc+)--;!aJ zpQ8IwZF>W==@hX(x44&+oBzuFnWt+QZ5`RfB>XA)(d4ic8R5DcCH^OV8c*P#9%5%F zf4^)-z0yUI-N9x||AfsW&cArwqOTvl^hxTDQmIRN-t7z5RXnsh{%up!hCT=5I-PFm z$gh5rFCN``ah;8h-=oYuvNrQ)y)tE3y=ltqZ8+tUzYh1&uIJWgzemg4-0hi za^HPVczs6vugPxfm(#tceU$)@} z>+A^D`yobLpBfKG|5tARJn5)XsI%we`o1q&6GESHem%aF<1oX!z`x};w2SV$ohjIx zxt-U$o+o@!TkpK%8G-@-KV7$CmYmUf>?iwm&^eA3GOZ){}!-?*? ztNBj;4Ab-N|N4cjn`6Eqw)INb_ix)TzF+t7=aT6ndraTx-_hwXi`nV?OiW@;?d_>- z(TdMM)p-avvQFoXEj8QiX(fCxQ(|ZRiOWul{Oi_TIHB`dW%n1)e~0C>fAm@v>rFT3 ze^L7EUd_3fGp{8pb7!P{Y}5BG6**zXP&r+{%wAb%;fzO9OB?&swrCXCPy3W5sOmnC z@z+P4@KbA3PWW0YAHP1aHM&zSezVcBqq*~}H2xgX|9)#~8)Z)FtDoIy|4d=c8@^{8@78_%dxY!Am#g`o zh0d&2+Rr!b@S|-}iMKxW#Pw<{jd|bLlkiJ~@f4@z*PyQk^WAUHpL{AIw|2|Q1!iwI zg{^osxnHr@yS)KC3k9c<99y~{ebY}@nc$Iq|!vVQ#3rghu(z2aSqtULO|553Jf zmv&20^~$_^QGc^i;txDFj-MCw|Kh=k6B*}lZ4A5NB&dA(R@tiGIaBXVxxc~g+$xz< zEBA}PYwh;(@%K2zaf(UZqblU7r&hFan$jPgS3l%d*rjwtp77C4l)%VSfD9$b#?E%CDwBbFh~BwAuN(F2f|w z_m_2YkKDK)tN6*xKY)k(Zb>6!5 zz9{WULYj)@*;oCap3S+w>_>mjzBQZ588bJwN8EYU)TEXf2y0~kFOVAHr2n4OYVmZPlsEMW=K;sPpaL^r++nTa|DE5_WHyv z>aMuIaYf|!N9j+yyV>J1f7$)fx_u@oSS3igxntgT_2BR4m-OhZeSFiz)+TV{fhT9I zSE!0Scu+0Tw&e1og6LGG&F7E)So-FOzV7|?E!l=q=0RnF&zu6^{!u(&y={imvmdJt z?vKh+v}b&6@2mMr#iv4i3VYUF%M!J14EbmbhlgGtWhw5BjfNc`@bp@kvKJR)1N={McYstnaR8vDR1jEXh_9H`Dj^ zHPipr5Prc=P0T{IHoM}Xae)uFmF?k}c?yq+q1 zv{PoyZ8I0yw>eoAzBX&6Vq24^F-K*j_y(U>eLKHZ@&1ylwJNN7Z%)jze?RHvGTC+U zZ{$9EmF>Hx)%yM6iet^YADwuu*79W8xirVz^zD;J4fCt|rOwl^hRugRw){yndi-W*U{CR3F5kM@hb+v+XUR^fRk(Obl6T_{&dY`wLAJ~q z`>e7TFz@~~cfXIJ-s+n>4w@|86*@if%o>AVJ0AIZJ-Xkt#@b;1#rIx1R9~72BG(GCD|h-Bs@+SF5f*B4t2E(DlPo|74Q zapLRkoFzXxBZTZP=j;h&&UD=X|^B)8}wZ zIQ-+!$sISZJo4Co*xA-BjLQgT_KIfs{D`k}=Vq&G z^9-#16dWqG`u&0bkH(*mv;GFf>Xl!Jp7z!vV7q<(l;>4TP5+lj6n{STr>u8t_WA9e zkE06aeCzqn{q36Hnqz@A1C-VO*B{j+2=G-g_Bm z7RGv)G5xz4e`Ri##tx>och6*aF0Owq_u9^SU(@bTp1VJp%v}NR+$Z{_=-gQH zKaxGc;d-abf#2faL^am#?7KB@ZpoB47g;zj#^xq#abLa0cdY8{_fKnf1PH%pv9t0# zo!!NKGE&|2b?Qkmks!58x^hXkD->Gh2psc1pPjqjW@gDs6-QtVYaVObS-%6b?Eo}ZP zu`KJ!n>%ZlK9K5`=9tlSuy6I|>g|^;8ehF)V6J1;8&OdV|fB0Fy{Deo( zyS_K`cD`b(FFDip%5ZWQ^U24%4CchWdH+7TV?hwwwZ5pt<}?W zQGdpPkTc7#Td6%;Ev>Ql_Y;}jXFXG7{-2t7ta8rt^LDr1HeGwxe5bWC<=BO9e-0Vn zxU-yTnw`UP>6@F5T;b9E_D;RPaiaRgiGh3FW<2_x@}X#V4EN!*G__4vRJSZY)A>0k zZ`Q=`*MmG{9xvDy8@y`k)~JIl!IOJG@juU&b6&~3sk>PrE`Ls0WsNX9my@`@an+C5 zg2wY2=?ji9+EvP#G;xGwY(BhqvD(vnW_QK7*50eT3Y zRqGzr=wAOYwQ+ZIcEy5ku~}cGtDSoj_APFlA+j+4w$utmyG3d|x2o2O9;#irM)|$S zq}15`ZieduPiU{Lou96DV%-9zi_>|{`~r6$l3Mp5P^vslc!K`?Z@ydO)lSU+Uo~H6 zgBJ^Li@(TWrg(`bB`)iYPD`9U7T|C}ukw$_%$XMo<_9c!zH!ze&eNCXTok^s>U2-% zcTu*M;=unbvEr9a_ikCqcs_5(E`!o4ms162Py7sCmXes?`MY3m@6Bw3TPGicop}{q zyE@wJ_iozB52{Z8ZS7d~B;)I^2meYhSVvw+6X*WJ?dbn- z!QF4_diR$FDH}z9r*7nHNbN)9iy)AUgV8iAZqsjJbmkCd1IC48g^dkGD zoZMXHXl=h`)3${!j=aCB>qpXEqvkDz-ztwTkleE7wAlwSTP_RFr*nSH(fY42S;p__ z$s0$vU6Wb*N4tH^jgGXuHQP4qoXKVwZPOdt_%`L;_3KT~x3%Vl$VdkLTR8Rgr|jY5%~y5HqDaBtzq3Ccao+sQ`Nkr1;ZNOHt8#C!{AzdpdO&?^ zpvO*4FZ++Bi+A5%Ibj>W^`6w7trGD$eaa_vE}Y_#Q~q!-tjPCZXfe;GEqpHai}oMB z_E&CssENgs%+|^0h4o(?3jc7`Y-PY-fyBD&J5uI{yba0E%CI{jo?dk0u=$%z_PX?` z>8*!6Bb3fP%2NDdytjE>RQu}_SC{at4x9FL<7%Ehz4)p^R-d1xXDmApCrpYi7h_** z-OIK3$iX?xoppaVvOGRFF+6|H-RvLLw#MGC-4^cruxzlEoNFkZTW_0R5Yd3h-p^!(E+Z?VX}68G@6KJ|Cf ziUlUKyjU0Sx+ZezBHzk=OVo{Ra@9Yt{yB+juj9-!pG(WRmi-p~FeOYjB1(9>|AqM4S8E;|c^F$+x>iqn z+Lf6+lYIPgN=hBGZe3jW-(i=>n%&kjHf*smkBwKnqx$9T)!@t(?tCm_yn3_#P5u4u z?bYVhjZ>P6Uhw=n@VUXkdEK!iCjYH-1(~N<%@^e1ns(1;QtRgUt&2-#Eq1;;()jHN z$CnFjFSlC%=iJ7`8&H{AV2j-84H`<`xA z;qs+t{iLtg+$fJI@OYs9?qcJFUT3+iMy_jIhvZJ@A9}~HD&Mb#O~pPKwb)%{&= zr*M3JnEU8xeGLEgfZU(UpD)f96}b@|veC88z|u&yPVso?--Acp?bhF4z;NKdPDMH2 zJimzdH*9#E0#iEXX0xQVC;*B8De;zDRkOoql?o&zNf?-sl& z-QSlgsH2wi%VJ;aer5H~W=?Y*S%2zWJ$6Sp?s}QOzRI4rCnkxNPLA4gec$9mZwuwq z`W9c4lbt^+^WW!W|LkF9`020V$qdK* zpi?_;$bVqCwfgY(_@Evk!+PoW^+JVBIa6Bxa?4D;8h^Hbbr(ZicFO4=_A_6kZhNJ5 zRL^kYt|uN$=S@=|pECB{Wm{wQarb-k|5Ym|eOA{kE6qFnoPB?xADjG~uGe07!vZ31 z7ah&m`Ae|*_pWG3tsZ7B3 zUiIoF6Q@XQ%U`^}B4@8$^09^0by1e3PyTOID~YWB@+nNNVC&@njz(6}tN1$CmMVHy z$Y<96Eacj`;pCdgw4zfwg4^fa720ksra1ZWm+CiB`vRAps84$?<8^KCQGdfz@=uO- z9Q79xvOCW3%k19lcQJlHcmH%}J=tHhZSLc>Pi=q6tW>@DH2(gR#$7LV*n95C?QuRc z+va=G*S{sd6noF@{d%tXg+#~FIZDs!EGM|lHrKU#+SF-!WQWSzIE8wPHY7JcsDIMqwrNVt zF>TJWZRPilPMYxXUwYy4_3ZA~PZhFCPb-vuxbXNS{mV1VyZQ9G`IWskn16VsWhZ{M zDe<3}-J7~IHK)$RKkk=UnJ*Q~Kkw1{hw+!+8r=OfVgH=^V|#4hpSJ%YeB$!Xs-&C8 z|IL4Vn}fm3Bkt7l=RZRZYJSqG+`Qd>+aL3M=KL15RWJ9Pn0>1Ht#t1h<_E6-`2J0M zl!(0z0L3!K%`CaX=Hp~duEzl2{_{j0h^8TMIl+Uw;fKbMDGW#9S7dA>vMwF_>GlX@jC8OhzBymM#s zzAMT{BIMgFr1JGbxqnD);oQ$C8{MR+C;V~mw8@_*`&YDxWFJ}N{_to9?~jGMF9u(F z^0ZE8f$iMFhGoA#|KFRJWb*7u`3~k9=cbtk)7Wjf-pdKK8YlmM`EKifv8Nj6rW~7h zu5F<&>k6AgzmL9tc0XM`nz8V|&;=d$Tf0tKoAGbz`_&govB!3*Mo(w2$(o+z(HP#+deOaH!{pQ>1^-nAft6N=7BAYd z`|$gB7ac|CuhD6_S5SY;PR7v4|5fo%W`~rCS!=)cWIYpUljHi&Y@KMkBG5xy#*TBg z;Ny?gA+wczuCLs-!Q-NDfuu@yi~CX+rg+)n%%}?a+0z6r?)bjOZr9dLGIoU_2B9w( zJ<*Kb`t|II4Nk8&=Xfz)-Tytusb~9{4H^->?;3cs<79t6P&QaDZTxci+YAexd!duB zg(|+v{O~|SOsvwVmH(1Jsl8Z6chmHfS5|zGP*FXU<03NmZ{=xgsin(yPB4)?#nEe$ z^5Qx75xviqvBmEj=d|zr$(|Q0oOe}leRYNzgWcE3JqgRgFNFX03Evp-_T-gMiHD*L zpU&R0SSk2u+{M3ovtDYO7XF#-CZ|2+@9&vs*zKSC6wmr`<=tlI)YY%|<=wg7F~xRb zrQmPgmbl=Ltk3N&bL+p`Nx6M%of>L9uWhwd@2}mwM!^g|%6f|fi(_Skrf+iA-7S*$ zdexR<7Owsiw~up9TjeMg%QpF8Dx*aCoN40iM@%`2R9F_S(`j>gkY9K+gdy;9+5RbK zk1tibH~HZAE1oOnGIcLG=_$BVOL)GPN4UopnO!nPTxWW^Hp+yApS@8QWu2EH+852G z7WzDN9oyzR2UZs4@2%0DJ!MLEl}PT6+RQz+x5R@sotndBr~NhVseh)uDx22Q?3=%p zqf!r@35@q{>rO2#U*o%KYuT-BEBq#Ax|{vq*U)3CvgyV= z|Iqpe%A71R|M(BC-#E2%&BjO5r^-Jqo?|`RTqU>RTiDZYk$1{g?kL0{gr=m0d0# z)zr$(inw}sXBuNd;*3{bKjd$;GZ?y7&zW~Y zimkrX*J_Qpb?%{1FRd5XYL_}mNpo7>jWL?}OaooqFk}jqJv~Qc=6hd+OGQXTHh?;gI-a7V>j%VHcym$UdRtK?T<|r{&c+Oz=8*n`K+3Hh0O>qdzv~$T2HgzUbsE zIH%FdTh;#dgGTv|#ZsDnzn0FDR|@8it~;R=q`Y*Z$-lC0Rcl=)QC%$^Rz}yYR)Q@b zcnyx)GP*PeOtM+$8At?phidU10@-@gSBAy%5F z5;6?_vR~zY;o`$9wa8)ViX9nqx379>^1H?D@`+b2yS&Q1^QZgcr{^q_Q<3|Io2#NaHGcfx zeRKP{y@BU;)~ro?{$wwkP@8x9@m0@aglfN}_}kRH-2LYLxo2~?KAi6GV129p)?3wC zw?b!e&6p*c9eHc=*3+A-HM(PVNJkvg|M0alT92XkFxToWJHGtdb?PSLszYZoN_&?y z^38p_o~gI)=kEHa@=S)@_ZK`{W>+Y(bFHk+|Lx1J)E7;%(2l-VEBJNxf4iBFs@5&M zckti8`wMp2i0x!u#qsXZ`{j$noyzkiKY2V6|Iw`TAu;uwz?C#JPP0c%b{zgmPc}7u z%RgiKaYd+YNJ#dZ?}>{HUC+o#Z*JcE>1La~?$tLvQmwnxt&(@9`!Mct7f&|ZkZ1C0 zn(mj3l%$}=AMDJ2UY8i-6_-bkP^XPpkb^d@?7hT@( z_;6!U(8Z4z*B$=PyjcIW`S7k*EyequSf;`yEOxpIfH;;x7?d{=z>S@5A>$U1qM zbEkKGe!Jn5=6fmo+q*9uD^}f6^+e)a(XT6-&Xvad)}D;oYV<+l?D79i*VkFTH;q|X zcH8X)yAhLE)a-kb{NMd+E(mees!v=y)9&kzcJ6m2ciRukCdCC_KXyIC-9`OKUsvsx ziTmHZ5_#!Z{ufuANV+J7yj9@t0ab3B}(SSFcXr^E4AP0q6U6xX`HTiST0 zPIdp!8mF*ww#={JPZh&LyqhDts%J-k!{L zsq`XGap}!jZAszpOe}h=jx||5i~aUi)v>qYh7EsCa)022KF0FovR1b#GvwvC=h-{T zreAd4bE=_L>R-S&CY1u21^vM}VGUL?FBTpT51(^h@R85l+nePynyTDZ$8DaOJoVnL zJMz2snSK0ls_yMk#}y_8j5@+8aZ&BT3zymLi8}ON>X7YKcJZPWCWns(U(;p(Dd4^S zcl^5a_1CZRM)g!n1V{Yg|M>j)#3R)geojWR>$b61|-LYg{)(^|an|u8m|2<0huXyO_#*_2oZ>v7K&gqr$+G5XRw$yDq`HVL= zmi7OcbZ*aviq{U4R_;}Nbo9K6)#E>I1<(I-PhOn9=hl4g1ASLT^Gq`DkEz<{H;yyIj)Z3&<#{sy%9Q^HPKURoyk0LdlTpHR`kBbeRu7{GTJHO! zE?T$!6irHez{dV>`#QFd&h@YJX8jTV$y`<#yTB;7t<)h+=J|5T72>x7`>jNIRZj%n za@sN3Yv$~OKavyA%6?tZQe5aGp`h=+ul&@TMa?T(>MNSMlXoAfc(cH(pMS-so#}3Y zS$odAyiR|Znk&E_yYC5$Q%&K~+M-DdAN;M*U6ark({t__yWTAAhrDX9KQCFeanBV2 z$=I0Ix-ZTfO|MrsZ1!6w@Z9^Mh8XX~+Br9pViva+^zA;mCQhq7|G>Ay%0gTDj^;lv zu@EZtVgBKT{YQ8u{ zNyPfh>p6$g%q(VG3H|-Mb9H!q`Tu&RK!+a5@2_r))P1n{JagidTS=ME-c-jK`2=K} zA98GatLzxN;`Nj0^P%qbZWb-q#X9FLk%+EQov2&?$E@*Og$eJPxs}E{wH_yh*886< z+h-VVknbbCd3DWU>zh(XZ_mTjy*yn$B%zxP$A;r?vI_YusBI ztbcXbBuDJaizt2FRW0-QpTqTsdlq*T)&@-fe6A|w$-K2$2C7qTN$uJ3$mzc5U7arf zdtKUg7mv1WkU!cR$mh&p_}cF4^CxPTMK`i9&P$Sg{_5W;hwl!vUM~JT(aDYL#?=Sz z8H^dG8?wK$?+#wc#s68ZsYiFUo50PM3zNLAuDIM0E&kP6LTIH_StcF&e z`;RTqUXyZtfd$Kl-(M8wL?7gwdew`?_J!7toomDD`8>V%yeqa?5ax7#^>1a*i7Nx6 z{KbO!)Ej%P_WdqqU}t-@dO=wG-?~hBkF>Q3+YbP?#jp$6%Hlt+xGF z#1Zkbx|1DStvA?RmU?q1@B7+m8awWulrxt6BpJSyXTPqL@iE`xH##%5b(U>@>1%uR zz?_L;W@)Z#!ei@yEH&?ua1N9%SmCO>boRloufOm(&vV~)RHl2=lid!P1=sbpCfVK9 zt$KE=Zj0i~TOO;b?qAw+B;x0`<%w=@-R?Irdr77JjE$;y+Vf@E(L3v37_@oIrara| zGmOnW!;`iouye)T=fS<@t6hqcqc{1yK32PVmW}1A_HzZ-57x5(;+J`R#QZ#KtW81g zlXLs_CUu`(pS&$f>8;+0MyYdK)|5xM=N1p_kkGndaT`wsk7~_}y6d-F%BD^?eJOj=Y+(W{LQPFFT^T`piw{ zgeJS}j@($^GDD=RM_j0H)p0v_`3uJz@0a+^^@v;RFY?Uh$o{KtZJO^nGd?%jT?`em zdoOlj*%m`_e%<-^6N^oMsa)D}Y|*=$v!D9yKa%3NTjrUZ?cEy-q#2}J4%sz_C78+c zziTko%5~j1Kfql&zFpP#+eg{yhsw8XwEyvCbVJ7oezz1de|FA(TAWot+^x!1 z?VLTTA@?7b8lM#1);Y8JUx@ON$ww2k+0^;7t6$reytA}64fq<=rQuhtePhe?f;o(j z9ExtNe4%q%w`py{J@?8l?~>W#b|f6n=h>#SX3e{w3Uwd+qI&4pd&}VshEc_kd2V%Tph=%kPz=GP9>2 zC~Q&+WH(V}61)?-!|KM5O-fw(a>mEX6RzA{?Pyo^V888@gn}+B`UsMy168A;VS71 zN2e;EK7A_td(qP9=ZV7JtJZa`Y46w9ZuxK`XHWjx`u|z;-qileX`V6jLwnoTH8Ys* z9X~SF>wH1&|G&+h|4sKUp6MKzogG^m_iEZyCE5G}3(Yk~eflASj+-mI>|@z@rkBNe z3h?b;x>WIX`G#Aui7VyOTq@>pHD6CZa9=*wr0H57+hw!K3JIUGY**J$%9`xQdtRsb zK~pII@(ydiMs2IzZc6#ze|}A_)p9M{>T~Vc$Cv6|tENx-^{94{IbIJKx%2)K_m#}NP+p;ZcOcp0N9|#9bvYR86{V7}Yl393w@w{-2pU>L7 zH<~wz1b7*wJeeexeZ$5^yO_yJ=T@=dw$Ol(S*gvDXM@jc$!bo$H1S>PqdEFD&-A`O z|9oxhozS;`C#`!UXd>1B>#IGN(`Tt8T2bmdTs1t)o>g2hSo%>(J?h5S5B}-GENk*# z?EDe7uQ&N>X3gEel#-n9U$Z^t?B;p4cX{C5TU$zu6j@HMmy#}yO`WJ+Qqp}Co{@q6VqTFM%WU%PiPC~aHshPw?#d=>9(zSu;t&z3Q`#by34N+Xq>iPoJ+cV$G-FS(K?Pd<|3issu zwG#|h!beOr$hZT0;3w>Fz?!tchpiN{J$y%ZH&U$iGYdD6`l;RW;W zs-Ew=+GXGL$1QdC!|>VV>^(iX#V)V2@40QUlq-*X7^Hb*LW230yg6pIOY&Wm^9`rv zhi_1uE%L5T_4Y@RMjpNtGb5$&y3!{P7c$MQ%geH}^0~1{Y$EsUxndjIb({W8*vGhC zjzh2ZyLI@D4=dzupUnP#+ji5xB}OGPf4%%X`|!$di^cr|{~L!z%-ObWwyun=SwN|# z>xrvzpP2nql8W|927a*M%GJ$Z_n#&BgLLB&Rl$s-76CUtDDU4_c9VCxtEb!5S4%DB z6}6`J9DVWg?x7DG*JXsRh}d~D?UTd3f43q|@0*gCcwt}Oga^aNYIX+4{M=W`uCwKe^%FakJR2yhxVc%+q{( zf63i@wsqyk>i23fx+ept?U{Jsj`ZwZWmTs9HVXsa@7r&pdy(&vNAKbGgU4*_Os?#x zo9zAI@m{-n-MMbl1=OeaC`2yTzc)Mg!nKTRpR@|rO#fNCX;V>YQ1eB%%y7}4X4~Y9 zpMPWBHQVITd5)9P6ExRLZ0UY~f+xOr`!mg$_-N<*H(jPXME;zv|09I)eQKCe>W8oL zd;O=!Y93K8pXl^s@}(m#kHcnueRwJ$xA(yR&)&WJjN3hbhvub*Z(^vv2mxa+O%osI)X2(-SUPv z%HFbJ$;D=t1*bXPdi~a)mP`3p71H3~!L0OYigEUui079aT(orLMb)+KKWIw2EH{o{ za`AI%+`Qmoy(iml$efdLclfAkyE@5V%335-b;drR#{$p4eKdv4y7>!dHG z9#XU~TwwLQ!)Lgo^d>#texWVf>-m0;(5>e0KHco!&Tr{==A)R)&ZvTbDM>;bYOek* zlHA)WI`8#|pdO|&PuZDs?j7RWo3h^`Y|g!A!L`5VD)b4oDEF{Deg6IV#stgn4BIYl z&)#$QU1VuhAOHMMGVhC-5~?_TEEE10u3^viKh<=4Wv5hk^`pp>=Nj$r)h(L!-M4F! z^rhuZjayk(Ur)ZGk(>D8fn=V!^gHd$V=b!}A8;S1E$S_f!2p2>#Z!xKqfpcuAY>(sz>|?)m=Y&!;O)$CG*N zXP(HM7p)O(asQg_m+BW!FFaMea|*rdyCXu1Kf4Lu&g_`T<{~oV%+2tQc*)z+IjXZHm03RSG89N{ z5nfUu=ie1J^-8Le+~T{5ClkYi#3~-mX}T-=e9^&_bFbC5m>l`$jJ3~@hVI8xe-m$g~HxKdWmb3Kr&f%1i z-_U;e_T9$Ew!)3cn{5u}ZtIx4k*UTzp!Lht2H6vj>*TjP3wjmtmV6FdvBmB{&*PO% zenCH?<(}R=xL4+|{^tFccXq4!n0;9E{F7Mf!*eFqJ`>VeHmZ2Nv%Rxy>K@Hgnm_jP z#jB;(XNm2-akb_i-*KCe3+0OoUo5*g`}Mw)jY+9}5$>7yR(Afbf4HG=PMojE(__ky zSKGgLN{~PGa<^gNj4L@C?0=oSGsEp;lAnNg$eo^bM(fi9{#JcZalW@N$M&a>w!-gw zN7^Rsns`L^=fAJ_nnQ)8y3J0WeOmWG=!{OQ@79g7Ya*HK?pirWufJxuC}KTZ=ZwF9 z8-q1>xoxaj{QGa_yXiey63-SYy*t7GKG4`;V%MQ=lY6CJA3O|_Uvwq^?0O_N@pw(J zAx|f-j3(a?)m1jTw^thb^nd+!S?&LcMgA-UwfoUZ+T;k5a0aIM7Vw6sO>0`B{k z*53IVEN`u7Q(G{Z(|Da~t#kb(zTel(qxWb2UG(ql@AC2oa_lRk-6n~9&)s^g=d9w( zN2d?f%}+B~9x=gk)6PA6qZNxw(z(~^Nc)4Ci)9y>a& zR}kjnwvwD9_2I+w`TTeG^|QuK2;rG@<6(#E!Q%^-PGD{IY*`}nPTT%uqK@RU`3X~J zOm^BD{L{h5Tp@Piq?EtuEf2X*FDa6I;d1-J1?CfNPR%QNbYr*0N!0C%6NiQTByX zgn7w}onJfdA2--o_UlJ!c|`veyF-iiJq_sUIJf`tpu&F34j5yqXEqBvfrt8&uWieHk{=U??EqLKQ&!ikn4uOc> zE_-)Mz1ej-Q+WMO=ebQ~Ed^J8-dv<@uX$!=PyF{NukLIPv72j;Fd_xuA|HHri5Ca&EFwvX~mOa zpwi}hSw8Afre86mz6E$k<%XO) z$s-#zY3jA}zYdmf=V0=edGcGnn$cgdN6`4l)I&#p>WY8Y=`gKeTB_ThY@)8L)RTLT zKk=zw)?OZ?N83M1rNzw+x%h1U?7J)hHEWknI34|~q^daHE?w`%jZYgq?#Dm!+=69&LCoaGrBE-#?|k&2QRsJQhB_{`|Jg zQ`WG)L+@pN-8vxhOtH@?W><0L*5=&2zUci;SNiW=kP)`|X1RC9;qpkK$8n#gZQ=A~ z%iKG2SHR}5Csk(tsZ;a<9eAXf8FdyG=M?VpHoT?2WmC@8iV}|&-Cy3POe*fAZoQvq zdj8^zsQtGOmz{0zU#2 zK7KnE@BF7Dy5+7xz$~2(_4a0Q*+mXB`I&9i*9xkwRjj?T-Ri)?ebT4rJPTR#I_g*c zvdc3po4)LFmVSNS=&RigGz2EU@-=T&X6)mPsx62=_(TQI1zqB!vVb6qP;;j#EC^vnX zxgyQ|zdP6W$S2>cw6s^WU0Zi~t7Plim6_XE6=&637Ce~0>D%T>&Qp^(YxeN1xVFy8 z|Do%xTlT4`e-5;NOghcaWi+iOQ1N~=k0O(B;>2j~zYdo&-n?_Uq9=NP>gF9~`ZW^k zEcS(Q=WKY|?Xc0Q&g5>}iuZTYych zugp8lwI7_vEQGoqzo|ZRJ6Zc$`@HyvlBf0;P z>&Da5y_s5Cv&6H`Ty%Od@q?oDr7nqWTLm4ZeylawRd9v}S0$&O5{Z&LFP8LL!9w@Q@n?}A4L?*euV#JPCf%Iac;>=6%-kA zt>&AbS!1fcBc|17ec|i5VpD_kx@XUk+xTG(lm3ZMn=AA--V@lIpp%h(Ol5M|_fz*z zelb|M#qR9dBIzy7yT6sTK1{!Uvwu?dqovzVw)V`@JR8!G;QpM2*&?L!^0_6CcOMU^ zZ}tidzLM5kXTl<}eXVZYNg?HV$LpjGqyMgUeJ1~+Q|@-jmHBhb3;VOOQgWE)Yo&|+ zno;xW?TpHkXVboZnPkg4^KR6y1=kALtMa_MBTcua_&Z-};E(QYjM|^Y%X{SXHR~y% z{PA4dpZ^w4m6kod%DpwDX+2ALor6JMV&TjM+nDd!$1K`DbYybaV zZ}_LKcw3NP)7FV%uZlpPUzJG zMggY^uQ=?nc%RUOI9^s4%FDB{O;WD zPp{7OI=iYRE?@A@X8I;=UjLHS@>wf9JiQ`I6gV$thkHxNM$MhJa=-S)Ysa>A-*2mH zVK~lY#4|5NcdbJK>x=zd%(wWTR{34FRt(K)+4+aj=D5&@pD~J_e~(INuU_)YaJPe) z0H@ZJQ&$pPPUJ*qyjZyKcB1F5yEWSmUc5E&+kU1fJCD}lEm3oW&bR%$TPqUu=l|tN zcEV5g_dJ-kbl&-<(c6h^B5j~sjo4QJ}3ko+w;@)qqu_ev$nuP zN>x!3?;8)^__QbZ=qcly7a5lvKDJcL=V+gw(@GoWFUga<_Xs5}b5HrH%g+0$Xxi-) zlb*h~<0zAXE2n#3!$lqp=&9(Nqha&Rp@yKm;hnI3a%!g3r!t+H(5 zrrxSK8#HUx#w_>1qux@lb8H^Yy*ugk=Ba9*jEugBENeerG`Y}SQ)AiFce!5_$}DF{ z)p4;Fo&3xp{(F(k`-lk*O24W?Bf_@Hd|EW)=_Heg--(y9i<;^evwd;fkzh1Ijpdqb z-_=JA$)#<|_p&ovdjb=^g#K^Z)RYvsIXx-GEO@&3W7Pv}N41uoUm_r8adgVwsV?6h z?{A-bfg>Ow$@FW4xyV0;d|nZY$E>X!AB`r~PT0BNN}8gX@RP>8DLlgIT`~O(XEVY- zA6C8VF2TJ!k%4Dbdd`NRkINrV3kU+Hc+wonOffrw@GW{}6hk zt75X={^AlD&E0C75AwU-VL$IDo68#2vgK9S_N~bW(%!u&za4DSxJskE)@0WkTa%nm zzMY)nNgFleX1$!7^3!*vpm@q=jeTaHtsA~Yb+YZ1%39}}JniI}sAI2<-hN08PoLg< zxRkeOcf{KR!b>kqymjPCTwDA-zw+W+cb_ElrhP5ZFwfU!eA~9@Yn{vL2}c4hn{Bzv z6tP}+slxKW=ye()udlqECmr8@e2&_-v&rslt^2v7{!ijfdg%{5D`ujzlB^B7e zEJ}G$>y%abSO3PuET5${(-s(gytPzFH85WM~HXLi%#Q8l=!3nrrlrT%d=RHA3Qlt`a3*g_GFw>YMAg-(EEe; z{GE#*_-_!sRkQEw98SLZ?Xe&JUEG@gHsI!jGn{XC8N52AC~2Yc`S6CgV}cVG3duF? z-SF(fp@5zaUB%#;Ls{N&fK)vwt6QDW{=^PoS+ z6s#6$`qyn1m(@CAQ>VRh{WAYEi`wS9wOWY@=v_OivL`t(PG@JJ=(MT&@>3!gs2IP_ zJMSm$^lk1LzTwh12NIlhVl55Y+)tGZO^nw&Z_sGCB2JH|&LC=C-@_E%OfKN$8&8_wnWP z|9y7t*MH0Weg%InoWAnbwzP#OPX&IcyP9xG&D$gau3za^cTdktb2I$$g}lka;w^6 zMMC0C=59$l9M!ka_Sc)$(!YyMev1Y!Y%a8u6xXrHcpAQM!siKdAMrZKb}o7FEk8=& zJNw-pKIYBd7mr^2C1>q(Mej)K>_z!`TMM^0Kh6BS&AZe|?bb}+TY1wT&6v79amy;E z$+t~RYi$|Np45@FlbrFZKE%(h^O#!PiHL8r9!hE4Fe+}dJgsu#M50BjCdZv$$)S>a zeJ!S~pJcg)P4G-eNt<6*Q;9O0yNHTMac$|$%bd@&tjnLxS`fpRt)wt>j?&(VH-C4e zbx!zeqWNuUXx`2_Yt3#xeW87guWZlfFQO;@Z`xS!fT1*g**DX`wQZumzD@e;GBr8% zk?3~zIud3oi8-nv3b_>b%)fR>99OsSvl$3hKo_bzw#Hk zx`dlQ{_k*kZK87Shuu#rj>p`2wWm!#X5*bJH8b8tUjI3L_wL?`x1Yk~H%Txt8tDE> zao(OY?V#KbV}|QBh6WENJ@}O~izO&$^IQ4HO~GCsQ)h_U94z_!z+|`38~IC*o@sin z-g9@F%F8L*Hp^5zUb{?H|G{PW+G|_We9K3Fr<6S^$)0t4KFjpWJFN;83Oy??)#ox# zUtM^mC2YM1L+D{6cd;`;T8z^3?r+?5=hxxblioXXo;gK%g=DOot)}I4jCa}FpN2{0 zE^PllD8DP$cPZ)IVQ{{JOX#0$F;}>7=#Tx=4vP91{LgLTa%<7Pf1|(U_?G{tmu$JR zz(^x-(bL?@l5L(Qan-^H*>gMQafB_oYG`p#<+pNKn{&w(lSocC;ddeai#aEsep71^ zZfL2r>fvXR;2V_|Nh&vPRpzo=r=_3YwRUpybDilYU%y%7*&TDXZnfk)7Y8%{Q+j3z z8Fw_a_btj%crHFab@Sm!zU&FxLm$2VzU_7pN1fLWJD5KI(G#E5XLAI) z&IYybY&`x?NG!2WnM<#2VrR{Bn9 z_bxRG_{_d3=Fr_Bt?Fhs>t7SUU(J6x?eV5(!VC|DbCi>OSIaMd=5tW$r=a!ZsjqS? zGk@=Pn|RkO(@57XxoxZ8>dy4C=g*=}GO_6xN<}(+61>-Qmou$z|5V%Sf@+OEE!|ox z)>Lg1c%QjIu+nPE_k#kTGA6zbVL$NS#N96Wkl0U|pC_hHycRt*e~DU7$5FNF+dlQ$ zQ={1K@9{bQL#1@ar){|k=hPUcMhdo{|ID|qQunv`w?ofW^kxKgv@pu=_Ud_Jw&>2G zPocVh+orCGXLjKie%m;&qDMK%$ke~vo5>}+wnH_N*Jr= zTEYM3Tq0MN=v?S8b4p#H`1!@zzxCYDA5S}FcBsoeqR&XP;BicV-C~3x8!fOrL36X)+=fgm)%ym z5;W1(@{{B)IhMRRuVReE5<5Y-vvJqp<(Z|Mu-?d6Zi7PciOJ?){*T`<1!) z&Fo$*&NkXp(zmfT!!z!b$rg`plc>Fs2VFO9J$8-1?(6zJ@?jCLtav#pzxaZX_frCR*@1j7aMc5%5T+a)OgOnbd_^} zpL1^gX?{F`aFJBloc`4ZL!?keDRGzYYfF2^6rGYPdRbdu=LHJXAU{PzAb;i zR@aan^UBO9`Od|qyGuX(VVWG0X_~Qd>mKDP9F8B~U#y+5?L@+sU@aY=4F{*~Z_~VF zQ?@58KheBLR`a0Q|MhEj*vJ;;#S6)_gr7I}1m2uJ<%bL}%$ick4|C zFFR~BjRRvc6la$ztcm}j%cwL zHz)9Bd^?-PWa-Xf7onMDvG1o|d$Fg3GEe*TMKw3NWlY=Wo_pwVQ-I+dJu3Mv7{_P_*>@(AvL6T#viY%Gi3Ur%27*@^$<9 zH`ac~gU)T}y{Y@GZTkA|J4Fw5qi?i%2|HUjdhhb~_+s|m>0Nx^#f(Qg#0^-_@crCz zU`O1`4*OfCYDeGgi}W|uPbZ^{!XmJoEMZi;XP*{C0>*GFF+M zU*V{~OiYtif2*oT_JS=dr{7X)y4Ym@M)KnP4Lf&rx<2d(N!#b8raMn(OHtC^tvtc; z^Jhj1zkVEWXfmUe^7S*%yKjbsG0BE(UbkOj@+qe0cUR9nEy`grpf={<~X0M18U*v^FCfaVc!&=A06bZFLZ%d zrg4?vrO=1U?<)SWep}#>Y1HpQ+bgew6o=SK_CS?^kR}554&Qe1x&5fbPF`H*33< z4;!`9OdKYS6J5zz7!}8*p#d@n4jAR1SBrIzrX9um*dS7eN z@%*>@oUmp0s&?~c8gRcg<_!2PSm*y?KK~ZJzi;k*JOAy&odB74S6n{dea^PwK|=al zrw>I|GnC@*#$47r#bP-{IOfB{l!vw%Qi|!)`x*MsuByf4J#7SDxzS zcilNVmYd}^&OZ?LB1iOf<>kT#`Thw){(tiBkW57m3I8 zcqo1M<6~)hTzfep&oJhfhQ|Axff>0VATjjJ|Z;b@g#e@=P@3)ckK`e4

(++%uu3#{_Pd-UR^{K_3aD$H7Q-<>4EVVB-7sZ1+WB zX18ZPZ_)SX-XdN5qE+T>uYdR43w zTRu70erdIU%f-bZGY%9=8{U|!DO)Oh?_`yp=CM-dW$IUDSMI;z)VEq;@jXr<*UQiK z=U?2PaI?fUQ?#RN=3gbdqH3K@{YkgFPE2z?=6`hMv&D0F1y0RfX0kyc_)Tp2mN#d& zl92Gs{I6q>hD5TN-n1kIg!!r$*L3A;Gn_$6HPnZsB@^Ee9r@ z-4Z3VVVz$=n}*?)pO+?Tqoq@lzNDqzcdJ+RwX`*|ScZ zIq9V8r=lk&7dObu@hW`^_Y>Of_DJl|n+o%r-yXHZ++F3ch=a*o-Dg42mxfqvjfyA7 zCtF|a{HAr_%1igjhu!*CKeYXN=lG`IM#?=NLaN6kW{N+0ruOOC!RB|L486-xQMva2)oJ^LFHQ92-#Br~mO$65`~i{<@1`ohVXeDayoWz?LB~Y#pGQua?A2+C zv;MkNpF(PqwFuk25GrFv(bKQ=Syty8hJZ=&>r(%5M`#r{q9D`%d6wOjwh zsp+MY9&sLEd!jRGn%1`U8<(C^+IiS)^(OtNMcbA}PCab5e(U;>?-tXZmzb68bM;%7 z&t+nI{r1y_j=#^k#6JA6GCzBs{awV0zS%#TvRd9RV>unwdFreYSkd&Kz=Ci;KN%R?wwaX;Q&0hce468_!;ukdu3p&D>+rs#dPnJwG4 z8g`eqeVZGxTtjdH_ob{tW~~z;lQVR!H$)}G`5ep1Uc4r4p7x~qsf9bws4RRb{c3Nc zWkS(=X9I@$f@=~iR()K5x_-N{??snAIXW78x!IK^vG?cPj|hmkbnDZHuQR=m@x@N8 z3by=nK{sT%u6$b`hx6K<&VJi#e89D1%Ku#|&uXsN#Qw4G^Q!mPY&!h@ zq0){|`}tO?KHo6=^WsbPQ(QSD9F{OJF-W{%n!+p-_*NiBmv*mAmh=AX2( zIBj`)&rC7(w<>}kr^q_2IC;PD!RPN<`A6I;RntRMIA8rrFlwi}YowLJO=7 zvlt@y7pHkC9N5fKGfVJ;gNo=T`O?;;Dc^Zs+3q^H`0~3ajjK|)V$-Z=#Pz&7;-S*K zw&$RX4$FpfMSY)pEM5l46>3Z0+O>DXDe*;L{Gt=Ym`r!?JKHDUyfAh9jlM_@x1vje z>#U{2&)3ddv1!}+DSv$=&a@nCOKj5oCiEj(M>=X_=GiKr&$;LSux=LL@${)r@|X1Z zZ^f4%pFTNL?DK{LduJ;}p37X;)~Jy>O_piW(m6>tFI-t>s{H!!i`8bl-HN%vHvg)E z(hT@ncYo1(Bi6Zc;nskHq6rc=wyAhO2sz!>yzQx6h1|aH7P7Oxosmra(c0ov#l70@ zlR4`fvkBsJzV+05XDq*K+52qjvDfyeI+Qs!&#A6CUbRaiBvJS1q^WPN>~Ooo{_pp< z)QEMNk)fQKKegEJAKtZ4boR9vp}At#VUC98{QKHx{%l^cc>3SVzc%~Mh!mQy=K96x zNAH^*OO`%u%$>cx&7#TT^aJI~Z>lV<<8l*2yEWK6-&e6&rzv`Do?@&keQQhFY1P-u z`eKV;d8MUppOeeIK2=REiu1GEOFPb~I?w%#wnz$Xm7d9+BPC^<^48?K*VAdjTwisX z{e63jJR&$MPA_<~>F@dZkNch%KEMBXUH$R9`}?ZzrRHbe`F^_M*Y}TSCU3S3fBmQ8 z;nRwb^UGd_JLIw-R<}O7F4H`v-=})vx7yGH^BK+8dG360;m?Hu{`1SFBloJeKW8s8`kYizyJ)_e(Ru!Se(rkxY36I5-2T{@Ep+1D>%eR5 zi)!~h`fyQw{&IbjpRaCDaXtCqmUfGgy@>zBl~-6!{CN@aw}&w)AZ6LnR^6$O<*pYB zJMeU!*|KB9(xN+$t*$W|Y8YL9bZFYCoA2xuv`Pdv_)276H0@2{{llSI6`=88+0j4o z3+q&*?_{LE{J7ccXJ67utZSD58|9J8D=x4i+ z8xzv}YaXqb<1BPYU~+ddxBG_*rPaxaA=bS;;U-I5X1-Ud5xn$ovD3n-M>ljUm3I4n z{=u|xiOo*FeJfv=m%T7M`hL1xtQa$cVaq9lO{Jc`Qx~qYJoa5_|1^ae6L+m)F21k7 zyZUz4&zon@UJ_rB{L{nQ{Tj1xx%~a_Dz()cdmi1rRm3oV{uaY%!TTB3#fu+HSieo) zqo}GIcDHY7XNExEiW7ZZf&JSeM1Hgw2YlCf>F`=(UzO$YMFQu|l};^)`h36NF)dtv zrA4>V%!Ef>6?1#fcica+@IhwELxn8ej~$wl7dzLsNb71&)V4igtD$&l@t?($CNA^Y z{2{?Iv7k%y@9O=DH!tw;8*6!sy?D2B%C@#M%TD}=%x6!xOrL3f`O%X1LRWN`{*i83 z_5G1;*oU}-ZkIU1io!&%sGjSYB-?$mlWWuBr2f=0* zgxdkz@=1QbU1fi*N}uwH=ap?5|KF-xb46Zh&&<*=c32_4_>V;AldLb?(SJI0r8c@g zmIIe&vZn&`)m*FhpZb0~O*|t{us0>jh{bM`g+P>X%c7_pl}VY^D_pMrtM4}TlU+L3 zsc_4}W4Bs+^`zH6NVHs>pN$OopZuhC?wPlK1Ol}*= zzg-yhYKhcM`-ZvuIaf2p|F3)e+G}8DVplqz8!-56>1jE{M;?V)Uf#f>UtlMWjjCEAOHVX;z;3T z*IoY}e5gM)WB1>GX3`>aMHoCj)OtU?*}tNEQo)^)yaQTp5^>Dl2QCJ_xBH~Eo>g+^ zv>S1UrCiMZU+Qv^I4>}u7tK_lD*&Y{Ioiib&DE0l#Y)_@2a~anz?rWIj zlA^EqG&Sng8L_G)XH$ihsi#gZZrGHtY4J~fy%Q173}37$m#;Kc=#by?pmCdvyRlcK z!JL`v8I``R*c>&bfg$x|g8OZ`kAA;*&L~=O<%U90w!h07&Mo)$E4}8{Pz))2J-c)6 zPf^JU4QxUMTW|e0u|B|1%yzx0VYcNYp**J*=SsIEE#9c_7tI#Rb-0_yNwRTff4}lA zfyDHz^+FRI7=#KEGN#r?uiGL~&>(r{g3l7~#XGev^F$>C9GGe(W?#Gzb;@l{`XcrR z0^D{JB&}0fANWNZmmhjksABKoe&Slg$px=}TWjBu`6YEIRFLyfh|!^?P7XEy?=Xr! zT>3#EkG*9335#|^A<=Dtp9CE;o-etw!@%Tqdq?CMMW@9sa<*@kj3QV$GZYw)SE@hk z(b8p$dB7z8DrxzdEzU;^*mpYC%Aeh0+wj`v!`0F#*2a#l_B$r8Rrd5*lFf3kFlLie zuv>!86*g_@kYX{GKMTHHy>RZ6I~%9Rfx@ohHCj#Ir!3@6J@|4$-r{NB);?Jwb?V7; z!yD>b9>fd1nVUY*@syJH>_Ub;P5Cd@E_ZzQSE?ree$3ljdzXo_bVt^{3%b2Ubz=F7 z8m;nokv9aBEdT7R-jnk1T*sMk-Usg;SQejIwc((IE#HH!JEoX3*S?Ot!IJd-N0xm5 zR#S<5%M6DDGv4N0V$$PjX5D>&fjRVmv!K=2Gg94+nOl9G?mcDSn0V;3MV@6)`l&r9 z)`>BdZB*o)ocp-`NVI{jQtze{r*B(aw{}tZH05!~ft-*T*S&i!Z(TUB`w92<`9F8_ zEbHd_pYY(!f0OyGf(}R9HY6A@r|nhdSa(0t)~H`pAV7D=*JXV1?m7ppby!j)*jkpq z%d1@=*0DA4drj17r)$QZ`Kz?NI5}QyX!&{7W>!w_@1-W$Dl@pOyuZFKKlGa6fwbKE z|2uC={|x2`Usc>Q$va=O?DsL%D}uWh+x@ydcgKeZm)1;eIN&ucA|O}N$jR#Wiq1L4 zq9xN_UElu6YOzhlo_|%p??`{)e&|)&7d*o|S87|Uca9Vzv);NW?rkT-G+S4mdnY7t zA(8X5{wfc)=Gf(t$_K?3Y!2B!&wKAXCVsi~`{UMqZ?jO0S$R&d$@}^H`6f42XYKd6 zsbjrPYi@4i<@?GaS}J*a#9Ue~w?+BZ^07|Yc|!K;0YPfG!_lAjcG{ZE_4kl%@;aD$)8}pU)}2hkFRy&En^*jN+R}3OZ+8-t-o0$A ze7nke$;pdCMZaX%Cb8~(QdX|x`)u3(e_WgYKYPh4&>HD-xa&n1W2pa=5G&>gu9zk! z%ceA2<>fLc%)Z<$gGzEtpUSuqIXVZhDwsSnLx8BLb=N zElR>RZ+acb>nUlj6~C*;=r}X}V?B20lKGO{XSS?b>DUwyyVfT;CCsoPW=L zn3{Ct?_9h%=2xLf=F7=3t5li39JPsS(6VlK>-FFEW!~OtM?>xyB`pe$cUY+ym0kb8@8@BMJ`E-Uyk>$=;*i_vB=C#gL|2A zZ>QstreiwHQym+e?00_3{dazL%>@}9fp=1y?a%10W%OdKntvq!90QM*MdXC@)9k;l zF?`N*Wm9M>gNa6k-uh;~kcoTGR8^|4Z%K<-$FpGZhOBmm8x3##!d$c}!eU1+ zw4bt`{iONs{-ldDruMPzZGYV-)zWx=+t(022fkH%?ap`wyj#9p=sv^A|N5Z;zkZzm z|L(;0^;P%mCOC;Vs4)ESHLU&q_vqb-ukR){uU}th8@0x7AI}G)y(Jq?7<76Z{WbN~ zvnbD-t}MAcd&BF*GH+c~Y0Q>fb?J5Im-S2s7V}=UY)no0$TZV$^76xq^1(ZmLfXC+ zcxyJ*f3s8Hw&g(<=f|F-Z*S|~&u*AC?(gClBx2@?$X}Kxre0s7_cll?w`|+S@ceU0+f8f_-uyimsJ~6>=k=@BZ#z@MJ#3F}esT2a{EK=AYm+8h z+)rWY{dU&tRGw|w4AvXjc{P$Omjd4H<(m9^N`d&gWq&?+Ke)&ICZRWc()15A?cx=? z`Gn$y`u@t)7BXgk3Y)F#R(E;VX-&1~GeX6bS@(Td@vAP$QOsba>EYC{{X6FP{Y#2D z+iZGt#@Qw9Gm5XQ(b>2Dj=zt^%x8bvQzl=Fi+|_#zh_HaMs>4?)6v_NB|8#2!{*-6 zJF--5{gKsIHJ(*&5kK~oVH-~wPnpdF*^FuzZIV4{IA8{r1_f79M_Wa1*>9Son+$BVAQp(Wo%?I+NtSC2}?&*jzko!Pb4M-P;vf^jJFk!dUL5bL1bnCol8$#0irgJs%O+Z>b^um~f~tjmy`s?kn}o{G!Rrzd}JoDk)crr*zF#Z&SZgN2wh}Kh4yB zoaH+`f7&IVQaMkBAfxTsPRz~)+6*Vx%B&9hKST4x=5kKR;XAIQcaHqiIE-oU&$DE0?_wZcMuMhMBF4hx4VP$b#b7l!DpQd*9`*x@4+a zDLq||saNB_VuYzBD__=3$HGn1mQ0W9y*JUY>$|#b=6ZD}E|EXTI0#qhzV z_0*l8Qpo`|+h3_)_0dk@d3#7uVkoEzxJl5MnCAf8FSSl53?LA zk6))ZMs`lSXuP6mb>)kHet+*4aNSQ2Tke>-|J(CY_XxJ4y7%jqZ#li4$CUFcMJ)1; zaqJ?_EZ+;VX~FZXb+5l!`R8BP??vq&d_~-5W)+J0Yx&RKDthH*tnTam{#OG1_19hw zxV_^;f)WG!=h+u?jPL1i?DfBurC}IFLu3|JVDf_X-(3y3#PtJ>v%l`><^x;4VBpYY=!nE zsToJzrp!y+y{^%Cle`8ukI_4=`~R~U@_IHuJQc3;ORy{Rkf`F);w8D4+%jcKdG8-O zv#KDYSggk|okvAGf^}M~_x6ZODQvEXx80BJy(W1@&3}`@k*kUiO186U-@bNB!gAHL z4_7yUmsQ}*yN{R2CmNl6snvHo@^(4I~3(A_1g>e!Fy zGu&f2puw=6$wKM?4+8@O$CKN09i&qJZ2itD%+l~iNnisf0N*mHo)*)Rv>WXFS|_UX^LtuPe;c9_?Uo&uwEge>sQI z=BspnBg1C%x_XC}-r0w0CT}g~J}~L5%8n4ul6=3I%uvRRJ4x}ISZ-~fvo0|_jxpoj zuF@?+5qr1Bp8oS|-QnDgg|dx{f63YJS^Kw7e??oWWV&dc*qVE@Q}+w5y_ff0LPdDr zwpm{_BVuprd9}NL&)>=&5FWajzgjk?bn86c&Y6lwGZV|Eg-uzhnscDztd7V`clBu+ zKYa4O#ziY=_2pJa9yxMa#q4bJ`MpimwYjS8t=amT+_O{TuJ;^V#p|+cz2_WJ95tgy(pd#?!I4oUG*jF9@XJta(BX2aoTd8rHXlY+LM+iIyJRg=o4vP3Gn zfQ0irPb?IpiOM0&SdGx7-jSNNRIdG?rd57z2eRP zea;@YVz~L)!ppdFCTLH8VtMY$rtodAzFxXE??ROE(FJ$;C?Xr_@1;D?CY77?R+a_p}FYV>FlSU zg+J3f8sye`Yf*#*?(KytKKtj0qd>mz5Y7VHO|b<{}rYs z9~bvqT2xTHq}HV5^Yp(-+usQMIv$S%s_jb@DP(vflXq`~GCpCXu5Aw^+=h&A2 zJ9N~0`uZP!uV4H4!6v0+cHdBT z_4xxwNn0J!P-MZsqc;=nE8?om@+PmYLc6pp1A9ZKD zBzDjKps{vO#K}8HjY>b7di#d@`^V^f7MtuP<#b71k?DhSTSVB#2$MF8NDH@$q~z5m zvvUhiBv!xKddTZv&X&v`?xG6@td$Ra<36okZReC(mGQ(qZkEHVlgEwicuEcg9PX7; zcayR`r;@>3mK(G%Y46vo_Z^yfP49RpNk|>v`@=_iR_?l=Vo_&yFqS>;)Sf5u)2ds0 zB1`7?@UKg=p3Sf}y&4u?%WHZqq&PnNW%SyuU-y2qdbMWtyD9_W?rTt!s(3f_2KKh+ zDfJY1{QvpeeaEuH=9hDd&u+hvBzQQdFnyC-)_C{ z*e+XohtvOT=KinNYVI}P+8_R0Y%iUcuKZWNfBU`4oPQJ4_}C}=8hSE5Hra3{N!Zu? zwvh3eIs1D}@40ZD^%_Bz>8l+E`t&|go zVXtE3i=6jAuIxVdao+dZ7s>KJPN>`RSf0(~Y+ZdNt<^W|)DFWs9|_^(OAIT0B!iD{ zF?CJ1RqO9p8G|eE%PA4THt)RU4Ko zc*cBP7BRg^mGAkfJ#wpF`bMQircMvet2}tx-CrdAbP3Q6g7WRaIAYGH>OFFX!w88_l;w zJ-TklzfMW~Yf*VKG({TulWbK_&;N_Sn~ zTmIhui~S;v{GI!GS%039dz-Cxy?%1S;wLBPIWhiGJJ`9i;Mu$n%o@+_kJNpbFaLE< zz}lI zDW&@;_vKl`Teoa~J~TeLa)0)uN9`LfzL{cwy6pCX(=UZ|pA}`ln0IK?vzQOg%m<6s zD;s$JxN`YT+Xlr99UYyhrIPEI-#(l7Vdkr?cl}B}9xeM>GxckSH0Qhh_n99Z_7z3LerZMSIOk$tBEfBgG#@%^?9u@86s+t_U!C;9p4 z!8-B2wDi_wVU8)YWSzoo>J0McYzQe~5o?}WpLN!E-M?P}dbeGTxALpLOjb8F>znb; zB0$+S?w;}s|9y-*C02K5?e*NL|7u(EBkky)3CFBeBY3yE z-*VG0XQhuUR&TuOR{ry<+rIAAg`&Uqw>M{QUK(GXv#n8j^WP`opZ8XtO*MJFdTyF| z=J`n#;j#<1FL-|JoP~L5t7gEC#ZFB;tZb}oAsH7GXU@4B@uyK*ad~|tt^sUCNI=vJf=TiExk8*h0X>4JKz7R)&8v8zwX!f(^nj`_X);ki^#Hk zdB5I%oy9%2lAX_#YOD6o{ad%=lgZ!2kf`&2l9z9>m~-yHgD+C+%P;$K^tn8K@-vD{ zOeJUPJ%1Pf3voYg-V^&c(e~8ht>@3)nQ+WVK_z3tLWkDGKe7@fCk!6^b1BN*K4aDW z$Gk?OCf|&n-zro)_gi*H+kNiC-&>m9W!K#DelB~?aJ%ZJReW!*m&&wVl7w*4~ywoCKf zA|&gjJ~^?w*R1Q_UAV$cjcuYt-wlDD+A9p(n6`NuG_>-0J~CZ$SdG<5?a&SmhZBlE z4NiN`zf{u{ut{QIWbELP&~W%V-@|_Ak}Q+^i&rlX{c_!GTFTeIvOV*i?bog|IC#|9 za`!1;raITImp*^JBW_MkKIEx6<)*X94*y@*x81qc^ylTzwGwAf?w`|^x?|IU=%gnF z)56zJ@BPGIxbRB||86~=y%s{A4F092o~yq2NjcBD@qf|j9gGUX4UEhj46L6HFfgp> zpT`ke{`T#XZ<2=+s`5nQey!HH;CDZ7$@^_Lrn|ZS7yX@ZaC76F`_FA|o=iA7X)X_& zci4umscX`VZWuqEjW1oYD&}5;NKI{sWumf2;D>udM!>~T9UzTwVep##df zWb#Sss0ur+oiAr;Dsq`?RFzGY;JEnfIFc@XZ)UPuI8C zIN5d_S3P&7C9Th8PKV{>0>#H}=jJxCi|S|H+j7Io-Arluf+dQcXWAw`W&8Fr?eqJ8 zcQZHJuin1@X50#gl}DahX%tKlWpZMj*etrKCgMRtYk=dEgw~u5J(dR#WR+gkTm7Nb z>A=(=k%MQ~UV7pEIwtS4WX)OE`t5p$I7~g}J#$N3AtL=!bJOx0^Rk?Z;^uEZX02Ls zu8O&6mZ+`xCe}m~!RJfj&!1Uwa?<1_SMFX;i_hIeWc|{`IK%d$zdRM)FMg(uXyF>ZKzE^)TvBf$5J^h zrYguIp3P{=#Ga*7I(<^riX%OyEM1eLD}7PzMx|2?kJq*O`O59DPYdn;@ql~I>X(`N zf{Deg$%0pAGubZn7TbK~>9tL=IWdxnw%UK5SZx1+_u2bTtP6=x~W#} zY~<#nV$pd&&3-g(+V*;;^*ZYdPxhtCom1R9%SKQzZ$WUAmC*Imo17zdth>5>kH#_; z@eLj)Hzqh;UavSKgG*@Pjo$P5tCw!QdLj&5ujSyUo5Nd7|r9x}}Bs>Js+4 z%ZqXp-&o9_zI$UH|EzguYdo)s2Bdrm@8U>!xNy}j({HD~9gXatX?1A7OGK!Y#jzKA zJr_z^eot=o?LVwkuD$F`w0y>L%6J5@gW^i+t-^ewKc9|uz@7BHr bu|mph$&(HUWF(dUHMA0&Dk&@;d5-}Ad{}Pp diff --git a/arch/all.html b/arch/all.html deleted file mode 100644 index e2ac817d9..000000000 --- a/arch/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/arch/fn.main.html b/arch/fn.main.html deleted file mode 100644 index 06332678b..000000000 --- a/arch/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in arch - Rust -

Function arch::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/arch/index.html b/arch/index.html deleted file mode 100644 index d42e90e87..000000000 --- a/arch/index.html +++ /dev/null @@ -1,4 +0,0 @@ -arch - Rust -

Crate arch[][src]

Functions

-
- \ No newline at end of file diff --git a/arch/sidebar-items.js b/arch/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/arch/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/ayu.css b/ayu.css deleted file mode 100644 index 1a8b5ad30..000000000 --- a/ayu.css +++ /dev/null @@ -1 +0,0 @@ - body{background-color:#0f1419;color:#c5c5c5;}h1,h2,h3,h4{color:white;}h1.fqn{border-bottom-color:#5c6773;}h1.fqn a{color:#fff;}h2,h3,h4{border-bottom-color:#5c6773;}h4{border:none;}.in-band{background-color:#0f1419;}.invisible{background:rgba(0,0,0,0);}.docblock code{color:#ffb454;}.code-header{color:#e6e1cf;}.docblock pre>code,pre>code{color:#e6e1cf;}span code{color:#e6e1cf;}.docblock a>code{color:#39AFD7 !important;}.docblock code,.docblock-short code{background-color:#191f26;}pre,.rustdoc.source .example-wrap{color:#e6e1cf;background-color:#191f26;}.sidebar{background-color:#14191f;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff);}*{scrollbar-color:#5c6773 #24292f;}.sidebar{scrollbar-color:#5c6773 #24292f;}::-webkit-scrollbar-track{background-color:transparent;}::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar::-webkit-scrollbar-track{background-color:transparent;}.sidebar::-webkit-scrollbar-thumb{background-color:#5c6773;}.sidebar .current{background-color:transparent;color:#ffb44c;}.source .sidebar{background-color:#0f1419;}.sidebar .location{border-color:#000;background-color:#0f1419;color:#fff;}.sidebar-elems .location{color:#ff7733;}.sidebar-elems .location a{color:#fff;}.sidebar .version{border-bottom-color:#424c57;}.sidebar-title{border-top-color:#5c6773;border-bottom-color:#5c6773;}.block a:hover{background:transparent;color:#ffb44c;}.line-numbers span{color:#5c6773;}.line-numbers .line-highlighted{color:#708090;background-color:rgba(255,236,164,0.06);padding-right:4px;border-right:1px solid #ffb44c;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#5c6773;}.docblock table td,.docblock table th{border-color:#5c6773;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#c5c5c5;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#000 !important;background-color:#c6afb3;}.search-results a{color:#0096cf;}.search-results a div.desc{color:#c5c5c5;}.content .item-info::before{color:#ccc;}.content span.foreigntype,.content a.foreigntype{color:#ef57ff;}.content span.union,.content a.union{color:#98a01c;}.content span.constant,.content a.constant,.content span.static,.content a.static{color:#6380a0;}.content span.primitive,.content a.primitive{color:#32889b;}.content span.traitalias,.content a.traitalias{color:#57d399;}.content span.keyword,.content a.keyword{color:#de5249;}.content span.externcrate,.content span.mod,.content a.mod{color:#acccf9;}.content span.struct,.content a.struct{color:#ffa0a5;}.content span.enum,.content a.enum{color:#99e0c9;}.content span.trait,.content a.trait{color:#39AFD7;}.content span.type,.content a.type{color:#cfbcf5;}.content span.fn,.content a.fn,.content span.method,.content a.method,.content span.tymethod,.content a.tymethod,.content .fnname{color:#fdd687;}.content span.attr,.content a.attr,.content span.derive,.content a.derive,.content span.macro,.content a.macro{color:#a37acc;}pre.rust .comment{color:#788797;}pre.rust .doccomment{color:#a1ac88;}nav:not(.sidebar){border-bottom-color:#424c57;}nav.main .current{border-top-color:#5c6773;border-bottom-color:#5c6773;}nav.main .separator{border:1px solid #5c6773;}a{color:#39AFD7;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#c5c5c5;}.search-results a{color:#0096cf;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#c5c5c5;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;border-color:#424c57;}.search-input{color:#ffffff;background-color:#141920;box-shadow:0 0 0 1px #424c57,0 0 0 2px transparent;transition:box-shadow 150ms ease-in-out;}#crate-search+.search-input:focus{box-shadow:0 0 0 1px #148099,0 0 0 2px transparent;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable,.stab.deprecated,.stab.portability{color:#c5c5c5;background:#314559 !important;border-style:none !important;border-radius:4px;padding:3px 6px 3px 6px;}.stab.portability>code{color:#e6e1cf;background:none;}#help>div{background:#14191f;box-shadow:0px 6px 20px 0px black;border:none;border-radius:4px;}#help span.bottom,#help span.top{border-color:#5c6773;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#788797;}.line-numbers :target{background-color:transparent;}pre.rust .number,pre.rust .string{color:#b8cc52;}pre.rust .kw,pre.rust .kw-2,pre.rust .prelude-ty,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .op,pre.rust .lifetime{color:#ff7733;}pre.rust .macro,pre.rust .macro-nonterminal{color:#a37acc;}pre.rust .question-mark{color:#ff9011;}pre.rust .self{color:#36a3d9;font-style:italic;}pre.rust .attribute{color:#e6e1cf;}pre.rust .attribute .ident,pre.rust .attribute .op{color:#e6e1cf;}.example-wrap>pre.line-number{color:#5c67736e;border:none;}a.test-arrow{font-size:100%;color:#788797;border-radius:4px;background-color:rgba(57,175,215,0.09);}a.test-arrow:hover{background-color:rgba(57,175,215,0.368);color:#c5c5c5;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:rgba(255,236,164,0.06);}:target{border-right:3px solid rgba(255,180,76,0.85);}pre.compile_fail{border-left:2px solid rgba(255,0,0,.4);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.4);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#39AFD7;}.tooltip::after{background-color:#314559;color:#c5c5c5;border:1px solid #5c6773;}.tooltip::before{border-color:transparent #314559 transparent transparent;}.notable-traits-tooltiptext{background-color:#314559;border-color:#5c6773;}.notable-traits-tooltiptext .notable{border-bottom-color:#5c6773;}#titles>button.selected{background-color:#141920 !important;border-bottom:1px solid #ffb44c !important;border-top:none;}#titles>button:not(.selected){background-color:transparent !important;border:none;}#titles>button:hover{border-bottom:1px solid rgba(242,151,24,0.3);}#titles>button>div.count{color:#888;}.search-input:focus{}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{}.content span.struct,.content a.struct,.block a.current.struct{}#titles>button:hover,#titles>button.selected{}.content span.type,.content a.type,.block a.current.type{}.content span.union,.content a.union,.block a.current.union{}pre.rust .lifetime{}.stab.unstable{}h2,h3:not(.impl):not(.method):not(.type):not(.tymethod),h4:not(.method):not(.type):not(.tymethod){}.content span.enum,.content a.enum,.block a.current.enum{}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{}.content span.keyword,.content a.keyword,.block a.current.keyword{}pre.rust .comment{}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{}pre.rust .kw{}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{}pre.rust .doccomment{}.stab.deprecated{}.content a.attr,.content a.derive,.content a.macro{}.stab.portability{}.content span.primitive,.content a.primitive,.block a.current.primitive{}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{}pre.rust .kw-2,pre.rust .prelude-ty{}.content span.trait,.content a.trait,.block a.current.trait{}.search-results a:focus span{}a.result-trait:focus{}a.result-traitalias:focus{}a.result-mod:focus,a.result-externcrate:focus{}a.result-mod:focus{}a.result-externcrate:focus{}a.result-enum:focus{}a.result-struct:focus{}a.result-union:focus{}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{}a.result-type:focus{}a.result-foreigntype:focus{}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{}a.result-constant:focus,a.result-static:focus{}a.result-primitive:focus{}a.result-keyword:focus{}@media (max-width:700px){.sidebar-menu{background-color:#14191f;border-bottom-color:#5c6773;border-right-color:#5c6773;}.sidebar-elems{background-color:#14191f;border-right-color:#5c6773;}#sidebar-filler{background-color:#14191f;border-bottom-color:#5c6773;}}kbd{color:#c5c5c5;background-color:#314559;border-color:#5c6773;border-bottom-color:#5c6773;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#5c6773;background-color:#0f1419;color:#fff;}#theme-picker>img,#settings-menu>img{filter:invert(100);}#copy-path{color:#fff;}#copy-path>img{filter:invert(70%);}#copy-path:hover>img{filter:invert(100%);}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#e0e0e0;}#theme-choices{border-color:#5c6773;background-color:#0f1419;}#theme-choices>button:not(:first-child){border-top-color:#5c6773;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:rgba(110,110,110,0.33);}@media (max-width:700px){#theme-picker{background:#0f1419;}}#all-types{background-color:#14191f;}#all-types:hover{background-color:rgba(70,70,70,0.33);}.search-results .result-name span.alias{color:#c5c5c5;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#14191f;}#sidebar-toggle:hover{background-color:rgba(70,70,70,0.33);}#source-sidebar{background-color:#14191f;}#source-sidebar>.title{color:#fff;border-bottom-color:#5c6773;}div.files>a:hover,div.name:hover{background-color:#14191f;color:#ffb44c;}div.files>.selected{background-color:#14191f;color:#ffb44c;}.setting-line>.title{border-bottom-color:#5c6773;}input:checked+.slider{background-color:#ffb454 !important;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(15,20,25,1),rgba(15,20,25,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(15,20,25,1),rgba(15,20,25,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:##898989;} \ No newline at end of file diff --git a/base32/all.html b/base32/all.html deleted file mode 100644 index 8b18f903d..000000000 --- a/base32/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/base32/fn.main.html b/base32/fn.main.html deleted file mode 100644 index 4a2dc1483..000000000 --- a/base32/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in base32 - Rust -

Function base32::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/base32/index.html b/base32/index.html deleted file mode 100644 index 9062e83ce..000000000 --- a/base32/index.html +++ /dev/null @@ -1,4 +0,0 @@ -base32 - Rust -

Crate base32[][src]

Functions

-
- \ No newline at end of file diff --git a/base32/sidebar-items.js b/base32/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/base32/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/base64/all.html b/base64/all.html deleted file mode 100644 index c3f4e5365..000000000 --- a/base64/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/base64/fn.main.html b/base64/fn.main.html deleted file mode 100644 index ce8e1913b..000000000 --- a/base64/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in base64 - Rust -

Function base64::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/base64/index.html b/base64/index.html deleted file mode 100644 index ba9d7ec5a..000000000 --- a/base64/index.html +++ /dev/null @@ -1,4 +0,0 @@ -base64 - Rust -

Crate base64[][src]

Functions

-
- \ No newline at end of file diff --git a/base64/sidebar-items.js b/base64/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/base64/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/basename/all.html b/basename/all.html deleted file mode 100644 index a52492db3..000000000 --- a/basename/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/basename/fn.main.html b/basename/fn.main.html deleted file mode 100644 index 3c31b9adc..000000000 --- a/basename/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in basename - Rust -

Function basename::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/basename/index.html b/basename/index.html deleted file mode 100644 index 4ebc80d3e..000000000 --- a/basename/index.html +++ /dev/null @@ -1,4 +0,0 @@ -basename - Rust -

Crate basename[][src]

Functions

-
- \ No newline at end of file diff --git a/basename/sidebar-items.js b/basename/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/basename/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/basenc/all.html b/basenc/all.html deleted file mode 100644 index a4295d25c..000000000 --- a/basenc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/basenc/fn.main.html b/basenc/fn.main.html deleted file mode 100644 index 52719c234..000000000 --- a/basenc/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in basenc - Rust -

Function basenc::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/basenc/index.html b/basenc/index.html deleted file mode 100644 index 1e523db7c..000000000 --- a/basenc/index.html +++ /dev/null @@ -1,4 +0,0 @@ -basenc - Rust -

Crate basenc[][src]

Functions

-
- \ No newline at end of file diff --git a/basenc/sidebar-items.js b/basenc/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/basenc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/brush.svg b/brush.svg deleted file mode 100644 index ea266e856..000000000 --- a/brush.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/cat/all.html b/cat/all.html deleted file mode 100644 index 6643af400..000000000 --- a/cat/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/cat/fn.main.html b/cat/fn.main.html deleted file mode 100644 index 99ed3ad05..000000000 --- a/cat/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in cat - Rust -

Function cat::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/cat/index.html b/cat/index.html deleted file mode 100644 index d5e699a65..000000000 --- a/cat/index.html +++ /dev/null @@ -1,4 +0,0 @@ -cat - Rust -

Crate cat[][src]

Functions

-
- \ No newline at end of file diff --git a/cat/sidebar-items.js b/cat/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/cat/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/chcon/all.html b/chcon/all.html deleted file mode 100644 index a28db53db..000000000 --- a/chcon/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/chcon/fn.main.html b/chcon/fn.main.html deleted file mode 100644 index 096630106..000000000 --- a/chcon/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in chcon - Rust -

Function chcon::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/chcon/index.html b/chcon/index.html deleted file mode 100644 index 1d0ff3cc2..000000000 --- a/chcon/index.html +++ /dev/null @@ -1,4 +0,0 @@ -chcon - Rust -

Crate chcon[][src]

Functions

-
- \ No newline at end of file diff --git a/chcon/sidebar-items.js b/chcon/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/chcon/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/chgrp/all.html b/chgrp/all.html deleted file mode 100644 index b9612e4f2..000000000 --- a/chgrp/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/chgrp/fn.main.html b/chgrp/fn.main.html deleted file mode 100644 index 2ebf0997b..000000000 --- a/chgrp/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in chgrp - Rust -

Function chgrp::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/chgrp/index.html b/chgrp/index.html deleted file mode 100644 index 2590c5e12..000000000 --- a/chgrp/index.html +++ /dev/null @@ -1,4 +0,0 @@ -chgrp - Rust -

Crate chgrp[][src]

Functions

-
- \ No newline at end of file diff --git a/chgrp/sidebar-items.js b/chgrp/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/chgrp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/chmod/all.html b/chmod/all.html deleted file mode 100644 index dcef96731..000000000 --- a/chmod/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/chmod/fn.main.html b/chmod/fn.main.html deleted file mode 100644 index 638e56049..000000000 --- a/chmod/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in chmod - Rust -

Function chmod::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/chmod/index.html b/chmod/index.html deleted file mode 100644 index 673e85fa3..000000000 --- a/chmod/index.html +++ /dev/null @@ -1,4 +0,0 @@ -chmod - Rust -

Crate chmod[][src]

Functions

-
- \ No newline at end of file diff --git a/chmod/sidebar-items.js b/chmod/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/chmod/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/chown/all.html b/chown/all.html deleted file mode 100644 index b0fee3355..000000000 --- a/chown/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/chown/fn.main.html b/chown/fn.main.html deleted file mode 100644 index 901124c2a..000000000 --- a/chown/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in chown - Rust -

Function chown::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/chown/index.html b/chown/index.html deleted file mode 100644 index b25b60ffc..000000000 --- a/chown/index.html +++ /dev/null @@ -1,4 +0,0 @@ -chown - Rust -

Crate chown[][src]

Functions

-
- \ No newline at end of file diff --git a/chown/sidebar-items.js b/chown/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/chown/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/chroot/all.html b/chroot/all.html deleted file mode 100644 index 393af9807..000000000 --- a/chroot/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/chroot/fn.main.html b/chroot/fn.main.html deleted file mode 100644 index 7223981a6..000000000 --- a/chroot/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in chroot - Rust -

Function chroot::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/chroot/index.html b/chroot/index.html deleted file mode 100644 index b6531d444..000000000 --- a/chroot/index.html +++ /dev/null @@ -1,4 +0,0 @@ -chroot - Rust -

Crate chroot[][src]

Functions

-
- \ No newline at end of file diff --git a/chroot/sidebar-items.js b/chroot/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/chroot/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/cksum/all.html b/cksum/all.html deleted file mode 100644 index ca947448b..000000000 --- a/cksum/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/cksum/fn.main.html b/cksum/fn.main.html deleted file mode 100644 index bb2bedf4b..000000000 --- a/cksum/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in cksum - Rust -

Function cksum::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/cksum/index.html b/cksum/index.html deleted file mode 100644 index ea6323a9e..000000000 --- a/cksum/index.html +++ /dev/null @@ -1,4 +0,0 @@ -cksum - Rust -

Crate cksum[][src]

Functions

-
- \ No newline at end of file diff --git a/cksum/sidebar-items.js b/cksum/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/cksum/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/clipboard.svg b/clipboard.svg deleted file mode 100644 index 8adbd9963..000000000 --- a/clipboard.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/comm/all.html b/comm/all.html deleted file mode 100644 index d0e6ee32f..000000000 --- a/comm/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/comm/fn.main.html b/comm/fn.main.html deleted file mode 100644 index e8d421258..000000000 --- a/comm/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in comm - Rust -

Function comm::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/comm/index.html b/comm/index.html deleted file mode 100644 index 3eee42239..000000000 --- a/comm/index.html +++ /dev/null @@ -1,4 +0,0 @@ -comm - Rust -

Crate comm[][src]

Functions

-
- \ No newline at end of file diff --git a/comm/sidebar-items.js b/comm/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/comm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/coreutils/all.html b/coreutils/all.html deleted file mode 100644 index a0a89b324..000000000 --- a/coreutils/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Typedefs

Constants

- \ No newline at end of file diff --git a/coreutils/constant.VERSION.html b/coreutils/constant.VERSION.html deleted file mode 100644 index e06e96757..000000000 --- a/coreutils/constant.VERSION.html +++ /dev/null @@ -1,3 +0,0 @@ -VERSION in coreutils - Rust -

Constant coreutils::VERSION[][src]

pub(crate) const VERSION: &str = "0.0.12";
- \ No newline at end of file diff --git a/coreutils/fn.binary_path.html b/coreutils/fn.binary_path.html deleted file mode 100644 index 4bfa7a29c..000000000 --- a/coreutils/fn.binary_path.html +++ /dev/null @@ -1,3 +0,0 @@ -binary_path in coreutils - Rust -

Function coreutils::binary_path[][src]

pub(crate) fn binary_path(args: &mut impl Iterator<Item = OsString>) -> PathBuf
- \ No newline at end of file diff --git a/coreutils/fn.gen_completions.html b/coreutils/fn.gen_completions.html deleted file mode 100644 index df38751d1..000000000 --- a/coreutils/fn.gen_completions.html +++ /dev/null @@ -1,4 +0,0 @@ -gen_completions in coreutils - Rust -

Function coreutils::gen_completions[][src]

pub(crate) fn gen_completions<T: Args>(
    args: impl Iterator<Item = OsString>,
    util_map: HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>
) -> !
Expand description

Prints completions for the utility in the first parameter for the shell in the second parameter to stdout

-
- \ No newline at end of file diff --git a/coreutils/fn.gen_coreutils_app.html b/coreutils/fn.gen_coreutils_app.html deleted file mode 100644 index 0706ed60d..000000000 --- a/coreutils/fn.gen_coreutils_app.html +++ /dev/null @@ -1,3 +0,0 @@ -gen_coreutils_app in coreutils - Rust -

Function coreutils::gen_coreutils_app[][src]

pub(crate) fn gen_coreutils_app<T: Args>(
    util_map: HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>
) -> App<'static>
- \ No newline at end of file diff --git a/coreutils/fn.main.html b/coreutils/fn.main.html deleted file mode 100644 index ac6b2eba9..000000000 --- a/coreutils/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in coreutils - Rust -

Function coreutils::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/coreutils/fn.name.html b/coreutils/fn.name.html deleted file mode 100644 index e89a522a7..000000000 --- a/coreutils/fn.name.html +++ /dev/null @@ -1,3 +0,0 @@ -name in coreutils - Rust -

Function coreutils::name[][src]

pub(crate) fn name(binary_path: &Path) -> &str
- \ No newline at end of file diff --git a/coreutils/fn.usage.html b/coreutils/fn.usage.html deleted file mode 100644 index caa3c289f..000000000 --- a/coreutils/fn.usage.html +++ /dev/null @@ -1,3 +0,0 @@ -usage in coreutils - Rust -

Function coreutils::usage[][src]

pub(crate) fn usage<T>(
    utils: &HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>,
    name: &str
)
- \ No newline at end of file diff --git a/coreutils/fn.util_map.html b/coreutils/fn.util_map.html deleted file mode 100644 index 8b561af8a..000000000 --- a/coreutils/fn.util_map.html +++ /dev/null @@ -1,3 +0,0 @@ -util_map in coreutils - Rust -

Function coreutils::util_map[][src]

pub(crate) fn util_map<T: Args>(
) -> HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>
- \ No newline at end of file diff --git a/coreutils/index.html b/coreutils/index.html deleted file mode 100644 index bfde5e4bf..000000000 --- a/coreutils/index.html +++ /dev/null @@ -1,7 +0,0 @@ -coreutils - Rust -

Crate coreutils[][src]

Constants

-

Functions

-

Prints completions for the utility in the first parameter for the shell in the second parameter to stdout

-

Type Definitions

-
- \ No newline at end of file diff --git a/coreutils/sidebar-items.js b/coreutils/sidebar-items.js deleted file mode 100644 index 21769c91b..000000000 --- a/coreutils/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["VERSION",""]],"fn":[["binary_path",""],["gen_completions","Prints completions for the utility in the first parameter for the shell in the second parameter to stdout"],["gen_coreutils_app",""],["main",""],["name",""],["usage",""],["util_map",""]],"type":[["UtilityMap",""]]}); \ No newline at end of file diff --git a/coreutils/type.UtilityMap.html b/coreutils/type.UtilityMap.html deleted file mode 100644 index f7903aa1c..000000000 --- a/coreutils/type.UtilityMap.html +++ /dev/null @@ -1,3 +0,0 @@ -UtilityMap in coreutils - Rust -

Type Definition coreutils::UtilityMap[][src]

pub(crate) type UtilityMap<T> = HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>;
- \ No newline at end of file diff --git a/cp/all.html b/cp/all.html deleted file mode 100644 index b57ea128a..000000000 --- a/cp/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/cp/fn.main.html b/cp/fn.main.html deleted file mode 100644 index 3d0771d43..000000000 --- a/cp/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in cp - Rust -

Function cp::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/cp/index.html b/cp/index.html deleted file mode 100644 index 0bf9d8cc7..000000000 --- a/cp/index.html +++ /dev/null @@ -1,4 +0,0 @@ -cp - Rust -

Crate cp[][src]

Functions

-
- \ No newline at end of file diff --git a/cp/sidebar-items.js b/cp/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/cp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/crates.js b/crates.js deleted file mode 100644 index ea5fd21c4..000000000 --- a/crates.js +++ /dev/null @@ -1 +0,0 @@ -window.ALL_CRATES = ["arch","base32","base64","basename","basenc","cat","chcon","chgrp","chmod","chown","chroot","cksum","comm","coreutils","cp","csplit","cut","date","dd","df","dircolors","dirname","du","echo","env","expand","expr","factor","false","fmt","fold","groups","hashsum","head","hostid","hostname","id","install","join","kill","libstdbuf","link","ln","logname","ls","mkdir","mkfifo","mknod","mktemp","more","mv","nice","nl","nohup","nproc","numfmt","od","paste","pathchk","pinky","pr","printenv","printf","ptx","pwd","readlink","realpath","relpath","rm","rmdir","runcon","seq","shred","shuf","sleep","sort","split","stat","stdbuf","sum","sync","tac","tail","tee","test","timeout","touch","tr","true","truncate","tsort","tty","uname","unexpand","uniq","unlink","uptime","users","uu_arch","uu_base32","uu_base64","uu_basename","uu_basenc","uu_cat","uu_chcon","uu_chgrp","uu_chmod","uu_chown","uu_chroot","uu_cksum","uu_comm","uu_cp","uu_csplit","uu_cut","uu_date","uu_dd","uu_df","uu_dircolors","uu_dirname","uu_du","uu_echo","uu_env","uu_expand","uu_expr","uu_factor","uu_false","uu_fmt","uu_fold","uu_groups","uu_hashsum","uu_head","uu_hostid","uu_hostname","uu_id","uu_install","uu_join","uu_kill","uu_link","uu_ln","uu_logname","uu_ls","uu_mkdir","uu_mkfifo","uu_mknod","uu_mktemp","uu_more","uu_mv","uu_nice","uu_nl","uu_nohup","uu_nproc","uu_numfmt","uu_od","uu_paste","uu_pathchk","uu_pinky","uu_pr","uu_printenv","uu_printf","uu_ptx","uu_pwd","uu_readlink","uu_realpath","uu_relpath","uu_rm","uu_rmdir","uu_runcon","uu_seq","uu_shred","uu_shuf","uu_sleep","uu_sort","uu_split","uu_stat","uu_stdbuf","uu_sum","uu_sync","uu_tac","uu_tail","uu_tee","uu_test","uu_timeout","uu_touch","uu_tr","uu_true","uu_truncate","uu_tsort","uu_tty","uu_uname","uu_unexpand","uu_uniq","uu_unlink","uu_uptime","uu_users","uu_wc","uu_who","uu_whoami","uu_yes","uucore","uucore_procs","uudoc","wc","who","whoami","yes"]; \ No newline at end of file diff --git a/csplit/all.html b/csplit/all.html deleted file mode 100644 index 6614a5995..000000000 --- a/csplit/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/csplit/fn.main.html b/csplit/fn.main.html deleted file mode 100644 index 4720f9979..000000000 --- a/csplit/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in csplit - Rust -

Function csplit::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/csplit/index.html b/csplit/index.html deleted file mode 100644 index f9d9ca843..000000000 --- a/csplit/index.html +++ /dev/null @@ -1,4 +0,0 @@ -csplit - Rust -

Crate csplit[][src]

Functions

-
- \ No newline at end of file diff --git a/csplit/sidebar-items.js b/csplit/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/csplit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/cut/all.html b/cut/all.html deleted file mode 100644 index 823609102..000000000 --- a/cut/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/cut/fn.main.html b/cut/fn.main.html deleted file mode 100644 index 5114622c7..000000000 --- a/cut/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in cut - Rust -

Function cut::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/cut/index.html b/cut/index.html deleted file mode 100644 index 55c9a7c05..000000000 --- a/cut/index.html +++ /dev/null @@ -1,4 +0,0 @@ -cut - Rust -

Crate cut[][src]

Functions

-
- \ No newline at end of file diff --git a/cut/sidebar-items.js b/cut/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/cut/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/dark.css b/dark.css deleted file mode 100644 index 84725b2a2..000000000 --- a/dark.css +++ /dev/null @@ -1 +0,0 @@ -body{background-color:#353535;color:#ddd;}h1,h2,h3,h4{color:#ddd;}h1.fqn{border-bottom-color:#d2d2d2;}h2,h3,h4{border-bottom-color:#d2d2d2;}.in-band{background-color:#353535;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#2A2A2A;}pre,.rustdoc.source .example-wrap{background-color:#2A2A2A;}.sidebar{background-color:#505050;}.logo-container.rust-logo>img{filter:drop-shadow(1px 0 0px #fff) drop-shadow(0 1px 0 #fff) drop-shadow(-1px 0 0 #fff) drop-shadow(0 -1px 0 #fff)}*{scrollbar-color:rgb(64,65,67) #717171;}.sidebar{scrollbar-color:rgba(32,34,37,.6) #5a5a5a;}::-webkit-scrollbar-track{background-color:#717171;}::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar::-webkit-scrollbar-track{background-color:#717171;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(32,34,37,.6);}.sidebar .current{background-color:#333;}.source .sidebar{background-color:#353535;}.sidebar .location{border-color:#fff;background:#575757;color:#DDD;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#444;}.line-numbers span{color:#3B91E2;}.line-numbers .line-highlighted{background-color:#0a042f !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#DDD;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#ddd;}.search-results a:hover{background-color:#777;}.search-results a:focus{color:#eee !important;background-color:#616161;}.search-results a:focus span{color:#eee !important;}a.result-trait:focus{background-color:#013191;}a.result-traitalias:focus{background-color:#013191;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-mod:focus{background-color:#803a1b;}a.result-externcrate:focus{background-color:#396bac;}a.result-enum:focus{background-color:#5b4e68;}a.result-struct:focus{background-color:#194e9f;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#4950ed;}a.result-type:focus{background-color:#38902c;}a.result-foreigntype:focus{background-color:#b200d6;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#217d1c;}a.result-constant:focus,a.result-static:focus{background-color:#0063cc;}a.result-primitive:focus{background-color:#00708a;}a.result-keyword:focus{background-color:#884719;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#82b089;}.content span.struct,.content a.struct,.block a.current.struct{color:#2dbfb8;}.content span.type,.content a.type,.block a.current.type{color:#ff7f00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#dd7de8;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#09bd00;}.content span.union,.content a.union,.block a.current.union{color:#a6ae37;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#82a5c9;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#43aec7;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#bda000;}.content span.trait,.content a.trait,.block a.current.trait{color:#b78cf2;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#b397da;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#2BAB63;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}pre.rust .comment{color:#8d8d8b;}pre.rust .doccomment{color:#8ca375;}nav:not(.sidebar){border-bottom-color:#4e4e4e;}nav.main .current{border-top-color:#eee;border-bottom-color:#eee;}nav.main .separator{border-color:#eee;}a{color:#D2991D;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#ddd;}.search-results a{color:#ddd;}a.test-arrow{color:#dedede;}body.source .example-wrap pre.rust a{background:#333;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}details.rustdoc-toggle>summary::before,details.undocumented>summary::before{filter:invert(100%);}#crate-search{color:#111;background-color:#f0f0f0;border-color:#000;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input{color:#111;background-color:#f0f0f0;box-shadow:0 0 0 1px #000,0 0 0 2px transparent;}.search-input:focus{border-color:#008dfd;}#crate-search+.search-input:focus{box-shadow:0 0 8px 4px #078dd8;}.module-item .stab,.import-item .stab{color:#ddd;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;color:#2f2f2f;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;color:#2f2f2f;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;color:#2f2f2f;}.stab.portability>code{background:none;}#help>div{background:#4d4d4d;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}#help dt{border-color:#bfbfbf;background:rgba(0,0,0,0);}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:#ddd;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#ab8ac1;}pre.rust .kw-2,pre.rust .prelude-ty{color:#769acb;}pre.rust .number,pre.rust .string{color:#83a300;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#ee6868;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#d97f26;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#4a4949;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background-color:#494a3d;}:target{border-right:3px solid #bb7410;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.8);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.8);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.8);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.8);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;border-color:#000;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#111;border-color:#777;}.notable-traits-tooltiptext .notable{border-bottom-color:#d2d2d2;}#titles>button:not(.selected){background-color:#252525;border-top-color:#252525;}#titles>button:hover,#titles>button.selected{border-top-color:#0089ff;background-color:#353535;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#505050;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#505050;border-right-color:#000;}#sidebar-filler{background-color:#505050;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background:#f0f0f0;color:#000;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#ffb900;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(65%);}#theme-choices{border-color:#e0e0e0;background-color:#353535;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#4e4e4e;}@media (max-width:700px){#theme-picker{background:#f0f0f0;}}#all-types{background-color:#505050;}#all-types:hover{background-color:#606060;}.search-results .result-name span.alias{color:#fff;}.search-results .result-name span.grey{color:#ccc;}#sidebar-toggle{background-color:#565656;}#sidebar-toggle:hover{background-color:#676767;}#source-sidebar{background-color:#565656;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#444;}div.files>.selected{background-color:#333;}.setting-line>.title{border-bottom-color:#ddd;}.scraped-example .example-wrap .rust span.highlight{background:rgb(91,59,1);}.scraped-example .example-wrap .rust span.highlight.focus{background:rgb(124,75,15);}.scraped-example:not(.expanded) .code-wrapper:before{background:linear-gradient(to bottom,rgba(53,53,53,1),rgba(53,53,53,0));}.scraped-example:not(.expanded) .code-wrapper:after{background:linear-gradient(to top,rgba(53,53,53,1),rgba(53,53,53,0));}.toggle-line-inner{background:#616161;}.toggle-line:hover .toggle-line-inner{background:##898989;} \ No newline at end of file diff --git a/date/all.html b/date/all.html deleted file mode 100644 index 0129a71a4..000000000 --- a/date/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/date/fn.main.html b/date/fn.main.html deleted file mode 100644 index 61e0129c1..000000000 --- a/date/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in date - Rust -

Function date::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/date/index.html b/date/index.html deleted file mode 100644 index f1aff59c0..000000000 --- a/date/index.html +++ /dev/null @@ -1,4 +0,0 @@ -date - Rust -

Crate date[][src]

Functions

-
- \ No newline at end of file diff --git a/date/sidebar-items.js b/date/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/date/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/dd/all.html b/dd/all.html deleted file mode 100644 index 741b33888..000000000 --- a/dd/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/dd/fn.main.html b/dd/fn.main.html deleted file mode 100644 index 2bcad8f8e..000000000 --- a/dd/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in dd - Rust -

Function dd::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/dd/index.html b/dd/index.html deleted file mode 100644 index 4347b602c..000000000 --- a/dd/index.html +++ /dev/null @@ -1,4 +0,0 @@ -dd - Rust -

Crate dd[][src]

Functions

-
- \ No newline at end of file diff --git a/dd/sidebar-items.js b/dd/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/dd/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/df/all.html b/df/all.html deleted file mode 100644 index 971d486c7..000000000 --- a/df/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/df/fn.main.html b/df/fn.main.html deleted file mode 100644 index eba542749..000000000 --- a/df/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in df - Rust -

Function df::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/df/index.html b/df/index.html deleted file mode 100644 index d45168384..000000000 --- a/df/index.html +++ /dev/null @@ -1,4 +0,0 @@ -df - Rust -

Crate df[][src]

Functions

-
- \ No newline at end of file diff --git a/df/sidebar-items.js b/df/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/df/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/dircolors/all.html b/dircolors/all.html deleted file mode 100644 index e70079cb6..000000000 --- a/dircolors/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/dircolors/fn.main.html b/dircolors/fn.main.html deleted file mode 100644 index 6d411441d..000000000 --- a/dircolors/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in dircolors - Rust -

Function dircolors::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/dircolors/index.html b/dircolors/index.html deleted file mode 100644 index cf0e927cc..000000000 --- a/dircolors/index.html +++ /dev/null @@ -1,4 +0,0 @@ -dircolors - Rust -

Crate dircolors[][src]

Functions

-
- \ No newline at end of file diff --git a/dircolors/sidebar-items.js b/dircolors/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/dircolors/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/dirname/all.html b/dirname/all.html deleted file mode 100644 index a93ed9e5a..000000000 --- a/dirname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/dirname/fn.main.html b/dirname/fn.main.html deleted file mode 100644 index 8bbd0c8bd..000000000 --- a/dirname/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in dirname - Rust -

Function dirname::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/dirname/index.html b/dirname/index.html deleted file mode 100644 index 6d6730907..000000000 --- a/dirname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -dirname - Rust -

Crate dirname[][src]

Functions

-
- \ No newline at end of file diff --git a/dirname/sidebar-items.js b/dirname/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/dirname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/down-arrow.svg b/down-arrow.svg deleted file mode 100644 index 35437e77a..000000000 --- a/down-arrow.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/du/all.html b/du/all.html deleted file mode 100644 index cc6738ed1..000000000 --- a/du/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/du/fn.main.html b/du/fn.main.html deleted file mode 100644 index 79a17d192..000000000 --- a/du/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in du - Rust -

Function du::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/du/index.html b/du/index.html deleted file mode 100644 index 5cbaca3e1..000000000 --- a/du/index.html +++ /dev/null @@ -1,4 +0,0 @@ -du - Rust -

Crate du[][src]

Functions

-
- \ No newline at end of file diff --git a/du/sidebar-items.js b/du/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/du/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/echo/all.html b/echo/all.html deleted file mode 100644 index 7974df407..000000000 --- a/echo/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/echo/fn.main.html b/echo/fn.main.html deleted file mode 100644 index d365f2134..000000000 --- a/echo/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in echo - Rust -

Function echo::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/echo/index.html b/echo/index.html deleted file mode 100644 index bf08ba316..000000000 --- a/echo/index.html +++ /dev/null @@ -1,4 +0,0 @@ -echo - Rust -

Crate echo[][src]

Functions

-
- \ No newline at end of file diff --git a/echo/sidebar-items.js b/echo/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/echo/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/env/all.html b/env/all.html deleted file mode 100644 index 2f9e620a7..000000000 --- a/env/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/env/fn.main.html b/env/fn.main.html deleted file mode 100644 index 25b34ccb7..000000000 --- a/env/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in env - Rust -

Function env::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/env/index.html b/env/index.html deleted file mode 100644 index e9f00a3c1..000000000 --- a/env/index.html +++ /dev/null @@ -1,4 +0,0 @@ -env - Rust -

Crate env[][src]

Functions

-
- \ No newline at end of file diff --git a/env/sidebar-items.js b/env/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/env/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/expand/all.html b/expand/all.html deleted file mode 100644 index 1b164da53..000000000 --- a/expand/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/expand/fn.main.html b/expand/fn.main.html deleted file mode 100644 index 6fbc0e153..000000000 --- a/expand/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in expand - Rust -

Function expand::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/expand/index.html b/expand/index.html deleted file mode 100644 index 4106262ce..000000000 --- a/expand/index.html +++ /dev/null @@ -1,4 +0,0 @@ -expand - Rust -

Crate expand[][src]

Functions

-
- \ No newline at end of file diff --git a/expand/sidebar-items.js b/expand/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/expand/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/expr/all.html b/expr/all.html deleted file mode 100644 index d605edb03..000000000 --- a/expr/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/expr/fn.main.html b/expr/fn.main.html deleted file mode 100644 index b9151eb4c..000000000 --- a/expr/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in expr - Rust -

Function expr::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/expr/index.html b/expr/index.html deleted file mode 100644 index 24528a833..000000000 --- a/expr/index.html +++ /dev/null @@ -1,4 +0,0 @@ -expr - Rust -

Crate expr[][src]

Functions

-
- \ No newline at end of file diff --git a/expr/sidebar-items.js b/expr/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/expr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/factor/all.html b/factor/all.html deleted file mode 100644 index fd694d6fc..000000000 --- a/factor/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/factor/fn.main.html b/factor/fn.main.html deleted file mode 100644 index 25806b2f2..000000000 --- a/factor/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in factor - Rust -

Function factor::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/factor/index.html b/factor/index.html deleted file mode 100644 index 679134b35..000000000 --- a/factor/index.html +++ /dev/null @@ -1,4 +0,0 @@ -factor - Rust -

Crate factor[][src]

Functions

-
- \ No newline at end of file diff --git a/factor/sidebar-items.js b/factor/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/factor/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/false/all.html b/false/all.html deleted file mode 100644 index dd2711a0f..000000000 --- a/false/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/false/fn.main.html b/false/fn.main.html deleted file mode 100644 index 5285eeaba..000000000 --- a/false/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in false - Rust -

Function false::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/false/index.html b/false/index.html deleted file mode 100644 index ec652768b..000000000 --- a/false/index.html +++ /dev/null @@ -1,4 +0,0 @@ -false - Rust -

Crate false[][src]

Functions

-
- \ No newline at end of file diff --git a/false/sidebar-items.js b/false/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/false/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/favicon-16x16.png b/favicon-16x16.png deleted file mode 100644 index 7cfe6c13550d31bc31355616bbb9cb77fd1b25ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2214 zcmeAS@N?(olHy`uVBq!ia0y~yU=RRd4mJh`2Kmqb6B!s-c4dY{ltlRYSS9D@>LsS+ zC#C9D0Vi&D~Tl`=|73as??%gf94%8m8%i_-NCEiEne z4UF`SjC6}q(sYX}^GXscbn}XpK}JB#a7isrF3Kz@$;{7F0GXMXlwVq6tE9xGpr8OX zJhdVdVR~LM)ceW#x%wa(eM3D1ePrb&nQ1tbgJdw27i8p@;mZj#ED1$=+6fRZ) znH8xy5iXgzsd>ej`FXZVhGuAzkvJrs^Kg_-&)}|u2z}MHxBeS?9zo-%{ z1WD$>sf7?8gqxEIQmvq%0FGs=#AHw)*(wzj<)@S;r>20t1(z+(Pb(=;EJ}4uPt7Z_ zRdP&A%goCxsZ?-DEzV5OOD$5+@J%dIFg8>Gc}5deZ+S*)9zI{{LtJH}56XKmN80FP zcmtvUDYJsg0I;SY7dJaD8+~wD0V+4_xDW+WYF>)1QjwCqUH-zVxeN@94Vli)0T>a( zz@Ra)bmDn!mq3x@_Qn}Ud_=gpyFCwc85(U2bd&PBB$2vdX60w^v(oFo&r^v`U9GY4 zWA?%L17VTcu1iu<6Mb_o6wfm^oqT5J+-ke;)$c9uR_pCZu5>kBRqdcVqsm0++xcV9 z|IACbxpL9ReqT#c#^K;#;gBu;)-h#!UT(?`wfnyQ>heo%OzWZ^D!N|weQ5ZwQ#5#U zW%Q27ld3_7mLHnCD<0BbXBswhQ#QUFT=cjlUiOw_)yBMkB z%{SREaQf1!s3f;9TY79(m;L|$?dpjytaD%8Gq_?Cc`e$yV%vl2%bV=@bzlGHSS9yx zQNXEqtA@t%i{{=@3G!0c9=_SMM78`u4Re&-mX>)xrmi}2cP7uCc@6q}zSjfH-+x)N zXMF^BnY@U@@op+|tR;OY?N^-g@vt zjYX%kH_1N*_tQi#*5wmB{eyd-2Ln=w%+S>Z^uU}RA|Cb!S{QXPA&KNy+waJMo zDN9uK<@$p)L}tvG@!-{~F1N)8KYlc{`Fko}tU#EjXkFN9Lko)&U%r@VYirBadOiB` zWy<8qlPCP*x+9Tm$oe2QKK}mU7cW+9-LvP+pFcMH-aoFC`~CZOOkAAZo%{Er4~Rdo xjlHnZCwK3+7`5i-8S&5eJAM-QFj4RIAO6UTq9GjLGE+g#3r|-+mvv4FO#uBWOY;B# diff --git a/favicon-32x32.png b/favicon-32x32.png deleted file mode 100644 index 5109c1de8bea744180448b347fb44ddef23b90f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2919 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANMUyD~!}N+NuHtdjF{^%7I^ zlT!66atjzhz{b9!ATc>RwL~E)H9a%WR_Xoj{Yna%DYi=CroINg16w1-Ypui3%0DIeEoa6}C!XbFK1lpi<;HsXMd|v6mX?*7iAWdWaj57fXqxx$}cUkRZ`+oP*8vx zo?4NKFg>pr>iy*WTz!y?zM-ChKC<$X%rqRzK{6Q13o`Oc@{2R_3*a6=u>vlQp|K(t zhn9-O0&I$XeX-jBQ=XfP;*H`G*Rm4)I*LOo3sUuiQj7CTi;`1a%Tn`7l))hZ3Ky$@ z%!<^U2$#&<)V$)%{5)GFV^k54lvGgORxdm3f`6-!cl`e@TskTZ+ z21W+D2Ijhk1|f##RwhPP2Bx|O=2iv}_kdNWmL#SmmLw8VZwE@THWj%AzP?r-nZ+gf zMU`M7NHPyjErjqO+?-61Y6S%aa4cITCW8XWR;i#UKczG|H3jS~xNLELT1k0gQL1Bl zYF>%0l4Dw0W?p7VrGiUpab|j6YLSA5Z(@;xv7rLUGn%M+%QI5*@cB|7;wl?`P~L+% z(ncS{8xRFZnH5w9fHeiVxY=>p=!44&P`P2pg(#3x^HOY;ij?f_W)@|bGcYhVWI8(s zU_=Z9gT}r=$CT}PxhXr;?)&{oU-(9JW|_W%F4t0%s&&V6;y;EGM;wP@>#Z4at1Z?fapef^tb zmE6Nc0jJ`v8XC(lntMkj$V**&_-4}*)$#{5%u#Y%TIT(jy6VW?nLK;uHR$vCUJo#T z|7FdN^B--GTzj&5T|zm()svdThxo%p)9+pMeY22(fq}EYBeIx*fm;}a85w5Hkzin8 zIqvD=7!uKXbh^KfNV&*y`^}{@PMvb=^6g;V?6k;9r)rfWADiYfjZEo@clRob|%d$JA_BD1X4e3LWX@kcTKLnIpf#U7p9BaG1f5^H7X{ES@0jpvC6Oi z&HaJ-?SbR}udZOc!mupYhEK!0Yw`)dzO{!V`k3F}?uye(%ScFYFweVFFME&oIW{477;YUuUbUtNZ2a*N2~f?kIlFCoC*1V_nws@@3|+CKyw{`cPA-X0nf@}z8$j7Gx5 zSu2i)X3RFr4a(17zq~QWz{qIP+1cjRqA$)}SrPpHb-vJAHU|ZP1Dn?Pgg-lA;#>CS zhGTNFa`m@22RG>)dT1ajDr!^v%S7|rrE?`ZU*G6Gs1{rQOf@((bn3EY%Tzq?-o5*7 z){k@Nb~Mkw`?6lT#a?x-Fz|@3a2++63M^2 zE3~wRj&m80Qa~G~&J$mQP9j@82EPG~8 z`K$V})Y-Y2jh%h&i9JRWcx5e%TsB6Wxmf)An(oyrSC*VAQR&@2F@uvaD?2-S!mXzk z8}ja2xhhTElD(_oq0_1uo{X;#e`zmWR<=_@PHx%0x`!DT?%zLu;6Ow4m5py>9E*#K zkMV5TzFk{}Pg{mBJ0rv6_qVs7&$wua6nzN^58wUsoT$k}2{o3C_xJWn$`+J6nn;Bf z78cHm2@ak-&%S=$#EF7WpFG*|bA1Dw$Cif7d|{n3(A1>$y1l+M0)-o}Qj#S3B$E$&;)`$;rts zi!WaBw`bbFv-By$VU$hQb1iXFP;FuKi z%iwC`#fyQlJBwUXQ&S@)`;R~7Vqw}<{e4|kRn?tirwe*h-mUy0+FAJWvWmV?=NbE& z9~XAi{k2L>O`S4jO2Vvpk|}9vZN<;eUA%eIGci%|?%lipZK}R#M7~(xDEENB{7N26 zV}C>31Ap_&@4p8}M|*pEavnW;^vL5vH+OeQ8JQ=ywq~C>bEe{Fm|xP3zp@hFzT9J$ z6rZf4@i^&|nuN-?-T!k - - - - diff --git a/fmt/all.html b/fmt/all.html deleted file mode 100644 index f06870875..000000000 --- a/fmt/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/fmt/fn.main.html b/fmt/fn.main.html deleted file mode 100644 index 5ab0a1a9b..000000000 --- a/fmt/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in fmt - Rust -

Function fmt::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/fmt/index.html b/fmt/index.html deleted file mode 100644 index 14198773e..000000000 --- a/fmt/index.html +++ /dev/null @@ -1,4 +0,0 @@ -fmt - Rust -

Crate fmt[][src]

Functions

-
- \ No newline at end of file diff --git a/fmt/sidebar-items.js b/fmt/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/fmt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/fold/all.html b/fold/all.html deleted file mode 100644 index 448163af0..000000000 --- a/fold/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/fold/fn.main.html b/fold/fn.main.html deleted file mode 100644 index 78dffa9c6..000000000 --- a/fold/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in fold - Rust -

Function fold::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/fold/index.html b/fold/index.html deleted file mode 100644 index 9a64714fc..000000000 --- a/fold/index.html +++ /dev/null @@ -1,4 +0,0 @@ -fold - Rust -

Crate fold[][src]

Functions

-
- \ No newline at end of file diff --git a/fold/sidebar-items.js b/fold/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/fold/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/groups/all.html b/groups/all.html deleted file mode 100644 index b7cd1a470..000000000 --- a/groups/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/groups/fn.main.html b/groups/fn.main.html deleted file mode 100644 index 3f60858ab..000000000 --- a/groups/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in groups - Rust -

Function groups::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/groups/index.html b/groups/index.html deleted file mode 100644 index c74ef5a23..000000000 --- a/groups/index.html +++ /dev/null @@ -1,4 +0,0 @@ -groups - Rust -

Crate groups[][src]

Functions

-
- \ No newline at end of file diff --git a/groups/sidebar-items.js b/groups/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/groups/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/hashsum/all.html b/hashsum/all.html deleted file mode 100644 index 2600cd277..000000000 --- a/hashsum/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/hashsum/fn.main.html b/hashsum/fn.main.html deleted file mode 100644 index 533eb749c..000000000 --- a/hashsum/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in hashsum - Rust -

Function hashsum::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/hashsum/index.html b/hashsum/index.html deleted file mode 100644 index 98ff1134e..000000000 --- a/hashsum/index.html +++ /dev/null @@ -1,4 +0,0 @@ -hashsum - Rust -

Crate hashsum[][src]

Functions

-
- \ No newline at end of file diff --git a/hashsum/sidebar-items.js b/hashsum/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/hashsum/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/head/all.html b/head/all.html deleted file mode 100644 index 8d1b060c1..000000000 --- a/head/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/head/fn.main.html b/head/fn.main.html deleted file mode 100644 index 08a0cdffa..000000000 --- a/head/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in head - Rust -

Function head::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/head/index.html b/head/index.html deleted file mode 100644 index 58c5a3ff1..000000000 --- a/head/index.html +++ /dev/null @@ -1,4 +0,0 @@ -head - Rust -

Crate head[][src]

Functions

-
- \ No newline at end of file diff --git a/head/sidebar-items.js b/head/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/head/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/hostid/all.html b/hostid/all.html deleted file mode 100644 index f983e6a35..000000000 --- a/hostid/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/hostid/fn.main.html b/hostid/fn.main.html deleted file mode 100644 index de48e5937..000000000 --- a/hostid/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in hostid - Rust -

Function hostid::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/hostid/index.html b/hostid/index.html deleted file mode 100644 index f614ed9a7..000000000 --- a/hostid/index.html +++ /dev/null @@ -1,4 +0,0 @@ -hostid - Rust -

Crate hostid[][src]

Functions

-
- \ No newline at end of file diff --git a/hostid/sidebar-items.js b/hostid/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/hostid/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/hostname/all.html b/hostname/all.html deleted file mode 100644 index 05cbfd507..000000000 --- a/hostname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/hostname/fn.main.html b/hostname/fn.main.html deleted file mode 100644 index 0eb348112..000000000 --- a/hostname/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in hostname - Rust -

Function hostname::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/hostname/index.html b/hostname/index.html deleted file mode 100644 index 599c479c9..000000000 --- a/hostname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -hostname - Rust -

Crate hostname[][src]

Functions

-
- \ No newline at end of file diff --git a/hostname/sidebar-items.js b/hostname/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/hostname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/id/all.html b/id/all.html deleted file mode 100644 index d9c0333a9..000000000 --- a/id/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/id/fn.main.html b/id/fn.main.html deleted file mode 100644 index 2fd1dd1bc..000000000 --- a/id/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in id - Rust -

Function id::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/id/index.html b/id/index.html deleted file mode 100644 index 366ab7176..000000000 --- a/id/index.html +++ /dev/null @@ -1,4 +0,0 @@ -id - Rust -

Crate id[][src]

Functions

-
- \ No newline at end of file diff --git a/id/sidebar-items.js b/id/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/id/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/implementors/core/clone/trait.Clone.js b/implementors/core/clone/trait.Clone.js deleted file mode 100644 index 5e094527a..000000000 --- a/implementors/core/clone/trait.Clone.js +++ /dev/null @@ -1,11 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Clone for ClobberMode","synthetic":false,"types":["uu_cp::ClobberMode"]},{"text":"impl Clone for OverwriteMode","synthetic":false,"types":["uu_cp::OverwriteMode"]},{"text":"impl Clone for ReflinkMode","synthetic":false,"types":["uu_cp::ReflinkMode"]},{"text":"impl Clone for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_factor"] = [{"text":"impl Clone for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_install"] = [{"text":"impl Clone for MainFunction","synthetic":false,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl Clone for Mode","synthetic":false,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl Clone for OverwriteMode","synthetic":false,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl Clone for OverwriteMode","synthetic":false,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_numfmt"] = [{"text":"impl Clone for RoundMethod","synthetic":false,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl Clone for GlobalSettings","synthetic":false,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> Clone for Line<'a>","synthetic":false,"types":["uu_sort::Line"]},{"text":"impl Clone for GeneralF64ParseResult","synthetic":false,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uucore"] = [{"text":"impl Clone for Format","synthetic":false,"types":["uucore::features::encoding::Format"]},{"text":"impl Clone for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Clone for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Clone for MountInfo","synthetic":false,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl Clone for FsUsage","synthetic":false,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl Clone for Passwd","synthetic":false,"types":["uucore::features::entries::Passwd"]},{"text":"impl Clone for Group","synthetic":false,"types":["uucore::features::entries::Group"]},{"text":"impl Clone for VerbosityLevel","synthetic":false,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl Clone for Verbosity","synthetic":false,"types":["uucore::features::perms::Verbosity"]},{"text":"impl Clone for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Clone for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.Eq.js b/implementors/core/cmp/trait.Eq.js deleted file mode 100644 index 7d540d1cc..000000000 --- a/implementors/core/cmp/trait.Eq.js +++ /dev/null @@ -1,8 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Eq for ClobberMode","synthetic":false,"types":["uu_cp::ClobberMode"]},{"text":"impl Eq for OverwriteMode","synthetic":false,"types":["uu_cp::OverwriteMode"]},{"text":"impl Eq for ReflinkMode","synthetic":false,"types":["uu_cp::ReflinkMode"]},{"text":"impl Eq for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_factor"] = [{"text":"impl Eq for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_install"] = [{"text":"impl Eq for MainFunction","synthetic":false,"types":["uu_install::MainFunction"]}]; -implementors["uu_ln"] = [{"text":"impl Eq for OverwriteMode","synthetic":false,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl Eq for OverwriteMode","synthetic":false,"types":["uu_mv::OverwriteMode"]}]; -implementors["uucore"] = [{"text":"impl Eq for FileInformation","synthetic":false,"types":["uucore::features::fs::FileInformation"]},{"text":"impl Eq for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Eq for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Eq for TraverseSymlinks","synthetic":false,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl Eq for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Eq for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl Eq for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Eq for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]},{"text":"impl Eq for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.Ord.js b/implementors/core/cmp/trait.Ord.js deleted file mode 100644 index b68532be1..000000000 --- a/implementors/core/cmp/trait.Ord.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Ord for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uucore"] = [{"text":"impl Ord for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.PartialEq.js b/implementors/core/cmp/trait.PartialEq.js deleted file mode 100644 index b2977bad7..000000000 --- a/implementors/core/cmp/trait.PartialEq.js +++ /dev/null @@ -1,11 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl PartialEq<ClobberMode> for ClobberMode","synthetic":false,"types":["uu_cp::ClobberMode"]},{"text":"impl PartialEq<OverwriteMode> for OverwriteMode","synthetic":false,"types":["uu_cp::OverwriteMode"]},{"text":"impl PartialEq<ReflinkMode> for ReflinkMode","synthetic":false,"types":["uu_cp::ReflinkMode"]},{"text":"impl PartialEq<Attribute> for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_dircolors"] = [{"text":"impl PartialEq<OutputFmt> for OutputFmt","synthetic":false,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl PartialEq<Factors> for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_install"] = [{"text":"impl PartialEq<MainFunction> for MainFunction","synthetic":false,"types":["uu_install::MainFunction"]}]; -implementors["uu_ln"] = [{"text":"impl PartialEq<OverwriteMode> for OverwriteMode","synthetic":false,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl PartialEq<OverwriteMode> for OverwriteMode","synthetic":false,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_sort"] = [{"text":"impl PartialEq<GeneralF64ParseResult> for GeneralF64ParseResult","synthetic":false,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl PartialEq<OutputType> for OutputType","synthetic":false,"types":["uu_stat::OutputType"]},{"text":"impl PartialEq<Token> for Token","synthetic":false,"types":["uu_stat::Token"]}]; -implementors["uucore"] = [{"text":"impl PartialEq<FileInformation> for FileInformation","synthetic":false,"types":["uucore::features::fs::FileInformation"]},{"text":"impl PartialEq<MissingHandling> for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl PartialEq<ResolveMode> for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl PartialEq<VerbosityLevel> for VerbosityLevel","synthetic":false,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl PartialEq<Verbosity> for Verbosity","synthetic":false,"types":["uucore::features::perms::Verbosity"]},{"text":"impl PartialEq<TraverseSymlinks> for TraverseSymlinks","synthetic":false,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl PartialEq<ExitStatus> for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl PartialEq<BackupMode> for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl PartialEq<BackupError> for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl PartialEq<Range> for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]},{"text":"impl PartialEq<ParseSizeError> for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/cmp/trait.PartialOrd.js b/implementors/core/cmp/trait.PartialOrd.js deleted file mode 100644 index 2d173d8f4..000000000 --- a/implementors/core/cmp/trait.PartialOrd.js +++ /dev/null @@ -1,5 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl PartialOrd<Attribute> for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_sort"] = [{"text":"impl PartialOrd<GeneralF64ParseResult> for GeneralF64ParseResult","synthetic":false,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uucore"] = [{"text":"impl PartialOrd<Range> for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/convert/trait.From.js b/implementors/core/convert/trait.From.js deleted file mode 100644 index 93fbc1f43..000000000 --- a/implementors/core/convert/trait.From.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl From<Error> for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl From<String> for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl From<&'static str> for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl From<Error> for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl From<StripPrefixError> for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl<'a> From<Context<&'a str, Error>> for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl<'a> From<Context<String, Error>> for Error","synthetic":false,"types":["uu_cp::Error"]}]; -implementors["uucore"] = [{"text":"impl From<DecodeError> for DecodeError","synthetic":false,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl From<DecodeError> for DecodeError","synthetic":false,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl From<Error> for DecodeError","synthetic":false,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl<T> From<T> for Box<dyn UError> where
    T: UError + 'static, 
","synthetic":false,"types":["alloc::boxed::Box"]},{"text":"impl From<Error> for UIoError","synthetic":false,"types":["uucore::mods::error::UIoError"]},{"text":"impl From<Error> for Box<dyn UError>","synthetic":false,"types":["alloc::boxed::Box"]},{"text":"impl From<i32> for Box<dyn UError>","synthetic":false,"types":["alloc::boxed::Box"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/default/trait.Default.js b/implementors/core/default/trait.Default.js deleted file mode 100644 index fb47df877..000000000 --- a/implementors/core/default/trait.Default.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_sort"] = [{"text":"impl Default for GlobalSettings","synthetic":false,"types":["uu_sort::GlobalSettings"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Debug.js b/implementors/core/fmt/trait.Debug.js deleted file mode 100644 index b1ee44e48..000000000 --- a/implementors/core/fmt/trait.Debug.js +++ /dev/null @@ -1,10 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Debug for Error","synthetic":false,"types":["uu_cp::Error"]},{"text":"impl Debug for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_dircolors"] = [{"text":"impl Debug for OutputFmt","synthetic":false,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl Debug for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_ln"] = [{"text":"impl Debug for OverwriteMode","synthetic":false,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_numfmt"] = [{"text":"impl Debug for NumfmtError","synthetic":false,"types":["uu_numfmt::errors::NumfmtError"]}]; -implementors["uu_sort"] = [{"text":"impl<'a> Debug for Line<'a>","synthetic":false,"types":["uu_sort::Line"]},{"text":"impl Debug for GeneralF64ParseResult","synthetic":false,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl Debug for OutputType","synthetic":false,"types":["uu_stat::OutputType"]},{"text":"impl Debug for Token","synthetic":false,"types":["uu_stat::Token"]}]; -implementors["uucore"] = [{"text":"impl Debug for DecodeError","synthetic":false,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Debug for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Debug for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Debug for MountInfo","synthetic":false,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl Debug for FsUsage","synthetic":false,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl Debug for Passwd","synthetic":false,"types":["uucore::features::entries::Passwd"]},{"text":"impl Debug for Group","synthetic":false,"types":["uucore::features::entries::Group"]},{"text":"impl Debug for VerbosityLevel","synthetic":false,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl Debug for Verbosity","synthetic":false,"types":["uucore::features::perms::Verbosity"]},{"text":"impl Debug for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Debug for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl Debug for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Debug for USimpleError","synthetic":false,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Debug for UUsageError","synthetic":false,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Debug for UIoError","synthetic":false,"types":["uucore::mods::error::UIoError"]},{"text":"impl Debug for ExitCode","synthetic":false,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Debug for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]},{"text":"impl Debug for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/fmt/trait.Display.js b/implementors/core/fmt/trait.Display.js deleted file mode 100644 index 25ffa03fd..000000000 --- a/implementors/core/fmt/trait.Display.js +++ /dev/null @@ -1,6 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Display for Error","synthetic":false,"types":["uu_cp::Error"]}]; -implementors["uu_factor"] = [{"text":"impl Display for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_numfmt"] = [{"text":"impl Display for NumfmtError","synthetic":false,"types":["uu_numfmt::errors::NumfmtError"]}]; -implementors["uucore"] = [{"text":"impl Display for DecodeError","synthetic":false,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Display for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Display for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Display for USimpleError","synthetic":false,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Display for UUsageError","synthetic":false,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Display for UIoError","synthetic":false,"types":["uucore::mods::error::UIoError"]},{"text":"impl Display for ExitCode","synthetic":false,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Display for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/hash/trait.Hash.js b/implementors/core/hash/trait.Hash.js deleted file mode 100644 index 4bf9a24ba..000000000 --- a/implementors/core/hash/trait.Hash.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = [{"text":"impl Hash for FileInformation","synthetic":false,"types":["uucore::features::fs::FileInformation"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/iter/traits/iterator/trait.Iterator.js b/implementors/core/iter/traits/iterator/trait.Iterator.js deleted file mode 100644 index 48a9a9259..000000000 --- a/implementors/core/iter/traits/iterator/trait.Iterator.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_numfmt"] = [{"text":"impl<'a> Iterator for WhitespaceSplitter<'a>","synthetic":false,"types":["uu_numfmt::format::WhitespaceSplitter"]}]; -implementors["uucore"] = [{"text":"impl Iterator for UtmpxIter","synthetic":false,"types":["uucore::features::utmpx::UtmpxIter"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Copy.js b/implementors/core/marker/trait.Copy.js deleted file mode 100644 index 682469c22..000000000 --- a/implementors/core/marker/trait.Copy.js +++ /dev/null @@ -1,7 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Copy for ReflinkMode","synthetic":false,"types":["uu_cp::ReflinkMode"]}]; -implementors["uu_kill"] = [{"text":"impl Copy for Mode","synthetic":false,"types":["uu_kill::Mode"]}]; -implementors["uu_numfmt"] = [{"text":"impl Copy for RoundMethod","synthetic":false,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl Copy for GeneralF64ParseResult","synthetic":false,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uucore"] = [{"text":"impl Copy for Format","synthetic":false,"types":["uucore::features::encoding::Format"]},{"text":"impl Copy for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Copy for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Copy for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Copy for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Freeze.js b/implementors/core/marker/trait.Freeze.js deleted file mode 100644 index d9de648d8..000000000 --- a/implementors/core/marker/trait.Freeze.js +++ /dev/null @@ -1,17 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_base32"] = [{"text":"impl Freeze for Config","synthetic":true,"types":["uu_base32::base_common::Config"]}]; -implementors["uu_cp"] = [{"text":"impl Freeze for Error","synthetic":true,"types":["uu_cp::Error"]},{"text":"impl Freeze for ClobberMode","synthetic":true,"types":["uu_cp::ClobberMode"]},{"text":"impl Freeze for OverwriteMode","synthetic":true,"types":["uu_cp::OverwriteMode"]},{"text":"impl Freeze for ReflinkMode","synthetic":true,"types":["uu_cp::ReflinkMode"]},{"text":"impl Freeze for TargetType","synthetic":true,"types":["uu_cp::TargetType"]},{"text":"impl Freeze for CopyMode","synthetic":true,"types":["uu_cp::CopyMode"]},{"text":"impl Freeze for Attribute","synthetic":true,"types":["uu_cp::Attribute"]},{"text":"impl Freeze for Options","synthetic":true,"types":["uu_cp::Options"]}]; -implementors["uu_csplit"] = [{"text":"impl Freeze for CsplitOptions","synthetic":true,"types":["uu_csplit::CsplitOptions"]}]; -implementors["uu_dircolors"] = [{"text":"impl Freeze for OutputFmt","synthetic":true,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl !Freeze for Factors","synthetic":true,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_fmt"] = [{"text":"impl Freeze for FmtOptions","synthetic":true,"types":["uu_fmt::FmtOptions"]}]; -implementors["uu_install"] = [{"text":"impl Freeze for Behavior","synthetic":true,"types":["uu_install::Behavior"]},{"text":"impl Freeze for MainFunction","synthetic":true,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl Freeze for Mode","synthetic":true,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl Freeze for Settings","synthetic":true,"types":["uu_ln::Settings"]},{"text":"impl Freeze for OverwriteMode","synthetic":true,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl Freeze for Behavior","synthetic":true,"types":["uu_mv::Behavior"]},{"text":"impl Freeze for OverwriteMode","synthetic":true,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_nl"] = [{"text":"impl Freeze for Settings","synthetic":true,"types":["uu_nl::Settings"]}]; -implementors["uu_numfmt"] = [{"text":"impl Freeze for NumfmtError","synthetic":true,"types":["uu_numfmt::errors::NumfmtError"]},{"text":"impl<'a> Freeze for WhitespaceSplitter<'a>","synthetic":true,"types":["uu_numfmt::format::WhitespaceSplitter"]},{"text":"impl Freeze for TransformOptions","synthetic":true,"types":["uu_numfmt::options::TransformOptions"]},{"text":"impl Freeze for NumfmtOptions","synthetic":true,"types":["uu_numfmt::options::NumfmtOptions"]},{"text":"impl Freeze for RoundMethod","synthetic":true,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl Freeze for Output","synthetic":true,"types":["uu_sort::Output"]},{"text":"impl Freeze for GlobalSettings","synthetic":true,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> Freeze for Line<'a>","synthetic":true,"types":["uu_sort::Line"]},{"text":"impl Freeze for GeneralF64ParseResult","synthetic":true,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl Freeze for OutputType","synthetic":true,"types":["uu_stat::OutputType"]},{"text":"impl Freeze for Token","synthetic":true,"types":["uu_stat::Token"]},{"text":"impl Freeze for Stater","synthetic":true,"types":["uu_stat::Stater"]}]; -implementors["uucore"] = [{"text":"impl Freeze for DecodeError","synthetic":true,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Freeze for EncodeError","synthetic":true,"types":["uucore::features::encoding::EncodeError"]},{"text":"impl Freeze for Format","synthetic":true,"types":["uucore::features::encoding::Format"]},{"text":"impl<R> Freeze for Data<R> where
    R: Freeze, 
","synthetic":true,"types":["uucore::features::encoding::Data"]},{"text":"impl Freeze for FileInformation","synthetic":true,"types":["uucore::features::fs::FileInformation"]},{"text":"impl Freeze for MissingHandling","synthetic":true,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Freeze for ResolveMode","synthetic":true,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Freeze for MountInfo","synthetic":true,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl Freeze for FsUsage","synthetic":true,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl Freeze for Memo","synthetic":true,"types":["uucore::features::memo::Memo"]},{"text":"impl<T> Freeze for RingBuffer<T>","synthetic":true,"types":["uucore::features::ringbuffer::RingBuffer"]},{"text":"impl Freeze for Passwd","synthetic":true,"types":["uucore::features::entries::Passwd"]},{"text":"impl Freeze for Group","synthetic":true,"types":["uucore::features::entries::Group"]},{"text":"impl Freeze for VerbosityLevel","synthetic":true,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl Freeze for Verbosity","synthetic":true,"types":["uucore::features::perms::Verbosity"]},{"text":"impl Freeze for IfFrom","synthetic":true,"types":["uucore::features::perms::IfFrom"]},{"text":"impl Freeze for TraverseSymlinks","synthetic":true,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl Freeze for ChownExecutor","synthetic":true,"types":["uucore::features::perms::ChownExecutor"]},{"text":"impl Freeze for ExitStatus","synthetic":true,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Freeze for Utmpx","synthetic":true,"types":["uucore::features::utmpx::Utmpx"]},{"text":"impl Freeze for UtmpxIter","synthetic":true,"types":["uucore::features::utmpx::UtmpxIter"]},{"text":"impl Freeze for BackupMode","synthetic":true,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl Freeze for BackupError","synthetic":true,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Freeze for USimpleError","synthetic":true,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Freeze for UUsageError","synthetic":true,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Freeze for UIoError","synthetic":true,"types":["uucore::mods::error::UIoError"]},{"text":"impl Freeze for ExitCode","synthetic":true,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Freeze for Range","synthetic":true,"types":["uucore::mods::ranges::Range"]},{"text":"impl Freeze for ParseSizeError","synthetic":true,"types":["uucore::parser::parse_size::ParseSizeError"]},{"text":"impl Freeze for InvalidEncodingHandling","synthetic":true,"types":["uucore::InvalidEncodingHandling"]},{"text":"impl Freeze for ConversionResult","synthetic":true,"types":["uucore::ConversionResult"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Send.js b/implementors/core/marker/trait.Send.js deleted file mode 100644 index 4f58ad891..000000000 --- a/implementors/core/marker/trait.Send.js +++ /dev/null @@ -1,17 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_base32"] = [{"text":"impl Send for Config","synthetic":true,"types":["uu_base32::base_common::Config"]}]; -implementors["uu_cp"] = [{"text":"impl Send for Error","synthetic":true,"types":["uu_cp::Error"]},{"text":"impl Send for ClobberMode","synthetic":true,"types":["uu_cp::ClobberMode"]},{"text":"impl Send for OverwriteMode","synthetic":true,"types":["uu_cp::OverwriteMode"]},{"text":"impl Send for ReflinkMode","synthetic":true,"types":["uu_cp::ReflinkMode"]},{"text":"impl Send for TargetType","synthetic":true,"types":["uu_cp::TargetType"]},{"text":"impl Send for CopyMode","synthetic":true,"types":["uu_cp::CopyMode"]},{"text":"impl Send for Attribute","synthetic":true,"types":["uu_cp::Attribute"]},{"text":"impl Send for Options","synthetic":true,"types":["uu_cp::Options"]}]; -implementors["uu_csplit"] = [{"text":"impl !Send for CsplitOptions","synthetic":true,"types":["uu_csplit::CsplitOptions"]}]; -implementors["uu_dircolors"] = [{"text":"impl Send for OutputFmt","synthetic":true,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl Send for Factors","synthetic":true,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_fmt"] = [{"text":"impl Send for FmtOptions","synthetic":true,"types":["uu_fmt::FmtOptions"]}]; -implementors["uu_install"] = [{"text":"impl Send for Behavior","synthetic":true,"types":["uu_install::Behavior"]},{"text":"impl Send for MainFunction","synthetic":true,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl Send for Mode","synthetic":true,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl Send for Settings","synthetic":true,"types":["uu_ln::Settings"]},{"text":"impl Send for OverwriteMode","synthetic":true,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl Send for Behavior","synthetic":true,"types":["uu_mv::Behavior"]},{"text":"impl Send for OverwriteMode","synthetic":true,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_nl"] = [{"text":"impl Send for Settings","synthetic":true,"types":["uu_nl::Settings"]}]; -implementors["uu_numfmt"] = [{"text":"impl Send for NumfmtError","synthetic":true,"types":["uu_numfmt::errors::NumfmtError"]},{"text":"impl<'a> Send for WhitespaceSplitter<'a>","synthetic":true,"types":["uu_numfmt::format::WhitespaceSplitter"]},{"text":"impl Send for TransformOptions","synthetic":true,"types":["uu_numfmt::options::TransformOptions"]},{"text":"impl Send for NumfmtOptions","synthetic":true,"types":["uu_numfmt::options::NumfmtOptions"]},{"text":"impl Send for RoundMethod","synthetic":true,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl Send for Output","synthetic":true,"types":["uu_sort::Output"]},{"text":"impl Send for GlobalSettings","synthetic":true,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> Send for Line<'a>","synthetic":true,"types":["uu_sort::Line"]},{"text":"impl Send for GeneralF64ParseResult","synthetic":true,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl Send for OutputType","synthetic":true,"types":["uu_stat::OutputType"]},{"text":"impl Send for Token","synthetic":true,"types":["uu_stat::Token"]},{"text":"impl Send for Stater","synthetic":true,"types":["uu_stat::Stater"]}]; -implementors["uucore"] = [{"text":"impl Send for DecodeError","synthetic":true,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Send for EncodeError","synthetic":true,"types":["uucore::features::encoding::EncodeError"]},{"text":"impl Send for Format","synthetic":true,"types":["uucore::features::encoding::Format"]},{"text":"impl<R> Send for Data<R> where
    R: Send
","synthetic":true,"types":["uucore::features::encoding::Data"]},{"text":"impl Send for FileInformation","synthetic":true,"types":["uucore::features::fs::FileInformation"]},{"text":"impl Send for MissingHandling","synthetic":true,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Send for ResolveMode","synthetic":true,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Send for MountInfo","synthetic":true,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl Send for FsUsage","synthetic":true,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl !Send for Memo","synthetic":true,"types":["uucore::features::memo::Memo"]},{"text":"impl<T> Send for RingBuffer<T> where
    T: Send
","synthetic":true,"types":["uucore::features::ringbuffer::RingBuffer"]},{"text":"impl Send for Passwd","synthetic":true,"types":["uucore::features::entries::Passwd"]},{"text":"impl Send for Group","synthetic":true,"types":["uucore::features::entries::Group"]},{"text":"impl Send for VerbosityLevel","synthetic":true,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl Send for Verbosity","synthetic":true,"types":["uucore::features::perms::Verbosity"]},{"text":"impl Send for IfFrom","synthetic":true,"types":["uucore::features::perms::IfFrom"]},{"text":"impl Send for TraverseSymlinks","synthetic":true,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl Send for ChownExecutor","synthetic":true,"types":["uucore::features::perms::ChownExecutor"]},{"text":"impl Send for ExitStatus","synthetic":true,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Send for Utmpx","synthetic":true,"types":["uucore::features::utmpx::Utmpx"]},{"text":"impl !Send for UtmpxIter","synthetic":true,"types":["uucore::features::utmpx::UtmpxIter"]},{"text":"impl Send for BackupMode","synthetic":true,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl Send for BackupError","synthetic":true,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Send for USimpleError","synthetic":true,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Send for UUsageError","synthetic":true,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Send for UIoError","synthetic":true,"types":["uucore::mods::error::UIoError"]},{"text":"impl Send for ExitCode","synthetic":true,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Send for Range","synthetic":true,"types":["uucore::mods::ranges::Range"]},{"text":"impl Send for ParseSizeError","synthetic":true,"types":["uucore::parser::parse_size::ParseSizeError"]},{"text":"impl Send for InvalidEncodingHandling","synthetic":true,"types":["uucore::InvalidEncodingHandling"]},{"text":"impl Send for ConversionResult","synthetic":true,"types":["uucore::ConversionResult"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralEq.js b/implementors/core/marker/trait.StructuralEq.js deleted file mode 100644 index 8ff9631a4..000000000 --- a/implementors/core/marker/trait.StructuralEq.js +++ /dev/null @@ -1,8 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl StructuralEq for ClobberMode","synthetic":false,"types":["uu_cp::ClobberMode"]},{"text":"impl StructuralEq for OverwriteMode","synthetic":false,"types":["uu_cp::OverwriteMode"]},{"text":"impl StructuralEq for ReflinkMode","synthetic":false,"types":["uu_cp::ReflinkMode"]},{"text":"impl StructuralEq for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_factor"] = [{"text":"impl StructuralEq for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_install"] = [{"text":"impl StructuralEq for MainFunction","synthetic":false,"types":["uu_install::MainFunction"]}]; -implementors["uu_ln"] = [{"text":"impl StructuralEq for OverwriteMode","synthetic":false,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl StructuralEq for OverwriteMode","synthetic":false,"types":["uu_mv::OverwriteMode"]}]; -implementors["uucore"] = [{"text":"impl StructuralEq for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl StructuralEq for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl StructuralEq for TraverseSymlinks","synthetic":false,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl StructuralEq for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl StructuralEq for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl StructuralEq for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl StructuralEq for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]},{"text":"impl StructuralEq for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.StructuralPartialEq.js b/implementors/core/marker/trait.StructuralPartialEq.js deleted file mode 100644 index 4fa0cf0b2..000000000 --- a/implementors/core/marker/trait.StructuralPartialEq.js +++ /dev/null @@ -1,11 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl StructuralPartialEq for ClobberMode","synthetic":false,"types":["uu_cp::ClobberMode"]},{"text":"impl StructuralPartialEq for OverwriteMode","synthetic":false,"types":["uu_cp::OverwriteMode"]},{"text":"impl StructuralPartialEq for ReflinkMode","synthetic":false,"types":["uu_cp::ReflinkMode"]},{"text":"impl StructuralPartialEq for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uu_dircolors"] = [{"text":"impl StructuralPartialEq for OutputFmt","synthetic":false,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl StructuralPartialEq for Factors","synthetic":false,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_install"] = [{"text":"impl StructuralPartialEq for MainFunction","synthetic":false,"types":["uu_install::MainFunction"]}]; -implementors["uu_ln"] = [{"text":"impl StructuralPartialEq for OverwriteMode","synthetic":false,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl StructuralPartialEq for OverwriteMode","synthetic":false,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_sort"] = [{"text":"impl StructuralPartialEq for GeneralF64ParseResult","synthetic":false,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl StructuralPartialEq for OutputType","synthetic":false,"types":["uu_stat::OutputType"]},{"text":"impl StructuralPartialEq for Token","synthetic":false,"types":["uu_stat::Token"]}]; -implementors["uucore"] = [{"text":"impl StructuralPartialEq for MissingHandling","synthetic":false,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl StructuralPartialEq for ResolveMode","synthetic":false,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl StructuralPartialEq for VerbosityLevel","synthetic":false,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl StructuralPartialEq for Verbosity","synthetic":false,"types":["uucore::features::perms::Verbosity"]},{"text":"impl StructuralPartialEq for TraverseSymlinks","synthetic":false,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl StructuralPartialEq for ExitStatus","synthetic":false,"types":["uucore::features::process::ExitStatus"]},{"text":"impl StructuralPartialEq for BackupMode","synthetic":false,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl StructuralPartialEq for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl StructuralPartialEq for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]},{"text":"impl StructuralPartialEq for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Sync.js b/implementors/core/marker/trait.Sync.js deleted file mode 100644 index eadd230c5..000000000 --- a/implementors/core/marker/trait.Sync.js +++ /dev/null @@ -1,17 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_base32"] = [{"text":"impl Sync for Config","synthetic":true,"types":["uu_base32::base_common::Config"]}]; -implementors["uu_cp"] = [{"text":"impl Sync for Error","synthetic":true,"types":["uu_cp::Error"]},{"text":"impl Sync for ClobberMode","synthetic":true,"types":["uu_cp::ClobberMode"]},{"text":"impl Sync for OverwriteMode","synthetic":true,"types":["uu_cp::OverwriteMode"]},{"text":"impl Sync for ReflinkMode","synthetic":true,"types":["uu_cp::ReflinkMode"]},{"text":"impl Sync for TargetType","synthetic":true,"types":["uu_cp::TargetType"]},{"text":"impl Sync for CopyMode","synthetic":true,"types":["uu_cp::CopyMode"]},{"text":"impl Sync for Attribute","synthetic":true,"types":["uu_cp::Attribute"]},{"text":"impl Sync for Options","synthetic":true,"types":["uu_cp::Options"]}]; -implementors["uu_csplit"] = [{"text":"impl !Sync for CsplitOptions","synthetic":true,"types":["uu_csplit::CsplitOptions"]}]; -implementors["uu_dircolors"] = [{"text":"impl Sync for OutputFmt","synthetic":true,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl !Sync for Factors","synthetic":true,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_fmt"] = [{"text":"impl Sync for FmtOptions","synthetic":true,"types":["uu_fmt::FmtOptions"]}]; -implementors["uu_install"] = [{"text":"impl Sync for Behavior","synthetic":true,"types":["uu_install::Behavior"]},{"text":"impl Sync for MainFunction","synthetic":true,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl Sync for Mode","synthetic":true,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl Sync for Settings","synthetic":true,"types":["uu_ln::Settings"]},{"text":"impl Sync for OverwriteMode","synthetic":true,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl Sync for Behavior","synthetic":true,"types":["uu_mv::Behavior"]},{"text":"impl Sync for OverwriteMode","synthetic":true,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_nl"] = [{"text":"impl Sync for Settings","synthetic":true,"types":["uu_nl::Settings"]}]; -implementors["uu_numfmt"] = [{"text":"impl Sync for NumfmtError","synthetic":true,"types":["uu_numfmt::errors::NumfmtError"]},{"text":"impl<'a> Sync for WhitespaceSplitter<'a>","synthetic":true,"types":["uu_numfmt::format::WhitespaceSplitter"]},{"text":"impl Sync for TransformOptions","synthetic":true,"types":["uu_numfmt::options::TransformOptions"]},{"text":"impl Sync for NumfmtOptions","synthetic":true,"types":["uu_numfmt::options::NumfmtOptions"]},{"text":"impl Sync for RoundMethod","synthetic":true,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl Sync for Output","synthetic":true,"types":["uu_sort::Output"]},{"text":"impl Sync for GlobalSettings","synthetic":true,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> Sync for Line<'a>","synthetic":true,"types":["uu_sort::Line"]},{"text":"impl Sync for GeneralF64ParseResult","synthetic":true,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl Sync for OutputType","synthetic":true,"types":["uu_stat::OutputType"]},{"text":"impl Sync for Token","synthetic":true,"types":["uu_stat::Token"]},{"text":"impl Sync for Stater","synthetic":true,"types":["uu_stat::Stater"]}]; -implementors["uucore"] = [{"text":"impl Sync for DecodeError","synthetic":true,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Sync for EncodeError","synthetic":true,"types":["uucore::features::encoding::EncodeError"]},{"text":"impl Sync for Format","synthetic":true,"types":["uucore::features::encoding::Format"]},{"text":"impl<R> Sync for Data<R> where
    R: Sync
","synthetic":true,"types":["uucore::features::encoding::Data"]},{"text":"impl Sync for FileInformation","synthetic":true,"types":["uucore::features::fs::FileInformation"]},{"text":"impl Sync for MissingHandling","synthetic":true,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Sync for ResolveMode","synthetic":true,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Sync for MountInfo","synthetic":true,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl Sync for FsUsage","synthetic":true,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl !Sync for Memo","synthetic":true,"types":["uucore::features::memo::Memo"]},{"text":"impl<T> Sync for RingBuffer<T> where
    T: Sync
","synthetic":true,"types":["uucore::features::ringbuffer::RingBuffer"]},{"text":"impl Sync for Passwd","synthetic":true,"types":["uucore::features::entries::Passwd"]},{"text":"impl Sync for Group","synthetic":true,"types":["uucore::features::entries::Group"]},{"text":"impl Sync for VerbosityLevel","synthetic":true,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl Sync for Verbosity","synthetic":true,"types":["uucore::features::perms::Verbosity"]},{"text":"impl Sync for IfFrom","synthetic":true,"types":["uucore::features::perms::IfFrom"]},{"text":"impl Sync for TraverseSymlinks","synthetic":true,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl Sync for ChownExecutor","synthetic":true,"types":["uucore::features::perms::ChownExecutor"]},{"text":"impl Sync for ExitStatus","synthetic":true,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Sync for Utmpx","synthetic":true,"types":["uucore::features::utmpx::Utmpx"]},{"text":"impl !Sync for UtmpxIter","synthetic":true,"types":["uucore::features::utmpx::UtmpxIter"]},{"text":"impl Sync for BackupMode","synthetic":true,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl Sync for BackupError","synthetic":true,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Sync for USimpleError","synthetic":true,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Sync for UUsageError","synthetic":true,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Sync for UIoError","synthetic":true,"types":["uucore::mods::error::UIoError"]},{"text":"impl Sync for ExitCode","synthetic":true,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Sync for Range","synthetic":true,"types":["uucore::mods::ranges::Range"]},{"text":"impl Sync for ParseSizeError","synthetic":true,"types":["uucore::parser::parse_size::ParseSizeError"]},{"text":"impl Sync for InvalidEncodingHandling","synthetic":true,"types":["uucore::InvalidEncodingHandling"]},{"text":"impl Sync for ConversionResult","synthetic":true,"types":["uucore::ConversionResult"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/marker/trait.Unpin.js b/implementors/core/marker/trait.Unpin.js deleted file mode 100644 index 2345c4aaa..000000000 --- a/implementors/core/marker/trait.Unpin.js +++ /dev/null @@ -1,17 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_base32"] = [{"text":"impl Unpin for Config","synthetic":true,"types":["uu_base32::base_common::Config"]}]; -implementors["uu_cp"] = [{"text":"impl Unpin for Error","synthetic":true,"types":["uu_cp::Error"]},{"text":"impl Unpin for ClobberMode","synthetic":true,"types":["uu_cp::ClobberMode"]},{"text":"impl Unpin for OverwriteMode","synthetic":true,"types":["uu_cp::OverwriteMode"]},{"text":"impl Unpin for ReflinkMode","synthetic":true,"types":["uu_cp::ReflinkMode"]},{"text":"impl Unpin for TargetType","synthetic":true,"types":["uu_cp::TargetType"]},{"text":"impl Unpin for CopyMode","synthetic":true,"types":["uu_cp::CopyMode"]},{"text":"impl Unpin for Attribute","synthetic":true,"types":["uu_cp::Attribute"]},{"text":"impl Unpin for Options","synthetic":true,"types":["uu_cp::Options"]}]; -implementors["uu_csplit"] = [{"text":"impl Unpin for CsplitOptions","synthetic":true,"types":["uu_csplit::CsplitOptions"]}]; -implementors["uu_dircolors"] = [{"text":"impl Unpin for OutputFmt","synthetic":true,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl Unpin for Factors","synthetic":true,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_fmt"] = [{"text":"impl Unpin for FmtOptions","synthetic":true,"types":["uu_fmt::FmtOptions"]}]; -implementors["uu_install"] = [{"text":"impl Unpin for Behavior","synthetic":true,"types":["uu_install::Behavior"]},{"text":"impl Unpin for MainFunction","synthetic":true,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl Unpin for Mode","synthetic":true,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl Unpin for Settings","synthetic":true,"types":["uu_ln::Settings"]},{"text":"impl Unpin for OverwriteMode","synthetic":true,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl Unpin for Behavior","synthetic":true,"types":["uu_mv::Behavior"]},{"text":"impl Unpin for OverwriteMode","synthetic":true,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_nl"] = [{"text":"impl Unpin for Settings","synthetic":true,"types":["uu_nl::Settings"]}]; -implementors["uu_numfmt"] = [{"text":"impl Unpin for NumfmtError","synthetic":true,"types":["uu_numfmt::errors::NumfmtError"]},{"text":"impl<'a> Unpin for WhitespaceSplitter<'a>","synthetic":true,"types":["uu_numfmt::format::WhitespaceSplitter"]},{"text":"impl Unpin for TransformOptions","synthetic":true,"types":["uu_numfmt::options::TransformOptions"]},{"text":"impl Unpin for NumfmtOptions","synthetic":true,"types":["uu_numfmt::options::NumfmtOptions"]},{"text":"impl Unpin for RoundMethod","synthetic":true,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl Unpin for Output","synthetic":true,"types":["uu_sort::Output"]},{"text":"impl Unpin for GlobalSettings","synthetic":true,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> Unpin for Line<'a>","synthetic":true,"types":["uu_sort::Line"]},{"text":"impl Unpin for GeneralF64ParseResult","synthetic":true,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl Unpin for OutputType","synthetic":true,"types":["uu_stat::OutputType"]},{"text":"impl Unpin for Token","synthetic":true,"types":["uu_stat::Token"]},{"text":"impl Unpin for Stater","synthetic":true,"types":["uu_stat::Stater"]}]; -implementors["uucore"] = [{"text":"impl Unpin for DecodeError","synthetic":true,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Unpin for EncodeError","synthetic":true,"types":["uucore::features::encoding::EncodeError"]},{"text":"impl Unpin for Format","synthetic":true,"types":["uucore::features::encoding::Format"]},{"text":"impl<R> Unpin for Data<R> where
    R: Unpin
","synthetic":true,"types":["uucore::features::encoding::Data"]},{"text":"impl Unpin for FileInformation","synthetic":true,"types":["uucore::features::fs::FileInformation"]},{"text":"impl Unpin for MissingHandling","synthetic":true,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl Unpin for ResolveMode","synthetic":true,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl Unpin for MountInfo","synthetic":true,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl Unpin for FsUsage","synthetic":true,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl Unpin for Memo","synthetic":true,"types":["uucore::features::memo::Memo"]},{"text":"impl<T> Unpin for RingBuffer<T> where
    T: Unpin
","synthetic":true,"types":["uucore::features::ringbuffer::RingBuffer"]},{"text":"impl Unpin for Passwd","synthetic":true,"types":["uucore::features::entries::Passwd"]},{"text":"impl Unpin for Group","synthetic":true,"types":["uucore::features::entries::Group"]},{"text":"impl Unpin for VerbosityLevel","synthetic":true,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl Unpin for Verbosity","synthetic":true,"types":["uucore::features::perms::Verbosity"]},{"text":"impl Unpin for IfFrom","synthetic":true,"types":["uucore::features::perms::IfFrom"]},{"text":"impl Unpin for TraverseSymlinks","synthetic":true,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl Unpin for ChownExecutor","synthetic":true,"types":["uucore::features::perms::ChownExecutor"]},{"text":"impl Unpin for ExitStatus","synthetic":true,"types":["uucore::features::process::ExitStatus"]},{"text":"impl Unpin for Utmpx","synthetic":true,"types":["uucore::features::utmpx::Utmpx"]},{"text":"impl Unpin for UtmpxIter","synthetic":true,"types":["uucore::features::utmpx::UtmpxIter"]},{"text":"impl Unpin for BackupMode","synthetic":true,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl Unpin for BackupError","synthetic":true,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Unpin for USimpleError","synthetic":true,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Unpin for UUsageError","synthetic":true,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Unpin for UIoError","synthetic":true,"types":["uucore::mods::error::UIoError"]},{"text":"impl Unpin for ExitCode","synthetic":true,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Unpin for Range","synthetic":true,"types":["uucore::mods::ranges::Range"]},{"text":"impl Unpin for ParseSizeError","synthetic":true,"types":["uucore::parser::parse_size::ParseSizeError"]},{"text":"impl Unpin for InvalidEncodingHandling","synthetic":true,"types":["uucore::InvalidEncodingHandling"]},{"text":"impl Unpin for ConversionResult","synthetic":true,"types":["uucore::ConversionResult"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/ops/drop/trait.Drop.js b/implementors/core/ops/drop/trait.Drop.js deleted file mode 100644 index d73e86059..000000000 --- a/implementors/core/ops/drop/trait.Drop.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = [{"text":"impl Drop for UtmpxIter","synthetic":false,"types":["uucore::features::utmpx::UtmpxIter"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js b/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js deleted file mode 100644 index f00b2404f..000000000 --- a/implementors/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ /dev/null @@ -1,17 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_base32"] = [{"text":"impl RefUnwindSafe for Config","synthetic":true,"types":["uu_base32::base_common::Config"]}]; -implementors["uu_cp"] = [{"text":"impl !RefUnwindSafe for Error","synthetic":true,"types":["uu_cp::Error"]},{"text":"impl RefUnwindSafe for ClobberMode","synthetic":true,"types":["uu_cp::ClobberMode"]},{"text":"impl RefUnwindSafe for OverwriteMode","synthetic":true,"types":["uu_cp::OverwriteMode"]},{"text":"impl RefUnwindSafe for ReflinkMode","synthetic":true,"types":["uu_cp::ReflinkMode"]},{"text":"impl RefUnwindSafe for TargetType","synthetic":true,"types":["uu_cp::TargetType"]},{"text":"impl RefUnwindSafe for CopyMode","synthetic":true,"types":["uu_cp::CopyMode"]},{"text":"impl RefUnwindSafe for Attribute","synthetic":true,"types":["uu_cp::Attribute"]},{"text":"impl RefUnwindSafe for Options","synthetic":true,"types":["uu_cp::Options"]}]; -implementors["uu_csplit"] = [{"text":"impl !RefUnwindSafe for CsplitOptions","synthetic":true,"types":["uu_csplit::CsplitOptions"]}]; -implementors["uu_dircolors"] = [{"text":"impl RefUnwindSafe for OutputFmt","synthetic":true,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl !RefUnwindSafe for Factors","synthetic":true,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_fmt"] = [{"text":"impl RefUnwindSafe for FmtOptions","synthetic":true,"types":["uu_fmt::FmtOptions"]}]; -implementors["uu_install"] = [{"text":"impl RefUnwindSafe for Behavior","synthetic":true,"types":["uu_install::Behavior"]},{"text":"impl RefUnwindSafe for MainFunction","synthetic":true,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl RefUnwindSafe for Mode","synthetic":true,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["uu_ln::Settings"]},{"text":"impl RefUnwindSafe for OverwriteMode","synthetic":true,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl RefUnwindSafe for Behavior","synthetic":true,"types":["uu_mv::Behavior"]},{"text":"impl RefUnwindSafe for OverwriteMode","synthetic":true,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_nl"] = [{"text":"impl RefUnwindSafe for Settings","synthetic":true,"types":["uu_nl::Settings"]}]; -implementors["uu_numfmt"] = [{"text":"impl RefUnwindSafe for NumfmtError","synthetic":true,"types":["uu_numfmt::errors::NumfmtError"]},{"text":"impl<'a> RefUnwindSafe for WhitespaceSplitter<'a>","synthetic":true,"types":["uu_numfmt::format::WhitespaceSplitter"]},{"text":"impl RefUnwindSafe for TransformOptions","synthetic":true,"types":["uu_numfmt::options::TransformOptions"]},{"text":"impl RefUnwindSafe for NumfmtOptions","synthetic":true,"types":["uu_numfmt::options::NumfmtOptions"]},{"text":"impl RefUnwindSafe for RoundMethod","synthetic":true,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl RefUnwindSafe for Output","synthetic":true,"types":["uu_sort::Output"]},{"text":"impl RefUnwindSafe for GlobalSettings","synthetic":true,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> RefUnwindSafe for Line<'a>","synthetic":true,"types":["uu_sort::Line"]},{"text":"impl RefUnwindSafe for GeneralF64ParseResult","synthetic":true,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl RefUnwindSafe for OutputType","synthetic":true,"types":["uu_stat::OutputType"]},{"text":"impl RefUnwindSafe for Token","synthetic":true,"types":["uu_stat::Token"]},{"text":"impl RefUnwindSafe for Stater","synthetic":true,"types":["uu_stat::Stater"]}]; -implementors["uucore"] = [{"text":"impl !RefUnwindSafe for DecodeError","synthetic":true,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl RefUnwindSafe for EncodeError","synthetic":true,"types":["uucore::features::encoding::EncodeError"]},{"text":"impl RefUnwindSafe for Format","synthetic":true,"types":["uucore::features::encoding::Format"]},{"text":"impl<R> RefUnwindSafe for Data<R> where
    R: RefUnwindSafe
","synthetic":true,"types":["uucore::features::encoding::Data"]},{"text":"impl RefUnwindSafe for FileInformation","synthetic":true,"types":["uucore::features::fs::FileInformation"]},{"text":"impl RefUnwindSafe for MissingHandling","synthetic":true,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl RefUnwindSafe for ResolveMode","synthetic":true,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl RefUnwindSafe for MountInfo","synthetic":true,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl RefUnwindSafe for FsUsage","synthetic":true,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl !RefUnwindSafe for Memo","synthetic":true,"types":["uucore::features::memo::Memo"]},{"text":"impl<T> RefUnwindSafe for RingBuffer<T> where
    T: RefUnwindSafe
","synthetic":true,"types":["uucore::features::ringbuffer::RingBuffer"]},{"text":"impl RefUnwindSafe for Passwd","synthetic":true,"types":["uucore::features::entries::Passwd"]},{"text":"impl RefUnwindSafe for Group","synthetic":true,"types":["uucore::features::entries::Group"]},{"text":"impl RefUnwindSafe for VerbosityLevel","synthetic":true,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl RefUnwindSafe for Verbosity","synthetic":true,"types":["uucore::features::perms::Verbosity"]},{"text":"impl RefUnwindSafe for IfFrom","synthetic":true,"types":["uucore::features::perms::IfFrom"]},{"text":"impl RefUnwindSafe for TraverseSymlinks","synthetic":true,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl RefUnwindSafe for ChownExecutor","synthetic":true,"types":["uucore::features::perms::ChownExecutor"]},{"text":"impl RefUnwindSafe for ExitStatus","synthetic":true,"types":["uucore::features::process::ExitStatus"]},{"text":"impl RefUnwindSafe for Utmpx","synthetic":true,"types":["uucore::features::utmpx::Utmpx"]},{"text":"impl RefUnwindSafe for UtmpxIter","synthetic":true,"types":["uucore::features::utmpx::UtmpxIter"]},{"text":"impl RefUnwindSafe for BackupMode","synthetic":true,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl RefUnwindSafe for BackupError","synthetic":true,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl RefUnwindSafe for USimpleError","synthetic":true,"types":["uucore::mods::error::USimpleError"]},{"text":"impl RefUnwindSafe for UUsageError","synthetic":true,"types":["uucore::mods::error::UUsageError"]},{"text":"impl !RefUnwindSafe for UIoError","synthetic":true,"types":["uucore::mods::error::UIoError"]},{"text":"impl RefUnwindSafe for ExitCode","synthetic":true,"types":["uucore::mods::error::ExitCode"]},{"text":"impl RefUnwindSafe for Range","synthetic":true,"types":["uucore::mods::ranges::Range"]},{"text":"impl RefUnwindSafe for ParseSizeError","synthetic":true,"types":["uucore::parser::parse_size::ParseSizeError"]},{"text":"impl RefUnwindSafe for InvalidEncodingHandling","synthetic":true,"types":["uucore::InvalidEncodingHandling"]},{"text":"impl RefUnwindSafe for ConversionResult","synthetic":true,"types":["uucore::ConversionResult"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js b/implementors/core/panic/unwind_safe/trait.UnwindSafe.js deleted file mode 100644 index 2b4453e9c..000000000 --- a/implementors/core/panic/unwind_safe/trait.UnwindSafe.js +++ /dev/null @@ -1,17 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_base32"] = [{"text":"impl UnwindSafe for Config","synthetic":true,"types":["uu_base32::base_common::Config"]}]; -implementors["uu_cp"] = [{"text":"impl !UnwindSafe for Error","synthetic":true,"types":["uu_cp::Error"]},{"text":"impl UnwindSafe for ClobberMode","synthetic":true,"types":["uu_cp::ClobberMode"]},{"text":"impl UnwindSafe for OverwriteMode","synthetic":true,"types":["uu_cp::OverwriteMode"]},{"text":"impl UnwindSafe for ReflinkMode","synthetic":true,"types":["uu_cp::ReflinkMode"]},{"text":"impl UnwindSafe for TargetType","synthetic":true,"types":["uu_cp::TargetType"]},{"text":"impl UnwindSafe for CopyMode","synthetic":true,"types":["uu_cp::CopyMode"]},{"text":"impl UnwindSafe for Attribute","synthetic":true,"types":["uu_cp::Attribute"]},{"text":"impl UnwindSafe for Options","synthetic":true,"types":["uu_cp::Options"]}]; -implementors["uu_csplit"] = [{"text":"impl !UnwindSafe for CsplitOptions","synthetic":true,"types":["uu_csplit::CsplitOptions"]}]; -implementors["uu_dircolors"] = [{"text":"impl UnwindSafe for OutputFmt","synthetic":true,"types":["uu_dircolors::OutputFmt"]}]; -implementors["uu_factor"] = [{"text":"impl UnwindSafe for Factors","synthetic":true,"types":["uu_factor::factor::Factors"]}]; -implementors["uu_fmt"] = [{"text":"impl UnwindSafe for FmtOptions","synthetic":true,"types":["uu_fmt::FmtOptions"]}]; -implementors["uu_install"] = [{"text":"impl UnwindSafe for Behavior","synthetic":true,"types":["uu_install::Behavior"]},{"text":"impl UnwindSafe for MainFunction","synthetic":true,"types":["uu_install::MainFunction"]}]; -implementors["uu_kill"] = [{"text":"impl UnwindSafe for Mode","synthetic":true,"types":["uu_kill::Mode"]}]; -implementors["uu_ln"] = [{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["uu_ln::Settings"]},{"text":"impl UnwindSafe for OverwriteMode","synthetic":true,"types":["uu_ln::OverwriteMode"]}]; -implementors["uu_mv"] = [{"text":"impl UnwindSafe for Behavior","synthetic":true,"types":["uu_mv::Behavior"]},{"text":"impl UnwindSafe for OverwriteMode","synthetic":true,"types":["uu_mv::OverwriteMode"]}]; -implementors["uu_nl"] = [{"text":"impl UnwindSafe for Settings","synthetic":true,"types":["uu_nl::Settings"]}]; -implementors["uu_numfmt"] = [{"text":"impl UnwindSafe for NumfmtError","synthetic":true,"types":["uu_numfmt::errors::NumfmtError"]},{"text":"impl<'a> UnwindSafe for WhitespaceSplitter<'a>","synthetic":true,"types":["uu_numfmt::format::WhitespaceSplitter"]},{"text":"impl UnwindSafe for TransformOptions","synthetic":true,"types":["uu_numfmt::options::TransformOptions"]},{"text":"impl UnwindSafe for NumfmtOptions","synthetic":true,"types":["uu_numfmt::options::NumfmtOptions"]},{"text":"impl UnwindSafe for RoundMethod","synthetic":true,"types":["uu_numfmt::options::RoundMethod"]}]; -implementors["uu_sort"] = [{"text":"impl UnwindSafe for Output","synthetic":true,"types":["uu_sort::Output"]},{"text":"impl UnwindSafe for GlobalSettings","synthetic":true,"types":["uu_sort::GlobalSettings"]},{"text":"impl<'a> UnwindSafe for Line<'a>","synthetic":true,"types":["uu_sort::Line"]},{"text":"impl UnwindSafe for GeneralF64ParseResult","synthetic":true,"types":["uu_sort::GeneralF64ParseResult"]}]; -implementors["uu_stat"] = [{"text":"impl UnwindSafe for OutputType","synthetic":true,"types":["uu_stat::OutputType"]},{"text":"impl UnwindSafe for Token","synthetic":true,"types":["uu_stat::Token"]},{"text":"impl UnwindSafe for Stater","synthetic":true,"types":["uu_stat::Stater"]}]; -implementors["uucore"] = [{"text":"impl !UnwindSafe for DecodeError","synthetic":true,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl UnwindSafe for EncodeError","synthetic":true,"types":["uucore::features::encoding::EncodeError"]},{"text":"impl UnwindSafe for Format","synthetic":true,"types":["uucore::features::encoding::Format"]},{"text":"impl<R> UnwindSafe for Data<R> where
    R: UnwindSafe
","synthetic":true,"types":["uucore::features::encoding::Data"]},{"text":"impl UnwindSafe for FileInformation","synthetic":true,"types":["uucore::features::fs::FileInformation"]},{"text":"impl UnwindSafe for MissingHandling","synthetic":true,"types":["uucore::features::fs::MissingHandling"]},{"text":"impl UnwindSafe for ResolveMode","synthetic":true,"types":["uucore::features::fs::ResolveMode"]},{"text":"impl UnwindSafe for MountInfo","synthetic":true,"types":["uucore::features::fsext::MountInfo"]},{"text":"impl UnwindSafe for FsUsage","synthetic":true,"types":["uucore::features::fsext::FsUsage"]},{"text":"impl !UnwindSafe for Memo","synthetic":true,"types":["uucore::features::memo::Memo"]},{"text":"impl<T> UnwindSafe for RingBuffer<T> where
    T: UnwindSafe
","synthetic":true,"types":["uucore::features::ringbuffer::RingBuffer"]},{"text":"impl UnwindSafe for Passwd","synthetic":true,"types":["uucore::features::entries::Passwd"]},{"text":"impl UnwindSafe for Group","synthetic":true,"types":["uucore::features::entries::Group"]},{"text":"impl UnwindSafe for VerbosityLevel","synthetic":true,"types":["uucore::features::perms::VerbosityLevel"]},{"text":"impl UnwindSafe for Verbosity","synthetic":true,"types":["uucore::features::perms::Verbosity"]},{"text":"impl UnwindSafe for IfFrom","synthetic":true,"types":["uucore::features::perms::IfFrom"]},{"text":"impl UnwindSafe for TraverseSymlinks","synthetic":true,"types":["uucore::features::perms::TraverseSymlinks"]},{"text":"impl UnwindSafe for ChownExecutor","synthetic":true,"types":["uucore::features::perms::ChownExecutor"]},{"text":"impl UnwindSafe for ExitStatus","synthetic":true,"types":["uucore::features::process::ExitStatus"]},{"text":"impl UnwindSafe for Utmpx","synthetic":true,"types":["uucore::features::utmpx::Utmpx"]},{"text":"impl UnwindSafe for UtmpxIter","synthetic":true,"types":["uucore::features::utmpx::UtmpxIter"]},{"text":"impl UnwindSafe for BackupMode","synthetic":true,"types":["uucore::mods::backup_control::BackupMode"]},{"text":"impl UnwindSafe for BackupError","synthetic":true,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl UnwindSafe for USimpleError","synthetic":true,"types":["uucore::mods::error::USimpleError"]},{"text":"impl UnwindSafe for UUsageError","synthetic":true,"types":["uucore::mods::error::UUsageError"]},{"text":"impl !UnwindSafe for UIoError","synthetic":true,"types":["uucore::mods::error::UIoError"]},{"text":"impl UnwindSafe for ExitCode","synthetic":true,"types":["uucore::mods::error::ExitCode"]},{"text":"impl UnwindSafe for Range","synthetic":true,"types":["uucore::mods::ranges::Range"]},{"text":"impl UnwindSafe for ParseSizeError","synthetic":true,"types":["uucore::parser::parse_size::ParseSizeError"]},{"text":"impl UnwindSafe for InvalidEncodingHandling","synthetic":true,"types":["uucore::InvalidEncodingHandling"]},{"text":"impl UnwindSafe for ConversionResult","synthetic":true,"types":["uucore::ConversionResult"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/core/str/traits/trait.FromStr.js b/implementors/core/str/traits/trait.FromStr.js deleted file mode 100644 index eafd47ea0..000000000 --- a/implementors/core/str/traits/trait.FromStr.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl FromStr for Attribute","synthetic":false,"types":["uu_cp::Attribute"]}]; -implementors["uucore"] = [{"text":"impl FromStr for Range","synthetic":false,"types":["uucore::mods::ranges::Range"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/std/error/trait.Error.js b/implementors/std/error/trait.Error.js deleted file mode 100644 index 12fd167df..000000000 --- a/implementors/std/error/trait.Error.js +++ /dev/null @@ -1,5 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl Error for Error","synthetic":false,"types":["uu_cp::Error"]}]; -implementors["uu_numfmt"] = [{"text":"impl Error for NumfmtError","synthetic":false,"types":["uu_numfmt::errors::NumfmtError"]}]; -implementors["uucore"] = [{"text":"impl Error for DecodeError","synthetic":false,"types":["uucore::features::encoding::DecodeError"]},{"text":"impl Error for BackupError","synthetic":false,"types":["uucore::mods::backup_control::BackupError"]},{"text":"impl Error for USimpleError","synthetic":false,"types":["uucore::mods::error::USimpleError"]},{"text":"impl Error for UUsageError","synthetic":false,"types":["uucore::mods::error::UUsageError"]},{"text":"impl Error for UIoError","synthetic":false,"types":["uucore::mods::error::UIoError"]},{"text":"impl Error for ExitCode","synthetic":false,"types":["uucore::mods::error::ExitCode"]},{"text":"impl Error for ParseSizeError","synthetic":false,"types":["uucore::parser::parse_size::ParseSizeError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uu_chgrp/entries/trait.Locate.js b/implementors/uu_chgrp/entries/trait.Locate.js deleted file mode 100644 index 1ff9d8ac1..000000000 --- a/implementors/uu_chgrp/entries/trait.Locate.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_chgrp"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uu_chown/trait.Locate.js b/implementors/uu_chown/trait.Locate.js deleted file mode 100644 index 4b13757bc..000000000 --- a/implementors/uu_chown/trait.Locate.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_chown"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uu_dircolors/trait.StrUtils.js b/implementors/uu_dircolors/trait.StrUtils.js deleted file mode 100644 index 3212f81f6..000000000 --- a/implementors/uu_dircolors/trait.StrUtils.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_dircolors"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uu_pinky/trait.Capitalize.js b/implementors/uu_pinky/trait.Capitalize.js deleted file mode 100644 index 5716a7f4b..000000000 --- a/implementors/uu_pinky/trait.Capitalize.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_pinky"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uu_stat/trait.ScanUtil.js b/implementors/uu_stat/trait.ScanUtil.js deleted file mode 100644 index ebdd4368b..000000000 --- a/implementors/uu_stat/trait.ScanUtil.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_stat"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/display/trait.Quotable.js b/implementors/uucore/display/trait.Quotable.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/display/trait.Quotable.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/entries/trait.Locate.js b/implementors/uucore/entries/trait.Locate.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/entries/trait.Locate.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/error/trait.FromIo.js b/implementors/uucore/error/trait.FromIo.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/error/trait.FromIo.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/error/trait.UError.js b/implementors/uucore/error/trait.UError.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/error/trait.UError.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/fsext/trait.BirthTime.js b/implementors/uucore/fsext/trait.BirthTime.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/fsext/trait.BirthTime.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/fsext/trait.FsMeta.js b/implementors/uucore/fsext/trait.FsMeta.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/fsext/trait.FsMeta.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/mods/error/trait.UError.js b/implementors/uucore/mods/error/trait.UError.js deleted file mode 100644 index 21c3c44b0..000000000 --- a/implementors/uucore/mods/error/trait.UError.js +++ /dev/null @@ -1,4 +0,0 @@ -(function() {var implementors = {}; -implementors["uu_cp"] = [{"text":"impl UError for Error","synthetic":false,"types":["uu_cp::Error"]}]; -implementors["uu_numfmt"] = [{"text":"impl UError for NumfmtError","synthetic":false,"types":["uu_numfmt::errors::NumfmtError"]}]; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/process/trait.ChildExt.js b/implementors/uucore/process/trait.ChildExt.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/process/trait.ChildExt.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/implementors/uucore/trait.Args.js b/implementors/uucore/trait.Args.js deleted file mode 100644 index d853d3b38..000000000 --- a/implementors/uucore/trait.Args.js +++ /dev/null @@ -1,3 +0,0 @@ -(function() {var implementors = {}; -implementors["uucore"] = []; -if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/install/all.html b/install/all.html deleted file mode 100644 index 3d84e6088..000000000 --- a/install/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/install/fn.main.html b/install/fn.main.html deleted file mode 100644 index 052d76a69..000000000 --- a/install/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in install - Rust -

Function install::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/install/index.html b/install/index.html deleted file mode 100644 index ce5b3e802..000000000 --- a/install/index.html +++ /dev/null @@ -1,4 +0,0 @@ -install - Rust -

Crate install[][src]

Functions

-
- \ No newline at end of file diff --git a/install/sidebar-items.js b/install/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/install/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/join/all.html b/join/all.html deleted file mode 100644 index a4747557a..000000000 --- a/join/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/join/fn.main.html b/join/fn.main.html deleted file mode 100644 index 58fc4452d..000000000 --- a/join/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in join - Rust -

Function join::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/join/index.html b/join/index.html deleted file mode 100644 index 690775401..000000000 --- a/join/index.html +++ /dev/null @@ -1,4 +0,0 @@ -join - Rust -

Crate join[][src]

Functions

-
- \ No newline at end of file diff --git a/join/sidebar-items.js b/join/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/join/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/kill/all.html b/kill/all.html deleted file mode 100644 index 424193df8..000000000 --- a/kill/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/kill/fn.main.html b/kill/fn.main.html deleted file mode 100644 index 8dfbc10f3..000000000 --- a/kill/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in kill - Rust -

Function kill::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/kill/index.html b/kill/index.html deleted file mode 100644 index b0f893c64..000000000 --- a/kill/index.html +++ /dev/null @@ -1,4 +0,0 @@ -kill - Rust -

Crate kill[][src]

Functions

-
- \ No newline at end of file diff --git a/kill/sidebar-items.js b/kill/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/kill/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/libstdbuf/all.html b/libstdbuf/all.html deleted file mode 100644 index 7e5f2b4a6..000000000 --- a/libstdbuf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/libstdbuf/fn.__stdbuf.html b/libstdbuf/fn.__stdbuf.html deleted file mode 100644 index d041c6548..000000000 --- a/libstdbuf/fn.__stdbuf.html +++ /dev/null @@ -1,6 +0,0 @@ -__stdbuf in libstdbuf - Rust -

Function libstdbuf::__stdbuf[][src]

#[no_mangle]
-pub unsafe extern "C" fn __stdbuf()
Expand description

Safety

-

ToDO … (safety note)

-
- \ No newline at end of file diff --git a/libstdbuf/index.html b/libstdbuf/index.html deleted file mode 100644 index e233bbc2f..000000000 --- a/libstdbuf/index.html +++ /dev/null @@ -1,5 +0,0 @@ -libstdbuf - Rust -

Crate libstdbuf[][src]

Functions

-

Safety

-
- \ No newline at end of file diff --git a/libstdbuf/sidebar-items.js b/libstdbuf/sidebar-items.js deleted file mode 100644 index 287661451..000000000 --- a/libstdbuf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["__stdbuf","Safety"]]}); \ No newline at end of file diff --git a/light.css b/light.css deleted file mode 100644 index 5d932850c..000000000 --- a/light.css +++ /dev/null @@ -1 +0,0 @@ - body{background-color:white;color:black;}h1,h2,h3,h4{color:black;}h1.fqn{border-bottom-color:#D5D5D5;}h2,h3,h4{border-bottom-color:#DDDDDD;}.in-band{background-color:white;}.invisible{background:rgba(0,0,0,0);}.docblock code,.docblock-short code{background-color:#F5F5F5;}pre,.rustdoc.source .example-wrap{background-color:#F5F5F5;}.sidebar{background-color:#F1F1F1;}*{scrollbar-color:rgba(36,37,39,0.6) #e6e6e6;}.sidebar{scrollbar-color:rgba(36,37,39,0.6) #d9d9d9;}.logo-container.rust-logo>img{}::-webkit-scrollbar-track{background-color:#ecebeb;}::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar::-webkit-scrollbar-track{background-color:#dcdcdc;}.sidebar::-webkit-scrollbar-thumb{background-color:rgba(36,37,39,0.6);}.sidebar .current{background-color:#fff;}.source .sidebar{background-color:#fff;}.sidebar .location{border-color:#000;background-color:#fff;color:#333;}.sidebar .version{border-bottom-color:#DDD;}.sidebar-title{border-top-color:#777;border-bottom-color:#777;}.block a:hover{background:#F5F5F5;}.line-numbers span{color:#c67e2d;}.line-numbers .line-highlighted{background-color:#f6fdb0 !important;}.docblock h1,.docblock h2,.docblock h3,.docblock h4,.docblock h5,.docblock h6{border-bottom-color:#ddd;}.docblock table td,.docblock table th{border-color:#ddd;}.content .method .where,.content .fn .where,.content .where.fmt-newline{color:#4E4C4C;}.search-results a:hover{background-color:#ddd;}.search-results a:focus{color:#000 !important;background-color:#ccc;}.search-results a:focus span{color:#000 !important;}a.result-trait:focus{background-color:#c7b6ff;}a.result-traitalias:focus{background-color:#c7b6ff;}a.result-mod:focus,a.result-externcrate:focus{background-color:#afc6e4;}a.result-enum:focus{background-color:#b4d1b9;}a.result-struct:focus{background-color:#e7b1a0;}a.result-union:focus{background-color:#b7bd49;}a.result-fn:focus,a.result-method:focus,a.result-tymethod:focus{background-color:#c6afb3;}a.result-type:focus{background-color:#ffc891;}a.result-foreigntype:focus{background-color:#f5c4ff;}a.result-attr:focus,a.result-derive:focus,a.result-macro:focus{background-color:#8ce488;}a.result-constant:focus,a.result-static:focus{background-color:#c3e0ff;}a.result-primitive:focus{background-color:#9aecff;}a.result-keyword:focus{background-color:#f99650;}.content .item-info::before{color:#ccc;}.content span.enum,.content a.enum,.block a.current.enum{color:#508157;}.content span.struct,.content a.struct,.block a.current.struct{color:#ad448e;}.content span.type,.content a.type,.block a.current.type{color:#ba5d00;}.content span.foreigntype,.content a.foreigntype,.block a.current.foreigntype{color:#cd00e2;}.content span.attr,.content a.attr,.block a.current.attr,.content span.derive,.content a.derive,.block a.current.derive,.content span.macro,.content a.macro,.block a.current.macro{color:#068000;}.content span.union,.content a.union,.block a.current.union{color:#767b27;}.content span.constant,.content a.constant,.block a.current.constant,.content span.static,.content a.static,.block a.current.static{color:#546e8a;}.content span.primitive,.content a.primitive,.block a.current.primitive{color:#2c8093;}.content span.externcrate,.content span.mod,.content a.mod,.block a.current.mod{color:#4d76ae;}.content span.trait,.content a.trait,.block a.current.trait{color:#7c5af3;}.content span.traitalias,.content a.traitalias,.block a.current.traitalias{color:#6841f1;}.content span.fn,.content a.fn,.block a.current.fn,.content span.method,.content a.method,.block a.current.method,.content span.tymethod,.content a.tymethod,.block a.current.tymethod,.content .fnname{color:#9a6e31;}.content span.keyword,.content a.keyword,.block a.current.keyword{color:#de5249;}nav:not(.sidebar){border-bottom-color:#e0e0e0;}nav.main .current{border-top-color:#000;border-bottom-color:#000;}nav.main .separator{border:1px solid #000;}a{color:#3873AD;}a.srclink,a#toggle-all-docs,a.anchor,.small-section-header a,#source-sidebar a,pre.rust a,.sidebar a,.in-band a{color:#000;}.search-results a{color:initial;}a.test-arrow{color:#f5f5f5;}body.source .example-wrap pre.rust a{background:#eee;}details.rustdoc-toggle>summary.hideme>span,details.rustdoc-toggle>summary::before,details.undocumented>summary::before{color:#999;}#crate-search{color:#555;background-color:white;border-color:#e0e0e0;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input{color:#555;background-color:white;box-shadow:0 0 0 1px #e0e0e0,0 0 0 2px transparent;}.search-input:focus{border-color:#66afe9;}#crate-search+.search-input:focus{box-shadow:0 0 8px #078dd8;}.module-item .stab,.import-item .stab{color:#000;}.stab.unstable{background:#FFF5D6;border-color:#FFC600;}.stab.deprecated{background:#ffc4c4;border-color:#db7b7b;}.stab.portability{background:#F3DFFF;border-color:#b07bdb;}.stab.portability>code{background:none;}#help>div{background:#e9e9e9;border-color:#bfbfbf;}#help span.bottom,#help span.top{border-color:#bfbfbf;}.since{color:grey;}.result-name .primitive>i,.result-name .keyword>i{color:black;}.line-numbers :target{background-color:transparent;}pre.rust .kw{color:#8959A8;}pre.rust .kw-2,pre.rust .prelude-ty{color:#4271AE;}pre.rust .number,pre.rust .string{color:#718C00;}pre.rust .self,pre.rust .bool-val,pre.rust .prelude-val,pre.rust .attribute,pre.rust .attribute .ident{color:#C82829;}pre.rust .comment{color:#8E908C;}pre.rust .doccomment{color:#4D4D4C;}pre.rust .macro,pre.rust .macro-nonterminal{color:#3E999F;}pre.rust .lifetime{color:#B76514;}pre.rust .question-mark{color:#ff9011;}.example-wrap>pre.line-number{border-color:#c7c7c7;}a.test-arrow{background-color:rgba(78,139,202,0.2);}a.test-arrow:hover{background-color:#4e8bca;}.toggle-label,.code-attribute{color:#999;}:target,:target>*{background:#FDFFD3;}:target{border-right:3px solid #ffb44c;}pre.compile_fail{border-left:2px solid rgba(255,0,0,.5);}pre.compile_fail:hover,.information:hover+pre.compile_fail{border-left:2px solid #f00;}pre.should_panic{border-left:2px solid rgba(255,0,0,.5);}pre.should_panic:hover,.information:hover+pre.should_panic{border-left:2px solid #f00;}pre.ignore{border-left:2px solid rgba(255,142,0,.6);}pre.ignore:hover,.information:hover+pre.ignore{border-left:2px solid #ff9200;}.tooltip.compile_fail{color:rgba(255,0,0,.5);}.information>.compile_fail:hover{color:#f00;}.tooltip.should_panic{color:rgba(255,0,0,.5);}.information>.should_panic:hover{color:#f00;}.tooltip.ignore{color:rgba(255,142,0,.6);}.information>.ignore:hover{color:#ff9200;}.search-failed a{color:#0089ff;}.tooltip::after{background-color:#000;color:#fff;}.tooltip::before{border-color:transparent black transparent transparent;}.notable-traits-tooltiptext{background-color:#eee;border-color:#999;}.notable-traits-tooltiptext .notable{border-bottom-color:#DDDDDD;}#titles>button:not(.selected){background-color:#e6e6e6;border-top-color:#e6e6e6;}#titles>button:hover,#titles>button.selected{background-color:#ffffff;border-top-color:#0089ff;}#titles>button>div.count{color:#888;}@media (max-width:700px){.sidebar-menu{background-color:#F1F1F1;border-bottom-color:#e0e0e0;border-right-color:#e0e0e0;}.sidebar-elems{background-color:#F1F1F1;border-right-color:#000;}#sidebar-filler{background-color:#F1F1F1;border-bottom-color:#e0e0e0;}}kbd{color:#000;background-color:#fafbfc;border-color:#d1d5da;border-bottom-color:#c6cbd1;box-shadow-color:#c6cbd1;}#theme-picker,#settings-menu,#help-button{border-color:#e0e0e0;background-color:#fff;}#theme-picker:hover,#theme-picker:focus,#settings-menu:hover,#settings-menu:focus,#help-button:hover,#help-button:focus{border-color:#717171;}#copy-path{color:#999;}#copy-path>img{filter:invert(50%);}#copy-path:hover>img{filter:invert(35%);}#theme-choices{border-color:#ccc;background-color:#fff;}#theme-choices>button:not(:first-child){border-top-color:#e0e0e0;}#theme-choices>button:hover,#theme-choices>button:focus{background-color:#eee;}@media (max-width:700px){#theme-picker{background:#fff;}}#all-types{background-color:#fff;}#all-types:hover{background-color:#f9f9f9;}.search-results .result-name span.alias{color:#000;}.search-results .result-name span.grey{color:#999;}#sidebar-toggle{background-color:#F1F1F1;}#sidebar-toggle:hover{background-color:#E0E0E0;}#source-sidebar{background-color:#F1F1F1;}#source-sidebar>.title{border-bottom-color:#ccc;}div.files>a:hover,div.name:hover{background-color:#E0E0E0;}div.files>.selected{background-color:#fff;}.setting-line>.title{border-bottom-color:#D5D5D5;} \ No newline at end of file diff --git a/link/all.html b/link/all.html deleted file mode 100644 index 9c005d700..000000000 --- a/link/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/link/fn.main.html b/link/fn.main.html deleted file mode 100644 index 16143792a..000000000 --- a/link/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in link - Rust -

Function link::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/link/index.html b/link/index.html deleted file mode 100644 index ec88847ea..000000000 --- a/link/index.html +++ /dev/null @@ -1,4 +0,0 @@ -link - Rust -

Crate link[][src]

Functions

-
- \ No newline at end of file diff --git a/link/sidebar-items.js b/link/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/link/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/ln/all.html b/ln/all.html deleted file mode 100644 index 6ba44bbed..000000000 --- a/ln/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/ln/fn.main.html b/ln/fn.main.html deleted file mode 100644 index 744efb04e..000000000 --- a/ln/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in ln - Rust -

Function ln::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/ln/index.html b/ln/index.html deleted file mode 100644 index f1817f803..000000000 --- a/ln/index.html +++ /dev/null @@ -1,4 +0,0 @@ -ln - Rust -

Crate ln[][src]

Functions

-
- \ No newline at end of file diff --git a/ln/sidebar-items.js b/ln/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/ln/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/logname/all.html b/logname/all.html deleted file mode 100644 index 0af3b0f38..000000000 --- a/logname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/logname/fn.main.html b/logname/fn.main.html deleted file mode 100644 index 17b052425..000000000 --- a/logname/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in logname - Rust -

Function logname::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/logname/index.html b/logname/index.html deleted file mode 100644 index 3fa1027ec..000000000 --- a/logname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -logname - Rust -

Crate logname[][src]

Functions

-
- \ No newline at end of file diff --git a/logname/sidebar-items.js b/logname/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/logname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/ls/all.html b/ls/all.html deleted file mode 100644 index 44b3588a2..000000000 --- a/ls/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/ls/fn.main.html b/ls/fn.main.html deleted file mode 100644 index a9ba1b4d0..000000000 --- a/ls/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in ls - Rust -

Function ls::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/ls/index.html b/ls/index.html deleted file mode 100644 index e7dc7a6ef..000000000 --- a/ls/index.html +++ /dev/null @@ -1,4 +0,0 @@ -ls - Rust -

Crate ls[][src]

Functions

-
- \ No newline at end of file diff --git a/ls/sidebar-items.js b/ls/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/ls/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/main.js b/main.js deleted file mode 100644 index 082b6dedd..000000000 --- a/main.js +++ /dev/null @@ -1,8 +0,0 @@ -if(!String.prototype.startsWith){String.prototype.startsWith=function(searchString,position){position=position||0;return this.indexOf(searchString,position)===position}}if(!String.prototype.endsWith){String.prototype.endsWith=function(suffix,length){var l=length||this.length;return this.indexOf(suffix,l-suffix.length)!==-1}}if(!DOMTokenList.prototype.add){DOMTokenList.prototype.add=function(className){if(className&&!hasClass(this,className)){if(this.className&&this.className.length>0){this.className+=" "+className}else{this.className=className}}}}if(!DOMTokenList.prototype.remove){DOMTokenList.prototype.remove=function(className){if(className&&this.className){this.className=(" "+this.className+" ").replace(" "+className+" "," ").trim()}}}(function(){var rustdocVars=document.getElementById("rustdoc-vars");if(rustdocVars){window.rootPath=rustdocVars.attributes["data-root-path"].value;window.currentCrate=rustdocVars.attributes["data-current-crate"].value;window.searchJS=rustdocVars.attributes["data-search-js"].value;window.searchIndexJS=rustdocVars.attributes["data-search-index-js"].value}var sidebarVars=document.getElementById("sidebar-vars");if(sidebarVars){window.sidebarCurrent={name:sidebarVars.attributes["data-name"].value,ty:sidebarVars.attributes["data-ty"].value,relpath:sidebarVars.attributes["data-relpath"].value,}}}());function getVirtualKey(ev){if("key"in ev&&typeof ev.key!="undefined"){return ev.key}var c=ev.charCode||ev.keyCode;if(c==27){return"Escape"}return String.fromCharCode(c)}var THEME_PICKER_ELEMENT_ID="theme-picker";var THEMES_ELEMENT_ID="theme-choices";function getThemesElement(){return document.getElementById(THEMES_ELEMENT_ID)}function getThemePickerElement(){return document.getElementById(THEME_PICKER_ELEMENT_ID)}function getNakedUrl(){return window.location.href.split("?")[0].split("#")[0]}function showThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="block";themePicker.style.borderBottomRightRadius="0";themePicker.style.borderBottomLeftRadius="0"}function hideThemeButtonState(){var themePicker=getThemePickerElement();var themeChoices=getThemesElement();themeChoices.style.display="none";themePicker.style.borderBottomRightRadius="3px";themePicker.style.borderBottomLeftRadius="3px"}(function(){var themeChoices=getThemesElement();var themePicker=getThemePickerElement();var availableThemes=["ayu","dark","light"];function switchThemeButtonState(){if(themeChoices.style.display==="block"){hideThemeButtonState()}else{showThemeButtonState()}}function handleThemeButtonsBlur(e){var active=document.activeElement;var related=e.relatedTarget;if(active.id!==THEME_PICKER_ELEMENT_ID&&(!active.parentNode||active.parentNode.id!==THEMES_ELEMENT_ID)&&(!related||(related.id!==THEME_PICKER_ELEMENT_ID&&(!related.parentNode||related.parentNode.id!==THEMES_ELEMENT_ID)))){hideThemeButtonState()}}themePicker.onclick=switchThemeButtonState;themePicker.onblur=handleThemeButtonsBlur;availableThemes.forEach(function(item){var but=document.createElement("button");but.textContent=item;but.onclick=function(){switchTheme(window.currentTheme,window.mainTheme,item,true);useSystemTheme(false)};but.onblur=handleThemeButtonsBlur;themeChoices.appendChild(but)})}());(function(){"use strict";window.searchState={loadingText:"Loading search results...",input:document.getElementsByClassName("search-input")[0],outputElement:function(){return document.getElementById("search")},title:document.title,titleBeforeSearch:document.title,timeout:null,currentTab:0,focusedByTab:[null,null,null],clearInputTimeout:function(){if(searchState.timeout!==null){clearTimeout(searchState.timeout);searchState.timeout=null}},focus:function(){searchState.input.focus()},defocus:function(){searchState.input.blur()},showResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(main,"hidden");removeClass(search,"hidden");searchState.mouseMovedAfterSearch=false;document.title=searchState.title},hideResults:function(search){if(search===null||typeof search==='undefined'){search=searchState.outputElement()}addClass(search,"hidden");removeClass(main,"hidden");document.title=searchState.titleBeforeSearch;if(searchState.browserSupportsHistoryApi()){history.replaceState("",window.currentCrate+" - Rust",getNakedUrl()+window.location.hash)}},getQueryStringParams:function(){var params={};window.location.search.substring(1).split("&").map(function(s){var pair=s.split("=");params[decodeURIComponent(pair[0])]=typeof pair[1]==="undefined"?null:decodeURIComponent(pair[1])});return params},putBackSearch:function(search_input){var search=searchState.outputElement();if(search_input.value!==""&&hasClass(search,"hidden")){searchState.showResults(search);if(searchState.browserSupportsHistoryApi()){var extra="?search="+encodeURIComponent(search_input.value);history.replaceState(search_input.value,"",getNakedUrl()+extra+window.location.hash)}document.title=searchState.title}},browserSupportsHistoryApi:function(){return window.history&&typeof window.history.pushState==="function"},setup:function(){var search_input=searchState.input;if(!searchState.input){return}function loadScript(url){var script=document.createElement('script');script.src=url;document.head.append(script)}var searchLoaded=false;function loadSearch(){if(!searchLoaded){searchLoaded=true;loadScript(window.searchJS);loadScript(window.searchIndexJS)}}search_input.addEventListener("focus",function(){searchState.putBackSearch(this);search_input.origPlaceholder=searchState.input.placeholder;search_input.placeholder="Type your search here.";loadSearch()});search_input.addEventListener("blur",function(){search_input.placeholder=searchState.input.origPlaceholder});if(search_input.value!=''){loadSearch()}searchState.addCrateDropdown(window.ALL_CRATES);var params=searchState.getQueryStringParams();if(params.search!==undefined){var search=searchState.outputElement();search.innerHTML="

"+searchState.loadingText+"

";searchState.showResults(search);loadSearch()}},addCrateDropdown:function(crates){var elem=document.getElementById("crate-search");if(!elem){return}var savedCrate=getSettingValue("saved-filter-crate");for(var i=0,len=crates.length;i0){return tmp}}return null}function showSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){addClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];if(sidebar){addClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(!filler){var div=document.createElement("div");div.id="sidebar-filler";sidebar.appendChild(div)}}}function hideSidebar(){var elems=document.getElementsByClassName("sidebar-elems")[0];if(elems){removeClass(elems,"show-it")}var sidebar=document.getElementsByClassName("sidebar")[0];removeClass(sidebar,"mobile");var filler=document.getElementById("sidebar-filler");if(filler){filler.remove()}document.getElementsByTagName("body")[0].style.marginTop=""}var toggleAllDocsId="toggle-all-docs";var main=document.getElementById("main");var savedHash="";function handleHashes(ev){var elem;var search=searchState.outputElement();if(ev!==null&&search&&!hasClass(search,"hidden")&&ev.newURL){searchState.hideResults(search);var hash=ev.newURL.slice(ev.newURL.indexOf("#")+1);if(searchState.browserSupportsHistoryApi()){history.replaceState(hash,"",getNakedUrl()+window.location.search+"#"+hash)}elem=document.getElementById(hash);if(elem){elem.scrollIntoView()}}if(savedHash!==window.location.hash){savedHash=window.location.hash;if(savedHash.length===0){return}expandSection(savedHash.slice(1))}}function onHashChange(ev){hideSidebar();handleHashes(ev)}function openParentDetails(elem){while(elem){if(elem.tagName==="DETAILS"){elem.open=true}elem=elem.parentNode}}function expandSection(id){openParentDetails(document.getElementById(id))}function getHelpElement(build){if(build){buildHelperPopup()}return document.getElementById("help")}function displayHelp(display,ev,help){if(display){help=help?help:getHelpElement(true);if(hasClass(help,"hidden")){ev.preventDefault();removeClass(help,"hidden");addClass(document.body,"blur")}}else{help=help?help:getHelpElement(false);if(help&&!hasClass(help,"hidden")){ev.preventDefault();addClass(help,"hidden");removeClass(document.body,"blur")}}}function handleEscape(ev){var help=getHelpElement(false);var search=searchState.outputElement();if(help&&!hasClass(help,"hidden")){displayHelp(false,ev,help)}else if(search&&!hasClass(search,"hidden")){searchState.clearInputTimeout();ev.preventDefault();searchState.hideResults(search)}searchState.defocus();hideThemeButtonState()}var disableShortcuts=getSettingValue("disable-shortcuts")==="true";function handleShortcut(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey||disableShortcuts){return}if(document.activeElement.tagName==="INPUT"){switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break}}else{switch(getVirtualKey(ev)){case"Escape":handleEscape(ev);break;case"s":case"S":displayHelp(false,ev);ev.preventDefault();searchState.focus();break;case"+":case"-":ev.preventDefault();toggleAllDocs();break;case"?":displayHelp(true,ev);break;case"t":case"T":displayHelp(false,ev);ev.preventDefault();var themePicker=getThemePickerElement();themePicker.click();themePicker.focus();break;default:if(getThemePickerElement().parentNode.contains(ev.target)){handleThemeKeyDown(ev)}}}}function handleThemeKeyDown(ev){var active=document.activeElement;var themes=getThemesElement();switch(getVirtualKey(ev)){case"ArrowUp":ev.preventDefault();if(active.previousElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.previousElementSibling.focus()}else{showThemeButtonState();themes.lastElementChild.focus()}break;case"ArrowDown":ev.preventDefault();if(active.nextElementSibling&&ev.target.id!==THEME_PICKER_ELEMENT_ID){active.nextElementSibling.focus()}else{showThemeButtonState();themes.firstElementChild.focus()}break;case"Enter":case"Return":case"Space":if(ev.target.id===THEME_PICKER_ELEMENT_ID&&themes.style.display==="none"){ev.preventDefault();showThemeButtonState();themes.firstElementChild.focus()}break;case"Home":ev.preventDefault();themes.firstElementChild.focus();break;case"End":ev.preventDefault();themes.lastElementChild.focus();break}}document.addEventListener("keypress",handleShortcut);document.addEventListener("keydown",handleShortcut);(function(){var x=document.getElementsByClassName("version-selector");if(x.length>0){x[0].onchange=function(){var i,match,url=document.location.href,stripped="",len=window.rootPath.match(/\.\.\//g).length+1;for(i=0;i .in-band > .trait").textContent;var baseIdName="impl-"+traitName+"-";var libs=Object.getOwnPropertyNames(imp);for(var i=0,llength=libs.length;i summary:not(.hideme)"),function(el){el.addEventListener("click",function(e){if(e.target.tagName!="SUMMARY"&&e.target.tagName!="A"){e.preventDefault()}})});onEachLazy(document.getElementsByClassName("notable-traits"),function(e){e.onclick=function(){this.getElementsByClassName('notable-traits-tooltiptext')[0].classList.toggle("force-tooltip")}});var sidebar_menu=document.getElementsByClassName("sidebar-menu")[0];if(sidebar_menu){sidebar_menu.onclick=function(){var sidebar=document.getElementsByClassName("sidebar")[0];if(hasClass(sidebar,"mobile")){hideSidebar()}else{showSidebar()}}}var buildHelperPopup=function(){var popup=document.createElement("aside");addClass(popup,"hidden");popup.id="help";popup.addEventListener("click",function(ev){if(ev.target===popup){displayHelp(false,ev)}});var book_info=document.createElement("span");book_info.className="top";book_info.innerHTML="You can find more information in \ - the rustdoc book.";var container=document.createElement("div");var shortcuts=[["?","Show this help dialog"],["S","Focus the search field"],["T","Focus the theme picker menu"],["↑","Move up in search results"],["↓","Move down in search results"],["← / →","Switch result tab (when results focused)"],["⏎","Go to active search result"],["+","Expand all sections"],["-","Collapse all sections"],].map(function(x){return"
"+x[0].split(" ").map(function(y,index){return(index&1)===0?""+y+"":" "+y+" "}).join("")+"
"+x[1]+"
"}).join("");var div_shortcuts=document.createElement("div");addClass(div_shortcuts,"shortcuts");div_shortcuts.innerHTML="

Keyboard Shortcuts

"+shortcuts+"
";var infos=["Prefix searches with a type followed by a colon (e.g., fn:) to \ - restrict the search to a given item kind.","Accepted kinds are: fn, mod, struct, \ - enum, trait, type, macro, \ - and const.","Search functions by type signature (e.g., vec -> usize or \ - * -> vec)","Search multiple things at once by splitting your query with comma (e.g., \ - str,u8 or String,struct:Vec,test)","You can look for items with an exact name by putting double quotes around \ - your request: \"string\"","Look for items inside another one by searching for a path: vec::Vec",].map(function(x){return"

"+x+"

"}).join("");var div_infos=document.createElement("div");addClass(div_infos,"infos");div_infos.innerHTML="

Search Tricks

"+infos;container.appendChild(book_info);container.appendChild(div_shortcuts);container.appendChild(div_infos);var rustdoc_version=document.createElement("span");rustdoc_version.className="bottom";var rustdoc_version_code=document.createElement("code");rustdoc_version_code.innerText="rustdoc 1.58.1 (db9d1b20b 2022-01-20)";rustdoc_version.appendChild(rustdoc_version_code);container.appendChild(rustdoc_version);popup.appendChild(container);insertAfter(popup,searchState.outputElement());buildHelperPopup=function(){}};onHashChange(null);window.addEventListener("hashchange",onHashChange);searchState.setup()}());(function(){var reset_button_timeout=null;window.copy_path=function(but){var parent=but.parentElement;var path=[];onEach(parent.childNodes,function(child){if(child.tagName==='A'){path.push(child.textContent)}});var el=document.createElement('textarea');el.value=path.join('::');el.setAttribute('readonly','');el.style.position='absolute';el.style.left='-9999px';document.body.appendChild(el);el.select();document.execCommand('copy');document.body.removeChild(el);but.children[0].style.display='none';var tmp;if(but.childNodes.length<2){tmp=document.createTextNode('✓');but.appendChild(tmp)}else{onEachLazy(but.childNodes,function(e){if(e.nodeType===Node.TEXT_NODE){tmp=e;return true}});tmp.textContent='✓'}if(reset_button_timeout!==null){window.clearTimeout(reset_button_timeout)}function reset_button(){tmp.textContent='';reset_button_timeout=null;but.children[0].style.display=""}reset_button_timeout=window.setTimeout(reset_button,1000)}}()) \ No newline at end of file diff --git a/mkdir/all.html b/mkdir/all.html deleted file mode 100644 index caff45308..000000000 --- a/mkdir/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/mkdir/fn.main.html b/mkdir/fn.main.html deleted file mode 100644 index ba83a1921..000000000 --- a/mkdir/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in mkdir - Rust -

Function mkdir::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/mkdir/index.html b/mkdir/index.html deleted file mode 100644 index a2e77ea34..000000000 --- a/mkdir/index.html +++ /dev/null @@ -1,4 +0,0 @@ -mkdir - Rust -

Crate mkdir[][src]

Functions

-
- \ No newline at end of file diff --git a/mkdir/sidebar-items.js b/mkdir/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/mkdir/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/mkfifo/all.html b/mkfifo/all.html deleted file mode 100644 index ed489a3f2..000000000 --- a/mkfifo/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/mkfifo/fn.main.html b/mkfifo/fn.main.html deleted file mode 100644 index 9b77cfc70..000000000 --- a/mkfifo/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in mkfifo - Rust -

Function mkfifo::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/mkfifo/index.html b/mkfifo/index.html deleted file mode 100644 index 35f7e1213..000000000 --- a/mkfifo/index.html +++ /dev/null @@ -1,4 +0,0 @@ -mkfifo - Rust -

Crate mkfifo[][src]

Functions

-
- \ No newline at end of file diff --git a/mkfifo/sidebar-items.js b/mkfifo/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/mkfifo/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/mknod/all.html b/mknod/all.html deleted file mode 100644 index 227f00e14..000000000 --- a/mknod/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/mknod/fn.main.html b/mknod/fn.main.html deleted file mode 100644 index 0fa3727bf..000000000 --- a/mknod/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in mknod - Rust -

Function mknod::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/mknod/index.html b/mknod/index.html deleted file mode 100644 index c62967e9d..000000000 --- a/mknod/index.html +++ /dev/null @@ -1,4 +0,0 @@ -mknod - Rust -

Crate mknod[][src]

Functions

-
- \ No newline at end of file diff --git a/mknod/sidebar-items.js b/mknod/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/mknod/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/mktemp/all.html b/mktemp/all.html deleted file mode 100644 index 974462ed4..000000000 --- a/mktemp/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/mktemp/fn.main.html b/mktemp/fn.main.html deleted file mode 100644 index d20310097..000000000 --- a/mktemp/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in mktemp - Rust -

Function mktemp::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/mktemp/index.html b/mktemp/index.html deleted file mode 100644 index 656f790a9..000000000 --- a/mktemp/index.html +++ /dev/null @@ -1,4 +0,0 @@ -mktemp - Rust -

Crate mktemp[][src]

Functions

-
- \ No newline at end of file diff --git a/mktemp/sidebar-items.js b/mktemp/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/mktemp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/more/all.html b/more/all.html deleted file mode 100644 index 0ce6b04c9..000000000 --- a/more/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/more/fn.main.html b/more/fn.main.html deleted file mode 100644 index d6cb08296..000000000 --- a/more/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in more - Rust -

Function more::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/more/index.html b/more/index.html deleted file mode 100644 index a28b28601..000000000 --- a/more/index.html +++ /dev/null @@ -1,4 +0,0 @@ -more - Rust -

Crate more[][src]

Functions

-
- \ No newline at end of file diff --git a/more/sidebar-items.js b/more/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/more/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/mv/all.html b/mv/all.html deleted file mode 100644 index cf2c5247d..000000000 --- a/mv/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/mv/fn.main.html b/mv/fn.main.html deleted file mode 100644 index f8e9c6fe1..000000000 --- a/mv/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in mv - Rust -

Function mv::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/mv/index.html b/mv/index.html deleted file mode 100644 index c2a0773cc..000000000 --- a/mv/index.html +++ /dev/null @@ -1,4 +0,0 @@ -mv - Rust -

Crate mv[][src]

Functions

-
- \ No newline at end of file diff --git a/mv/sidebar-items.js b/mv/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/mv/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/nice/all.html b/nice/all.html deleted file mode 100644 index bc47417b5..000000000 --- a/nice/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/nice/fn.main.html b/nice/fn.main.html deleted file mode 100644 index 58dfaf99b..000000000 --- a/nice/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in nice - Rust -

Function nice::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/nice/index.html b/nice/index.html deleted file mode 100644 index 8209f6403..000000000 --- a/nice/index.html +++ /dev/null @@ -1,4 +0,0 @@ -nice - Rust -

Crate nice[][src]

Functions

-
- \ No newline at end of file diff --git a/nice/sidebar-items.js b/nice/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/nice/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/nl/all.html b/nl/all.html deleted file mode 100644 index c01945f1c..000000000 --- a/nl/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/nl/fn.main.html b/nl/fn.main.html deleted file mode 100644 index 5a5fea16a..000000000 --- a/nl/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in nl - Rust -

Function nl::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/nl/index.html b/nl/index.html deleted file mode 100644 index d5f2903ae..000000000 --- a/nl/index.html +++ /dev/null @@ -1,4 +0,0 @@ -nl - Rust -

Crate nl[][src]

Functions

-
- \ No newline at end of file diff --git a/nl/sidebar-items.js b/nl/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/nl/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/nohup/all.html b/nohup/all.html deleted file mode 100644 index 2fde84707..000000000 --- a/nohup/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/nohup/fn.main.html b/nohup/fn.main.html deleted file mode 100644 index 524f37da1..000000000 --- a/nohup/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in nohup - Rust -

Function nohup::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/nohup/index.html b/nohup/index.html deleted file mode 100644 index dcb51fb91..000000000 --- a/nohup/index.html +++ /dev/null @@ -1,4 +0,0 @@ -nohup - Rust -

Crate nohup[][src]

Functions

-
- \ No newline at end of file diff --git a/nohup/sidebar-items.js b/nohup/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/nohup/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/normalize.css b/normalize.css deleted file mode 100644 index 469959f13..000000000 --- a/normalize.css +++ /dev/null @@ -1,2 +0,0 @@ - /*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ -html{line-height:1.15;-webkit-text-size-adjust:100%}body{margin:0}main{display:block}h1{font-size:2em;margin:0.67em 0}hr{box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace,monospace;font-size:1em}a{background-color:transparent}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace,monospace;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}img{border-style:none}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}[type="button"],[type="reset"],[type="submit"],button{-webkit-appearance:button}[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{padding:0.35em 0.75em 0.625em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details{display:block}summary{display:list-item}template{display:none}[hidden]{display:none} \ No newline at end of file diff --git a/noscript.css b/noscript.css deleted file mode 100644 index a4ce2bbb8..000000000 --- a/noscript.css +++ /dev/null @@ -1 +0,0 @@ - #main .attributes{margin-left:0 !important;}#copy-path{display:none;}.sub{display:none;}#theme-picker{display:none;} \ No newline at end of file diff --git a/nproc/all.html b/nproc/all.html deleted file mode 100644 index 100fb2028..000000000 --- a/nproc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/nproc/fn.main.html b/nproc/fn.main.html deleted file mode 100644 index d8ecdd2f6..000000000 --- a/nproc/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in nproc - Rust -

Function nproc::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/nproc/index.html b/nproc/index.html deleted file mode 100644 index 0dbc2fae2..000000000 --- a/nproc/index.html +++ /dev/null @@ -1,4 +0,0 @@ -nproc - Rust -

Crate nproc[][src]

Functions

-
- \ No newline at end of file diff --git a/nproc/sidebar-items.js b/nproc/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/nproc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/numfmt/all.html b/numfmt/all.html deleted file mode 100644 index faf7427f6..000000000 --- a/numfmt/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/numfmt/fn.main.html b/numfmt/fn.main.html deleted file mode 100644 index 0dad4a9b8..000000000 --- a/numfmt/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in numfmt - Rust -

Function numfmt::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/numfmt/index.html b/numfmt/index.html deleted file mode 100644 index ca2ffceda..000000000 --- a/numfmt/index.html +++ /dev/null @@ -1,4 +0,0 @@ -numfmt - Rust -

Crate numfmt[][src]

Functions

-
- \ No newline at end of file diff --git a/numfmt/sidebar-items.js b/numfmt/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/numfmt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/od/all.html b/od/all.html deleted file mode 100644 index 4ae0a38be..000000000 --- a/od/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/od/fn.main.html b/od/fn.main.html deleted file mode 100644 index 59db43bfd..000000000 --- a/od/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in od - Rust -

Function od::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/od/index.html b/od/index.html deleted file mode 100644 index b29417370..000000000 --- a/od/index.html +++ /dev/null @@ -1,4 +0,0 @@ -od - Rust -

Crate od[][src]

Functions

-
- \ No newline at end of file diff --git a/od/sidebar-items.js b/od/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/od/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/paste/all.html b/paste/all.html deleted file mode 100644 index de3a5780e..000000000 --- a/paste/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/paste/fn.main.html b/paste/fn.main.html deleted file mode 100644 index 24636a368..000000000 --- a/paste/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in paste - Rust -

Function paste::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/paste/index.html b/paste/index.html deleted file mode 100644 index 5857d62a7..000000000 --- a/paste/index.html +++ /dev/null @@ -1,4 +0,0 @@ -paste - Rust -

Crate paste[][src]

Functions

-
- \ No newline at end of file diff --git a/paste/sidebar-items.js b/paste/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/paste/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/pathchk/all.html b/pathchk/all.html deleted file mode 100644 index 2b6a0b577..000000000 --- a/pathchk/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/pathchk/fn.main.html b/pathchk/fn.main.html deleted file mode 100644 index cfe7c0dc5..000000000 --- a/pathchk/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in pathchk - Rust -

Function pathchk::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/pathchk/index.html b/pathchk/index.html deleted file mode 100644 index 6d14dada6..000000000 --- a/pathchk/index.html +++ /dev/null @@ -1,4 +0,0 @@ -pathchk - Rust -

Crate pathchk[][src]

Functions

-
- \ No newline at end of file diff --git a/pathchk/sidebar-items.js b/pathchk/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/pathchk/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/pinky/all.html b/pinky/all.html deleted file mode 100644 index c0b935d1b..000000000 --- a/pinky/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/pinky/fn.main.html b/pinky/fn.main.html deleted file mode 100644 index a6f6c9fd8..000000000 --- a/pinky/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in pinky - Rust -

Function pinky::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/pinky/index.html b/pinky/index.html deleted file mode 100644 index c7ccbc8f0..000000000 --- a/pinky/index.html +++ /dev/null @@ -1,4 +0,0 @@ -pinky - Rust -

Crate pinky[][src]

Functions

-
- \ No newline at end of file diff --git a/pinky/sidebar-items.js b/pinky/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/pinky/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/pr/all.html b/pr/all.html deleted file mode 100644 index 08deb1d82..000000000 --- a/pr/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/pr/fn.main.html b/pr/fn.main.html deleted file mode 100644 index 0bf5bcad8..000000000 --- a/pr/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in pr - Rust -

Function pr::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/pr/index.html b/pr/index.html deleted file mode 100644 index c940ae008..000000000 --- a/pr/index.html +++ /dev/null @@ -1,4 +0,0 @@ -pr - Rust -

Crate pr[][src]

Functions

-
- \ No newline at end of file diff --git a/pr/sidebar-items.js b/pr/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/pr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/printenv/all.html b/printenv/all.html deleted file mode 100644 index f2cd690c7..000000000 --- a/printenv/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/printenv/fn.main.html b/printenv/fn.main.html deleted file mode 100644 index a59013e94..000000000 --- a/printenv/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in printenv - Rust -

Function printenv::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/printenv/index.html b/printenv/index.html deleted file mode 100644 index 4b5acb24b..000000000 --- a/printenv/index.html +++ /dev/null @@ -1,4 +0,0 @@ -printenv - Rust -

Crate printenv[][src]

Functions

-
- \ No newline at end of file diff --git a/printenv/sidebar-items.js b/printenv/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/printenv/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/printf/all.html b/printf/all.html deleted file mode 100644 index ed02a693b..000000000 --- a/printf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/printf/fn.main.html b/printf/fn.main.html deleted file mode 100644 index 5b95bdb9c..000000000 --- a/printf/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in printf - Rust -

Function printf::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/printf/index.html b/printf/index.html deleted file mode 100644 index d4de4e27c..000000000 --- a/printf/index.html +++ /dev/null @@ -1,4 +0,0 @@ -printf - Rust -

Crate printf[][src]

Functions

-
- \ No newline at end of file diff --git a/printf/sidebar-items.js b/printf/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/printf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/ptx/all.html b/ptx/all.html deleted file mode 100644 index d71853c00..000000000 --- a/ptx/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/ptx/fn.main.html b/ptx/fn.main.html deleted file mode 100644 index 6c35d8e60..000000000 --- a/ptx/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in ptx - Rust -

Function ptx::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/ptx/index.html b/ptx/index.html deleted file mode 100644 index 83ae20be0..000000000 --- a/ptx/index.html +++ /dev/null @@ -1,4 +0,0 @@ -ptx - Rust -

Crate ptx[][src]

Functions

-
- \ No newline at end of file diff --git a/ptx/sidebar-items.js b/ptx/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/ptx/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/pwd/all.html b/pwd/all.html deleted file mode 100644 index cdfb9d675..000000000 --- a/pwd/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/pwd/fn.main.html b/pwd/fn.main.html deleted file mode 100644 index beebf1f2c..000000000 --- a/pwd/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in pwd - Rust -

Function pwd::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/pwd/index.html b/pwd/index.html deleted file mode 100644 index 24fb0619d..000000000 --- a/pwd/index.html +++ /dev/null @@ -1,4 +0,0 @@ -pwd - Rust -

Crate pwd[][src]

Functions

-
- \ No newline at end of file diff --git a/pwd/sidebar-items.js b/pwd/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/pwd/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/readlink/all.html b/readlink/all.html deleted file mode 100644 index 6095d477e..000000000 --- a/readlink/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/readlink/fn.main.html b/readlink/fn.main.html deleted file mode 100644 index ec7c5ba74..000000000 --- a/readlink/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in readlink - Rust -

Function readlink::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/readlink/index.html b/readlink/index.html deleted file mode 100644 index a48789b89..000000000 --- a/readlink/index.html +++ /dev/null @@ -1,4 +0,0 @@ -readlink - Rust -

Crate readlink[][src]

Functions

-
- \ No newline at end of file diff --git a/readlink/sidebar-items.js b/readlink/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/readlink/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/realpath/all.html b/realpath/all.html deleted file mode 100644 index fa3446e79..000000000 --- a/realpath/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/realpath/fn.main.html b/realpath/fn.main.html deleted file mode 100644 index 396196bf1..000000000 --- a/realpath/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in realpath - Rust -

Function realpath::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/realpath/index.html b/realpath/index.html deleted file mode 100644 index 8f294a0eb..000000000 --- a/realpath/index.html +++ /dev/null @@ -1,4 +0,0 @@ -realpath - Rust -

Crate realpath[][src]

Functions

-
- \ No newline at end of file diff --git a/realpath/sidebar-items.js b/realpath/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/realpath/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/relpath/all.html b/relpath/all.html deleted file mode 100644 index 2ce4a3705..000000000 --- a/relpath/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/relpath/fn.main.html b/relpath/fn.main.html deleted file mode 100644 index ef5ac6e36..000000000 --- a/relpath/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in relpath - Rust -

Function relpath::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/relpath/index.html b/relpath/index.html deleted file mode 100644 index bd53aa7b5..000000000 --- a/relpath/index.html +++ /dev/null @@ -1,4 +0,0 @@ -relpath - Rust -

Crate relpath[][src]

Functions

-
- \ No newline at end of file diff --git a/relpath/sidebar-items.js b/relpath/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/relpath/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/rm/all.html b/rm/all.html deleted file mode 100644 index 7a385a8c2..000000000 --- a/rm/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/rm/fn.main.html b/rm/fn.main.html deleted file mode 100644 index b183ac8c2..000000000 --- a/rm/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in rm - Rust -

Function rm::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/rm/index.html b/rm/index.html deleted file mode 100644 index 8db97145a..000000000 --- a/rm/index.html +++ /dev/null @@ -1,4 +0,0 @@ -rm - Rust -

Crate rm[][src]

Functions

-
- \ No newline at end of file diff --git a/rm/sidebar-items.js b/rm/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/rm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/rmdir/all.html b/rmdir/all.html deleted file mode 100644 index 958dfef90..000000000 --- a/rmdir/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/rmdir/fn.main.html b/rmdir/fn.main.html deleted file mode 100644 index b1cc000db..000000000 --- a/rmdir/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in rmdir - Rust -

Function rmdir::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/rmdir/index.html b/rmdir/index.html deleted file mode 100644 index 2c0350975..000000000 --- a/rmdir/index.html +++ /dev/null @@ -1,4 +0,0 @@ -rmdir - Rust -

Crate rmdir[][src]

Functions

-
- \ No newline at end of file diff --git a/rmdir/sidebar-items.js b/rmdir/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/rmdir/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/runcon/all.html b/runcon/all.html deleted file mode 100644 index 0533c2451..000000000 --- a/runcon/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/runcon/fn.main.html b/runcon/fn.main.html deleted file mode 100644 index ddf01d11a..000000000 --- a/runcon/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in runcon - Rust -

Function runcon::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/runcon/index.html b/runcon/index.html deleted file mode 100644 index 4ad127c08..000000000 --- a/runcon/index.html +++ /dev/null @@ -1,4 +0,0 @@ -runcon - Rust -

Crate runcon[][src]

Functions

-
- \ No newline at end of file diff --git a/runcon/sidebar-items.js b/runcon/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/runcon/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/rust-logo.png b/rust-logo.png deleted file mode 100644 index 74b4bd695045ebc52c21af95301adc9311ca881c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5758 zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4i*LmhD`I74h#%puAVNAAr-go#&S;yIXZLS zA{!TVLxpoCcUSG&p8ws4d6&>+9XGR^8A|(__$4};HCo>MieSCiJ45*EkqROC89Qbj z{kl-GBMYs-EaO<6YO->H;Mp9}eyPWINHGEa|n;*Ez(H%&>L7~ga$sO;#; zbH|mZuuZoUFfgA!%lTus2_v`j$FocI;^3ON_@Z-;B0r3Mr@3ziy zeG;gXI`5y$^8Ia>f>!RTzWr>)jzdow*;xV{r~U3fVD8T)v+;)bk%?Uoub;W<5_f6W z^p}GEe?6D)ZwpdCEq8iJz$4e64;T5wKRm!2b1LqYbm)DhN0ODT%OA?lif54uc_Ny; z_OiWmbn$IHzP$>fH|j6%KeGRP(+O{}y3N`4;+1Tw$9oU&yh|K)N6#g7 zUzT?+%n@{$Av8VV4@bc2f7%yK?@xHRQQNRObFD#oU+FKqDQeU6G<`QFH)To*Ii$a@ zT(^yZGfBAB;~>L~_~k1S?yvA=7BJLZQW>9YnOQC+?RC6yXLj{Ui`^eMJ5I+hJ!t%~ z)bp2TsdV4}?z-M{i?k1Iou8$}BWP#6$zzAmyBGCJGh!=NaxD88v3%k}lkfxWQu{4` zth@dsIKS5@hw;efe5KoLTXc7?JZH4m)KT9=FyxXzL2N^OSg_aZJ=uTGUeYSKTrull!&2a?_n|u3e1tRPJxNyg0k0CZ>UHLFmL?lk={MGI`8+YGSnIoQBkg zn3k2=TpvWdWaBb7O*d=jn2}xQeVHx%g_GlihQn98o~P`(d?LU?bj@DPhYpSH68~1I zRA&TtG;~MA_$!@FymujIyMXWxH>n~qTcrGF#Bz2pw z;_;UFQEPUec#^T=h8gCf4uI|i{ z;=WlrtLrnP-Bt5XQw6=){@cyRD&~)K5Fqv#i~d|KN7if&5=Kl5b5kCIqHL z3bEc;)bMBb?hXc z{Y*cZe(slG)k$|PUGj-5_L=9^?Z5fE4r)YS{kbvo2hShhC1+nAZs@KMzUDXaBR5w; z3P*yFO+e|UWUDVf*66%$;52N$#r022$f8!JfHD7Qpsv8rqZ1py{h4X1Vx2XY+aUG( z<_RI+r(6D2N|4{*dRie$`iaG&lldFgEpxe8Ig5eszDcFo<r>&^wnwJLjg<4+3xSsKFi?8WAiI_^z}+fJDd6ExQ z##w*tUBcY2yd!Asd=Z;xYnNHyNG%Y&qImg7YS1UC4T2rrUKVzVJa)*6O z@$Tkz-{iilsUNhT)w@n|!!kC>o8ceWN+zwie^^VNUG93vMot!pliR^T$#o%BmsR3e zzsc6^ak`OksiP~7+x^v=yz&Z`e^Wg8mgqeXeYrW@TXO0pwLN-iEE>!lDK1N^O8c9P z7p$JTW%Ju(U!nz>!dhM!aqC_A`9@<#?8(2CGQSx1W&RiC{cuzGkH(3Nzh_-^s^)Jl ze&3f|Sjco>Ugv5)-Tta2Mfx8W{CWN7$R69TJNnMP+{?)_;nfs7FR!!<$x$EV{w;Am zpggTC=XmTJ>yYTU1&>xuyWY+I&E#`E-|miZ295W&i}wlgB-K51d=hk*?acxEBipkg z!w&|vH~v5Rw&ed5wKv;&f4dxcZc^hf{8w*Y=WI`5tIQ)>DqAh|iyohSaZ~sY>uQ#& zYwYC_S05Ke{@a~C)w~!`?n|Pul}R_iBps2xk?>+@U)}zrpiIPq@%i94tx&Zb*ldEN~Im_JMHg@ zGkrK%(Z1(>{jHb1^D1VnVW~Xv*sI1;&u#7h#(N?8hIf^{BR05J=vO(mG^lUgC9cEt zC@$8ghb_eQ(E4nJgq}0Ums;f;zuj`oRGa_6^PkNVAKQLOw3@1wEih-&{S~t<7XE5% z5n9tJ@S)ADY5R*adOem#Uxf{}W&L=+!}*A4^Bwb2JEzm@_m!|r+)(?m?`*_FxA!Ru z3C;XpotZwcgo|u>V8Z>cb(-=PqnQlm(oAkU6VIDhIoA7LdiOH97dTq0kE?dL>E zy@wp;4y+N!>XoFLmN5I(%=c+}D3}($d#&4tOy`EHTq&*x!dG2u`1q+y*;)6nQ~3rd z^`r@Jn?j8}91eU=`0id6JI{2{tnjIhC%rb!DCtU0eykp4=5RF4rNLTcZ_ldc|4sYS z>dQ-CO#iy3ao@q%zPEB~wlOJ93uk;P6zp<+w(#edhvzet_Ln&H3a;_HwOXS0-g#Tr zwXUg(zr0x1?~uv77*_Ou$^-qjWj-~M-amg^HNAQH-uZVcIj%!~C`7T+!J>ck5X1jnj{u3Kd zK3;WtC+C-gVQmlX+x)$EK0M^+$bYdQ+*SKizt3&Eqz}A|f3*5~pQl9r`f|wm0qZI6 zt544>JQ|Olq+j)DV4P?Ar~g88MhWj^ z>-1Z`CPHF452SW?iP)6u&Lst(i_`q=d56n5Oi$+*0;dKT*A;S=!O5 zUd@eJgfY!QdYOlnmhc7k52rIikIK0UOTFSNW#3_(+Sent0cw%Ct)F?`5r3 zYrEgAnAmh}%9OaY{VU%Y{9mT|p`pR`huRz+dj6KIAO-( z;GoF0oE*I8pSP4P-f~Vr(q-DGDyPuk#AD36PBffiS1))FNw!VSVY;QAQmJ@q0>iX>Urk>)OepwkYWQOo)A?)NUvGrYT^P8fJ0f_# zUA3#*m1m|C8uqVmY{);p?%PE@&WQay8TvJMTHTo#PoGh-5PPg9BE^4Mvu>SJTYXe% z+42zA0}Nlvctv7Fc9q%Onqby6Lp#{DAyfLvh97MH=l`9a=~&4W*qmH_(*NV#JQslz z^H-mH)B9qEi=@!P2PbFUYMOq5f2Mk&-Y&ksb|UiM{6nP$w&hDVG)&&xYx3ocYux-r z$FEjxK7CtIF(K}*W>X9M<0<{wr|Ow4BO@CXw=~=M*i9*&KVK^T(FN-VJLiZiE?E3d zGtcwoMqgj#&f4*o_Y2>T6sC3StbH}gIrp*tYV>)r>(PZSmM3z; zj}KoEky^jxhzD8}eU2%=>Z73=b3i3HKW2yBtXP!guP# zAH{t}Q@$7YGFw=$HMY5Ale6ME$Inz=^@hL#_Eo$8gxbw+<)6_kaUjU6%I=TCuT`e@ z3vT)T({*vWTd-RBz-sHzb-zB{ZC{n}%WVD8^qsQ%?`{@9I{RMnjD|O-?NjH-*Y18- zvh#!;gYlcThA02l)^Di`3faAXUoJQ((g z|4#6*um0U?x%=JsKHeEKtt>vZS6$8%biI|tRm2|WE2k=~ZL9n2QgR0STzBi(jn3S! ze8pEBFJ$^6UwXAJu0!B*=d+!%?+l9smONM3W^=1A@t}{)zakUHzrw$s^E`?9qTdlF zBQJ6GoaO%IB@uakuKLGL$@{a4?K79GWCj8g= zMN%9WEMBFobFd6?N?-W%#rBxLTkbsj;^pAH=HMpt3+r$GcrU4u@X`4qSMV=OjoOTV zZ+1TToORo<$ac4m-THNtrfhe#zTn;&wj;bu)bancg5~@dxnG!a@B8?#qS5hS_p8Tx$_QL6aO$@&7W~oue^_2cLvXaWykXObH`4%wl-J) zzUkbN_zMZ@j~mWyc=yBp1zU;nuf@D}>iat%%2fBxDtq&CiB#Tm`PZ>Ww%N?<^FO|P z^5dJ+Txyn!CGtcoy>(ott!_Pi=ilP)QnBL}lI+>1-elR9Rb)^4_<14s7SZ`#edYe{ z%OAh25Zl=y7yUgf%5r6t#+Fw}M>HR<^j+CwJhzAWS1-%&42^H!y_lb0{W+*6L#3`$xqAJSB2e?R%=&dU_3h|K(n-)-$g?5~>DorrqaviY`Opuh*M)vlA8 z9L(F!K6P4Bc=B&V+EaeNWsJ2^;SJ~89_?2;@OoGO*{%sX+b=KP7iHXH!fKh3yqnv- z&1j3?sz-Vy3nnKz+`qu~?U2C3@b2G@_m?mG9P<0AbtLPzp1HFWr_{dL^HFG?^&5t{ zXJ;2J^Rzm5(qO^ul2g(b)lL66<+ZP1%CZyY^3?ru_MGPTXR}WRUv-%G6*{o=Zx92_9Y!uEOA9l!2dekO|MQ#{?@>F$`H-m}?u%KW*aAFOTvZjlYs z)n21*etO~|XTc9Qd*xDs=N|qp`D;TAdvwFa+*_4*-{iXAX57Qwf9&)70GVeSf4IVPtME>O#9&Sl_BchJ00l*}m~%ww^PomZf}p*-87rTdS4kx#gwJeya0z)9om0xjTi+w!g@H z&U}0`&-=iejd8B$7pcA|Wcw!fZJ)~boOhvO(raBliGKex`>C+QvC#atXU|?0=9r-~ zU#n5mJt9y**O*ylW>3m2AD>g9x(2uTr~2owxpVEt+pi~AUNSa#t)G&bz}VohxC?hp-k*kUN@>JrXTiSeReA2;q)gRO=tP- zMKqsnJZADu-)zs#xQg_Jx*6(5VvW;9F9@{HT6afr$20S*cTQR}{h9kN?BE{H^vfYf+n?(nC^n=92xtc;)Lp%>@|(k%L+LfGTU>lo z%xXE!ygo_)cK7aS`t~5Lev@qT@|(MlpHO|RR6NfpY};m*r>Bp~6ffG6YyNwha&>5jT2{TXdVSmsrF&21zCMcGt}Jl+{=!=;J}0LAiYw>y?v%|uy??Ta^0)=d%Tp;ov6pubZGQ74MfQ{b(}g16FLZBBogsZU zuUE&t+tt@xSm(p(q-~*_8~GaaFaI)ae>e5&ivRzfrX?==@q4T2zva588$8N0K0i%& zasOTwYWn4~?dKym_ixT+db!Nfdw<`j@GkpQo5L^nFDxiYOgdwxvr+4qkxhiq=83X1 zk4u=JxS^P`bLkszA&qzE>vzwV`J?$O{^YgU`y-SeJI^kWS^s$UjmS-BKm7alufkH3 zrMa2^Nc`v0pJx>(@AUZp|4H-0A8Gr&SNvlC*?&Af-}tEQ$`4KtS1QO~>`DB!KD^yk v#bP0l+XkK|AsFv diff --git a/rustdoc.css b/rustdoc.css deleted file mode 100644 index e7788fd34..000000000 --- a/rustdoc.css +++ /dev/null @@ -1 +0,0 @@ - @font-face {font-family:'Fira Sans';font-style:normal;font-weight:400;src:local('Fira Sans'),url("FiraSans-Regular.woff2") format("woff2"),url("FiraSans-Regular.woff") format('woff');font-display:swap;}@font-face {font-family:'Fira Sans';font-style:normal;font-weight:500;src:local('Fira Sans Medium'),url("FiraSans-Medium.woff2") format("woff2"),url("FiraSans-Medium.woff") format('woff');font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:400;src:local('Source Serif 4'),url("SourceSerif4-Regular.ttf.woff2") format("woff2"),url("SourceSerif4-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:italic;font-weight:400;src:local('Source Serif 4 Italic'),url("SourceSerif4-It.ttf.woff2") format("woff2"),url("SourceSerif4-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Serif 4';font-style:normal;font-weight:700;src:local('Source Serif 4 Bold'),url("SourceSerif4-Bold.ttf.woff2") format("woff2"),url("SourceSerif4-Bold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:400;src:url("SourceCodePro-Regular.ttf.woff2") format("woff2"),url("SourceCodePro-Regular.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:italic;font-weight:400;src:url("SourceCodePro-It.ttf.woff2") format("woff2"),url("SourceCodePro-It.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'Source Code Pro';font-style:normal;font-weight:600;src:url("SourceCodePro-Semibold.ttf.woff2") format("woff2"),url("SourceCodePro-Semibold.ttf.woff") format("woff");font-display:swap;}@font-face {font-family:'NanumBarunGothic';src:url("NanumBarunGothic.ttf.woff2") format("woff2"),url("NanumBarunGothic.ttf.woff") format("woff");font-display:swap;unicode-range:U+AC00-D7AF,U+1100-11FF,U+3130-318F,U+A960-A97F,U+D7B0-D7FF;}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;}html{content:"";}@media (prefers-color-scheme:light){html{content:"light";}}@media (prefers-color-scheme:dark){html{content:"dark";}}body{font:16px/1.4 "Source Serif 4",NanumBarunGothic,serif;margin:0;position:relative;padding:10px 15px 20px 15px;-webkit-font-feature-settings:"kern","liga";-moz-font-feature-settings:"kern","liga";font-feature-settings:"kern","liga";}h1{font-size:1.5em;}h2{font-size:1.4em;}h3{font-size:1.3em;}h1,h2,h3,h4,h5,h6{font-weight:500;}h1,h2,h3,h4{margin:20px 0 15px 0;padding-bottom:6px;}.docblock h3,.docblock h4,h5,h6{margin:15px 0 5px 0;}h1.fqn{display:flex;border-bottom:1px dashed;margin-top:0;padding-left:1px;}h1.fqn>.in-band>a:hover{text-decoration:underline;}h2,.top-doc h3,.top-doc h4,.sidebar .others h3{border-bottom:1px solid;}h3.code-header{font-size:1.1em;}h4.code-header{font-size:1em;}h3.code-header,h4.code-header{font-weight:600;border-bottom-style:none;padding:0;margin:0;}.impl,.impl-items .method,.methods .method,.impl-items .type,.methods .type,.impl-items .associatedconstant,.methods .associatedconstant,.impl-items .associatedtype,.methods .associatedtype{flex-basis:100%;font-weight:600;margin-top:16px;margin-bottom:10px;position:relative;}div.impl-items>div{padding-left:0;}h1,h2,h3,h4,h5,h6,.sidebar,a.source,.search-input,.search-results .result-name,.content table td:first-child>a,.item-left>a,div.item-list .out-of-band,span.since,#source-sidebar,#sidebar-toggle,details.rustdoc-toggle>summary::before,div.impl-items>div:not(.docblock):not(.item-info),.content ul.crate a.crate,a.srclink,#main>ul.docblock>li>a{font-family:"Fira Sans",Arial,NanumBarunGothic,sans-serif;}.content ul.crate a.crate{font-size:16px/1.6;}ol,ul{padding-left:25px;}ul ul,ol ul,ul ol,ol ol{margin-bottom:.6em;}p{margin:0 0 .6em 0;}summary{outline:none;}td,th{padding:0;}table{border-collapse:collapse;}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0;}details:not(.rustdoc-toggle) summary{margin-bottom:.6em;}code,pre,a.test-arrow,.code-header{font-family:"Source Code Pro",monospace;}.docblock code,.docblock-short code{border-radius:3px;padding:0 0.1em;}.docblock pre code,.docblock-short pre code{padding:0;}pre{padding:14px;}.docblock.item-decl{margin-left:0;}.item-decl pre{overflow-x:auto;}.source .content pre{padding:20px;}img{max-width:100%;}li{position:relative;}.source .content{margin-top:50px;max-width:none;overflow:visible;margin-left:0px;}nav.sub{font-size:16px;text-transform:uppercase;}.sidebar{width:200px;position:fixed;left:0;top:0;bottom:0;overflow-y:scroll;}.rustdoc.source .sidebar{overflow-y:auto;}*{scrollbar-width:initial;}.sidebar{scrollbar-width:thin;}::-webkit-scrollbar{width:12px;}.sidebar::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-track{-webkit-box-shadow:inset 0;}.sidebar .block>ul>li{margin-right:-10px;}.content,nav{max-width:960px;}.hidden{display:none !important;}.logo-container{height:100px;width:100px;position:relative;margin:20px auto;display:block;margin-top:10px;}.logo-container>img{max-width:100px;max-height:100px;height:100%;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);display:block;}.sidebar .location{border:1px solid;font-size:17px;margin:30px 10px 20px 10px;text-align:center;word-wrap:break-word;font-weight:inherit;padding:0;}.sidebar .version{font-size:15px;text-align:center;border-bottom:1px solid;overflow-wrap:break-word;word-wrap:break-word;word-break:break-word;}.location:empty{border:none;}.location a:first-of-type{font-weight:500;}.location a:hover{text-decoration:underline;}.block{padding:0;margin-bottom:14px;}.block h2,.block h3{text-align:center;}.block ul,.block li{margin:0 10px;padding:0;list-style:none;}.block a{display:block;text-overflow:ellipsis;overflow:hidden;line-height:15px;padding:7px 5px;font-size:14px;font-weight:300;transition:border 500ms ease-out;}.sidebar-title{border-top:1px solid;border-bottom:1px solid;text-align:center;font-size:17px;margin-bottom:5px;font-weight:inherit;padding:0;}.sidebar-links{margin-bottom:15px;}.sidebar-links>a{padding-left:10px;width:100%;}.sidebar-menu{display:none;}.content{padding:15px 0;}.source .content pre.rust{white-space:pre;overflow:auto;padding-left:0;}.rustdoc .example-wrap{display:inline-flex;margin-bottom:10px;}.example-wrap{position:relative;width:100%;}.example-wrap>pre.line-number{overflow:initial;border:1px solid;padding:13px 8px;text-align:right;border-top-left-radius:5px;border-bottom-left-radius:5px;}.example-wrap>pre.rust a:hover{text-decoration:underline;}.rustdoc:not(.source) .example-wrap>pre:not(.line-number){width:100%;overflow-x:auto;}.rustdoc:not(.source) .example-wrap>pre.line-numbers{width:auto;overflow-x:visible;}.rustdoc .example-wrap>pre{margin:0;}#search{margin-left:230px;position:relative;}#results>table{width:100%;table-layout:fixed;}.content>.example-wrap pre.line-numbers{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;}.line-numbers span{cursor:pointer;}.docblock-short{overflow-wrap:anywhere;}.docblock-short p{display:inline;}.docblock-short p{overflow:hidden;text-overflow:ellipsis;margin:0;}.docblock>:not(pre)>code,.docblock-short>:not(pre)>code{white-space:pre-wrap;}.top-doc .docblock h2{font-size:1.3em;}.top-doc .docblock h3{font-size:1.15em;}.top-doc .docblock h4,.top-doc .docblock h5{font-size:1.1em;}.top-doc .docblock h6{font-size:1em;}.docblock h5{font-size:1em;}.docblock h6{font-size:0.95em;}.docblock{margin-left:24px;position:relative;}.docblock>:not(.information){max-width:100%;overflow-x:auto;}.content .out-of-band{flex-grow:0;text-align:right;font-size:23px;margin:0px;padding:0 0 0 12px;font-weight:normal;}.method>.code-header,.trait-impl>.code-header,.invisible>.code-header{max-width:calc(100% - 41px);display:block;}.invisible{width:100%;display:inline-block;}.content .in-band{flex-grow:1;margin:0px;padding:0px;overflow-wrap:anywhere;}.in-band>code,.in-band>.code-header{display:inline-block;}#main{position:relative;}#main>.since{top:inherit;font-family:"Fira Sans",Arial,sans-serif;}.content table:not(.table-display){border-spacing:0 5px;}.content td{vertical-align:top;}.content td:first-child{padding-right:20px;}.content td p:first-child{margin-top:0;}.content td h1,.content td h2{margin-left:0;font-size:1.1em;}.content tr:first-child td{border-top:0;}.docblock table{margin:.5em 0;width:calc(100% - 2px);overflow-x:auto;display:block;}.docblock table td{padding:.5em;border:1px dashed;}.docblock table th{padding:.5em;text-align:left;border:1px solid;}.fields+table{margin-bottom:1em;}.content .item-list{list-style-type:none;padding:0;}.content .multi-column{-moz-column-count:5;-moz-column-gap:2.5em;-webkit-column-count:5;-webkit-column-gap:2.5em;column-count:5;column-gap:2.5em;}.content .multi-column li{width:100%;display:inline-block;}.content>.methods>.method{font-size:1em;position:relative;}.content .method .where,.content .fn .where,.content .where.fmt-newline{display:block;font-size:0.8em;}.content .methods>div:not(.notable-traits):not(.method){margin-left:40px;margin-bottom:15px;}.content .docblock>.impl-items{margin-left:20px;margin-top:-34px;}.content .docblock>.impl-items .table-display{margin:0;}.content .docblock>.impl-items table td{padding:0;}.content .docblock>.impl-items .table-display,.impl-items table td{border:none;}.content .item-info code{font-size:90%;}.content .item-info{position:relative;margin-left:33px;}.sub-variant>div>.item-info{margin-top:initial;}.content .item-info::before{content:'⬑';font-size:25px;position:absolute;top:-6px;left:-19px;}.content .impl-items .docblock,.content .impl-items .item-info{margin-bottom:.6em;}.content .impl-items>.item-info{margin-left:40px;}.methods>.item-info,.content .impl-items>.item-info{margin-top:-8px;}.impl-items{flex-basis:100%;}#main>.item-info{margin-top:0;}nav:not(.sidebar){border-bottom:1px solid;padding-bottom:10px;margin-bottom:10px;}nav.main{padding:20px 0;text-align:center;}nav.main .current{border-top:1px solid;border-bottom:1px solid;}nav.main .separator{border:1px solid;display:inline-block;height:23px;margin:0 20px;}nav.sum{text-align:right;}nav.sub form{display:inline;}nav.sub,.content{margin-left:230px;}a{text-decoration:none;background:transparent;}.small-section-header{display:flex;justify-content:space-between;position:relative;}.small-section-header:hover>.anchor{display:initial;}.in-band:hover>.anchor,.impl:hover>.anchor,.method.trait-impl:hover>.anchor,.type.trait-impl:hover>.anchor,.associatedconstant.trait-impl:hover>.anchor,.associatedtype.trait-impl:hover>.anchor{display:inline-block;position:absolute;}.anchor{display:none;position:absolute;left:-0.5em;background:none !important;}.anchor.field{left:-5px;}.small-section-header>.anchor{left:-15px;padding-right:8px;}h2.small-section-header>.anchor{padding-right:6px;}.anchor::before{content:'§';}.docblock a:not(.srclink):not(.test-arrow):hover,.docblock-short a:not(.srclink):not(.test-arrow):hover,.item-info a{text-decoration:underline;}.invisible>.srclink,.method>.code-header+.srclink{position:absolute;top:0;right:0;font-size:17px;font-weight:normal;}.block a.current.crate{font-weight:500;}.item-table{display:table;}.item-row{display:table-row;}.item-left,.item-right{display:table-cell;}.item-left{padding-right:1.2rem;}.search-container{position:relative;}.search-container>div{display:inline-flex;width:calc(100% - 63px);}#crate-search{min-width:115px;margin-top:5px;padding:6px;padding-right:19px;flex:none;border:0;border-right:0;border-radius:4px 0 0 4px;outline:none;cursor:pointer;border-right:1px solid;-moz-appearance:none;-webkit-appearance:none;text-indent:0.01px;text-overflow:"";background-repeat:no-repeat;background-color:transparent;background-size:20px;background-position:calc(100% - 1px) 56%;}.search-container>.top-button{position:absolute;right:0;top:10px;}.search-input{-moz-box-sizing:border-box !important;box-sizing:border-box !important;outline:none;border:none;border-radius:1px;margin-top:5px;padding:10px 16px;font-size:17px;transition:border-color 300ms ease;transition:border-radius 300ms ease-in-out;transition:box-shadow 300ms ease-in-out;width:100%;}#crate-search+.search-input{border-radius:0 1px 1px 0;width:calc(100% - 32px);}.search-input:focus{border-radius:2px;border:0;outline:0;}.search-results{display:none;padding-bottom:2em;}.search-results.active{display:block;clear:both;}.search-results .desc>span{white-space:nowrap;text-overflow:ellipsis;overflow:hidden;display:block;}.search-results>a{display:block;width:100%;margin-left:2px;margin-right:2px;border-bottom:1px solid #aaa3;}.search-results>a>div{display:flex;flex-flow:row wrap;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:50%;}.search-results .result-name{padding-right:1em;}.search-results .result-name>span{display:inline-block;margin:0;font-weight:normal;}body.blur>:not(#help){filter:blur(8px);-webkit-filter:blur(8px);opacity:.7;}#help{width:100%;height:100vh;position:fixed;top:0;left:0;display:flex;justify-content:center;align-items:center;}#help>div{flex:0 0 auto;box-shadow:0 0 6px rgba(0,0,0,.2);width:550px;height:auto;border:1px solid;}#help dt{float:left;clear:left;display:block;margin-right:0.5rem;}#help span.top,#help span.bottom{text-align:center;display:block;font-size:18px;}#help span.top{text-align:center;display:block;margin:10px 0;border-bottom:1px solid;padding-bottom:4px;margin-bottom:6px;}#help span.bottom{clear:both;border-top:1px solid;}#help dd{margin:5px 35px;}#help .infos{padding-left:0;}#help h1,#help h2{margin-top:0;}#help>div div{width:50%;float:left;padding:0 20px 20px 17px;;}.item-info .stab{display:table;}.stab{padding:3px;margin-bottom:5px;font-size:90%;font-weight:normal;}.stab p{display:inline;}.stab .emoji{font-size:1.2em;}.emoji{text-shadow:1px 0 0 black,-1px 0 0 black,0 1px 0 black,0 -1px 0 black;}.module-item .stab,.import-item .stab{border-radius:3px;display:inline-block;font-size:80%;line-height:1.2;margin-bottom:0;margin-left:.3em;padding:2px;vertical-align:text-bottom;}.module-item.unstable,.import-item.unstable{opacity:0.65;}.since{font-weight:normal;font-size:initial;}.impl-items .since,.impl .since,.methods .since{padding-left:12px;padding-right:2px;position:initial;}.impl-items .srclink,.impl .srclink,.methods .srclink{font-size:17px;font-weight:normal;}.rightside{float:right;}.has-srclink{font-size:16px;margin-bottom:12px;justify-content:space-between;}.variants_table{width:100%;}.variants_table tbody tr td:first-child{width:1%;}td.summary-column{width:100%;}.summary{padding-right:0px;}pre.rust .question-mark{font-weight:bold;}a.test-arrow{display:inline-block;position:absolute;padding:5px 10px 5px 10px;border-radius:5px;font-size:130%;top:5px;right:5px;z-index:1;}a.test-arrow:hover{text-decoration:none;}.section-header:hover a:before{position:absolute;left:-25px;padding-right:10px;content:'\2002\00a7\2002';}.section-header:hover a{text-decoration:none;}.code-attribute{font-weight:300;}.since+.srclink{padding-left:10px;}.item-spacer{width:100%;height:12px;}.out-of-band>span.since{position:initial;font-size:20px;margin-right:5px;}h3.variant{font-weight:600;font-size:1.1em;margin-bottom:10px;border-bottom:none;}.sub-variant h4{font-size:1em;font-weight:400;border-bottom:none;margin-top:0;margin-bottom:0;}.sub-variant{margin-left:24px;margin-bottom:40px;}.sub-variant>.sub-variant-field{margin-left:24px;}.toggle-label{display:inline-block;margin-left:4px;margin-top:3px;}.top-doc .docblock>.section-header:first-child{margin-left:15px;}.top-doc .docblock>.section-header:first-child:hover>a:before{left:-10px;}.docblock>.section-header:first-child{margin-top:0;}:target>code,:target>.code-header{opacity:1;}:target{padding-right:3px;}.information{position:absolute;left:-25px;margin-top:7px;z-index:1;}.tooltip{position:relative;display:inline-block;cursor:pointer;}.tooltip::after{display:none;text-align:center;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;font-size:16px;}.tooltip.ignore::after{content:"This example is not tested";}.tooltip.compile_fail::after{content:"This example deliberately fails to compile";}.tooltip.should_panic::after{content:"This example panics";}.tooltip.edition::after{content:"This code runs with edition " attr(data-edition);}.tooltip::before{content:" ";position:absolute;top:50%;left:16px;margin-top:-5px;border-width:5px;border-style:solid;display:none;}.tooltip:hover::before,.tooltip:hover::after{display:inline;}.tooltip.compile_fail,.tooltip.should_panic,.tooltip.ignore{font-weight:bold;font-size:20px;}.notable-traits-tooltip{display:inline-block;cursor:pointer;}.notable-traits:hover .notable-traits-tooltiptext,.notable-traits .notable-traits-tooltiptext.force-tooltip{display:inline-block;}.notable-traits .notable-traits-tooltiptext{display:none;padding:5px 3px 3px 3px;border-radius:6px;margin-left:5px;z-index:10;font-size:16px;cursor:default;position:absolute;border:1px solid;}.notable-traits-tooltip::after{content:"\00a0\00a0\00a0";}.notable-traits .notable,.notable-traits .docblock{margin:0;}.notable-traits .notable{margin:0;margin-bottom:13px;font-size:19px;font-weight:600;}.notable-traits .docblock code.content{margin:0;padding:0;font-size:20px;}pre.rust.rust-example-rendered{position:relative;}pre.rust{tab-size:4;-moz-tab-size:4;}.search-failed{text-align:center;margin-top:20px;display:none;}.search-failed.active{display:block;}.search-failed>ul{text-align:left;max-width:570px;margin-left:auto;margin-right:auto;}#titles{height:35px;}#titles>button{float:left;width:33.3%;text-align:center;font-size:18px;cursor:pointer;border:0;border-top:2px solid;}#titles>button:not(:last-child){margin-right:1px;width:calc(33.3% - 1px);}#titles>button>div.count{display:inline-block;font-size:16px;}.notable-traits{cursor:pointer;z-index:2;margin-left:5px;}#all-types{text-align:center;border:1px solid;margin:0 10px;margin-bottom:10px;display:block;border-radius:7px;}#all-types>p{margin:5px 0;}#sidebar-toggle{position:fixed;top:30px;left:300px;z-index:10;padding:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;cursor:pointer;font-weight:bold;transition:left .5s;font-size:1.2em;border:1px solid;border-left:0;}#source-sidebar{position:fixed;top:0;bottom:0;left:0;width:300px;z-index:1;overflow:auto;transition:left .5s;border-right:1px solid;}#source-sidebar>.title{font-size:1.5em;text-align:center;border-bottom:1px solid;margin-bottom:6px;}.theme-picker{position:absolute;left:211px;top:19px;}.theme-picker button{outline:none;}#settings-menu,#help-button{position:absolute;top:10px;}#settings-menu{right:0;outline:none;}#theme-picker,#settings-menu,#help-button,#copy-path{padding:4px;width:27px;height:29px;border:1px solid;border-radius:3px;cursor:pointer;}#help-button{right:30px;font-family:"Fira Sans",Arial,sans-serif;text-align:center;font-size:17px;padding-top:2px;}#copy-path{background:initial;margin-left:10px;padding:0;padding-left:2px;border:0;}#theme-choices{display:none;position:absolute;left:0;top:28px;border:1px solid;border-radius:3px;z-index:1;cursor:pointer;}#theme-choices>button{border:none;width:100%;padding:4px 8px;text-align:center;background:rgba(0,0,0,0);}#theme-choices>button:not(:first-child){border-top:1px solid;}kbd{display:inline-block;padding:3px 5px;font:15px monospace;line-height:10px;vertical-align:middle;border:solid 1px;border-radius:3px;box-shadow:inset 0 -1px 0;cursor:default;}.hidden-by-impl-hider,.hidden-by-usual-hider{display:none !important;}#implementations-list>h3>span.in-band{width:100%;}.table-display{width:100%;border:0;border-collapse:collapse;border-spacing:0;font-size:16px;}.table-display tr td:first-child{padding-right:0;}.table-display tr td:last-child{float:right;}.table-display .out-of-band{position:relative;font-size:19px;display:block;}#implementors-list>.impl-items .table-display .out-of-band{font-size:17px;}.table-display td:hover .anchor{display:block;top:2px;left:-5px;}#main>ul{padding-left:10px;}#main>ul>li{list-style:none;}.non-exhaustive{margin-bottom:1em;}div.children{padding-left:27px;display:none;}div.name{cursor:pointer;position:relative;margin-left:16px;}div.files>a{display:block;padding:0 3px;}div.files>a:hover,div.name:hover{background-color:#a14b4b;}div.name.expand+.children{display:block;}div.name::before{content:"\25B6";padding-left:4px;font-size:0.7em;position:absolute;left:-16px;top:4px;}div.name.expand::before{transform:rotate(90deg);left:-15px;top:2px;}details.rustdoc-toggle>summary.hideme{cursor:pointer;}details.rustdoc-toggle>summary{list-style:none;}details.rustdoc-toggle>summary::-webkit-details-marker,details.rustdoc-toggle>summary::marker{display:none;}details.rustdoc-toggle>summary.hideme>span{margin-left:9px;}details.rustdoc-toggle>summary::before{content:"";cursor:pointer;width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;vertical-align:middle;opacity:.5;}details.rustdoc-toggle>summary::after{content:"Expand";overflow:hidden;width:0;height:0;position:absolute;}details.rustdoc-toggle>summary.hideme::after{content:"";}details.rustdoc-toggle>summary:focus::before,details.rustdoc-toggle>summary:hover::before{opacity:1;}details.rustdoc-toggle.top-doc>summary,details.rustdoc-toggle.top-doc>summary::before,details.rustdoc-toggle.non-exhaustive>summary,details.rustdoc-toggle.non-exhaustive>summary::before{font-family:'Fira Sans';font-size:16px;}details.non-exhaustive{margin-bottom:8px;}details.rustdoc-toggle>summary.hideme::before{position:relative;}details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;top:3px;}.impl-items>details.rustdoc-toggle>summary:not(.hideme)::before{position:absolute;left:-24px;}details.rustdoc-toggle[open] >summary.hideme{position:absolute;}details.rustdoc-toggle{position:relative;}details.rustdoc-toggle[open] >summary.hideme>span{display:none;}details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{width:17px;height:max(17px,1.1em);background-repeat:no-repeat;background-position:top left;display:inline-block;content:"";}details.rustdoc-toggle[open] >summary::after,details.rustdoc-toggle[open] >summary.hideme::after{content:"Collapse";}@media (min-width:701px){.docblock>.information:first-child>.tooltip{margin-top:16px;}}@media (max-width:700px){body{padding-top:0px;}.rustdoc>.sidebar{height:45px;min-height:40px;margin:0;margin-left:-15px;padding:0 15px;position:static;z-index:11;}.sidebar>.location{float:right;margin:0px;margin-top:2px;padding:3px 10px 1px 10px;min-height:39px;background:inherit;text-align:left;font-size:24px;}.sidebar .location:empty{padding:0;}.sidebar .logo-container{width:35px;height:35px;margin-top:5px;margin-bottom:5px;float:left;margin-left:50px;}.sidebar .logo-container>img{max-width:35px;max-height:35px;}.sidebar-menu{position:fixed;z-index:10;font-size:2rem;cursor:pointer;width:45px;left:0;text-align:center;display:block;border-bottom:1px solid;border-right:1px solid;height:45px;}.rustdoc.source>.sidebar>.sidebar-menu{display:none;}.sidebar-elems{position:fixed;z-index:1;top:45px;bottom:0;width:246px;left:-246px;overflow-y:auto;border-right:1px solid;}.sidebar>.block.version{overflow:hidden;border-bottom:none;margin-bottom:0;height:100%;padding-left:12px;}.sidebar>.block.version>div.narrow-helper{float:left;width:1px;height:100%;}.sidebar>.block.version>p{margin:0;min-width:55px;display:flex;align-items:center;height:100%;}nav.sub{width:calc(100% - 32px);float:right;}.content{margin-left:0px;}#main,#search{margin-top:45px;padding:0;}#search{margin-left:0;}.anchor{display:none !important;}.theme-picker{left:10px;top:54px;z-index:1;}.notable-traits{position:absolute;left:-22px;top:24px;}#titles>button>div.count{float:left;width:100%;}#titles{height:50px;}.sidebar.mobile{position:fixed;width:100%;margin-left:0;background-color:rgba(0,0,0,0);height:100%;}.sidebar.mobile>div.version{overflow:hidden;max-height:33px;}.sidebar{width:calc(100% + 30px);}.show-it,.sidebar-elems:focus-within{z-index:2;left:0;}.show-it>.block.items{margin:8px 0;}.show-it>.block.items>ul{margin:0;}.show-it>.block.items>ul>li{text-align:center;margin:2px 0;}.show-it>.block.items>ul>li>a{font-size:21px;}#sidebar-filler{position:fixed;left:45px;width:calc(100% - 45px);top:0;height:45px;z-index:-1;border-bottom:1px solid;}#main>details.rustdoc-toggle>summary::before,#main>div>details.rustdoc-toggle>summary::before{left:-11px;}#all-types{margin:10px;}#sidebar-toggle{top:100px;width:30px;font-size:1.5rem;text-align:center;padding:0;}#source-sidebar{z-index:11;}#main>.line-numbers{margin-top:0;}.notable-traits .notable-traits-tooltiptext{left:0;top:100%;}#help-button{display:none;}.item-table{display:block;}.item-row{display:flex;flex-flow:column wrap;}.item-left,.item-right{width:100%;}.search-container>div{width:calc(100% - 32px);}.search-results>a{border-bottom:1px solid #aaa9;padding:5px 0px;}.search-results .result-name,.search-results div.desc,.search-results .result-description{width:100%;}.search-results div.desc,.search-results .result-description,.item-right{padding-left:2em;}}@media print{nav.sub,.content .out-of-band{display:none;}}@media (max-width:464px){#titles,#titles>button{height:73px;}#main,#search{margin-top:100px;}#main>table:not(.table-display) td{word-break:break-word;width:50%;}.search-container>div{display:block;width:calc(100% - 37px);}#crate-search{width:100%;border-radius:4px;border:0;}#crate-search+.search-input{width:calc(100% + 71px);margin-left:-36px;}#theme-picker,#settings-menu{padding:5px;width:31px;height:31px;}#theme-picker{margin-top:-2px;}#settings-menu{top:7px;}.docblock{margin-left:12px;}.docblock code{overflow-wrap:anywhere;}}.scraped-example-title{font-family:'Fira Sans';}.scraped-example:not(.expanded) .code-wrapper pre.line-numbers{overflow:hidden;max-height:240px;}.scraped-example:not(.expanded) .code-wrapper .example-wrap pre.rust{overflow-y:hidden;max-height:240px;padding-bottom:0;}.scraped-example .code-wrapper .prev{position:absolute;top:0.25em;right:2.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .next{position:absolute;top:0.25em;right:1.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper .expand{position:absolute;top:0.25em;right:0.25em;z-index:100;cursor:pointer;}.scraped-example .code-wrapper{position:relative;display:flex;flex-direction:row;flex-wrap:wrap;width:100%;}.scraped-example:not(.expanded) .code-wrapper:before{content:" ";width:100%;height:5px;position:absolute;z-index:100;top:0;background:linear-gradient(to bottom,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper:after{content:" ";width:100%;height:5px;position:absolute;z-index:100;bottom:0;background:linear-gradient(to top,rgba(255,255,255,1),rgba(255,255,255,0));}.scraped-example:not(.expanded) .code-wrapper{overflow:hidden;max-height:240px;}.scraped-example .code-wrapper .line-numbers{margin:0;padding:14px 0;}.scraped-example .code-wrapper .line-numbers span{padding:0 14px;}.scraped-example .code-wrapper .example-wrap{flex:1;overflow-x:auto;overflow-y:hidden;margin-bottom:0;}.scraped-example .code-wrapper .example-wrap pre.rust{overflow-x:inherit;width:inherit;overflow-y:hidden;}.scraped-example .example-wrap .rust span.highlight{background:#fcffd6;}.scraped-example .example-wrap .rust span.highlight.focus{background:#f6fdb0;}.more-examples-toggle{margin-top:10px;}.more-examples-toggle summary{color:#999;font-family:'Fira Sans';}.more-scraped-examples{margin-left:25px;display:flex;flex-direction:row;width:calc(100% - 25px);}.more-scraped-examples-inner{width:calc(100% - 20px);}.toggle-line{align-self:stretch;margin-right:10px;margin-top:5px;padding:0 4px;cursor:pointer;}.toggle-line:hover .toggle-line-inner{background:#aaa;}.toggle-line-inner{min-width:2px;background:#ddd;height:100%;}.more-scraped-examples .scraped-example{margin-bottom:20px;}.more-scraped-examples .scraped-example:last-child{margin-bottom:0;}.example-links a{margin-top:20px;font-family:'Fira Sans';}.example-links ul{margin-bottom:0;}details.undocumented[open] >summary::before,details.rustdoc-toggle[open] >summary::before,details.rustdoc-toggle[open] >summary.hideme::before{background-image:url(toggle-minus.svg);}details.undocumented>summary::before,details.rustdoc-toggle>summary::before{background-image:url(toggle-plus.svg);} \ No newline at end of file diff --git a/search-index.js b/search-index.js deleted file mode 100644 index 910d5e6e2..000000000 --- a/search-index.js +++ /dev/null @@ -1,208 +0,0 @@ -var searchIndex = JSON.parse('{\ -"arch":{"doc":"","t":[5],"n":["main"],"q":["arch"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"base32":{"doc":"","t":[5],"n":["main"],"q":["base32"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"base64":{"doc":"","t":[5],"n":["main"],"q":["base64"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"basename":{"doc":"","t":[5],"n":["main"],"q":["basename"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"basenc":{"doc":"","t":[5],"n":["main"],"q":["basenc"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"cat":{"doc":"","t":[5],"n":["main"],"q":["cat"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"chcon":{"doc":"","t":[5],"n":["main"],"q":["chcon"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"chgrp":{"doc":"","t":[5],"n":["main"],"q":["chgrp"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"chmod":{"doc":"","t":[5],"n":["main"],"q":["chmod"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"chown":{"doc":"","t":[5],"n":["main"],"q":["chown"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"chroot":{"doc":"","t":[5],"n":["main"],"q":["chroot"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"cksum":{"doc":"","t":[5],"n":["main"],"q":["cksum"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"comm":{"doc":"","t":[5],"n":["main"],"q":["comm"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"coreutils":{"doc":"","t":[6,17,5,5,5,5,5,5,5],"n":["UtilityMap","VERSION","binary_path","gen_completions","gen_coreutils_app","main","name","usage","util_map"],"q":["coreutils","","","","","","","",""],"d":["","","","Prints completions for the utility in the first parameter …","","","","",""],"i":[0,0,0,0,0,0,0,0,0],"f":[null,null,[[],["pathbuf",3]],[[["hashmap",3,[["str",15]]]],["never",15]],[[["hashmap",3,[["str",15]]]],["app",3]],[[]],[[["path",3]],["str",15]],[[["hashmap",3],["str",15]]],[[],["hashmap",3,[["str",15]]]]],"p":[]},\ -"cp":{"doc":"","t":[5],"n":["main"],"q":["cp"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"csplit":{"doc":"","t":[5],"n":["main"],"q":["csplit"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"cut":{"doc":"","t":[5],"n":["main"],"q":["cut"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"date":{"doc":"","t":[5],"n":["main"],"q":["date"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"dd":{"doc":"","t":[5],"n":["main"],"q":["dd"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"df":{"doc":"","t":[5],"n":["main"],"q":["df"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"dircolors":{"doc":"","t":[5],"n":["main"],"q":["dircolors"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"dirname":{"doc":"","t":[5],"n":["main"],"q":["dirname"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"du":{"doc":"","t":[5],"n":["main"],"q":["du"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"echo":{"doc":"","t":[5],"n":["main"],"q":["echo"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"env":{"doc":"","t":[5],"n":["main"],"q":["env"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"expand":{"doc":"","t":[5],"n":["main"],"q":["expand"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"expr":{"doc":"","t":[5],"n":["main"],"q":["expr"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"factor":{"doc":"","t":[5],"n":["main"],"q":["factor"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"false":{"doc":"","t":[5],"n":["main"],"q":["false"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"fmt":{"doc":"","t":[5],"n":["main"],"q":["fmt"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"fold":{"doc":"","t":[5],"n":["main"],"q":["fold"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"groups":{"doc":"","t":[5],"n":["main"],"q":["groups"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"hashsum":{"doc":"","t":[5],"n":["main"],"q":["hashsum"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"head":{"doc":"","t":[5],"n":["main"],"q":["head"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"hostid":{"doc":"","t":[5],"n":["main"],"q":["hostid"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"hostname":{"doc":"","t":[5],"n":["main"],"q":["hostname"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"id":{"doc":"","t":[5],"n":["main"],"q":["id"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"install":{"doc":"","t":[5],"n":["main"],"q":["install"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"join":{"doc":"","t":[5],"n":["main"],"q":["join"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"kill":{"doc":"","t":[5],"n":["main"],"q":["kill"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"libstdbuf":{"doc":"","t":[5],"n":["__stdbuf"],"q":["libstdbuf"],"d":["Safety"],"i":[0],"f":[[[]]],"p":[]},\ -"link":{"doc":"","t":[5],"n":["main"],"q":["link"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"ln":{"doc":"","t":[5],"n":["main"],"q":["ln"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"logname":{"doc":"","t":[5],"n":["main"],"q":["logname"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"ls":{"doc":"","t":[5],"n":["main"],"q":["ls"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"mkdir":{"doc":"","t":[5],"n":["main"],"q":["mkdir"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"mkfifo":{"doc":"","t":[5],"n":["main"],"q":["mkfifo"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"mknod":{"doc":"","t":[5],"n":["main"],"q":["mknod"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"mktemp":{"doc":"","t":[5],"n":["main"],"q":["mktemp"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"more":{"doc":"","t":[5],"n":["main"],"q":["more"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"mv":{"doc":"","t":[5],"n":["main"],"q":["mv"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"nice":{"doc":"","t":[5],"n":["main"],"q":["nice"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"nl":{"doc":"","t":[5],"n":["main"],"q":["nl"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"nohup":{"doc":"","t":[5],"n":["main"],"q":["nohup"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"nproc":{"doc":"","t":[5],"n":["main"],"q":["nproc"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"numfmt":{"doc":"","t":[5],"n":["main"],"q":["numfmt"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"od":{"doc":"","t":[5],"n":["main"],"q":["od"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"paste":{"doc":"","t":[5],"n":["main"],"q":["paste"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"pathchk":{"doc":"","t":[5],"n":["main"],"q":["pathchk"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"pinky":{"doc":"","t":[5],"n":["main"],"q":["pinky"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"pr":{"doc":"","t":[5],"n":["main"],"q":["pr"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"printenv":{"doc":"","t":[5],"n":["main"],"q":["printenv"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"printf":{"doc":"","t":[5],"n":["main"],"q":["printf"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"ptx":{"doc":"","t":[5],"n":["main"],"q":["ptx"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"pwd":{"doc":"","t":[5],"n":["main"],"q":["pwd"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"readlink":{"doc":"","t":[5],"n":["main"],"q":["readlink"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"realpath":{"doc":"","t":[5],"n":["main"],"q":["realpath"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"relpath":{"doc":"","t":[5],"n":["main"],"q":["relpath"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"rm":{"doc":"","t":[5],"n":["main"],"q":["rm"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"rmdir":{"doc":"","t":[5],"n":["main"],"q":["rmdir"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"runcon":{"doc":"","t":[5],"n":["main"],"q":["runcon"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"seq":{"doc":"","t":[5],"n":["main"],"q":["seq"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"shred":{"doc":"","t":[5],"n":["main"],"q":["shred"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"shuf":{"doc":"","t":[5],"n":["main"],"q":["shuf"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"sleep":{"doc":"","t":[5],"n":["main"],"q":["sleep"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"sort":{"doc":"","t":[5],"n":["main"],"q":["sort"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"split":{"doc":"","t":[5],"n":["main"],"q":["split"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"stat":{"doc":"","t":[5],"n":["main"],"q":["stat"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"stdbuf":{"doc":"","t":[5],"n":["main"],"q":["stdbuf"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"sum":{"doc":"","t":[5],"n":["main"],"q":["sum"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"sync":{"doc":"","t":[5],"n":["main"],"q":["sync"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"tac":{"doc":"","t":[5],"n":["main"],"q":["tac"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"tail":{"doc":"","t":[5],"n":["main"],"q":["tail"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"tee":{"doc":"","t":[5],"n":["main"],"q":["tee"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"test":{"doc":"","t":[5],"n":["main"],"q":["test"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"timeout":{"doc":"","t":[5],"n":["main"],"q":["timeout"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"touch":{"doc":"","t":[5],"n":["main"],"q":["touch"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"tr":{"doc":"","t":[5],"n":["main"],"q":["tr"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"true":{"doc":"","t":[5],"n":["main"],"q":["true"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"truncate":{"doc":"","t":[5],"n":["main"],"q":["truncate"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"tsort":{"doc":"","t":[5],"n":["main"],"q":["tsort"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"tty":{"doc":"","t":[5],"n":["main"],"q":["tty"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"uname":{"doc":"","t":[5],"n":["main"],"q":["uname"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"unexpand":{"doc":"","t":[5],"n":["main"],"q":["unexpand"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"uniq":{"doc":"","t":[5],"n":["main"],"q":["uniq"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"unlink":{"doc":"","t":[5],"n":["main"],"q":["unlink"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"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,7,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","BASE_CMD_PARSE_ERROR","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,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,null,[[["str",15]],["app",3]],[[]],[[]],null,[[]],[[["argmatches",3]],["uresult",6,[["config",3]]]],[[["config",3],["stdin",3]],["uresult",6,[["box",3,[["read",8]]]]]],[[["format",4],["option",4,[["usize",15]]],["bool",15],["bool",15]],["uresult",6]],null,[[]],null,[[["str",15],["str",15]],["uresult",6,[["config",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,5,5,3,8,3,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,12,12,5,5,11,11,10,11,11,11,11,12,12,11,11,11,11,11,11,11,11,12,5,12,12,12,12,5],"n":["entries","uu_app","uumain","Group","Locate","Passwd","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","fmt","fmt","from","from","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","into","into","locate","locate","locate","locate","locate","name","name","to_owned","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"],"q":["uu_chgrp","","","uu_chgrp::entries","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"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 passwd.pw_gid","AKA group.gr_gid","","","","","","","","","","AKA passwd.pw_name","AKA group.gr_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,1,1,2,1,2,1,2,1,2,1,2,1,2,0,0,1,2,0,0,1,2,3,1,1,2,2,1,2,1,2,1,2,1,2,1,2,1,0,1,1,1,1,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,[[],["vec",3,[["u32",15],["global",3]]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[],["group",3]],[[]],[[]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[]],[[]],[[],["result",4,[["vec",3,[["u32",15],["global",3]]],["error",3]]]],[[["option",4,[["u32",15]]]],["result",4,[["vec",3,[["u32",15],["global",3]]],["error",3]]]],null,null,[[["u32",15]],["result",4,[["string",3],["error",3]]]],[[["str",15]],["result",4,[["u32",15],["error",3]]]],[[]],[[]],[[],["result",4,[["error",3]]]],[[["str",15]],["result",4,[["passwd",3],["error",3]]]],[[["u32",15]],["result",4,[["passwd",3],["error",3]]]],[[["u32",15]],["result",4,[["group",3],["error",3]]]],[[["str",15]],["result",4,[["group",3],["error",3]]]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[["u32",15]],["result",4,[["string",3],["error",3]]]],null,null,null,null,[[["str",15]],["result",4,[["u32",15],["error",3]]]]],"p":[[3,"Passwd"],[3,"Group"],[8,"Locate"]]},\ -"uu_chmod":{"doc":"","t":[5,5,5],"n":["is_symlink","uu_app","uumain"],"q":["uu_chmod","",""],"d":["","",""],"i":[0,0,0],"f":[[[["asref",8,[["path",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,12,12,11,11,10,11,11,11,11,12,12,11,11,11,11,11,11,11,11,12,12,12,12,12,5,5,3,8,3,5,5,12,12,5,5,10,12,12,12,5,12,12,12,12,5],"n":["Group","Locate","Passwd","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","entries","fmt","fmt","from","from","gid","gid","into","into","locate","locate","locate","locate","locate","name","name","to_owned","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","gid","gid","gid2grp","grp2gid","locate","name","name","uid","uid2usr","user_dir","user_info","user_passwd","user_shell","usr2uid"],"q":["uu_chown","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_chown::entries","","","","","","","","","","","","","","","","","",""],"d":["","Fetch desired entry.","","This is a wrapper function for libc::getgrouplist.","","","","","","","","","Get password/group file entry","","","","","AKA passwd.pw_gid","AKA group.gr_gid","","","","","","","","AKA passwd.pw_name","AKA group.gr_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…","AKA passwd.pw_gid","AKA group.gr_gid","","","","AKA passwd.pw_name","AKA group.gr_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,1,1,2,1,2,1,2,1,2,0,1,2,1,2,1,2,1,2,3,1,1,2,2,1,2,1,2,1,2,1,2,1,2,1,1,1,1,1,0,0,0,0,0,0,0,1,2,0,0,3,1,2,1,0,1,1,1,1,0],"f":[null,null,null,[[],["vec",3,[["u32",15],["global",3]]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[],["group",3]],[[]],[[]],null,[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[]],[[]],null,null,[[]],[[]],[[],["result",4,[["error",3]]]],[[["u32",15]],["result",4,[["passwd",3],["error",3]]]],[[["str",15]],["result",4,[["passwd",3],["error",3]]]],[[["u32",15]],["result",4,[["group",3],["error",3]]]],[[["str",15]],["result",4,[["group",3],["error",3]]]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,null,null,null,null,[[],["app",3]],[[],["i32",15]],null,null,null,[[],["result",4,[["vec",3,[["u32",15],["global",3]]],["error",3]]]],[[["option",4,[["u32",15]]]],["result",4,[["vec",3,[["u32",15],["global",3]]],["error",3]]]],null,null,[[["u32",15]],["result",4,[["string",3],["error",3]]]],[[["str",15]],["result",4,[["u32",15],["error",3]]]],[[],["result",4,[["error",3]]]],null,null,null,[[["u32",15]],["result",4,[["string",3],["error",3]]]],null,null,null,null,[[["str",15]],["result",4,[["u32",15],["error",3]]]]],"p":[[3,"Passwd"],[3,"Group"],[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":[]},\ -"uu_cp":{"doc":"","t":[13,13,4,13,13,13,4,13,13,4,6,13,4,13,13,13,13,13,13,13,13,13,13,13,13,13,13,3,4,13,4,13,13,6,6,13,13,13,13,6,6,4,13,13,13,13,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,11,11,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,5,11,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,5,5,5,12,12,12,12,12,12,12,12,12,12,12,12],"n":["Always","AttrOnly","Attribute","Auto","Backup","Clobber","ClobberMode","Context","Copy","CopyMode","CopyResult","Directory","Error","Error","File","Force","Interactive","InvalidArgument","IoErr","IoErrContext","Link","Links","Mode","Never","NoClobber","NotAllFilesCopied","NotImplemented","Options","OverwriteMode","Ownership","ReflinkMode","RemoveDestination","Skipped","Source","SourceSlice","Sparse","Standard","StripPrefixError","SymLink","Target","TargetSlice","TargetType","Timestamps","Update","WalkDirErr","Xattr","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","cause","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","code","eq","eq","eq","eq","equivalent","equivalent","equivalent","equivalent","ficlone","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_str","into","into","into","into","into","into","into","into","localize_to_target","ne","partial_cmp","paths_refer_to_same_file","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","uu_app","uumain","verify_target_type","0","0","0","0","0","0","0","0","0","1","0","0"],"q":["uu_cp","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_cp::Error","","","","","","","","","","uu_cp::OverwriteMode",""],"d":["","","","","Invalid arguments to backup","Default Always overwrite existing files","Specifies whether when overwrite files","","","","","","","General copy error","","","Prompt before overwriting a file","Result of a skipped file","Simple io::Error wrapper","Wrapper for io::Error with path context","","","","","Never overwrite a file","Represents the state when a non-fatal error has occurred …","All standard options are included as an an implementation …","Re-usable, extensible copy options","Specifies whether when overwrite files","","Possible arguments for --reflink.","","Result of a skipped file","","","","","Simple std::path::StripPrefixError wrapper","","","","Specifies the expected file type of copy target","","","Simple walkdir::Error wrapper","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Remove the root prefix from source and prefix it with …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Generate an error message if target is not the correct …","","","","","","","","","","","",""],"i":[1,2,0,1,3,4,0,5,2,0,0,6,0,3,6,7,4,3,3,3,2,5,5,1,4,3,3,0,0,5,0,7,3,0,0,2,7,3,2,0,0,0,5,2,3,5,6,2,8,3,7,4,1,5,6,2,8,3,7,4,1,5,3,7,4,1,5,7,4,1,5,5,3,7,4,1,5,7,4,1,5,0,3,3,5,6,2,8,3,3,3,3,3,3,3,3,7,4,1,5,5,6,2,8,3,7,4,1,5,0,4,5,0,7,4,1,5,3,6,2,8,3,7,4,1,5,6,2,8,3,7,4,1,5,6,2,8,3,7,4,1,5,0,0,0,9,10,11,12,13,14,15,16,17,10,18,19],"f":[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,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["option",4,[["error",8]]]],[[],["clobbermode",4]],[[],["overwritemode",4]],[[],["reflinkmode",4]],[[],["attribute",4]],[[]],[[]],[[]],[[]],[[["attribute",4]],["ordering",4]],[[],["i32",15]],[[["clobbermode",4]],["bool",15]],[[["overwritemode",4]],["bool",15]],[[["reflinkmode",4]],["bool",15]],[[["attribute",4]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["c_int",6]],["c_int",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["context",3,[["string",3],["error",3]]]],["error",4]],[[["context",3,[["str",15],["error",3]]]],["error",4]],[[["stripprefixerror",3]],["error",4]],[[["error",3]],["error",4]],[[["str",15]],["error",4]],[[["string",3]],["error",4]],[[["error",3]],["error",4]],[[]],[[]],[[]],[[]],[[["str",15]],["copyresult",6,[["attribute",4]]]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["path",3],["path",3],["path",3]],["copyresult",6,[["pathbuf",3]]]],[[["overwritemode",4]],["bool",15]],[[["attribute",4]],["option",4,[["ordering",4]]]],[[["path",3],["path",3]],["result",6,[["bool",15]]]],[[]],[[]],[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]],[[["path",3],["targettype",4]],["copyresult",6]],null,null,null,null,null,null,null,null,null,null,null,null],"p":[[4,"ReflinkMode"],[4,"CopyMode"],[4,"Error"],[4,"OverwriteMode"],[4,"Attribute"],[4,"TargetType"],[4,"ClobberMode"],[3,"Options"],[13,"IoErr"],[13,"IoErrContext"],[13,"Error"],[13,"WalkDirErr"],[13,"StripPrefixError"],[13,"Skipped"],[13,"InvalidArgument"],[13,"NotImplemented"],[13,"Backup"],[13,"Clobber"],[13,"Interactive"]]},\ -"uu_csplit":{"doc":"","t":[3,11,11,5,11,11,11,11,11,5,5],"n":["CsplitOptions","borrow","borrow_mut","csplit","from","into","try_from","try_into","type_id","uu_app","uumain"],"q":["uu_csplit","","","","","","","","","",""],"d":["Command line options for csplit.","","","Splits a file into severals according to the command line …","","","","","","",""],"i":[0,1,1,0,1,1,1,1,1,0,0],"f":[null,[[]],[[]],[[["csplitoptions",3],["vec",3,[["pattern",4]]]],["result",4,[["cspliterror",4]]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[3,"CsplitOptions"]]},\ -"uu_cut":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_cut",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_date":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_date",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_dd":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_dd",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_df":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_df",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_dircolors":{"doc":"","t":[13,4,13,8,13,11,11,11,11,10,11,5,11,10,10,11,11,11,5,5],"n":["CShell","OutputFmt","Shell","StrUtils","Unknown","borrow","borrow_mut","eq","fmt","fnmatch","from","guess_syntax","into","purify","split_two","try_from","try_into","type_id","uu_app","uumain"],"q":["uu_dircolors","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","Remove comments and trim whitespace","Like split_whitespace() but only produce 2 components","","","","",""],"i":[1,0,1,0,1,1,1,1,1,2,1,0,1,2,2,1,1,1,0,0],"f":[null,null,null,null,null,[[]],[[]],[[["outputfmt",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["str",15]],["bool",15]],[[]],[[],["outputfmt",4]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[4,"OutputFmt"],[8,"StrUtils"]]},\ -"uu_dirname":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_dirname",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_du":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_du",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_echo":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_echo",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_env":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_env",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_expand":{"doc":"","t":[0,5,5,7,7,7,7],"n":["options","uu_app","uumain","FILES","INITIAL","NO_UTF8","TABS"],"q":["uu_expand","","","uu_expand::options","","",""],"d":["","","","","","",""],"i":[0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null],"p":[]},\ -"uu_expr":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_expr",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_factor":{"doc":"","t":[3,11,11,11,11,11,11,11,5,11,11,11,11,11,0,11,11,0,11,11,11,11,11,5,5,11,5,17,17,17,5,5],"n":["Factors","add","borrow","borrow_mut","clone","clone_into","eq","equivalent","factor","fmt","fmt","from","into","ne","numeric","one","push","table","to_owned","to_string","try_from","try_into","type_id","uu_app","uumain","vzip","gcd","CHUNK_SIZE","NEXT_PRIME","PRIME_INVERSIONS_U64","factor","factor_chunk"],"q":["uu_factor","","","","","","","","","","","","","","","","","","","","","","","","","","uu_factor::numeric","uu_factor::table","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,1,1,1,1,1,1,1,0,1,1,1,1,1,0,1,1,0,1,1,1,1,1,0,0,1,0,0,0,0,0,0],"f":[null,[[["u64",15],["u8",15]]],[[]],[[]],[[],["factors",3]],[[]],[[["factors",3]],["bool",15]],[[],["bool",15]],[[["u64",15]],["factors",3]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["factors",3]],["bool",15]],null,[[],["factors",3]],[[["u64",15]]],null,[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]],[[]],[[["u64",15],["u64",15]],["u64",15]],null,null,null,[[["u64",15],["factors",3]]],[[]]],"p":[[3,"Factors"]]},\ -"uu_false":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_false",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_fmt":{"doc":"","t":[6,3,11,11,11,11,11,11,11,5,5],"n":["FileOrStdReader","FmtOptions","borrow","borrow_mut","from","into","try_from","try_into","type_id","uu_app","uumain"],"q":["uu_fmt","","","","","","","","","",""],"d":["","","","","","","","","","",""],"i":[0,0,1,1,1,1,1,1,1,0,0],"f":[null,null,[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[3,"FmtOptions"]]},\ -"uu_fold":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_fold",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_groups":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_groups",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_hashsum":{"doc":"","t":[5,5,5],"n":["uu_app_common","uu_app_custom","uumain"],"q":["uu_hashsum","",""],"d":["","",""],"i":[0,0,0],"f":[[[],["app",3]],[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_head":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_head",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_hostid":{"doc":"","t":[5,5,5],"n":["gethostid","uu_app","uumain"],"q":["uu_hostid","",""],"d":["","",""],"i":[0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_hostname":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_hostname",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_id":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_id",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_install":{"doc":"","t":[3,13,4,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5],"n":["Behavior","Directory","MainFunction","Standard","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","equivalent","from","from","into","into","mode","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uu_app","uumain"],"q":["uu_install","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","Create directories","","Install files to locations (primary functionality)","","","","","","","","","","","","","Determine the mode for chmod after copy.","","","","","","","","",""],"i":[0,1,0,1,2,1,2,1,1,1,1,1,2,1,2,1,2,1,2,1,2,1,2,1,0,0],"f":[null,null,null,null,[[]],[[]],[[]],[[]],[[],["mainfunction",4]],[[]],[[["mainfunction",4]],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[],["u32",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[4,"MainFunction"],[3,"Behavior"]]},\ -"uu_join":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_join",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_kill":{"doc":"","t":[13,13,4,13,11,11,11,11,11,11,0,11,11,11,11,5,5,7,7,7,7,7],"n":["Kill","List","Mode","Table","borrow","borrow_mut","clone","clone_into","from","into","options","to_owned","try_from","try_into","type_id","uu_app","uumain","LIST","PIDS_OR_SIGNALS","SIGNAL","TABLE","TABLE_OLD"],"q":["uu_kill","","","","","","","","","","","","","","","","","uu_kill::options","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,0,1,1,1,1,1,1,1,0,1,1,1,1,0,0,0,0,0,0,0],"f":[null,null,null,null,[[]],[[]],[[],["mode",4]],[[]],[[]],[[]],null,[[]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]],null,null,null,null,null],"p":[[4,"Mode"]]},\ -"uu_link":{"doc":"","t":[0,5,5,7],"n":["options","uu_app","uumain","FILES"],"q":["uu_link","","","uu_link::options"],"d":["","","",""],"i":[0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null],"p":[]},\ -"uu_ln":{"doc":"","t":[13,13,13,4,3,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,11,11,11,5,5],"n":["Force","Interactive","NoClobber","OverwriteMode","Settings","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","equivalent","fmt","from","from","into","into","is_symlink","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uu_app","uumain"],"q":["uu_ln","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,1,0,0,2,1,2,1,1,1,1,1,1,2,1,2,1,0,1,2,1,2,1,2,1,0,0],"f":[null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["overwritemode",4]],[[]],[[["overwritemode",4]],["bool",15]],[[],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[["asref",8,[["path",3]]]],["bool",15]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[4,"OverwriteMode"],[3,"Settings"]]},\ -"uu_logname":{"doc":"","t":[5,5,5],"n":["getlogin","uu_app","uumain"],"q":["uu_logname","",""],"d":["","",""],"i":[0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_ls":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0,0,0,0,0,0,0,0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","AUTHOR","COLOR","CONTEXT","DIRECTORY","FORMAT","FULL_TIME","HIDE","HIDE_CONTROL_CHARS","IGNORE","IGNORE_BACKUPS","INDICATOR_STYLE","INODE","NO_GROUP","PATHS","QUOTING_STYLE","RECURSIVE","REVERSE","SHOW_CONTROL_CHARS","SORT","TIME","TIME_STYLE","WIDTH","dereference","files","format","indicator_style","quoting","size","sort","time","ALL","ARGS","DIR_ARGS","ALL","ALMOST_ALL","ACROSS","COLUMNS","COMMAS","LONG","LONG_NO_GROUP","LONG_NO_OWNER","LONG_NUMERIC_UID_GID","ONE_LINE","CLASSIFY","FILE_TYPE","SLASH","C","ESCAPE","LITERAL","HUMAN_READABLE","SI","EXTENSION","NONE","SIZE","TIME","VERSION","ACCESS","CHANGE"],"q":["uu_ls","","","uu_ls::options","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_ls::options::dereference","","","uu_ls::options::files","","uu_ls::options::format","","","","","","","","uu_ls::options::indicator_style","","","uu_ls::options::quoting","","","uu_ls::options::size","","uu_ls::options::sort","","","","","uu_ls::options::time",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[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,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,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,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,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"p":[]},\ -"uu_mkdir":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_mkdir",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_mkfifo":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_mkfifo",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_mknod":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_mknod",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_mktemp":{"doc":"","t":[5,5,5],"n":["dry_exec","uu_app","uumain"],"q":["uu_mktemp","",""],"d":["","",""],"i":[0,0,0],"f":[[[["pathbuf",3],["str",15],["usize",15],["str",15]],["uresult",6]],[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_more":{"doc":"","t":[0,5,5,17,17,17,17,17,17,17,17,17,17,17,17],"n":["options","uu_app","uumain","CLEAN_PRINT","FILES","FROM_LINE","LINES","LOGICAL","NO_PAUSE","NUMBER","PATTERN","PLAIN","PRINT_OVER","SILENT","SQUEEZE"],"q":["uu_more","","","uu_more::options","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","",""],"i":[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],"p":[]},\ -"uu_mv":{"doc":"","t":[3,13,13,13,4,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5],"n":["Behavior","Force","Interactive","NoClobber","OverwriteMode","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","eq","equivalent","from","from","into","into","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","uu_app","uumain"],"q":["uu_mv","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,1,1,1,0,2,1,2,1,1,1,1,1,2,1,2,1,1,2,1,2,1,2,1,0,0],"f":[null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["overwritemode",4]],[[]],[[["overwritemode",4]],["bool",15]],[[],["bool",15]],[[]],[[]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]]],"p":[[4,"OverwriteMode"],[3,"Behavior"]]},\ -"uu_nice":{"doc":"","t":[0,5,5,7,7],"n":["options","uu_app","uumain","ADJUSTMENT","COMMAND"],"q":["uu_nice","","","uu_nice::options",""],"d":["","","","",""],"i":[0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null],"p":[]},\ -"uu_nl":{"doc":"","t":[3,11,11,11,11,0,11,11,11,5,5,17,17,17,17,17,17,17,17,17,17,17,17],"n":["Settings","borrow","borrow_mut","from","into","options","try_from","try_into","type_id","uu_app","uumain","BODY_NUMBERING","FILE","FOOTER_NUMBERING","HEADER_NUMBERING","JOIN_BLANK_LINES","LINE_INCREMENT","NO_RENUMBER","NUMBER_FORMAT","NUMBER_SEPARATOR","NUMBER_WIDTH","SECTION_DELIMITER","STARTING_LINE_NUMBER"],"q":["uu_nl","","","","","","","","","","","uu_nl::options","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,1,1,1,1,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"f":[null,[[]],[[]],[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]],null,null,null,null,null,null,null,null,null,null,null,null],"p":[[3,"Settings"]]},\ -"uu_nohup":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_nohup",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_nproc":{"doc":"","t":[17,5,5],"n":["_SC_NPROCESSORS_CONF","uu_app","uumain"],"q":["uu_nproc","",""],"d":["","",""],"i":[0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_numfmt":{"doc":"","t":[0,0,0,5,5,13,13,13,4,11,11,11,11,11,11,11,11,11,11,11,12,12,12,3,11,11,5,5,11,11,11,11,12,11,11,11,17,13,17,17,17,17,13,17,17,17,13,3,17,17,4,17,17,17,13,3,13,11,11,11,11,11,11,11,11,12,12,11,11,11,12,12,11,11,11,12,11,12,12,12,11,12,11,11,11,11,11,11,11,11,11],"n":["errors","format","options","uu_app","uumain","FormattingError","IllegalArgument","IoError","NumfmtError","borrow","borrow_mut","code","fmt","fmt","from","into","to_string","try_from","try_into","type_id","0","0","0","WhitespaceSplitter","borrow","borrow_mut","div_round","format_and_print","from","into","into_iter","next","s","try_from","try_into","type_id","DELIMITER","Down","FIELD","FIELD_DEFAULT","FROM","FROM_DEFAULT","FromZero","HEADER","HEADER_DEFAULT","NUMBER","Nearest","NumfmtOptions","PADDING","ROUND","RoundMethod","SUFFIX","TO","TO_DEFAULT","TowardsZero","TransformOptions","Up","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","delimiter","fields","from","from","from","from","header","into","into","into","padding","round","round","suffix","to","to_owned","transform","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id"],"q":["uu_numfmt","","","","","uu_numfmt::errors","","","","","","","","","","","","","","","uu_numfmt::errors::NumfmtError","","","uu_numfmt::format","","","","","","","","","","","","","uu_numfmt::options","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","Iterate over a line’s fields, where each field is a …","","","Divide numerator by denominator, with rounding.","Format a line of text according to the selected options.","","","","Yield the next field in the input string as a tuple …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,0,0,0,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,3,4,0,5,5,0,0,5,5,5,5,5,5,5,5,0,6,0,0,0,0,6,0,0,0,6,0,0,0,0,0,0,0,6,0,6,7,8,6,7,8,6,6,6,8,8,7,8,6,7,8,7,8,6,8,6,8,8,7,6,8,7,8,6,7,8,6,7,8,6],"f":[null,null,null,[[],["app",3]],[[],["i32",15]],null,null,null,null,[[]],[[]],[[],["i32",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,[[]],[[]],[[["f64",15],["f64",15],["roundmethod",4]],["f64",15]],[[["str",15],["numfmtoptions",3]],["result",4,[["string",3]]]],[[]],[[]],[[]],[[],["option",4]],null,[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[],["roundmethod",4]],[[]],null,null,[[]],[[]],[[]],null,null,[[]],[[]],[[]],null,[[["f64",15]],["f64",15]],null,null,null,[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]]],"p":[[4,"NumfmtError"],[13,"IoError"],[13,"IllegalArgument"],[13,"FormattingError"],[3,"WhitespaceSplitter"],[4,"RoundMethod"],[3,"TransformOptions"],[3,"NumfmtOptions"]]},\ -"uu_od":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_od",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_paste":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_paste",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_pathchk":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_pathchk",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_pinky":{"doc":"","t":[8,10,5,5],"n":["Capitalize","capitalize","uu_app","uumain"],"q":["uu_pinky","","",""],"d":["","","",""],"i":[0,1,0,0],"f":[null,[[],["string",3]],[[],["app",3]],[[],["i32",15]]],"p":[[8,"Capitalize"]]},\ -"uu_pr":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_pr",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_printenv":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_printenv",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_printf":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_printf",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_ptx":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_ptx",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_pwd":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_pwd",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_readlink":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_readlink",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_realpath":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_realpath",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_relpath":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_relpath",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_rm":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_rm",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_rmdir":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_rmdir",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_runcon":{"doc":"","t":[0,5,5,17,17,17,17,17],"n":["options","uu_app","uumain","COMPUTE","RANGE","ROLE","TYPE","USER"],"q":["uu_runcon","","","uu_runcon::options","","","",""],"d":["","","","","","","",""],"i":[0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null],"p":[]},\ -"uu_seq":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_seq",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_shred":{"doc":"","t":[0,5,5,17,17,17,17,17,17,17,17],"n":["options","uu_app","uumain","EXACT","FILE","FORCE","ITERATIONS","REMOVE","SIZE","VERBOSE","ZERO"],"q":["uu_shred","","","uu_shred::options","","","","","","",""],"d":["","","","","","","","","","",""],"i":[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],"p":[]},\ -"uu_shuf":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_shuf",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_sleep":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_sleep",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_sort":{"doc":"","t":[4,3,13,13,3,13,13,13,3,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,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,11,11,11,11,12],"n":["GeneralF64ParseResult","GlobalSettings","Infinity","Invalid","Line","NaN","NegInfinity","Number","Output","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","default","deref","deref","deref","deref","deref_mut","deref_mut","deref_mut","deref_mut","drop","drop","drop","drop","eq","fmt","fmt","from","from","from","from","init","init","init","init","into","into","into","into","ne","partial_cmp","to_owned","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","uu_app","uumain","vzip","vzip","vzip","vzip","0"],"q":["uu_sort","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_sort::GeneralF64ParseResult"],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[0,0,1,1,0,1,1,1,0,2,3,4,1,2,3,4,1,3,4,1,3,4,1,3,2,3,4,1,2,3,4,1,2,3,4,1,1,4,1,2,3,4,1,2,3,4,1,2,3,4,1,1,1,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,0,0,2,3,4,1,5],"f":[null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[],["globalsettings",3]],[[],["line",3]],[[],["generalf64parseresult",4]],[[]],[[]],[[]],[[],["globalsettings",3]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["usize",15]]],[[["generalf64parseresult",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[],["usize",15]],[[]],[[]],[[]],[[]],[[["generalf64parseresult",4]],["bool",15]],[[["generalf64parseresult",4]],["option",4,[["ordering",4]]]],[[]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]],[[]],[[]],[[]],[[]],null],"p":[[4,"GeneralF64ParseResult"],[3,"Output"],[3,"GlobalSettings"],[3,"Line"],[13,"Number"]]},\ -"uu_split":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_split",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_stat":{"doc":"","t":[13,13,17,17,17,17,17,17,13,4,8,3,13,4,13,13,13,13,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,0,10,10,11,11,11,11,11,11,11,11,11,5,5,12,12,12,12,12,7,7,7,7,7],"n":["Char","Directive","F_ALTER","F_GROUP","F_LEFT","F_SIGN","F_SPACE","F_ZERO","Integer","OutputType","ScanUtil","Stater","Str","Token","Unknown","Unsigned","UnsignedHex","UnsignedOct","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","eq","eq","fmt","fmt","from","from","from","generate_tokens","group_num","into","into","into","ne","options","scan_char","scan_num","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","uu_app","uumain","0","flag","format","precision","width","DEREFERENCE","FILE_SYSTEM","FORMAT","PRINTF","TERSE"],"q":["uu_stat","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uu_stat::Token","","","","","uu_stat::options","","","",""],"d":["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],"i":[1,1,0,0,0,0,0,0,2,0,0,0,2,0,2,2,2,2,3,2,1,3,2,1,2,1,2,1,3,2,1,3,0,3,2,1,1,0,4,4,3,2,1,3,2,1,3,2,1,0,0,5,6,6,6,6,0,0,0,0,0],"f":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["outputtype",4]],["bool",15]],[[["token",4]],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["str",15],["bool",15]],["uresult",6,[["vec",3,[["token",4]]]]]],[[["str",15]],["cow",4,[["str",15]]]],[[]],[[]],[[]],[[["token",4]],["bool",15]],null,[[["u32",15]],["option",4]],[[],["option",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["app",3]],[[],["i32",15]],null,null,null,null,null,null,null,null,null,null],"p":[[4,"Token"],[4,"OutputType"],[3,"Stater"],[8,"ScanUtil"],[13,"Char"],[13,"Directive"]]},\ -"uu_stdbuf":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_stdbuf",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_sum":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_sum",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_sync":{"doc":"","t":[0,5,5,7,7],"n":["options","uu_app","uumain","DATA","FILE_SYSTEM"],"q":["uu_sync","","","uu_sync::options",""],"d":["","","","",""],"i":[0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null],"p":[]},\ -"uu_tac":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_tac",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_tail":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,0,7,7],"n":["options","uu_app","uumain","ARG_FILES","BYTES","FOLLOW","LINES","PID","SLEEP_INT","ZERO_TERM","verbosity","QUIET","VERBOSE"],"q":["uu_tail","","","uu_tail::options","","","","","","","","uu_tail::options::verbosity",""],"d":["","","","","","","","","","","","",""],"i":[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],"p":[]},\ -"uu_tee":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_tee",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_test":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_test",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_timeout":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","COMMAND","DURATION","FOREGROUND","KILL_AFTER","PRESERVE_STATUS","SIGNAL","VERBOSE"],"q":["uu_timeout","","","uu_timeout::options","","","","","",""],"d":["","","","","","","","","",""],"i":[0,0,0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null,null,null],"p":[]},\ -"uu_touch":{"doc":"","t":[0,5,5,7,7,7,7,7,7,0,7,7,7],"n":["options","uu_app","uumain","ACCESS","MODIFICATION","NO_CREATE","NO_DEREF","SOURCES","TIME","sources","CURRENT","DATE","REFERENCE"],"q":["uu_touch","","","uu_touch::options","","","","","","","uu_touch::options::sources","",""],"d":["","","","","","","","","","","","",""],"i":[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],"p":[]},\ -"uu_tr":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_tr",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_true":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_true",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_truncate":{"doc":"","t":[0,5,5,7,7,7,7,7],"n":["options","uu_app","uumain","ARG_FILES","IO_BLOCKS","NO_CREATE","REFERENCE","SIZE"],"q":["uu_truncate","","","uu_truncate::options","","","",""],"d":["","","","","","","",""],"i":[0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null],"p":[]},\ -"uu_tsort":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_tsort",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_tty":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_tty",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_uname":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","ALL","HWPLATFORM","KERNELNAME","KERNELRELEASE","KERNELVERSION","MACHINE","NODENAME","OS","PROCESSOR"],"q":["uu_uname","","","uu_uname::options","","","","","","","",""],"d":["","","","","","","","","","","",""],"i":[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],"p":[]},\ -"uu_unexpand":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_unexpand",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_uniq":{"doc":"","t":[0,5,5,7,7,7,7,7,7,7,7,7,7],"n":["options","uu_app","uumain","ALL_REPEATED","CHECK_CHARS","COUNT","GROUP","IGNORE_CASE","REPEATED","SKIP_CHARS","SKIP_FIELDS","UNIQUE","ZERO_TERMINATED"],"q":["uu_uniq","","","uu_uniq::options","","","","","","","","",""],"d":["","","","","","","","","","","","",""],"i":[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],"p":[]},\ -"uu_unlink":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_unlink",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_uptime":{"doc":"","t":[0,5,5,7],"n":["options","uu_app","uumain","SINCE"],"q":["uu_uptime","","","uu_uptime::options"],"d":["","","",""],"i":[0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null],"p":[]},\ -"uu_users":{"doc":"","t":[5,5],"n":["uu_app","uumain"],"q":["uu_users",""],"d":["",""],"i":[0,0],"f":[[[],["app",3]],[[],["i32",15]]],"p":[]},\ -"uu_wc":{"doc":"","t":[0,5,5,7,7,7,7,7],"n":["options","uu_app","uumain","BYTES","CHAR","LINES","MAX_LINE_LENGTH","WORDS"],"q":["uu_wc","","","uu_wc::options","","","",""],"d":["","","","","","","",""],"i":[0,0,0,0,0,0,0,0],"f":[null,[[],["app",3]],[[],["i32",15]],null,null,null,null,null],"p":[]},\ -"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],"n":["uu_app","uumain"],"q":["uu_whoami",""],"d":["",""],"i":[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,5,0,11,11,11,11,11,11,14,14,0,0,0,0,5,11,11,11,11,0,0,5,14,11,11,0,0,0,0,0,0,0,0,0,0,0,5,14,14,14,14,14,14,0,11,11,11,11,11,11,14,5,0,0,12,12,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,11,11,5,11,11,11,11,11,11,11,11,11,11,11,11,12,12,12,12,7,7,7,5,5,5,8,3,11,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,10,11,11,11,11,11,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,12,12,12,3,8,3,11,11,11,11,11,11,11,11,11,11,11,11,11,5,5,12,12,5,5,11,11,10,11,11,11,11,12,12,11,11,11,11,11,11,11,11,12,5,12,12,12,12,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,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,14,11,11,11,13,3,13,13,4,13,13,13,4,11,11,11,11,11,11,5,11,11,11,11,5,5,11,11,11,11,11,11,11,11,11,11,11,11,11,11,14,11,11,11,11,5,5,11,11,11,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,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,3,11,11,11,11,11,11,11,11,11,11,5,5,5,5,5,5,5,5,13,4,13,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,12,12,5,13,13,13,3,13,13,4,13,13,13,4,13,13,13,3,4,11,11,11,11,11,11,11,11,11,11,5,11,11,11,11,12,12,12,0,11,11,11,11,11,12,12,11,11,11,11,11,11,11,12,11,11,11,11,11,12,11,0,12,12,11,11,12,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,12,5,12,12,12,12,3,8,3,5,5,12,12,5,5,10,12,12,12,5,12,12,12,12,5,17,17,17,17,17,17,0,0,0,0,17,17,17,17,17,17,17,17,17,17,17,6,6,5,5,5,5,8,13,4,13,11,11,11,11,11,11,11,11,11,11,5,5,5,5,11,11,10,11,11,11,11,11,11,11,10,12,12,3,11,11,11,5,5,11,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,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","args_os","backup_control","borrow","borrow","borrow_mut","borrow_mut","collect_str","collect_str_lossy","crash","crash_if_err","display","encoding","entries","error","execution_phrase","expect_complete","expect_lossy","from","from","fs","fsext","get_utility_is_second_arg","has","into","into","memo","mode","os","panic","parse_size","parse_time","perms","pipes","process","ranges","ringbuffer","set_utility_is_second_arg","show","show_error","show_error_custom_description","show_if_err","show_usage_error","show_warning","signals","try_from","try_from","try_into","try_into","type_id","type_id","uio_error","util_name","utmpx","version_cmp","0","0","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","equivalent","equivalent","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","0","0","1","1","OPT_BACKUP","OPT_BACKUP_NO_ARG","OPT_SUFFIX","backup","backup_no_args","suffix","Quotable","Quoted","borrow","borrow_mut","clone","clone_into","fmt","fmt","force","from","from","into","maybe_quote","maybe_quote","native","native_raw","print_verbatim","println_verbatim","quote","to_owned","to_string","try_from","try_into","type_id","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","0","0","0","Group","Locate","Passwd","belongs_to","borrow","borrow","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","fmt","fmt","from","from","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","into","into","locate","locate","locate","locate","locate","name","name","to_owned","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","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","uio_error","usage","usage","usage","Existing","FileInformation","Logical","Missing","MissingHandling","None","Normal","Physical","ResolveMode","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","canonicalize","clone","clone","clone_into","clone_into","display_permissions","display_permissions_unix","eq","eq","eq","equivalent","equivalent","equivalent","file_size","fmt","fmt","from","from","from","from_file","from_path","has","hash","into","into","into","normalize_path","resolve_relative_path","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","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","equivalent","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","Memo","apply","borrow","borrow_mut","from","into","new","run_all","try_from","try_into","type_id","get_umask","parse_mode","parse_numeric","parse_symbolic","strip_minus_from_mode","is_wsl_1","is_wsl_2","mute_sigpipe_panic","ParseFailure","ParseSizeError","SizeTooBig","borrow","borrow_mut","description","eq","equivalent","fmt","fmt","from","into","ne","parse_size","to_string","try_from","try_into","type_id","0","0","from_str","All","All","Changes","ChownExecutor","First","Group","IfFrom","None","Normal","Silent","TraverseSymlinks","User","UserGroup","Verbose","Verbosity","VerbosityLevel","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chown_base","clone","clone","clone_into","clone_into","dereference","dest_gid","dest_uid","entries","eq","eq","eq","equivalent","exec","files","filter","fmt","fmt","from","from","from","from","from","groups_only","into","into","into","into","into","level","ne","options","preserve_root","recursive","to_owned","to_owned","traverse_symlinks","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","verbosity","wrap_chown","0","0","0","1","Group","Locate","Passwd","get_groups","get_groups_gnu","gid","gid","gid2grp","grp2gid","locate","name","name","uid","uid2usr","user_dir","user_info","user_passwd","user_shell","usr2uid","ARG_FILES","ARG_GROUP","ARG_OWNER","FROM","RECURSIVE","REFERENCE","dereference","preserve_root","traverse","verbosity","DEREFERENCE","NO_DEREFERENCE","NO_PRESERVE","PRESERVE","EVERY","NO_TRAVERSE","TRAVERSE","CHANGES","QUIET","SILENT","VERBOSE","Error","Result","pipe","splice","splice_exact","vmsplice","ChildExt","Code","ExitStatus","Signal","borrow","borrow_mut","clone","clone_into","code","eq","equivalent","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","0","0","Range","borrow","borrow_mut","cmp","complement","contain","eq","equivalent","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","drop","endutxent","exit_status","from","from","getutxent","host","into","into","into_inner","into_iter","is_user_process","iter_all_records","iter_all_records_from","login_time","next","pid","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::ConversionResult","","uucore::backup_control","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::backup_control::BackupError","","","","uucore::backup_control::arguments","","","","","","uucore::display","","","","","","","","","","","","","","","","","","","","","","","","uucore::encoding","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::encoding::DecodeError","","","uucore::entries","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::error","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::fs","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::fsext","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::memo","","","","","","","","","","","uucore::mode","","","","","uucore::os","","uucore::panic","uucore::parse_size","","","","","","","","","","","","","","","","","","uucore::parse_size::ParseSizeError","","uucore::parse_time","uucore::perms","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::perms::IfFrom","","","","uucore::perms::entries","","","","","","","","","","","","","","","","","","","uucore::perms::options","","","","","","","","","","uucore::perms::options::dereference","","uucore::perms::options::preserve_root","","uucore::perms::options::traverse","","","uucore::perms::options::verbosity","","","","uucore::pipes","","","","","","uucore::process","","","","","","","","","","","","","","","","","","","","","","","","","","","","","uucore::process::ExitStatus","","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 these …","convenience function for a more slim interface","Display an error and [exit!]","Unwrap a std::result::Result, crashing instead of …","","","Get password/group file entry","All utils return exit with an exit code. Usually, the …","Derive the complete execution phrase for “usage”.","","","","","Set of functions to manage files and symlinks","Set of functions to manage file systems","","","","","Memo runner of printf Takes a format string and arguments","Set of functions to parse modes","","Custom panic hooks that allow silencing certain types of …","","","Common functions to manage permissions","","Set of functions to manage IDs","","A fixed-size ring buffer.","","Display a crate::error::UError and set global exit code.","Show an error to stderr in a similar style to GNU …","Show a warning to stderr in a similar style to GNU …","Display an error and set global exit code in error case.","Show a bad invocation help message in a similar style to …","Print a warning message to stderr.","","","","","","","","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","An extension trait to apply quoting to strings.","A wrapper around string types for displaying with quoting …","","","","","","","Toggle forced quoting. If true, quotes are added even if …","","","","Like quote(), but don’t actually add quotes unless …","Like quote(), but don’t actually add quotes unless …","Quote a string with the default style for the platform.","Quote an OsStr with the default style for the platform.","Like println_verbatim, without the trailing newline.","Print a path (or OsStr-like object) directly to stdout, …","Returns an object that implements Display for printing …","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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 passwd.pw_gid","AKA group.gr_gid","","","","","","","","","","AKA passwd.pw_name","AKA group.gr_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 and …","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 default …","","","","","","","","","","","","Set the exit code for the program if uumain returns Ok(()).","Strip the trailing “ (os error XX)“ from io error …","","","","","","","","","","","","","","","","","Shorthand to construct UIoError-instances.","Print usage help to a custom error.","Print usage help to a custom error.","","Resolve symbolic links, ignoring errors on the final …","Information to uniquely identify a file","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.","","","","","","","","","","","","","","","","","","","Get information from a currently open file","Get information for a given path.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Read file system list.","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","Test if the program is running under WSL","","Terminate without error on panics that occur due to broken …","","","","","","","","","","","","","","Parse a size string into a number of bytes.","","","","","","","","","","","","","","","","","","","","","","","The various level of verbosity","","","","","","","","","","","Base implementation for chgrp and chown.","","","","","","","","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…","AKA passwd.pw_gid","AKA group.gr_gid","","","","AKA passwd.pw_name","AKA group.gr_name","AKA passwd.pw_uid","","AKA passwd.pw_dir","AKA passwd.pw_gecos","AKA passwd.pw_passwd","AKA passwd.pw_shell","","","","","","","","","","","","","","","","","","","","","","","Nix’s main error type.","Nix Result Type","A wrapper around [nix::unistd::Pipe] that ensures the pipe …","Less noisy wrapper around nix::fcntl::splice.","Splice wrapper which fully finishes the write.","Copy data from bytes into target, which must be a pipe.","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 specified …","","","","","","","","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 utmpx","","","Iterate through all the utmp records.","Iterate through all the utmp records from a specific file.","A.K.A. ut.ut_tv","","A.K.A. ut.ut_pid","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,2,1,2,1,3,3,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,2,1,2,1,2,1,0,0,0,0,4,5,6,0,0,0,6,0,7,6,7,7,7,0,7,6,7,6,7,7,6,0,0,7,6,7,6,7,6,6,7,6,0,7,6,6,7,6,7,6,7,6,7,6,6,8,9,8,9,0,0,0,0,0,0,0,0,10,10,10,10,10,10,10,10,10,10,11,11,10,10,0,0,11,10,10,10,10,10,12,12,12,12,12,12,12,0,13,0,0,13,0,0,13,12,14,14,15,13,12,14,15,13,12,12,12,0,15,0,15,13,13,14,15,13,13,13,13,12,15,14,15,13,12,15,15,13,12,13,14,15,13,12,14,15,13,12,14,15,13,12,0,0,16,17,18,0,0,0,19,19,20,19,20,19,20,19,20,19,20,19,20,0,0,19,20,0,0,19,20,21,19,19,20,20,19,20,19,20,19,20,19,20,19,20,19,0,19,19,19,19,0,22,0,0,0,0,0,0,0,23,24,25,22,23,24,25,22,26,26,23,24,22,23,24,23,23,24,24,25,25,22,22,23,24,25,25,22,0,23,24,25,22,27,23,24,23,24,25,22,0,0,23,24,25,22,23,24,25,22,23,24,25,22,23,24,25,22,0,26,26,24,28,0,29,28,0,29,28,29,0,30,28,29,30,28,29,0,28,29,28,29,0,0,30,28,29,30,28,29,30,28,29,30,28,29,30,30,0,30,30,28,29,0,0,28,29,30,28,29,30,28,29,30,28,29,0,0,0,0,0,0,31,32,33,33,33,34,31,32,33,33,35,33,32,35,33,32,35,33,32,35,33,32,35,35,35,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,33,33,35,33,32,31,32,31,32,35,33,32,31,32,35,31,32,32,35,33,32,31,32,35,35,35,31,32,32,33,34,0,0,0,0,35,0,0,0,35,33,32,31,32,31,32,35,33,32,35,33,32,35,33,32,0,36,36,36,36,36,36,36,36,36,36,0,0,0,0,0,0,0,0,37,0,37,37,37,37,37,37,37,37,37,37,37,0,37,37,37,37,38,39,0,40,41,42,0,41,40,0,41,42,42,0,40,40,42,0,0,40,43,42,44,41,40,43,42,44,41,0,42,44,42,44,43,43,43,0,42,44,41,41,43,43,43,42,44,40,43,42,44,41,44,40,43,42,44,41,44,44,0,43,43,42,44,43,40,43,42,44,41,40,43,42,44,41,40,43,42,44,41,43,0,45,46,47,47,0,0,0,0,0,19,20,0,0,21,19,20,19,0,19,19,19,19,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,0,0,48,0,48,48,48,48,48,48,48,48,48,48,48,0,0,0,0,48,48,49,48,48,48,48,48,48,48,49,50,51,0,52,52,52,0,0,52,52,52,52,52,52,52,52,52,52,52,52,52,52,0,53,53,53,53,53,53,53,53,53,53,53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,54,55,54,55,54,55,0,54,54,55,0,54,54,55,54,55,54,54,54,54,55,54,54,0,54,54,55,54,55,54,54,55,54,0,0],"f":[null,null,null,null,null,null,null,null,[[],["vec",3,[["string",3]]]],[[]],null,[[]],[[]],[[]],[[]],[[["invalidencodinghandling",4]],["conversionresult",4]],[[],["conversionresult",4]],null,null,null,null,null,null,[[],["str",15]],[[["str",15]],["vec",3,[["string",3]]]],[[["str",15]],["vec",3,[["string",3]]]],[[]],[[]],null,null,[[],["bool",15]],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,[[],["str",15]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[],["backupmode",4]],[[]],[[],["i32",15]],[[["argmatches",3]],["uresult",6,[["backupmode",4]]]],[[["argmatches",3]],["string",3]],[[["backupmode",4]],["bool",15]],[[["backuperror",4]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[["backupmode",4],["path",3],["str",15]],["option",4,[["pathbuf",3]]]],[[]],[[]],[[["backuperror",4]],["bool",15]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["bool",15]],null,null,null,null,null,null,null,[[],["arg",3]],[[],["arg",3]],[[],["arg",3]],null,null,[[]],[[]],[[],["quoted",3]],[[]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",4,[["error",3]]]],[[["bool",15]],["quoted",3]],[[]],[[],["quoted",3]],[[]],[[],["quoted",3]],[[],["quoted",3]],[[["str",15]],["quoted",3]],[[["osstr",3]],["quoted",3]],[[["asref",8,[["osstr",3]]]],["result",6]],[[["asref",8,[["osstr",3]]]],["result",6]],[[],["quoted",3]],[[]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],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,[["string",3],["encodeerror",4]]]],[[],["result",4,[["string",3],["encodeerror",4]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[["decodeerror",3]]],[[["decodeerror",4]]],[[["error",3]]],[[]],[[["bool",15]]],[[]],[[]],[[]],[[]],[[["usize",15]]],[[["format",4]]],[[],["option",4,[["error",8]]]],[[]],[[],["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,null,null,null,[[],["vec",3,[["gid_t",6]]]],[[]],[[]],[[]],[[]],[[],["passwd",3]],[[],["group",3]],[[]],[[]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[],["ioresult",6,[["vec",3,[["gid_t",6]]]]]],[[["option",4,[["u32",15]]]],["ioresult",6,[["vec",3,[["gid_t",6]]]]]],null,null,[[["gid_t",6]],["ioresult",6,[["string",3]]]],[[["str",15]],["ioresult",6,[["gid_t",6]]]],[[]],[[]],[[],["ioresult",6]],[[["str",15]],["ioresult",6]],[[["uid_t",6]],["ioresult",6]],[[["gid_t",6]],["ioresult",6]],[[["str",15]],["ioresult",6]],null,null,[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],null,[[["uid_t",6]],["ioresult",6,[["string",3]]]],null,null,null,null,[[["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",4,[["error",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",4,[["error",3]]]],[[]],[[]],[[["error",3]],["uioerror",3]],[[]],[[]],[[],["i32",15]],[[]],[[]],[[]],[[]],[[]],null,null,[[["i32",15],["into",8,[["string",3]]]],["box",3,[["uerror",8]]]],[[["i32",15],["into",8,[["string",3]]]],["box",3,[["uerror",8]]]],[[["errorkind",4],["into",8,[["string",3]]]],["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]],null,[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[["asref",8,[["path",3]]],["missinghandling",4],["resolvemode",4]],["ioresult",6,[["pathbuf",3]]]],[[],["missinghandling",4]],[[],["resolvemode",4]],[[]],[[]],[[["metadata",3],["bool",15]],["string",3]],[[["mode_t",6],["bool",15]],["string",3]],[[],["bool",15]],[[["missinghandling",4]],["bool",15]],[[["resolvemode",4]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[],["u64",15]],[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[],["option",4]],[[["bool",15]],["option",4]],null,[[]],[[]],[[]],[[]],[[["path",3]],["pathbuf",3]],[[["path",3]],["cow",4,[["path",3]]]],[[]],[[]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["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]],[[],["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]],["result",4,[["error",3]]]],[[],["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]],[[["mode_t",6],["u64",15]],["str",15]],[[["i64",15]],["cow",4,[["str",15]]]],[[["i64",15],["i64",15]],["string",3]],[[],["vec",3,[["mountinfo",3]]]],null,[[["asref",8,[["path",3]]]],["result",4,[["statfs",3],["string",3]]]],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]],null,[[["peekable",3]]],[[]],[[]],[[]],[[]],[[["str",15],["peekable",3]],["memo",3]],[[["str",15]]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["u32",15]],[[["str",15]],["result",4,[["mode_t",6],["string",3]]]],[[["u32",15],["str",15],["bool",15]],["result",4,[["u32",15],["string",3]]]],[[["u32",15],["str",15],["u32",15],["bool",15]],["result",4,[["u32",15],["string",3]]]],[[["vec",3]],["bool",15]],[[],["bool",15]],[[],["bool",15]],[[]],null,null,null,[[]],[[]],[[],["str",15]],[[["parsesizeerror",4]],["bool",15]],[[],["bool",15]],[[["formatter",3]],["result",4,[["error",3]]]],[[["formatter",3]],["result",6]],[[]],[[]],[[["parsesizeerror",4]],["bool",15]],[[["str",15]],["result",4,[["usize",15],["parsesizeerror",4]]]],[[],["string",3]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],null,null,[[["str",15]],["result",4,[["duration",3],["string",3]]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[]],[[["app",3],["str",15],["bool",15]],["uresult",6]],[[],["verbositylevel",4]],[[],["verbosity",3]],[[]],[[]],null,null,null,null,[[["verbositylevel",4]],["bool",15]],[[["verbosity",3]],["bool",15]],[[["traversesymlinks",4]],["bool",15]],[[],["bool",15]],[[],["uresult",6]],null,null,[[["formatter",3]],["result",6]],[[["formatter",3]],["result",6]],[[]],[[]],[[]],[[]],[[]],null,[[]],[[]],[[]],[[]],[[]],null,[[["verbosity",3]],["bool",15]],null,null,null,[[]],[[]],null,[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["result",4]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],[[],["typeid",3]],null,[[["asref",8,[["path",3]]],["metadata",3],["option",4,[["u32",15]]],["option",4,[["u32",15]]],["bool",15],["verbosity",3]],["result",4,[["string",3],["string",3]]]],null,null,null,null,null,null,null,[[],["ioresult",6,[["vec",3,[["gid_t",6]]]]]],[[["option",4,[["u32",15]]]],["ioresult",6,[["vec",3,[["gid_t",6]]]]]],null,null,[[["gid_t",6]],["ioresult",6,[["string",3]]]],[[["str",15]],["ioresult",6,[["gid_t",6]]]],[[],["ioresult",6]],null,null,null,[[["uid_t",6]],["ioresult",6,[["string",3]]]],null,null,null,null,[[["str",15]],["ioresult",6,[["uid_t",6]]]],null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,[[],["result",6]],[[["usize",15]],["result",6,[["usize",15]]]],[[["usize",15]],["result",6]],[[],["result",6,[["usize",15]]]],null,null,null,null,[[]],[[]],[[],["exitstatus",4]],[[]],[[],["option",4,[["i32",15]]]],[[["exitstatus",4]],["bool",15]],[[],["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]],["result",6,[["option",4,[["exitstatus",4]]]]]],null,null,null,[[]],[[]],[[["range",3]],["ordering",4]],[[],["vec",3,[["range",3]]]],[[["usize",15]],["bool",15]],[[["range",3]],["bool",15]],[[],["bool",15]],[[["formatter",3]],["result",6]],[[]],[[["str",15]],["result",4,[["vec",3,[["range",3]]],["string",3]]]],[[["str",15]],["result",4,[["range",3],["str",15]]]],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]],["option",4,[["usize",15]]]],[[["usize",15]],["option",4,[["str",15]]]],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]],[[["asref",8,[["path",3]]]],["utmpxiter",3]],[[],["tm",3]],[[],["option",4]],[[],["i32",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],["str",15]],["ordering",4]]],"p":[[4,"ConversionResult"],[4,"InvalidEncodingHandling"],[8,"Args"],[13,"Complete"],[13,"Lossy"],[4,"BackupError"],[4,"BackupMode"],[13,"InvalidArgument"],[13,"AmbiguousArgument"],[3,"Quoted"],[8,"Quotable"],[4,"Format"],[4,"DecodeError"],[4,"EncodeError"],[3,"Data"],[13,"Decode"],[13,"DecodeZ85"],[13,"Io"],[3,"Passwd"],[3,"Group"],[8,"Locate"],[3,"ExitCode"],[3,"USimpleError"],[3,"UUsageError"],[3,"UIoError"],[8,"UError"],[8,"FromIo"],[4,"MissingHandling"],[4,"ResolveMode"],[3,"FileInformation"],[8,"FsMeta"],[3,"statfs_fn"],[3,"FsUsage"],[8,"BirthTime"],[3,"MountInfo"],[3,"Memo"],[4,"ParseSizeError"],[13,"ParseFailure"],[13,"SizeTooBig"],[4,"IfFrom"],[4,"TraverseSymlinks"],[4,"VerbosityLevel"],[3,"ChownExecutor"],[3,"Verbosity"],[13,"User"],[13,"Group"],[13,"UserGroup"],[4,"ExitStatus"],[8,"ChildExt"],[13,"Code"],[13,"Signal"],[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":[]},\ -"uudoc":{"doc":"","t":[6,5,5,5,5,5,5,5],"n":["UtilityMap","main","util_map","write_description","write_markdown","write_options","write_usage","write_version"],"q":["uudoc","","","","","","",""],"d":["","","","","","","",""],"i":[0,0,0,0,0,0,0,0],"f":[null,[[],["result",6]],[[],["hashmap",3,[["str",15]]]],[[["app",3]],["result",6]],[[["app",3],["str",15]],["result",6]],[[["app",3]],["result",6]],[[["app",3],["str",15]],["result",6]],[[["app",3]],["result",6]]],"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":[]},\ -"whoami":{"doc":"","t":[5],"n":["main"],"q":["whoami"],"d":[""],"i":[0],"f":[[[]]],"p":[]},\ -"yes":{"doc":"","t":[5],"n":["main"],"q":["yes"],"d":[""],"i":[0],"f":[[[]]],"p":[]}\ -}'); -if (window.initSearch) {window.initSearch(searchIndex)}; \ No newline at end of file diff --git a/search.js b/search.js deleted file mode 100644 index 6f612fa4e..000000000 --- a/search.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var itemTypes=["mod","externcrate","import","struct","enum","fn","type","static","trait","impl","tymethod","method","structfield","variant","macro","primitive","associatedtype","constant","associatedconstant","union","foreigntype","keyword","existential","attr","derive","traitalias"];var TY_PRIMITIVE=itemTypes.indexOf("primitive");var TY_KEYWORD=itemTypes.indexOf("keyword");function printTab(nb){if(nb===0||nb===1||nb===2){searchState.currentTab=nb}var nb_copy=nb;onEachLazy(document.getElementById("titles").childNodes,function(elem){if(nb_copy===0){addClass(elem,"selected")}else{removeClass(elem,"selected")}nb_copy-=1});onEachLazy(document.getElementById("results").childNodes,function(elem){if(nb===0){addClass(elem,"active")}else{removeClass(elem,"active")}nb-=1})}function removeEmptyStringsFromArray(x){for(var i=0,len=x.length;i-1){var obj=searchIndex[results[i].id];obj.lev=results[i].lev;var res=buildHrefAndPath(obj);obj.displayPath=pathSplitter(res[0]);obj.fullPath=obj.displayPath+obj.name;obj.fullPath+="|"+obj.ty;obj.href=res[1];out.push(obj);if(out.length>=MAX_RESULTS){break}}}return out}function sortResults(results,isType){var ar=[];for(var entry in results){if(hasOwnPropertyRustdoc(results,entry)){ar.push(results[entry])}}results=ar;var i,len,result;for(i=0,len=results.length;ib?+1:-1)}a=(aaa.index<0);b=(bbb.index<0);if(a!==b){return a-b}a=aaa.index;b=bbb.index;if(a!==b){return a-b}if((aaa.item.ty===TY_PRIMITIVE&&bbb.item.ty!==TY_KEYWORD)||(aaa.item.ty===TY_KEYWORD&&bbb.item.ty!==TY_PRIMITIVE)){return-1}if((bbb.item.ty===TY_PRIMITIVE&&aaa.item.ty!==TY_PRIMITIVE)||(bbb.item.ty===TY_KEYWORD&&aaa.item.ty!==TY_KEYWORD)){return 1}a=(aaa.item.desc==="");b=(bbb.item.desc==="");if(a!==b){return a-b}a=aaa.item.ty;b=bbb.item.ty;if(a!==b){return a-b}a=aaa.item.path;b=bbb.item.path;if(a!==b){return(a>b?+1:-1)}return 0});for(i=0,len=results.length;i"));return{name:val.substring(0,val.indexOf("<")),generics:values.split(/\s*,\s*/),}}return{name:val,generics:[],}}function checkGenerics(obj,val){var tmp_lev,elem_name;if(val.generics.length>0){if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>=val.generics.length){var elems=Object.create(null);var elength=obj[GENERICS_DATA].length;for(var x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length>0){var elems=Object.create(null);len=obj[GENERICS_DATA].length;for(x=0;xGENERICS_DATA&&obj[GENERICS_DATA].length!==0){tmp_lev=checkGenerics(obj,val);if(tmp_lev<=MAX_LEV_DISTANCE){return tmp_lev}}}}else if(literalSearch){if((!val.generics||val.generics.length===0)&&obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){return obj[GENERICS_DATA].some(function(gen){return gen[NAME]===val.name})}return false}lev_distance=Math.min(levenshtein(obj[NAME],val.name),lev_distance);if(lev_distance<=MAX_LEV_DISTANCE){lev_distance=Math.ceil((checkGenerics(obj,val)+lev_distance)/2)}if(obj.length>GENERICS_DATA&&obj[GENERICS_DATA].length>0){var olength=obj[GENERICS_DATA].length;for(x=0;x0){var length=obj.type[INPUTS_DATA].length;for(var i=0;iOUTPUT_DATA){var ret=obj.type[OUTPUT_DATA];if(typeof ret[0]==="string"){ret=[ret]}for(var x=0,len=ret.length;xlength){return MAX_LEV_DISTANCE+1}for(var i=0;ilength){break}var lev_total=0;var aborted=false;for(var x=0;xMAX_LEV_DISTANCE){aborted=true;break}lev_total+=lev}if(!aborted){ret_lev=Math.min(ret_lev,Math.round(lev_total/clength))}}return ret_lev}function typePassesFilter(filter,type){if(filter<=NO_TYPE_FILTER)return true;if(filter===type)return true;var name=itemTypes[type];switch(itemTypes[filter]){case"constant":return name==="associatedconstant";case"fn":return name==="method"||name==="tymethod";case"type":return name==="primitive"||name==="associatedtype";case"trait":return name==="traitalias"}return false}function createAliasFromItem(item){return{crate:item.crate,name:item.name,path:item.path,desc:item.desc,ty:item.ty,parent:item.parent,type:item.type,is_alias:true,}}function handleAliases(ret,query,filterCrates){var aliases=[];var crateAliases=[];if(filterCrates!==undefined){if(ALIASES[filterCrates]&&ALIASES[filterCrates][query.search]){var query_aliases=ALIASES[filterCrates][query.search];var len=query_aliases.length;for(var i=0;iMAX_RESULTS){ret.others.pop()}};onEach(aliases,pushFunc);onEach(crateAliases,pushFunc)}var nSearchWords=searchWords.length;var i,it;var ty;var fullId;var returned;var in_args;var len;if((val.charAt(0)==="\""||val.charAt(0)==="'")&&val.charAt(val.length-1)===val.charAt(0)){val=extractGenerics(val.substr(1,val.length-2));for(i=0;i")>-1){var trimmer=function(s){return s.trim()};var parts=val.split("->").map(trimmer);var input=parts[0];var inputs=input.split(",").map(trimmer).sort();for(i=0,len=inputs.length;i1?paths.length-1:1);var lev,j;for(j=0;j1){lev=checkPath(contains,paths[paths.length-1],ty);if(lev>MAX_LEV_DISTANCE){continue}else if(lev>0){lev_add=lev/10}}returned=MAX_LEV_DISTANCE+1;in_args=MAX_LEV_DISTANCE+1;var index=-1;lev=MAX_LEV_DISTANCE+1;fullId=ty.id;if(searchWords[j].indexOf(split[i])>-1||searchWords[j].indexOf(val)>-1||ty.normalizedName.indexOf(val)>-1){if(typePassesFilter(typeFilter,ty.ty)&&results[fullId]===undefined){index=ty.normalizedName.indexOf(val)}}if((lev=levenshtein(searchWords[j],val))<=MAX_LEV_DISTANCE){if(typePassesFilter(typeFilter,ty.ty)){lev+=1}else{lev=MAX_LEV_DISTANCE+1}}in_args=findArg(ty,valGenerics,false,typeFilter);returned=checkReturned(ty,valGenerics,false,typeFilter);lev+=lev_add;if(lev>0&&val.length>3&&searchWords[j].indexOf(val)>-1){if(val.length<6){lev-=1}else{lev=0}}if(in_args<=MAX_LEV_DISTANCE){if(results_in_args[fullId]===undefined){results_in_args[fullId]={id:j,index:index,lev:in_args,}}results_in_args[fullId].lev=Math.min(results_in_args[fullId].lev,in_args)}if(returned<=MAX_LEV_DISTANCE){if(results_returned[fullId]===undefined){results_returned[fullId]={id:j,index:index,lev:returned,}}results_returned[fullId].lev=Math.min(results_returned[fullId].lev,returned)}if(typePassesFilter(typeFilter,ty.ty)&&(index!==-1||lev<=MAX_LEV_DISTANCE)){if(index!==-1&&paths.length<2){lev=0}if(results[fullId]===undefined){results[fullId]={id:j,index:index,lev:lev,}}results[fullId].lev=Math.min(results[fullId].lev,lev)}}}var ret={"in_args":sortResults(results_in_args,true),"returned":sortResults(results_returned,true),"others":sortResults(results,false),};handleAliases(ret,query,filterCrates);return ret}function validateResult(name,path,keys,parent){for(var i=0,len=keys.length;i-1||path.indexOf(keys[i])>-1||(parent!==undefined&&parent.name!==undefined&&parent.name.toLowerCase().indexOf(keys[i])>-1)||levenshtein(name,keys[i])<=MAX_LEV_DISTANCE)){return false}}return true}function getQuery(raw){var matches,type,query;query=raw;matches=query.match(/^(fn|mod|struct|enum|trait|type|const|macro)\s*:\s*/i);if(matches){type=matches[1].replace(/^const$/,"constant");query=query.substring(matches[0].length)}return{raw:raw,query:query,type:type,id:query+type}}function nextTab(direction){var next=(searchState.currentTab+direction+3)%searchState.focusedByTab.length;searchState.focusedByTab[searchState.currentTab]=document.activeElement;printTab(next);focusSearchResult()}function focusSearchResult(){var target=searchState.focusedByTab[searchState.currentTab]||document.querySelectorAll(".search-results.active a").item(0)||document.querySelectorAll("#titles > button").item(searchState.currentTab);if(target){target.focus()}}function buildHrefAndPath(item){var displayPath;var href;var type=itemTypes[item.ty];var name=item.name;var path=item.path;if(type==="mod"){displayPath=path+"::";href=window.rootPath+path.replace(/::/g,"/")+"/"+name+"/index.html"}else if(type==="primitive"||type==="keyword"){displayPath="";href=window.rootPath+path.replace(/::/g,"/")+"/"+type+"."+name+".html"}else if(type==="externcrate"){displayPath="";href=window.rootPath+name+"/index.html"}else if(item.parent!==undefined){var myparent=item.parent;var anchor="#"+type+"."+name;var parentType=itemTypes[myparent.ty];var pageType=parentType;var pageName=myparent.name;if(parentType==="primitive"){displayPath=myparent.name+"::"}else if(type==="structfield"&&parentType==="variant"){var enumNameIdx=item.path.lastIndexOf("::");var enumName=item.path.substr(enumNameIdx+2);path=item.path.substr(0,enumNameIdx);displayPath=path+"::"+enumName+"::"+myparent.name+"::";anchor="#variant."+myparent.name+".field."+name;pageType="enum";pageName=enumName}else{displayPath=path+"::"+myparent.name+"::"}href=window.rootPath+path.replace(/::/g,"/")+"/"+pageType+"."+pageName+".html"+anchor}else{displayPath=item.path+"::";href=window.rootPath+item.path.replace(/::/g,"/")+"/"+type+"."+name+".html"}return[displayPath,href]}function escape(content){var h1=document.createElement("h1");h1.textContent=content;return h1.innerHTML}function pathSplitter(path){var tmp=""+path.replace(/::/g,"::");if(tmp.endsWith("")){return tmp.slice(0,tmp.length-6)}return tmp}function addTab(array,query,display){var extraClass="";if(display===true){extraClass=" active"}var output=document.createElement("div");var duplicates={};var length=0;if(array.length>0){output.className="search-results "+extraClass;array.forEach(function(item){if(item.is_alias!==true){if(duplicates[item.fullPath]){return}duplicates[item.fullPath]=true}var name=item.name;var type=itemTypes[item.ty];length+=1;var extra="";if(type==="primitive"){extra=" (primitive type)"}else if(type==="keyword"){extra=" (keyword)"}var link=document.createElement("a");link.className="result-"+type;link.href=item.href;var wrapper=document.createElement("div");var resultName=document.createElement("div");resultName.className="result-name";if(item.is_alias){var alias=document.createElement("span");alias.className="alias";var bold=document.createElement("b");bold.innerText=item.alias;alias.appendChild(bold);alias.insertAdjacentHTML("beforeend"," - see ");resultName.appendChild(alias)}resultName.insertAdjacentHTML("beforeend",item.displayPath+""+name+extra+"");wrapper.appendChild(resultName);var description=document.createElement("div");description.className="desc";var spanDesc=document.createElement("span");spanDesc.insertAdjacentHTML("beforeend",item.desc);description.appendChild(spanDesc);wrapper.appendChild(description);link.appendChild(wrapper);output.appendChild(link)})}else{output.className="search-failed"+extraClass;output.innerHTML="No results :(
"+"Try on DuckDuckGo?

"+"Or try looking in one of these:"}return[output,length]}function makeTabHeader(tabNb,text,nbElems){if(searchState.currentTab===tabNb){return""}return""}function showResults(results,go_to_first){var search=searchState.outputElement();if(go_to_first||(results.others.length===1&&getSettingValue("go-to-only-result")==="true"&&(!search.firstChild||search.firstChild.innerText!==searchState.loadingText))){var elem=document.createElement("a");elem.href=results.others[0].href;removeClass(elem,"active");document.body.appendChild(elem);elem.click();return}var query=getQuery(searchState.input.value);currentResults=query.id;var ret_others=addTab(results.others,query);var ret_in_args=addTab(results.in_args,query,false);var ret_returned=addTab(results.returned,query,false);var currentTab=searchState.currentTab;if((currentTab===0&&ret_others[1]===0)||(currentTab===1&&ret_in_args[1]===0)||(currentTab===2&&ret_returned[1]===0)){if(ret_others[1]!==0){currentTab=0}else if(ret_in_args[1]!==0){currentTab=1}else if(ret_returned[1]!==0){currentTab=2}}var output="

Results for "+escape(query.query)+(query.type?" (type: "+escape(query.type)+")":"")+"

"+"
"+makeTabHeader(0,"In Names",ret_others[1])+makeTabHeader(1,"In Parameters",ret_in_args[1])+makeTabHeader(2,"In Return Types",ret_returned[1])+"
";var resultsElem=document.createElement("div");resultsElem.id="results";resultsElem.appendChild(ret_others[0]);resultsElem.appendChild(ret_in_args[0]);resultsElem.appendChild(ret_returned[0]);search.innerHTML=output;search.appendChild(resultsElem);searchState.focusedByTab=[null,null,null];searchState.showResults(search);var elems=document.getElementById("titles").childNodes;elems[0].onclick=function(){printTab(0)};elems[1].onclick=function(){printTab(1)};elems[2].onclick=function(){printTab(2)};printTab(currentTab)}function execSearch(query,searchWords,filterCrates){function getSmallest(arrays,positions,notDuplicates){var start=null;for(var it=0,len=positions.length;itpositions[it]&&(start===null||start>arrays[it][positions[it]].lev)&&!notDuplicates[arrays[it][positions[it]].fullPath]){start=arrays[it][positions[it]].lev}}return start}function mergeArrays(arrays){var ret=[];var positions=[];var notDuplicates={};for(var x=0,arrays_len=arrays.length;xpositions[x]&&arrays[x][positions[x]].lev===smallest&&!notDuplicates[arrays[x][positions[x]].fullPath]){ret.push(arrays[x][positions[x]]);notDuplicates[arrays[x][positions[x]].fullPath]=true;positions[x]+=1}}}return ret}function tokenizeQuery(raw){var i,matched;var l=raw.length;var depth=0;var nextAngle=/(<|>)/g;var ret=[];var start=0;for(i=0;i'){depth+=1}break;case">":if(depth>0){depth-=1}break;case",":if(depth===0){ret.push(raw.substring(start,i));start=i+1}break}}if(start!==i){ret.push(raw.substring(start,i))}return ret}var queries=tokenizeQuery(query.raw);var results={"in_args":[],"returned":[],"others":[],};for(var i=0,len=queries.length;i1){return{"in_args":mergeArrays(results.in_args),"returned":mergeArrays(results.returned),"others":mergeArrays(results.others),}}return{"in_args":results.in_args[0],"returned":results.returned[0],"others":results.others[0],}}function getFilterCrates(){var elem=document.getElementById("crate-search");if(elem&&elem.value!=="All crates"&&hasOwnPropertyRustdoc(rawSearchIndex,elem.value)){return elem.value}return undefined}function search(e,forced){var params=searchState.getQueryStringParams();var query=getQuery(searchState.input.value.trim());if(e){e.preventDefault()}if(query.query.length===0){return}if(!forced&&query.id===currentResults){if(query.query.length>0){searchState.putBackSearch(searchState.input)}return}searchState.title="Results for "+query.query+" - Rust";if(searchState.browserSupportsHistoryApi()){var newURL=getNakedUrl()+"?search="+encodeURIComponent(query.raw)+window.location.hash;if(!history.state&&!params.search){history.pushState(query,"",newURL)}else{history.replaceState(query,"",newURL)}}var filterCrates=getFilterCrates();showResults(execSearch(query,index,filterCrates),params.go_to_first)}function buildIndex(rawSearchIndex){searchIndex=[];var searchWords=[];var i,word;var currentIndex=0;var id=0;for(var crate in rawSearchIndex){if(!hasOwnPropertyRustdoc(rawSearchIndex,crate)){continue}var crateSize=0;searchWords.push(crate);var crateRow={crate:crate,ty:1,name:crate,path:"",desc:rawSearchIndex[crate].doc,parent:undefined,type:null,id:id,normalizedName:crate.indexOf("_")===-1?crate:crate.replace(/_/g,""),};id+=1;searchIndex.push(crateRow);currentIndex+=1;var itemTypes=rawSearchIndex[crate].t;var itemNames=rawSearchIndex[crate].n;var itemPaths=rawSearchIndex[crate].q;var itemDescs=rawSearchIndex[crate].d;var itemParentIdxs=rawSearchIndex[crate].i;var itemFunctionSearchTypes=rawSearchIndex[crate].f;var paths=rawSearchIndex[crate].p;var aliases=rawSearchIndex[crate].a;var len=paths.length;for(i=0;i0?paths[itemParentIdxs[i]-1]:undefined,type:itemFunctionSearchTypes[i],id:id,normalizedName:word.indexOf("_")===-1?word:word.replace(/_/g,""),};id+=1;searchIndex.push(row);lastPath=row.path;crateSize+=1}if(aliases){ALIASES[crate]={};var j,local_aliases;for(var alias_name in aliases){if(!hasOwnPropertyRustdoc(aliases,alias_name)){continue}if(!hasOwnPropertyRustdoc(ALIASES[crate],alias_name)){ALIASES[crate][alias_name]=[]}local_aliases=aliases[alias_name];for(j=0,len=local_aliases.length;j0){searchState.input.value=params.search;search(e)}else{searchState.input.value="";searchState.hideResults()}})}window.onpageshow=function(){var qSearch=searchState.getQueryStringParams().search;if(searchState.input.value===""&&qSearch){searchState.input.value=qSearch}search()}}index=buildIndex(rawSearchIndex);registerSearchEvents();if(searchState.getQueryStringParams().search){search()}};if(window.searchIndex!==undefined){initSearch(window.searchIndex)}})() \ No newline at end of file diff --git a/seq/all.html b/seq/all.html deleted file mode 100644 index 4f107ea95..000000000 --- a/seq/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/seq/fn.main.html b/seq/fn.main.html deleted file mode 100644 index 6b3a21478..000000000 --- a/seq/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in seq - Rust -

Function seq::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/seq/index.html b/seq/index.html deleted file mode 100644 index 7539088ae..000000000 --- a/seq/index.html +++ /dev/null @@ -1,4 +0,0 @@ -seq - Rust -

Crate seq[][src]

Functions

-
- \ No newline at end of file diff --git a/seq/sidebar-items.js b/seq/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/seq/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/settings.css b/settings.css deleted file mode 100644 index 670986588..000000000 --- a/settings.css +++ /dev/null @@ -1 +0,0 @@ -.setting-line{padding:5px;position:relative;}.setting-line>div{display:inline-block;vertical-align:top;font-size:17px;padding-top:2px;}.setting-line>.title{font-size:19px;width:100%;max-width:none;border-bottom:1px solid;}.toggle{position:relative;display:inline-block;width:45px;height:27px;margin-right:20px;}.toggle input{opacity:0;position:absolute;}.select-wrapper{float:right;position:relative;height:27px;min-width:25%;}.select-wrapper select{appearance:none;-moz-appearance:none;-webkit-appearance:none;background:none;border:2px solid #ccc;padding-right:28px;width:100%;}.select-wrapper img{pointer-events:none;position:absolute;right:0;bottom:0;background:#ccc;height:100%;width:28px;padding:0px 4px;}.select-wrapper select option{color:initial;}.slider{position:absolute;cursor:pointer;top:0;left:0;right:0;bottom:0;background-color:#ccc;-webkit-transition:.3s;transition:.3s;}.slider:before{position:absolute;content:"";height:19px;width:19px;left:4px;bottom:4px;background-color:white;-webkit-transition:.3s;transition:.3s;}input:checked+.slider{background-color:#2196F3;}input:focus+.slider{box-shadow:0 0 0 2px #0a84ff,0 0 0 6px rgba(10,132,255,0.3);}input:checked+.slider:before{-webkit-transform:translateX(19px);-ms-transform:translateX(19px);transform:translateX(19px);}.setting-line>.sub-settings{padding-left:42px;width:100%;display:block;} \ No newline at end of file diff --git a/settings.html b/settings.html deleted file mode 100644 index 74b0e4431..000000000 --- a/settings.html +++ /dev/null @@ -1,4 +0,0 @@ -Rustdoc settings -

Rustdoc settings

Theme preferences
Use system theme
Preferred dark theme
Preferred light theme
-
Auto-hide item contents for large items.
Auto-hide item methods' documentation
Auto-hide trait implementation documentation
Directly go to item in search if there is only one result
Show line numbers on code examples
Disable keyboard shortcuts
- \ No newline at end of file diff --git a/settings.js b/settings.js deleted file mode 100644 index b4d6fdcd7..000000000 --- a/settings.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function changeSetting(settingName,value){updateLocalStorage("rustdoc-"+settingName,value);switch(settingName){case"preferred-dark-theme":case"preferred-light-theme":case"use-system-theme":updateSystemTheme();break}}function handleKey(ev){if(ev.ctrlKey||ev.altKey||ev.metaKey){return}switch(getVirtualKey(ev)){case"Enter":case"Return":case"Space":ev.target.checked=!ev.target.checked;ev.preventDefault();break}}function setEvents(){onEachLazy(document.getElementsByClassName("slider"),function(elem){var toggle=elem.previousElementSibling;var settingId=toggle.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){toggle.checked=settingValue==="true"}toggle.onchange=function(){changeSetting(this.id,this.checked)};toggle.onkeyup=handleKey;toggle.onkeyrelease=handleKey});onEachLazy(document.getElementsByClassName("select-wrapper"),function(elem){var select=elem.getElementsByTagName("select")[0];var settingId=select.id;var settingValue=getSettingValue(settingId);if(settingValue!==null){select.value=settingValue}select.onchange=function(){changeSetting(this.id,this.value)}})}window.addEventListener("DOMContentLoaded",setEvents)})() \ No newline at end of file diff --git a/shred/all.html b/shred/all.html deleted file mode 100644 index b409c081b..000000000 --- a/shred/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/shred/fn.main.html b/shred/fn.main.html deleted file mode 100644 index 06cab39ce..000000000 --- a/shred/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in shred - Rust -

Function shred::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/shred/index.html b/shred/index.html deleted file mode 100644 index 071e13bc0..000000000 --- a/shred/index.html +++ /dev/null @@ -1,4 +0,0 @@ -shred - Rust -

Crate shred[][src]

Functions

-
- \ No newline at end of file diff --git a/shred/sidebar-items.js b/shred/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/shred/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/shuf/all.html b/shuf/all.html deleted file mode 100644 index fae8b50bf..000000000 --- a/shuf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/shuf/fn.main.html b/shuf/fn.main.html deleted file mode 100644 index de97defcb..000000000 --- a/shuf/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in shuf - Rust -

Function shuf::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/shuf/index.html b/shuf/index.html deleted file mode 100644 index 1e8fb7628..000000000 --- a/shuf/index.html +++ /dev/null @@ -1,4 +0,0 @@ -shuf - Rust -

Crate shuf[][src]

Functions

-
- \ No newline at end of file diff --git a/shuf/sidebar-items.js b/shuf/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/shuf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/sleep/all.html b/sleep/all.html deleted file mode 100644 index 25b9eeb64..000000000 --- a/sleep/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/sleep/fn.main.html b/sleep/fn.main.html deleted file mode 100644 index a8606bfae..000000000 --- a/sleep/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in sleep - Rust -

Function sleep::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/sleep/index.html b/sleep/index.html deleted file mode 100644 index 1aa844afe..000000000 --- a/sleep/index.html +++ /dev/null @@ -1,4 +0,0 @@ -sleep - Rust -

Crate sleep[][src]

Functions

-
- \ No newline at end of file diff --git a/sleep/sidebar-items.js b/sleep/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/sleep/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/sort/all.html b/sort/all.html deleted file mode 100644 index 0ce9f6e12..000000000 --- a/sort/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/sort/fn.main.html b/sort/fn.main.html deleted file mode 100644 index 05d855b25..000000000 --- a/sort/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in sort - Rust -

Function sort::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/sort/index.html b/sort/index.html deleted file mode 100644 index 2fdf2b87a..000000000 --- a/sort/index.html +++ /dev/null @@ -1,4 +0,0 @@ -sort - Rust -

Crate sort[][src]

Functions

-
- \ No newline at end of file diff --git a/sort/sidebar-items.js b/sort/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/sort/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/source-files.js b/source-files.js deleted file mode 100644 index 32f197dd1..000000000 --- a/source-files.js +++ /dev/null @@ -1,207 +0,0 @@ -var N = null;var sourcesIndex = {}; -sourcesIndex["arch"] = {"name":"","files":["main.rs"]}; -sourcesIndex["base32"] = {"name":"","files":["main.rs"]}; -sourcesIndex["base64"] = {"name":"","files":["main.rs"]}; -sourcesIndex["basename"] = {"name":"","files":["main.rs"]}; -sourcesIndex["basenc"] = {"name":"","files":["main.rs"]}; -sourcesIndex["cat"] = {"name":"","files":["main.rs"]}; -sourcesIndex["chcon"] = {"name":"","files":["main.rs"]}; -sourcesIndex["chgrp"] = {"name":"","files":["main.rs"]}; -sourcesIndex["chmod"] = {"name":"","files":["main.rs"]}; -sourcesIndex["chown"] = {"name":"","files":["main.rs"]}; -sourcesIndex["chroot"] = {"name":"","files":["main.rs"]}; -sourcesIndex["cksum"] = {"name":"","files":["main.rs"]}; -sourcesIndex["comm"] = {"name":"","files":["main.rs"]}; -sourcesIndex["coreutils"] = {"name":"","files":["coreutils.rs"]}; -sourcesIndex["cp"] = {"name":"","files":["main.rs"]}; -sourcesIndex["csplit"] = {"name":"","files":["main.rs"]}; -sourcesIndex["cut"] = {"name":"","files":["main.rs"]}; -sourcesIndex["date"] = {"name":"","files":["main.rs"]}; -sourcesIndex["dd"] = {"name":"","files":["main.rs"]}; -sourcesIndex["df"] = {"name":"","files":["main.rs"]}; -sourcesIndex["dircolors"] = {"name":"","files":["main.rs"]}; -sourcesIndex["dirname"] = {"name":"","files":["main.rs"]}; -sourcesIndex["du"] = {"name":"","files":["main.rs"]}; -sourcesIndex["echo"] = {"name":"","files":["main.rs"]}; -sourcesIndex["env"] = {"name":"","files":["main.rs"]}; -sourcesIndex["expand"] = {"name":"","files":["main.rs"]}; -sourcesIndex["expr"] = {"name":"","files":["main.rs"]}; -sourcesIndex["factor"] = {"name":"","files":["main.rs"]}; -sourcesIndex["false"] = {"name":"","files":["main.rs"]}; -sourcesIndex["fmt"] = {"name":"","files":["main.rs"]}; -sourcesIndex["fold"] = {"name":"","files":["main.rs"]}; -sourcesIndex["groups"] = {"name":"","files":["main.rs"]}; -sourcesIndex["hashsum"] = {"name":"","files":["main.rs"]}; -sourcesIndex["head"] = {"name":"","files":["main.rs"]}; -sourcesIndex["hostid"] = {"name":"","files":["main.rs"]}; -sourcesIndex["hostname"] = {"name":"","files":["main.rs"]}; -sourcesIndex["id"] = {"name":"","files":["main.rs"]}; -sourcesIndex["install"] = {"name":"","files":["main.rs"]}; -sourcesIndex["join"] = {"name":"","files":["main.rs"]}; -sourcesIndex["kill"] = {"name":"","files":["main.rs"]}; -sourcesIndex["libstdbuf"] = {"name":"","files":["libstdbuf.rs"]}; -sourcesIndex["link"] = {"name":"","files":["main.rs"]}; -sourcesIndex["ln"] = {"name":"","files":["main.rs"]}; -sourcesIndex["logname"] = {"name":"","files":["main.rs"]}; -sourcesIndex["ls"] = {"name":"","files":["main.rs"]}; -sourcesIndex["mkdir"] = {"name":"","files":["main.rs"]}; -sourcesIndex["mkfifo"] = {"name":"","files":["main.rs"]}; -sourcesIndex["mknod"] = {"name":"","files":["main.rs"]}; -sourcesIndex["mktemp"] = {"name":"","files":["main.rs"]}; -sourcesIndex["more"] = {"name":"","files":["main.rs"]}; -sourcesIndex["mv"] = {"name":"","files":["main.rs"]}; -sourcesIndex["nice"] = {"name":"","files":["main.rs"]}; -sourcesIndex["nl"] = {"name":"","files":["main.rs"]}; -sourcesIndex["nohup"] = {"name":"","files":["main.rs"]}; -sourcesIndex["nproc"] = {"name":"","files":["main.rs"]}; -sourcesIndex["numfmt"] = {"name":"","files":["main.rs"]}; -sourcesIndex["od"] = {"name":"","files":["main.rs"]}; -sourcesIndex["paste"] = {"name":"","files":["main.rs"]}; -sourcesIndex["pathchk"] = {"name":"","files":["main.rs"]}; -sourcesIndex["pinky"] = {"name":"","files":["main.rs"]}; -sourcesIndex["pr"] = {"name":"","files":["main.rs"]}; -sourcesIndex["printenv"] = {"name":"","files":["main.rs"]}; -sourcesIndex["printf"] = {"name":"","files":["main.rs"]}; -sourcesIndex["ptx"] = {"name":"","files":["main.rs"]}; -sourcesIndex["pwd"] = {"name":"","files":["main.rs"]}; -sourcesIndex["readlink"] = {"name":"","files":["main.rs"]}; -sourcesIndex["realpath"] = {"name":"","files":["main.rs"]}; -sourcesIndex["relpath"] = {"name":"","files":["main.rs"]}; -sourcesIndex["rm"] = {"name":"","files":["main.rs"]}; -sourcesIndex["rmdir"] = {"name":"","files":["main.rs"]}; -sourcesIndex["runcon"] = {"name":"","files":["main.rs"]}; -sourcesIndex["seq"] = {"name":"","files":["main.rs"]}; -sourcesIndex["shred"] = {"name":"","files":["main.rs"]}; -sourcesIndex["shuf"] = {"name":"","files":["main.rs"]}; -sourcesIndex["sleep"] = {"name":"","files":["main.rs"]}; -sourcesIndex["sort"] = {"name":"","files":["main.rs"]}; -sourcesIndex["split"] = {"name":"","files":["main.rs"]}; -sourcesIndex["stat"] = {"name":"","files":["main.rs"]}; -sourcesIndex["stdbuf"] = {"name":"","files":["main.rs"]}; -sourcesIndex["sum"] = {"name":"","files":["main.rs"]}; -sourcesIndex["sync"] = {"name":"","files":["main.rs"]}; -sourcesIndex["tac"] = {"name":"","files":["main.rs"]}; -sourcesIndex["tail"] = {"name":"","files":["main.rs"]}; -sourcesIndex["tee"] = {"name":"","files":["main.rs"]}; -sourcesIndex["test"] = {"name":"","files":["main.rs"]}; -sourcesIndex["timeout"] = {"name":"","files":["main.rs"]}; -sourcesIndex["touch"] = {"name":"","files":["main.rs"]}; -sourcesIndex["tr"] = {"name":"","files":["main.rs"]}; -sourcesIndex["true"] = {"name":"","files":["main.rs"]}; -sourcesIndex["truncate"] = {"name":"","files":["main.rs"]}; -sourcesIndex["tsort"] = {"name":"","files":["main.rs"]}; -sourcesIndex["tty"] = {"name":"","files":["main.rs"]}; -sourcesIndex["uname"] = {"name":"","files":["main.rs"]}; -sourcesIndex["unexpand"] = {"name":"","files":["main.rs"]}; -sourcesIndex["uniq"] = {"name":"","files":["main.rs"]}; -sourcesIndex["unlink"] = {"name":"","files":["main.rs"]}; -sourcesIndex["uptime"] = {"name":"","files":["main.rs"]}; -sourcesIndex["users"] = {"name":"","files":["main.rs"]}; -sourcesIndex["uu_arch"] = {"name":"","files":["arch.rs"]}; -sourcesIndex["uu_base32"] = {"name":"","files":["base32.rs","base_common.rs"]}; -sourcesIndex["uu_base64"] = {"name":"","files":["base64.rs"]}; -sourcesIndex["uu_basename"] = {"name":"","files":["basename.rs"]}; -sourcesIndex["uu_basenc"] = {"name":"","files":["basenc.rs"]}; -sourcesIndex["uu_cat"] = {"name":"","files":["cat.rs","splice.rs"]}; -sourcesIndex["uu_chcon"] = {"name":"","files":["chcon.rs","errors.rs","fts.rs"]}; -sourcesIndex["uu_chgrp"] = {"name":"","files":["chgrp.rs"]}; -sourcesIndex["uu_chmod"] = {"name":"","files":["chmod.rs"]}; -sourcesIndex["uu_chown"] = {"name":"","files":["chown.rs"]}; -sourcesIndex["uu_chroot"] = {"name":"","files":["chroot.rs","error.rs"]}; -sourcesIndex["uu_cksum"] = {"name":"","files":["cksum.rs"]}; -sourcesIndex["uu_comm"] = {"name":"","files":["comm.rs"]}; -sourcesIndex["uu_cp"] = {"name":"","files":["cp.rs"]}; -sourcesIndex["uu_csplit"] = {"name":"","files":["csplit.rs","csplit_error.rs","patterns.rs","split_name.rs"]}; -sourcesIndex["uu_cut"] = {"name":"","files":["cut.rs","searcher.rs"]}; -sourcesIndex["uu_date"] = {"name":"","files":["date.rs"]}; -sourcesIndex["uu_dd"] = {"name":"","files":["conversion_tables.rs","datastructures.rs","dd.rs","parseargs.rs"]}; -sourcesIndex["uu_df"] = {"name":"","files":["df.rs"]}; -sourcesIndex["uu_dircolors"] = {"name":"","files":["colors.rs","dircolors.rs"]}; -sourcesIndex["uu_dirname"] = {"name":"","files":["dirname.rs"]}; -sourcesIndex["uu_du"] = {"name":"","files":["du.rs"]}; -sourcesIndex["uu_echo"] = {"name":"","files":["echo.rs"]}; -sourcesIndex["uu_env"] = {"name":"","files":["env.rs"]}; -sourcesIndex["uu_expand"] = {"name":"","files":["expand.rs"]}; -sourcesIndex["uu_expr"] = {"name":"","files":["expr.rs","syntax_tree.rs","tokens.rs"]}; -sourcesIndex["uu_factor"] = {"name":"","dirs":[{"name":"numeric","files":["gcd.rs","mod.rs","modular_inverse.rs","montgomery.rs","traits.rs"]}],"files":["cli.rs","factor.rs","miller_rabin.rs","rho.rs","table.rs"]}; -sourcesIndex["uu_false"] = {"name":"","files":["false.rs"]}; -sourcesIndex["uu_fmt"] = {"name":"","files":["fmt.rs","linebreak.rs","parasplit.rs"]}; -sourcesIndex["uu_fold"] = {"name":"","files":["fold.rs"]}; -sourcesIndex["uu_groups"] = {"name":"","files":["groups.rs"]}; -sourcesIndex["uu_hashsum"] = {"name":"","files":["digest.rs","hashsum.rs"]}; -sourcesIndex["uu_head"] = {"name":"","files":["head.rs","lines.rs","parse.rs","take.rs"]}; -sourcesIndex["uu_hostid"] = {"name":"","files":["hostid.rs"]}; -sourcesIndex["uu_hostname"] = {"name":"","files":["hostname.rs"]}; -sourcesIndex["uu_id"] = {"name":"","files":["id.rs"]}; -sourcesIndex["uu_install"] = {"name":"","files":["install.rs","mode.rs"]}; -sourcesIndex["uu_join"] = {"name":"","files":["join.rs"]}; -sourcesIndex["uu_kill"] = {"name":"","files":["kill.rs"]}; -sourcesIndex["uu_link"] = {"name":"","files":["link.rs"]}; -sourcesIndex["uu_ln"] = {"name":"","files":["ln.rs"]}; -sourcesIndex["uu_logname"] = {"name":"","files":["logname.rs"]}; -sourcesIndex["uu_ls"] = {"name":"","files":["ls.rs","quoting_style.rs"]}; -sourcesIndex["uu_mkdir"] = {"name":"","files":["mkdir.rs"]}; -sourcesIndex["uu_mkfifo"] = {"name":"","files":["mkfifo.rs"]}; -sourcesIndex["uu_mknod"] = {"name":"","files":["mknod.rs"]}; -sourcesIndex["uu_mktemp"] = {"name":"","files":["mktemp.rs"]}; -sourcesIndex["uu_more"] = {"name":"","files":["more.rs"]}; -sourcesIndex["uu_mv"] = {"name":"","files":["error.rs","mv.rs"]}; -sourcesIndex["uu_nice"] = {"name":"","files":["nice.rs"]}; -sourcesIndex["uu_nl"] = {"name":"","files":["helper.rs","nl.rs"]}; -sourcesIndex["uu_nohup"] = {"name":"","files":["nohup.rs"]}; -sourcesIndex["uu_nproc"] = {"name":"","files":["nproc.rs"]}; -sourcesIndex["uu_numfmt"] = {"name":"","files":["errors.rs","format.rs","numfmt.rs","options.rs","units.rs"]}; -sourcesIndex["uu_od"] = {"name":"","files":["byteorder_io.rs","formatteriteminfo.rs","inputdecoder.rs","inputoffset.rs","multifilereader.rs","od.rs","output_info.rs","parse_formats.rs","parse_inputs.rs","parse_nrofbytes.rs","partialreader.rs","peekreader.rs","prn_char.rs","prn_float.rs","prn_int.rs"]}; -sourcesIndex["uu_paste"] = {"name":"","files":["paste.rs"]}; -sourcesIndex["uu_pathchk"] = {"name":"","files":["pathchk.rs"]}; -sourcesIndex["uu_pinky"] = {"name":"","files":["pinky.rs"]}; -sourcesIndex["uu_pr"] = {"name":"","files":["pr.rs"]}; -sourcesIndex["uu_printenv"] = {"name":"","files":["printenv.rs"]}; -sourcesIndex["uu_printf"] = {"name":"","files":["printf.rs"]}; -sourcesIndex["uu_ptx"] = {"name":"","files":["ptx.rs"]}; -sourcesIndex["uu_pwd"] = {"name":"","files":["pwd.rs"]}; -sourcesIndex["uu_readlink"] = {"name":"","files":["readlink.rs"]}; -sourcesIndex["uu_realpath"] = {"name":"","files":["realpath.rs"]}; -sourcesIndex["uu_relpath"] = {"name":"","files":["relpath.rs"]}; -sourcesIndex["uu_rm"] = {"name":"","files":["rm.rs"]}; -sourcesIndex["uu_rmdir"] = {"name":"","files":["rmdir.rs"]}; -sourcesIndex["uu_runcon"] = {"name":"","files":["errors.rs","runcon.rs"]}; -sourcesIndex["uu_seq"] = {"name":"","files":["error.rs","extendedbigdecimal.rs","extendedbigint.rs","number.rs","numberparse.rs","seq.rs"]}; -sourcesIndex["uu_shred"] = {"name":"","files":["shred.rs"]}; -sourcesIndex["uu_shuf"] = {"name":"","files":["rand_read_adapter.rs","shuf.rs"]}; -sourcesIndex["uu_sleep"] = {"name":"","files":["sleep.rs"]}; -sourcesIndex["uu_sort"] = {"name":"","files":["check.rs","chunks.rs","custom_str_cmp.rs","ext_sort.rs","merge.rs","numeric_str_cmp.rs","sort.rs","tmp_dir.rs"]}; -sourcesIndex["uu_split"] = {"name":"","dirs":[{"name":"platform","files":["mod.rs","unix.rs"]}],"files":["filenames.rs","split.rs"]}; -sourcesIndex["uu_stat"] = {"name":"","files":["stat.rs"]}; -sourcesIndex["uu_stdbuf"] = {"name":"","files":["stdbuf.rs"]}; -sourcesIndex["uu_sum"] = {"name":"","files":["sum.rs"]}; -sourcesIndex["uu_sync"] = {"name":"","files":["sync.rs"]}; -sourcesIndex["uu_tac"] = {"name":"","files":["error.rs","tac.rs"]}; -sourcesIndex["uu_tail"] = {"name":"","dirs":[{"name":"platform","files":["mod.rs","unix.rs"]}],"files":["chunks.rs","lines.rs","parse.rs","tail.rs"]}; -sourcesIndex["uu_tee"] = {"name":"","files":["tee.rs"]}; -sourcesIndex["uu_test"] = {"name":"","files":["parser.rs","test.rs"]}; -sourcesIndex["uu_timeout"] = {"name":"","files":["timeout.rs"]}; -sourcesIndex["uu_touch"] = {"name":"","files":["touch.rs"]}; -sourcesIndex["uu_tr"] = {"name":"","files":["convert.rs","operation.rs","tr.rs","unicode_table.rs"]}; -sourcesIndex["uu_true"] = {"name":"","files":["true.rs"]}; -sourcesIndex["uu_truncate"] = {"name":"","files":["truncate.rs"]}; -sourcesIndex["uu_tsort"] = {"name":"","files":["tsort.rs"]}; -sourcesIndex["uu_tty"] = {"name":"","files":["tty.rs"]}; -sourcesIndex["uu_uname"] = {"name":"","files":["uname.rs"]}; -sourcesIndex["uu_unexpand"] = {"name":"","files":["unexpand.rs"]}; -sourcesIndex["uu_uniq"] = {"name":"","files":["uniq.rs"]}; -sourcesIndex["uu_unlink"] = {"name":"","files":["unlink.rs"]}; -sourcesIndex["uu_uptime"] = {"name":"","files":["uptime.rs"]}; -sourcesIndex["uu_users"] = {"name":"","files":["users.rs"]}; -sourcesIndex["uu_wc"] = {"name":"","files":["count_fast.rs","countable.rs","wc.rs","word_count.rs"]}; -sourcesIndex["uu_who"] = {"name":"","files":["who.rs"]}; -sourcesIndex["uu_whoami"] = {"name":"","dirs":[{"name":"platform","files":["mod.rs","unix.rs"]}],"files":["whoami.rs"]}; -sourcesIndex["uu_yes"] = {"name":"","files":["splice.rs","yes.rs"]}; -sourcesIndex["uucore"] = {"name":"","dirs":[{"name":"features","dirs":[{"name":"tokenize","dirs":[{"name":"num_format","dirs":[{"name":"formatters","dirs":[{"name":"base_conv","files":["mod.rs","tests.rs"]}],"files":["cninetyninehexfloatf.rs","decf.rs","float_common.rs","floatf.rs","intf.rs","mod.rs","scif.rs"]}],"files":["format_field.rs","formatter.rs","mod.rs","num_format.rs"]}],"files":["mod.rs","sub.rs","token.rs","unescaped_text.rs"]}],"files":["encoding.rs","entries.rs","fs.rs","fsext.rs","memo.rs","mode.rs","perms.rs","pipes.rs","process.rs","ringbuffer.rs","signals.rs","utmpx.rs"]},{"name":"mods","files":["backup_control.rs","display.rs","error.rs","os.rs","panic.rs","ranges.rs","version_cmp.rs"]},{"name":"parser","files":["parse_size.rs","parse_time.rs"]}],"files":["features.rs","lib.rs","macros.rs","mods.rs","parser.rs"]}; -sourcesIndex["uucore_procs"] = {"name":"","files":["lib.rs"]}; -sourcesIndex["uudoc"] = {"name":"","files":["uudoc.rs"]}; -sourcesIndex["wc"] = {"name":"","files":["main.rs"]}; -sourcesIndex["who"] = {"name":"","files":["main.rs"]}; -sourcesIndex["whoami"] = {"name":"","files":["main.rs"]}; -sourcesIndex["yes"] = {"name":"","files":["main.rs"]}; -createSourceSidebar(); diff --git a/source-script.js b/source-script.js deleted file mode 100644 index 5dc8fee0f..000000000 --- a/source-script.js +++ /dev/null @@ -1 +0,0 @@ -(function(){function getCurrentFilePath(){var parts=window.location.pathname.split("/");var rootPathParts=window.rootPath.split("/");for(var i=0,len=rootPathParts.length;i"){sidebar.style.left="";this.style.left="";child.innerText="<";updateLocalStorage("rustdoc-source-sidebar-show","true")}else{sidebar.style.left="-300px";this.style.left="0";child.innerText=">";updateLocalStorage("rustdoc-source-sidebar-show","false")}}function createSidebarToggle(){var sidebarToggle=document.createElement("div");sidebarToggle.id="sidebar-toggle";sidebarToggle.onclick=toggleSidebar;var inner1=document.createElement("div");inner1.style.position="relative";var inner2=document.createElement("div");inner2.style.paddingTop="3px";if(getCurrentValue("rustdoc-source-sidebar-show")==="true"){inner2.innerText="<"}else{inner2.innerText=">";sidebarToggle.style.left="0"}inner1.appendChild(inner2);sidebarToggle.appendChild(inner1);return sidebarToggle}function createSourceSidebar(){if(!window.rootPath.endsWith("/")){window.rootPath+="/"}var main=document.getElementById("main");var sidebarToggle=createSidebarToggle();main.insertBefore(sidebarToggle,main.firstChild);var sidebar=document.createElement("div");sidebar.id="source-sidebar";if(getCurrentValue("rustdoc-source-sidebar-show")!=="true"){sidebar.style.left="-300px"}var currentFile=getCurrentFilePath();var hasFoundFile=false;var title=document.createElement("div");title.className="title";title.innerText="Files";sidebar.appendChild(title);Object.keys(sourcesIndex).forEach(function(key){sourcesIndex[key].name=key;hasFoundFile=createDirEntry(sourcesIndex[key],sidebar,"",currentFile,hasFoundFile)});main.insertBefore(sidebar,main.firstChild);var selected_elem=sidebar.getElementsByClassName("selected")[0];if(typeof selected_elem!=="undefined"){selected_elem.focus()}}var lineNumbersRegex=/^#?(\d+)(?:-(\d+))?$/;function highlightSourceLines(scrollTo,match){if(typeof match==="undefined"){match=window.location.hash.match(lineNumbersRegex)}if(!match){return}var from=parseInt(match[1],10);var to=from;if(typeof match[2]!=="undefined"){to=parseInt(match[2],10)}if(tocur_line_id){var tmp=prev_line_id;prev_line_id=cur_line_id;cur_line_id=tmp}set_fragment(prev_line_id+"-"+cur_line_id)}else{prev_line_id=cur_line_id;set_fragment(cur_line_id)}}}());window.addEventListener("hashchange",function(){var match=window.location.hash.match(lineNumbersRegex);if(match){return highlightSourceLines(false,match)}});onEachLazy(document.getElementsByClassName("line-numbers"),function(el){el.addEventListener("click",handleSourceHighlight)});highlightSourceLines(true);window.createSourceSidebar=createSourceSidebar})() \ No newline at end of file diff --git a/split/all.html b/split/all.html deleted file mode 100644 index d23f22a28..000000000 --- a/split/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/split/fn.main.html b/split/fn.main.html deleted file mode 100644 index 21097ebaf..000000000 --- a/split/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in split - Rust -

Function split::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/split/index.html b/split/index.html deleted file mode 100644 index 198843244..000000000 --- a/split/index.html +++ /dev/null @@ -1,4 +0,0 @@ -split - Rust -

Crate split[][src]

Functions

-
- \ No newline at end of file diff --git a/split/sidebar-items.js b/split/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/split/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/src/arch/main.rs.html b/src/arch/main.rs.html deleted file mode 100644 index d55ab5251..000000000 --- a/src/arch/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_arch);
-
-
- \ No newline at end of file diff --git a/src/base32/main.rs.html b/src/base32/main.rs.html deleted file mode 100644 index 403f4d350..000000000 --- a/src/base32/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_base32);
-
-
- \ No newline at end of file diff --git a/src/base64/main.rs.html b/src/base64/main.rs.html deleted file mode 100644 index fdfcbf8b0..000000000 --- a/src/base64/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_base64);
-
-
- \ No newline at end of file diff --git a/src/basename/main.rs.html b/src/basename/main.rs.html deleted file mode 100644 index 469f1aa2b..000000000 --- a/src/basename/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_basename);
-
-
- \ No newline at end of file diff --git a/src/basenc/main.rs.html b/src/basenc/main.rs.html deleted file mode 100644 index c1ea4501c..000000000 --- a/src/basenc/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_basenc);
-
-
- \ No newline at end of file diff --git a/src/cat/main.rs.html b/src/cat/main.rs.html deleted file mode 100644 index 0c6233b4f..000000000 --- a/src/cat/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_cat);
-
-
- \ No newline at end of file diff --git a/src/chcon/main.rs.html b/src/chcon/main.rs.html deleted file mode 100644 index 6e8af40a3..000000000 --- a/src/chcon/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_chcon);
-
-
- \ No newline at end of file diff --git a/src/chgrp/main.rs.html b/src/chgrp/main.rs.html deleted file mode 100644 index f32c5c57d..000000000 --- a/src/chgrp/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_chgrp);
-
-
- \ No newline at end of file diff --git a/src/chmod/main.rs.html b/src/chmod/main.rs.html deleted file mode 100644 index 037a335b7..000000000 --- a/src/chmod/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_chmod);
-
-
- \ No newline at end of file diff --git a/src/chown/main.rs.html b/src/chown/main.rs.html deleted file mode 100644 index ce2e86cd0..000000000 --- a/src/chown/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_chown);
-
-
- \ No newline at end of file diff --git a/src/chroot/main.rs.html b/src/chroot/main.rs.html deleted file mode 100644 index 235044dbb..000000000 --- a/src/chroot/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_chroot);
-
-
- \ No newline at end of file diff --git a/src/cksum/main.rs.html b/src/cksum/main.rs.html deleted file mode 100644 index f89cff587..000000000 --- a/src/cksum/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_cksum);
-
-
- \ No newline at end of file diff --git a/src/comm/main.rs.html b/src/comm/main.rs.html deleted file mode 100644 index 893aeb073..000000000 --- a/src/comm/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_comm);
-
-
- \ No newline at end of file diff --git a/src/coreutils/coreutils.rs.html b/src/coreutils/coreutils.rs.html deleted file mode 100644 index 8928a6af4..000000000 --- a/src/coreutils/coreutils.rs.html +++ /dev/null @@ -1,360 +0,0 @@ -coreutils.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Michael Gehring <mg@ebfe.org>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-use clap::{App, Arg};
-use clap_complete::Shell;
-use std::cmp;
-use std::collections::hash_map::HashMap;
-use std::ffi::OsStr;
-use std::ffi::OsString;
-use std::io::{self, Write};
-use std::path::{Path, PathBuf};
-use std::process;
-use uucore::display::Quotable;
-
-const VERSION: &str = env!("CARGO_PKG_VERSION");
-
-include!(concat!(env!("OUT_DIR"), "/uutils_map.rs"));
-
-fn usage<T>(utils: &UtilityMap<T>, name: &str) {
-    println!("{} {} (multi-call binary)\n", name, VERSION);
-    println!("Usage: {} [function [arguments...]]\n", name);
-    println!("Currently defined functions:\n");
-    #[allow(clippy::map_clone)]
-    let mut utils: Vec<&str> = utils.keys().map(|&s| s).collect();
-    utils.sort_unstable();
-    let display_list = utils.join(", ");
-    let width = cmp::min(textwrap::termwidth(), 100) - 4 * 2; // (opinion/heuristic) max 100 chars wide with 4 character side indentions
-    println!(
-        "{}",
-        textwrap::indent(&textwrap::fill(&display_list, width), "    ")
-    );
-}
-
-fn binary_path(args: &mut impl Iterator<Item = OsString>) -> PathBuf {
-    match args.next() {
-        Some(ref s) if !s.is_empty() => PathBuf::from(s),
-        _ => std::env::current_exe().unwrap(),
-    }
-}
-
-fn name(binary_path: &Path) -> &str {
-    binary_path.file_stem().unwrap().to_str().unwrap()
-}
-
-fn main() {
-    uucore::panic::mute_sigpipe_panic();
-
-    let utils = util_map();
-    let mut args = uucore::args_os();
-
-    let binary = binary_path(&mut args);
-    let binary_as_util = name(&binary);
-
-    // binary name equals util name?
-    if let Some(&(uumain, _)) = utils.get(binary_as_util) {
-        process::exit(uumain((vec![binary.into()].into_iter()).chain(args)));
-    }
-
-    // binary name equals prefixed util name?
-    // * prefix/stem may be any string ending in a non-alphanumeric character
-    let util_name = if let Some(util) = utils.keys().find(|util| {
-        binary_as_util.ends_with(*util)
-            && !(&binary_as_util[..binary_as_util.len() - (*util).len()])
-                .ends_with(char::is_alphanumeric)
-    }) {
-        // prefixed util => replace 0th (aka, executable name) argument
-        Some(OsString::from(*util))
-    } else {
-        // unmatched binary name => regard as multi-binary container and advance argument list
-        uucore::set_utility_is_second_arg();
-        args.next()
-    };
-
-    // 0th argument equals util name?
-    if let Some(util_os) = util_name {
-        fn not_found(util: &OsStr) -> ! {
-            println!("{}: function/utility not found", util.maybe_quote());
-            process::exit(1);
-        }
-
-        let util = match util_os.to_str() {
-            Some(util) => util,
-            None => not_found(&util_os),
-        };
-
-        if util == "completion" {
-            gen_completions(args, utils);
-        }
-
-        match utils.get(util) {
-            Some(&(uumain, _)) => {
-                process::exit(uumain((vec![util_os].into_iter()).chain(args)));
-            }
-            None => {
-                if util == "--help" || util == "-h" {
-                    // see if they want help on a specific util
-                    if let Some(util_os) = args.next() {
-                        let util = match util_os.to_str() {
-                            Some(util) => util,
-                            None => not_found(&util_os),
-                        };
-
-                        match utils.get(util) {
-                            Some(&(uumain, _)) => {
-                                let code = uumain(
-                                    (vec![util_os, OsString::from("--help")].into_iter())
-                                        .chain(args),
-                                );
-                                io::stdout().flush().expect("could not flush stdout");
-                                process::exit(code);
-                            }
-                            None => not_found(&util_os),
-                        }
-                    }
-                    usage(&utils, binary_as_util);
-                    process::exit(0);
-                } else {
-                    not_found(&util_os);
-                }
-            }
-        }
-    } else {
-        // no arguments provided
-        usage(&utils, binary_as_util);
-        process::exit(0);
-    }
-}
-
-/// Prints completions for the utility in the first parameter for the shell in the second parameter to stdout
-fn gen_completions<T: uucore::Args>(
-    args: impl Iterator<Item = OsString>,
-    util_map: UtilityMap<T>,
-) -> ! {
-    let all_utilities: Vec<_> = std::iter::once("coreutils")
-        .chain(util_map.keys().copied())
-        .collect();
-
-    let matches = App::new("completion")
-        .about("Prints completions to stdout")
-        .arg(
-            Arg::new("utility")
-                .possible_values(all_utilities)
-                .required(true),
-        )
-        .arg(
-            Arg::new("shell")
-                .possible_values(Shell::possible_values())
-                .required(true),
-        )
-        .get_matches_from(std::iter::once(OsString::from("completion")).chain(args));
-
-    let utility = matches.value_of("utility").unwrap();
-    let shell = matches.value_of("shell").unwrap();
-
-    let mut app = if utility == "coreutils" {
-        gen_coreutils_app(util_map)
-    } else {
-        util_map.get(utility).unwrap().1()
-    };
-    let shell: Shell = shell.parse().unwrap();
-    let bin_name = std::env::var("PROG_PREFIX").unwrap_or_default() + utility;
-
-    clap_complete::generate(shell, &mut app, bin_name, &mut io::stdout());
-    io::stdout().flush().unwrap();
-    process::exit(0);
-}
-
-fn gen_coreutils_app<T: uucore::Args>(util_map: UtilityMap<T>) -> App<'static> {
-    let mut app = App::new("coreutils");
-    for (_, (_, sub_app)) in util_map {
-        app = app.subcommand(sub_app());
-    }
-    app
-}
-
-
- \ No newline at end of file diff --git a/src/coreutils/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html b/src/coreutils/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html deleted file mode 100644 index 54ac807b4..000000000 --- a/src/coreutils/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html +++ /dev/null @@ -1,248 +0,0 @@ -uutils_map.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-
type UtilityMap<T> = HashMap<&'static str, (fn(T) -> i32, fn() -> App<'static>)>;
-
-fn util_map<T: uucore::Args>() -> UtilityMap<T> {
-	#[allow(unused_mut)]
-	#[allow(clippy::let_and_return)]
-	let mut map = UtilityMap::new();
-	map.insert("arch", (arch::uumain, arch::uu_app));
-	map.insert("base32", (base32::uumain, base32::uu_app));
-	map.insert("base64", (base64::uumain, base64::uu_app));
-	map.insert("basename", (basename::uumain, basename::uu_app));
-	map.insert("basenc", (basenc::uumain, basenc::uu_app));
-	map.insert("cat", (cat::uumain, cat::uu_app));
-	map.insert("chcon", (chcon::uumain, chcon::uu_app));
-	map.insert("chgrp", (chgrp::uumain, chgrp::uu_app));
-	map.insert("chmod", (chmod::uumain, chmod::uu_app));
-	map.insert("chown", (chown::uumain, chown::uu_app));
-	map.insert("chroot", (chroot::uumain, chroot::uu_app));
-	map.insert("cksum", (cksum::uumain, cksum::uu_app));
-	map.insert("comm", (comm::uumain, comm::uu_app));
-	map.insert("cp", (cp::uumain, cp::uu_app));
-	map.insert("csplit", (csplit::uumain, csplit::uu_app));
-	map.insert("cut", (cut::uumain, cut::uu_app));
-	map.insert("date", (date::uumain, date::uu_app));
-	map.insert("dd", (dd::uumain, dd::uu_app));
-	map.insert("df", (df::uumain, df::uu_app));
-	map.insert("dircolors", (dircolors::uumain, dircolors::uu_app));
-	map.insert("dirname", (dirname::uumain, dirname::uu_app));
-	map.insert("du", (du::uumain, du::uu_app));
-	map.insert("echo", (echo::uumain, echo::uu_app));
-	map.insert("env", (env::uumain, env::uu_app));
-	map.insert("expand", (expand::uumain, expand::uu_app));
-	map.insert("expr", (expr::uumain, expr::uu_app));
-	map.insert("factor", (factor::uumain, factor::uu_app));
-	map.insert("false", (r#false::uumain, r#false::uu_app));
-	map.insert("fmt", (fmt::uumain, fmt::uu_app));
-	map.insert("fold", (fold::uumain, fold::uu_app));
-	map.insert("groups", (groups::uumain, groups::uu_app));
-	map.insert("hashsum", (hashsum::uumain, hashsum::uu_app_custom));
-		map.insert("md5sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha1sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha224sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha256sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha384sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha512sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-224sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-256sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-384sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-512sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("shake128sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("shake256sum", (hashsum::uumain, hashsum::uu_app_common));
-	map.insert("head", (head::uumain, head::uu_app));
-	map.insert("hostid", (hostid::uumain, hostid::uu_app));
-	map.insert("hostname", (hostname::uumain, hostname::uu_app));
-	map.insert("id", (id::uumain, id::uu_app));
-	map.insert("install", (install::uumain, install::uu_app));
-	map.insert("join", (join::uumain, join::uu_app));
-	map.insert("kill", (kill::uumain, kill::uu_app));
-	map.insert("link", (link::uumain, link::uu_app));
-	map.insert("ln", (ln::uumain, ln::uu_app));
-	map.insert("logname", (logname::uumain, logname::uu_app));
-	map.insert("ls", (ls::uumain, ls::uu_app));
-	map.insert("mkdir", (mkdir::uumain, mkdir::uu_app));
-	map.insert("mkfifo", (mkfifo::uumain, mkfifo::uu_app));
-	map.insert("mknod", (mknod::uumain, mknod::uu_app));
-	map.insert("mktemp", (mktemp::uumain, mktemp::uu_app));
-	map.insert("more", (more::uumain, more::uu_app));
-	map.insert("mv", (mv::uumain, mv::uu_app));
-	map.insert("nice", (nice::uumain, nice::uu_app));
-	map.insert("nl", (nl::uumain, nl::uu_app));
-	map.insert("nohup", (nohup::uumain, nohup::uu_app));
-	map.insert("nproc", (nproc::uumain, nproc::uu_app));
-	map.insert("numfmt", (numfmt::uumain, numfmt::uu_app));
-	map.insert("od", (od::uumain, od::uu_app));
-	map.insert("paste", (paste::uumain, paste::uu_app));
-	map.insert("pathchk", (pathchk::uumain, pathchk::uu_app));
-	map.insert("pinky", (pinky::uumain, pinky::uu_app));
-	map.insert("pr", (pr::uumain, pr::uu_app));
-	map.insert("printenv", (printenv::uumain, printenv::uu_app));
-	map.insert("printf", (printf::uumain, printf::uu_app));
-	map.insert("ptx", (ptx::uumain, ptx::uu_app));
-	map.insert("pwd", (pwd::uumain, pwd::uu_app));
-	map.insert("readlink", (readlink::uumain, readlink::uu_app));
-	map.insert("realpath", (realpath::uumain, realpath::uu_app));
-	map.insert("relpath", (relpath::uumain, relpath::uu_app));
-	map.insert("rm", (rm::uumain, rm::uu_app));
-	map.insert("rmdir", (rmdir::uumain, rmdir::uu_app));
-	map.insert("runcon", (runcon::uumain, runcon::uu_app));
-	map.insert("seq", (seq::uumain, seq::uu_app));
-	map.insert("shred", (shred::uumain, shred::uu_app));
-	map.insert("shuf", (shuf::uumain, shuf::uu_app));
-	map.insert("sleep", (sleep::uumain, sleep::uu_app));
-	map.insert("sort", (sort::uumain, sort::uu_app));
-	map.insert("split", (split::uumain, split::uu_app));
-	map.insert("stat", (stat::uumain, stat::uu_app));
-	map.insert("stdbuf", (stdbuf::uumain, stdbuf::uu_app));
-	map.insert("sum", (sum::uumain, sum::uu_app));
-	map.insert("sync", (sync::uumain, sync::uu_app));
-	map.insert("tac", (tac::uumain, tac::uu_app));
-	map.insert("tail", (tail::uumain, tail::uu_app));
-	map.insert("tee", (tee::uumain, tee::uu_app));
-	map.insert("timeout", (timeout::uumain, timeout::uu_app));
-	map.insert("touch", (touch::uumain, touch::uu_app));
-	map.insert("tr", (tr::uumain, tr::uu_app));
-	map.insert("true", (r#true::uumain, r#true::uu_app));
-	map.insert("truncate", (truncate::uumain, truncate::uu_app));
-	map.insert("tsort", (tsort::uumain, tsort::uu_app));
-	map.insert("tty", (tty::uumain, tty::uu_app));
-	map.insert("uname", (uname::uumain, uname::uu_app));
-	map.insert("unexpand", (unexpand::uumain, unexpand::uu_app));
-	map.insert("uniq", (uniq::uumain, uniq::uu_app));
-	map.insert("unlink", (unlink::uumain, unlink::uu_app));
-	map.insert("uptime", (uptime::uumain, uptime::uu_app));
-	map.insert("users", (users::uumain, users::uu_app));
-	map.insert("test", (uu_test::uumain, uu_test::uu_app));
-		map.insert("[", (uu_test::uumain, uu_test::uu_app));
-	map.insert("wc", (wc::uumain, wc::uu_app));
-	map.insert("who", (who::uumain, who::uu_app));
-	map.insert("whoami", (whoami::uumain, whoami::uu_app));
-	map.insert("yes", (yes::uumain, yes::uu_app));
-map
-}
-
-
- \ No newline at end of file diff --git a/src/cp/main.rs.html b/src/cp/main.rs.html deleted file mode 100644 index 89f347601..000000000 --- a/src/cp/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_cp);
-
-
- \ No newline at end of file diff --git a/src/csplit/main.rs.html b/src/csplit/main.rs.html deleted file mode 100644 index b2bbf2043..000000000 --- a/src/csplit/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_csplit);
-
-
- \ No newline at end of file diff --git a/src/cut/main.rs.html b/src/cut/main.rs.html deleted file mode 100644 index 4c3ad78b3..000000000 --- a/src/cut/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_cut);
-
-
- \ No newline at end of file diff --git a/src/date/main.rs.html b/src/date/main.rs.html deleted file mode 100644 index fae1af340..000000000 --- a/src/date/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_date);
-
-
- \ No newline at end of file diff --git a/src/dd/main.rs.html b/src/dd/main.rs.html deleted file mode 100644 index bf0d3bd76..000000000 --- a/src/dd/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_dd); // spell-checker:ignore procs uucore
-
-
- \ No newline at end of file diff --git a/src/df/main.rs.html b/src/df/main.rs.html deleted file mode 100644 index 13c65cd82..000000000 --- a/src/df/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_df);
-
-
- \ No newline at end of file diff --git a/src/dircolors/main.rs.html b/src/dircolors/main.rs.html deleted file mode 100644 index c7cec4b8b..000000000 --- a/src/dircolors/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_dircolors);
-
-
- \ No newline at end of file diff --git a/src/dirname/main.rs.html b/src/dirname/main.rs.html deleted file mode 100644 index f12a1f85b..000000000 --- a/src/dirname/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_dirname);
-
-
- \ No newline at end of file diff --git a/src/du/main.rs.html b/src/du/main.rs.html deleted file mode 100644 index 7c033793b..000000000 --- a/src/du/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_du);
-
-
- \ No newline at end of file diff --git a/src/echo/main.rs.html b/src/echo/main.rs.html deleted file mode 100644 index c66f17289..000000000 --- a/src/echo/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_echo);
-
-
- \ No newline at end of file diff --git a/src/env/main.rs.html b/src/env/main.rs.html deleted file mode 100644 index d88b85dba..000000000 --- a/src/env/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_env);
-
-
- \ No newline at end of file diff --git a/src/expand/main.rs.html b/src/expand/main.rs.html deleted file mode 100644 index 6f0ff2367..000000000 --- a/src/expand/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_expand);
-
-
- \ No newline at end of file diff --git a/src/expr/main.rs.html b/src/expr/main.rs.html deleted file mode 100644 index 2e05949e3..000000000 --- a/src/expr/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_expr);
-
-
- \ No newline at end of file diff --git a/src/factor/main.rs.html b/src/factor/main.rs.html deleted file mode 100644 index 3368a0b91..000000000 --- a/src/factor/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_factor);
-
-
- \ No newline at end of file diff --git a/src/false/main.rs.html b/src/false/main.rs.html deleted file mode 100644 index b3a7d693e..000000000 --- a/src/false/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_false);
-
-
- \ No newline at end of file diff --git a/src/fmt/main.rs.html b/src/fmt/main.rs.html deleted file mode 100644 index f9b47ca4c..000000000 --- a/src/fmt/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_fmt);
-
-
- \ No newline at end of file diff --git a/src/fold/main.rs.html b/src/fold/main.rs.html deleted file mode 100644 index 5793c069e..000000000 --- a/src/fold/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_fold);
-
-
- \ No newline at end of file diff --git a/src/groups/main.rs.html b/src/groups/main.rs.html deleted file mode 100644 index c04a940fb..000000000 --- a/src/groups/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_groups);
-
-
- \ No newline at end of file diff --git a/src/hashsum/main.rs.html b/src/hashsum/main.rs.html deleted file mode 100644 index 5a3f38dc1..000000000 --- a/src/hashsum/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_hashsum);
-
-
- \ No newline at end of file diff --git a/src/head/main.rs.html b/src/head/main.rs.html deleted file mode 100644 index bdd3df674..000000000 --- a/src/head/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_head);
-
-
- \ No newline at end of file diff --git a/src/hostid/main.rs.html b/src/hostid/main.rs.html deleted file mode 100644 index 744eb81df..000000000 --- a/src/hostid/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_hostid);
-
-
- \ No newline at end of file diff --git a/src/hostname/main.rs.html b/src/hostname/main.rs.html deleted file mode 100644 index 48dd4ca14..000000000 --- a/src/hostname/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_hostname);
-
-
- \ No newline at end of file diff --git a/src/id/main.rs.html b/src/id/main.rs.html deleted file mode 100644 index e685f61a0..000000000 --- a/src/id/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_id);
-
-
- \ No newline at end of file diff --git a/src/install/main.rs.html b/src/install/main.rs.html deleted file mode 100644 index 8d34387df..000000000 --- a/src/install/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_install);
-
-
- \ No newline at end of file diff --git a/src/join/main.rs.html b/src/join/main.rs.html deleted file mode 100644 index 9969b070f..000000000 --- a/src/join/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_join);
-
-
- \ No newline at end of file diff --git a/src/kill/main.rs.html b/src/kill/main.rs.html deleted file mode 100644 index 61b6dd3dd..000000000 --- a/src/kill/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_kill);
-
-
- \ No newline at end of file diff --git a/src/libstdbuf/libstdbuf.rs.html b/src/libstdbuf/libstdbuf.rs.html deleted file mode 100644 index 90d0f79c3..000000000 --- a/src/libstdbuf/libstdbuf.rs.html +++ /dev/null @@ -1,148 +0,0 @@ -libstdbuf.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-
// spell-checker:ignore (ToDO) IOFBF IOLBF IONBF cstdio setvbuf
-
-#[macro_use]
-extern crate cpp;
-
-#[macro_use]
-extern crate uucore;
-
-use libc::{c_char, c_int, size_t, FILE, _IOFBF, _IOLBF, _IONBF};
-use std::env;
-use std::ptr;
-
-cpp! {{
-    #include <cstdio>
-
-    extern "C" {
-        void __stdbuf(void);
-
-        void __attribute((constructor))
-        __stdbuf_init(void) {
-            __stdbuf();
-        }
-
-        FILE *__stdbuf_get_stdin() { return stdin; }
-        FILE *__stdbuf_get_stdout() { return stdout; }
-        FILE *__stdbuf_get_stderr() { return stderr; }
-    }
-}}
-
-extern "C" {
-    fn __stdbuf_get_stdin() -> *mut FILE;
-    fn __stdbuf_get_stdout() -> *mut FILE;
-    fn __stdbuf_get_stderr() -> *mut FILE;
-}
-
-fn set_buffer(stream: *mut FILE, value: &str) {
-    let (mode, size): (c_int, size_t) = match value {
-        "0" => (_IONBF, 0_usize),
-        "L" => (_IOLBF, 0_usize),
-        input => {
-            let buff_size: usize = match input.parse() {
-                Ok(num) => num,
-                Err(e) => crash!(1, "incorrect size of buffer!: {}", e),
-            };
-            (_IOFBF, buff_size as size_t)
-        }
-    };
-    let res: c_int;
-    unsafe {
-        let buffer: *mut c_char = ptr::null_mut();
-        assert!(buffer.is_null());
-        res = libc::setvbuf(stream, buffer, mode, size);
-    }
-    if res != 0 {
-        crash!(res, "error while calling setvbuf!");
-    }
-}
-
-/// # Safety
-/// ToDO ... (safety note)
-#[no_mangle]
-pub unsafe extern "C" fn __stdbuf() {
-    if let Ok(val) = env::var("_STDBUF_E") {
-        set_buffer(__stdbuf_get_stderr(), &val);
-    }
-    if let Ok(val) = env::var("_STDBUF_I") {
-        set_buffer(__stdbuf_get_stdin(), &val);
-    }
-    if let Ok(val) = env::var("_STDBUF_O") {
-        set_buffer(__stdbuf_get_stdout(), &val);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/link/main.rs.html b/src/link/main.rs.html deleted file mode 100644 index ffd5408b5..000000000 --- a/src/link/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_link);
-
-
- \ No newline at end of file diff --git a/src/ln/main.rs.html b/src/ln/main.rs.html deleted file mode 100644 index 72e626319..000000000 --- a/src/ln/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_ln);
-
-
- \ No newline at end of file diff --git a/src/logname/main.rs.html b/src/logname/main.rs.html deleted file mode 100644 index 3ef1c9bb6..000000000 --- a/src/logname/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_logname);
-
-
- \ No newline at end of file diff --git a/src/ls/main.rs.html b/src/ls/main.rs.html deleted file mode 100644 index d9b551a1e..000000000 --- a/src/ls/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_ls);
-
-
- \ No newline at end of file diff --git a/src/mkdir/main.rs.html b/src/mkdir/main.rs.html deleted file mode 100644 index 15a6d22dc..000000000 --- a/src/mkdir/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_mkdir);
-
-
- \ No newline at end of file diff --git a/src/mkfifo/main.rs.html b/src/mkfifo/main.rs.html deleted file mode 100644 index 36ec15e1f..000000000 --- a/src/mkfifo/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_mkfifo);
-
-
- \ No newline at end of file diff --git a/src/mknod/main.rs.html b/src/mknod/main.rs.html deleted file mode 100644 index 3b448811b..000000000 --- a/src/mknod/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_mknod);
-
-
- \ No newline at end of file diff --git a/src/mktemp/main.rs.html b/src/mktemp/main.rs.html deleted file mode 100644 index 28f680551..000000000 --- a/src/mktemp/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_mktemp);
-
-
- \ No newline at end of file diff --git a/src/more/main.rs.html b/src/more/main.rs.html deleted file mode 100644 index 80fe14c4d..000000000 --- a/src/more/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_more);
-
-
- \ No newline at end of file diff --git a/src/mv/main.rs.html b/src/mv/main.rs.html deleted file mode 100644 index 46d26a903..000000000 --- a/src/mv/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_mv);
-
-
- \ No newline at end of file diff --git a/src/nice/main.rs.html b/src/nice/main.rs.html deleted file mode 100644 index 1b9ddd942..000000000 --- a/src/nice/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_nice);
-
-
- \ No newline at end of file diff --git a/src/nl/main.rs.html b/src/nl/main.rs.html deleted file mode 100644 index 620a991cb..000000000 --- a/src/nl/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_nl);
-
-
- \ No newline at end of file diff --git a/src/nohup/main.rs.html b/src/nohup/main.rs.html deleted file mode 100644 index c62687b37..000000000 --- a/src/nohup/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_nohup);
-
-
- \ No newline at end of file diff --git a/src/nproc/main.rs.html b/src/nproc/main.rs.html deleted file mode 100644 index 3d1a8f93e..000000000 --- a/src/nproc/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_nproc);
-
-
- \ No newline at end of file diff --git a/src/numfmt/main.rs.html b/src/numfmt/main.rs.html deleted file mode 100644 index 55db9a1ce..000000000 --- a/src/numfmt/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_numfmt);
-
-
- \ No newline at end of file diff --git a/src/od/main.rs.html b/src/od/main.rs.html deleted file mode 100644 index ffb4c16a7..000000000 --- a/src/od/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_od);
-
-
- \ No newline at end of file diff --git a/src/paste/main.rs.html b/src/paste/main.rs.html deleted file mode 100644 index 08d33e791..000000000 --- a/src/paste/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_paste);
-
-
- \ No newline at end of file diff --git a/src/pathchk/main.rs.html b/src/pathchk/main.rs.html deleted file mode 100644 index f8858fc54..000000000 --- a/src/pathchk/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_pathchk);
-
-
- \ No newline at end of file diff --git a/src/pinky/main.rs.html b/src/pinky/main.rs.html deleted file mode 100644 index 23098fae5..000000000 --- a/src/pinky/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_pinky);
-
-
- \ No newline at end of file diff --git a/src/pr/main.rs.html b/src/pr/main.rs.html deleted file mode 100644 index 611cd467c..000000000 --- a/src/pr/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_pr); // spell-checker:ignore procs uucore
-
-
- \ No newline at end of file diff --git a/src/printenv/main.rs.html b/src/printenv/main.rs.html deleted file mode 100644 index 4ddf06e21..000000000 --- a/src/printenv/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_printenv);
-
-
- \ No newline at end of file diff --git a/src/printf/main.rs.html b/src/printf/main.rs.html deleted file mode 100644 index b049c4339..000000000 --- a/src/printf/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_printf);
-
-
- \ No newline at end of file diff --git a/src/ptx/main.rs.html b/src/ptx/main.rs.html deleted file mode 100644 index 166658b0f..000000000 --- a/src/ptx/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_ptx);
-
-
- \ No newline at end of file diff --git a/src/pwd/main.rs.html b/src/pwd/main.rs.html deleted file mode 100644 index 6a1e2e3d5..000000000 --- a/src/pwd/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_pwd);
-
-
- \ No newline at end of file diff --git a/src/readlink/main.rs.html b/src/readlink/main.rs.html deleted file mode 100644 index 988d161b0..000000000 --- a/src/readlink/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_readlink);
-
-
- \ No newline at end of file diff --git a/src/realpath/main.rs.html b/src/realpath/main.rs.html deleted file mode 100644 index ed8bde1ba..000000000 --- a/src/realpath/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_realpath);
-
-
- \ No newline at end of file diff --git a/src/relpath/main.rs.html b/src/relpath/main.rs.html deleted file mode 100644 index 364de6fc2..000000000 --- a/src/relpath/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_relpath);
-
-
- \ No newline at end of file diff --git a/src/rm/main.rs.html b/src/rm/main.rs.html deleted file mode 100644 index 4226f23c4..000000000 --- a/src/rm/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_rm);
-
-
- \ No newline at end of file diff --git a/src/rmdir/main.rs.html b/src/rmdir/main.rs.html deleted file mode 100644 index aa09cbade..000000000 --- a/src/rmdir/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_rmdir);
-
-
- \ No newline at end of file diff --git a/src/runcon/main.rs.html b/src/runcon/main.rs.html deleted file mode 100644 index 572f348bb..000000000 --- a/src/runcon/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_runcon);
-
-
- \ No newline at end of file diff --git a/src/seq/main.rs.html b/src/seq/main.rs.html deleted file mode 100644 index be0e84edb..000000000 --- a/src/seq/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_seq);
-
-
- \ No newline at end of file diff --git a/src/shred/main.rs.html b/src/shred/main.rs.html deleted file mode 100644 index 54a1a11aa..000000000 --- a/src/shred/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_shred);
-
-
- \ No newline at end of file diff --git a/src/shuf/main.rs.html b/src/shuf/main.rs.html deleted file mode 100644 index fe6acfde6..000000000 --- a/src/shuf/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_shuf);
-
-
- \ No newline at end of file diff --git a/src/sleep/main.rs.html b/src/sleep/main.rs.html deleted file mode 100644 index 9d38f9df0..000000000 --- a/src/sleep/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_sleep);
-
-
- \ No newline at end of file diff --git a/src/sort/main.rs.html b/src/sort/main.rs.html deleted file mode 100644 index 66ba4c6b8..000000000 --- a/src/sort/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_sort);
-
-
- \ No newline at end of file diff --git a/src/split/main.rs.html b/src/split/main.rs.html deleted file mode 100644 index dc8f36200..000000000 --- a/src/split/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_split);
-
-
- \ No newline at end of file diff --git a/src/stat/main.rs.html b/src/stat/main.rs.html deleted file mode 100644 index 0d267a41d..000000000 --- a/src/stat/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_stat);
-
-
- \ No newline at end of file diff --git a/src/stdbuf/main.rs.html b/src/stdbuf/main.rs.html deleted file mode 100644 index 895120635..000000000 --- a/src/stdbuf/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_stdbuf);
-
-
- \ No newline at end of file diff --git a/src/sum/main.rs.html b/src/sum/main.rs.html deleted file mode 100644 index c338d671f..000000000 --- a/src/sum/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_sum);
-
-
- \ No newline at end of file diff --git a/src/sync/main.rs.html b/src/sync/main.rs.html deleted file mode 100644 index 0c10cb1a3..000000000 --- a/src/sync/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_sync);
-
-
- \ No newline at end of file diff --git a/src/tac/main.rs.html b/src/tac/main.rs.html deleted file mode 100644 index 42a254628..000000000 --- a/src/tac/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_tac);
-
-
- \ No newline at end of file diff --git a/src/tail/main.rs.html b/src/tail/main.rs.html deleted file mode 100644 index 54d018696..000000000 --- a/src/tail/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_tail);
-
-
- \ No newline at end of file diff --git a/src/tee/main.rs.html b/src/tee/main.rs.html deleted file mode 100644 index 295ee3c5c..000000000 --- a/src/tee/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_tee);
-
-
- \ No newline at end of file diff --git a/src/test/main.rs.html b/src/test/main.rs.html deleted file mode 100644 index 5fe6432e0..000000000 --- a/src/test/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_test);
-
-
- \ No newline at end of file diff --git a/src/timeout/main.rs.html b/src/timeout/main.rs.html deleted file mode 100644 index 8a991d8da..000000000 --- a/src/timeout/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_timeout);
-
-
- \ No newline at end of file diff --git a/src/touch/main.rs.html b/src/touch/main.rs.html deleted file mode 100644 index 09ff9c29a..000000000 --- a/src/touch/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_touch);
-
-
- \ No newline at end of file diff --git a/src/tr/main.rs.html b/src/tr/main.rs.html deleted file mode 100644 index 0b7f27e84..000000000 --- a/src/tr/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_tr);
-
-
- \ No newline at end of file diff --git a/src/true/main.rs.html b/src/true/main.rs.html deleted file mode 100644 index ea0d57e6a..000000000 --- a/src/true/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_true);
-
-
- \ No newline at end of file diff --git a/src/truncate/main.rs.html b/src/truncate/main.rs.html deleted file mode 100644 index b8120b889..000000000 --- a/src/truncate/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_truncate);
-
-
- \ No newline at end of file diff --git a/src/tsort/main.rs.html b/src/tsort/main.rs.html deleted file mode 100644 index ce54bb374..000000000 --- a/src/tsort/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_tsort);
-
-
- \ No newline at end of file diff --git a/src/tty/main.rs.html b/src/tty/main.rs.html deleted file mode 100644 index c090fa685..000000000 --- a/src/tty/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_tty);
-
-
- \ No newline at end of file diff --git a/src/uname/main.rs.html b/src/uname/main.rs.html deleted file mode 100644 index d60899d7b..000000000 --- a/src/uname/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_uname);
-
-
- \ No newline at end of file diff --git a/src/unexpand/main.rs.html b/src/unexpand/main.rs.html deleted file mode 100644 index c98121af7..000000000 --- a/src/unexpand/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_unexpand);
-
-
- \ No newline at end of file diff --git a/src/uniq/main.rs.html b/src/uniq/main.rs.html deleted file mode 100644 index 3588720ff..000000000 --- a/src/uniq/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_uniq);
-
-
- \ No newline at end of file diff --git a/src/unlink/main.rs.html b/src/unlink/main.rs.html deleted file mode 100644 index 5a139bf58..000000000 --- a/src/unlink/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_unlink);
-
-
- \ No newline at end of file diff --git a/src/uptime/main.rs.html b/src/uptime/main.rs.html deleted file mode 100644 index 08d630f32..000000000 --- a/src/uptime/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_uptime);
-
-
- \ No newline at end of file diff --git a/src/users/main.rs.html b/src/users/main.rs.html deleted file mode 100644 index 2719afa21..000000000 --- a/src/users/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_users);
-
-
- \ No newline at end of file diff --git a/src/uu_arch/arch.rs.html b/src/uu_arch/arch.rs.html deleted file mode 100644 index be68b0d6f..000000000 --- a/src/uu_arch/arch.rs.html +++ /dev/null @@ -1,66 +0,0 @@ -arch.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-
// This file is part of the uutils coreutils package.
-//
-// (c) Smigle00 <smigle00@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-use platform_info::*;
-
-use clap::{crate_version, App};
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Display machine architecture";
-static SUMMARY: &str = "Determine architecture name for current machine.";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    uu_app().get_matches_from(args);
-
-    let uts = PlatformInfo::new().map_err_context(|| "cannot get system name".to_string())?;
-    println!("{}", uts.machine().trim());
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(SUMMARY)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_base32/base32.rs.html b/src/uu_base32/base32.rs.html deleted file mode 100644 index b4b81b87a..000000000 --- a/src/uu_base32/base32.rs.html +++ /dev/null @@ -1,108 +0,0 @@ -base32.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-use std::io::{stdin, Read};
-
-use clap::App;
-use uucore::{encoding::Format, error::UResult};
-
-pub mod base_common;
-
-static ABOUT: &str = "
- With no FILE, or when FILE is -, read standard input.
-
- The data are encoded as described for the base32 alphabet in RFC
- 4648. When decoding, the input may contain newlines in addition
- to the bytes of the formal base32 alphabet. Use --ignore-garbage
- to attempt to recover from any other non-alphabet bytes in the
- encoded stream.
-";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let format = Format::Base32;
-    let usage = usage();
-
-    let config: base_common::Config = base_common::parse_base_cmd_args(args, ABOUT, &usage)?;
-
-    // Create a reference to stdin so we can return a locked stdin from
-    // parse_base_cmd_args
-    let stdin_raw = stdin();
-    let mut input: Box<dyn Read> = base_common::get_input(&config, &stdin_raw)?;
-
-    base_common::handle_input(
-        &mut input,
-        format,
-        config.wrap_cols,
-        config.ignore_garbage,
-        config.decode,
-    )
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    base_common::base_app(ABOUT)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_base32/base_common.rs.html b/src/uu_base32/base_common.rs.html deleted file mode 100644 index 93f0570a0..000000000 --- a/src/uu_base32/base_common.rs.html +++ /dev/null @@ -1,358 +0,0 @@ -base_common.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jordy Dickinson <jordy.dickinson@gmail.com>
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-// (c) Alex Lyon <arcterus@mail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-use std::io::{stdout, Read, Write};
-
-use uucore::display::Quotable;
-use uucore::encoding::{wrap_print, Data, Format};
-use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
-use uucore::InvalidEncodingHandling;
-
-use std::fs::File;
-use std::io::{BufReader, Stdin};
-use std::path::Path;
-
-use clap::{crate_version, App, Arg};
-
-pub static BASE_CMD_PARSE_ERROR: i32 = 1;
-
-// Config.
-pub struct Config {
-    pub decode: bool,
-    pub ignore_garbage: bool,
-    pub wrap_cols: Option<usize>,
-    pub to_read: Option<String>,
-}
-
-pub mod options {
-    pub static DECODE: &str = "decode";
-    pub static WRAP: &str = "wrap";
-    pub static IGNORE_GARBAGE: &str = "ignore-garbage";
-    pub static FILE: &str = "file";
-}
-
-impl Config {
-    pub fn from(options: &clap::ArgMatches) -> UResult<Config> {
-        let file: Option<String> = match options.values_of(options::FILE) {
-            Some(mut values) => {
-                let name = values.next().unwrap();
-                if let Some(extra_op) = values.next() {
-                    return Err(UUsageError::new(
-                        BASE_CMD_PARSE_ERROR,
-                        format!("extra operand {}", extra_op.quote(),),
-                    ));
-                }
-
-                if name == "-" {
-                    None
-                } else {
-                    if !Path::exists(Path::new(name)) {
-                        return Err(USimpleError::new(
-                            BASE_CMD_PARSE_ERROR,
-                            format!("{}: No such file or directory", name.maybe_quote()),
-                        ));
-                    }
-                    Some(name.to_owned())
-                }
-            }
-            None => None,
-        };
-
-        let cols = options
-            .value_of(options::WRAP)
-            .map(|num| {
-                num.parse::<usize>().map_err(|_| {
-                    USimpleError::new(
-                        BASE_CMD_PARSE_ERROR,
-                        format!("invalid wrap size: {}", num.quote()),
-                    )
-                })
-            })
-            .transpose()?;
-
-        Ok(Config {
-            decode: options.is_present(options::DECODE),
-            ignore_garbage: options.is_present(options::IGNORE_GARBAGE),
-            wrap_cols: cols,
-            to_read: file,
-        })
-    }
-}
-
-pub fn parse_base_cmd_args(args: impl uucore::Args, about: &str, usage: &str) -> UResult<Config> {
-    let app = base_app(about).override_usage(usage);
-    let arg_list = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-    Config::from(&app.get_matches_from(arg_list))
-}
-
-pub fn base_app(about: &str) -> App {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(about)
-        // Format arguments.
-        .arg(
-            Arg::new(options::DECODE)
-                .short('d')
-                .long(options::DECODE)
-                .help("decode data"),
-        )
-        .arg(
-            Arg::new(options::IGNORE_GARBAGE)
-                .short('i')
-                .long(options::IGNORE_GARBAGE)
-                .help("when decoding, ignore non-alphabetic characters"),
-        )
-        .arg(
-            Arg::new(options::WRAP)
-                .short('w')
-                .long(options::WRAP)
-                .takes_value(true)
-                .help(
-                    "wrap encoded lines after COLS character (default 76, 0 to disable wrapping)",
-                ),
-        )
-        // "multiple" arguments are used to check whether there is more than one
-        // file passed in.
-        .arg(Arg::new(options::FILE).index(1).multiple_occurrences(true))
-}
-
-pub fn get_input<'a>(config: &Config, stdin_ref: &'a Stdin) -> UResult<Box<dyn Read + 'a>> {
-    match &config.to_read {
-        Some(name) => {
-            let file_buf =
-                File::open(Path::new(name)).map_err_context(|| name.maybe_quote().to_string())?;
-            Ok(Box::new(BufReader::new(file_buf))) // as Box<dyn Read>
-        }
-        None => {
-            Ok(Box::new(stdin_ref.lock())) // as Box<dyn Read>
-        }
-    }
-}
-
-pub fn handle_input<R: Read>(
-    input: &mut R,
-    format: Format,
-    line_wrap: Option<usize>,
-    ignore_garbage: bool,
-    decode: bool,
-) -> UResult<()> {
-    let mut data = Data::new(input, format).ignore_garbage(ignore_garbage);
-    if let Some(wrap) = line_wrap {
-        data = data.line_wrap(wrap);
-    }
-
-    if !decode {
-        match data.encode() {
-            Ok(s) => {
-                wrap_print(&data, s);
-                Ok(())
-            }
-            Err(_) => Err(USimpleError::new(
-                1,
-                "error: invalid input (length must be multiple of 4 characters)",
-            )),
-        }
-    } else {
-        match data.decode() {
-            Ok(s) => {
-                // Silent the warning as we want to the error message
-                #[allow(clippy::question_mark)]
-                if stdout().write_all(&s).is_err() {
-                    // on windows console, writing invalid utf8 returns an error
-                    return Err(USimpleError::new(1, "error: cannot write non-utf8 data"));
-                }
-                Ok(())
-            }
-            Err(_) => Err(USimpleError::new(1, "error: invalid input")),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_base64/base64.rs.html b/src/uu_base64/base64.rs.html deleted file mode 100644 index 7871a4d16..000000000 --- a/src/uu_base64/base64.rs.html +++ /dev/null @@ -1,102 +0,0 @@ -base64.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jordy Dickinson <jordy.dickinson@gmail.com>
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-use uu_base32::base_common;
-pub use uu_base32::uu_app;
-
-use uucore::{encoding::Format, error::UResult};
-
-use std::io::{stdin, Read};
-
-static ABOUT: &str = "
- With no FILE, or when FILE is -, read standard input.
-
- The data are encoded as described for the base64 alphabet in RFC
- 3548. When decoding, the input may contain newlines in addition
- to the bytes of the formal base64 alphabet. Use --ignore-garbage
- to attempt to recover from any other non-alphabet bytes in the
- encoded stream.
-";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let format = Format::Base64;
-    let usage = usage();
-
-    let config: base_common::Config = base_common::parse_base_cmd_args(args, ABOUT, &usage)?;
-
-    // Create a reference to stdin so we can return a locked stdin from
-    // parse_base_cmd_args
-    let stdin_raw = stdin();
-    let mut input: Box<dyn Read> = base_common::get_input(&config, &stdin_raw)?;
-
-    base_common::handle_input(
-        &mut input,
-        format,
-        config.wrap_cols,
-        config.ignore_garbage,
-        config.decode,
-    )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_basename/basename.rs.html b/src/uu_basename/basename.rs.html deleted file mode 100644 index 5beef8b60..000000000 --- a/src/uu_basename/basename.rs.html +++ /dev/null @@ -1,304 +0,0 @@ -basename.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jimmy Lu <jimmy.lu.2011@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) fullname
-
-use clap::{crate_version, App, Arg};
-use std::path::{is_separator, PathBuf};
-use uucore::display::Quotable;
-use uucore::error::{UResult, UUsageError};
-use uucore::InvalidEncodingHandling;
-
-static SUMMARY: &str = "Print NAME with any leading directory components removed
-If specified, also remove a trailing SUFFIX";
-
-fn usage() -> String {
-    format!(
-        "{0} NAME [SUFFIX]
-    {0} OPTION... NAME...",
-        uucore::execution_phrase()
-    )
-}
-
-pub mod options {
-    pub static MULTIPLE: &str = "multiple";
-    pub static NAME: &str = "name";
-    pub static SUFFIX: &str = "suffix";
-    pub static ZERO: &str = "zero";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-    let usage = usage();
-    //
-    // Argument parsing
-    //
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    // too few arguments
-    if !matches.is_present(options::NAME) {
-        return Err(UUsageError::new(1, "missing operand".to_string()));
-    }
-
-    let opt_suffix = matches.is_present(options::SUFFIX);
-    let opt_multiple = matches.is_present(options::MULTIPLE);
-    let opt_zero = matches.is_present(options::ZERO);
-    let multiple_paths = opt_suffix || opt_multiple;
-    // too many arguments
-    if !multiple_paths && matches.occurrences_of(options::NAME) > 2 {
-        return Err(UUsageError::new(
-            1,
-            format!(
-                "extra operand {}",
-                matches
-                    .values_of(options::NAME)
-                    .unwrap()
-                    .nth(2)
-                    .unwrap()
-                    .quote()
-            ),
-        ));
-    }
-
-    let suffix = if opt_suffix {
-        matches.value_of(options::SUFFIX).unwrap()
-    } else if !opt_multiple && matches.occurrences_of(options::NAME) > 1 {
-        matches.values_of(options::NAME).unwrap().nth(1).unwrap()
-    } else {
-        ""
-    };
-
-    //
-    // Main Program Processing
-    //
-
-    let paths: Vec<_> = if multiple_paths {
-        matches.values_of(options::NAME).unwrap().collect()
-    } else {
-        matches.values_of(options::NAME).unwrap().take(1).collect()
-    };
-
-    let line_ending = if opt_zero { "\0" } else { "\n" };
-    for path in paths {
-        print!("{}{}", basename(path, suffix), line_ending);
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::MULTIPLE)
-                .short('a')
-                .long(options::MULTIPLE)
-                .help("support multiple arguments and treat each as a NAME"),
-        )
-        .arg(
-            Arg::new(options::NAME)
-                .multiple_occurrences(true)
-                .hide(true),
-        )
-        .arg(
-            Arg::new(options::SUFFIX)
-                .short('s')
-                .long(options::SUFFIX)
-                .value_name("SUFFIX")
-                .help("remove a trailing SUFFIX; implies -a"),
-        )
-        .arg(
-            Arg::new(options::ZERO)
-                .short('z')
-                .long(options::ZERO)
-                .help("end each output line with NUL, not newline"),
-        )
-}
-
-fn basename(fullname: &str, suffix: &str) -> String {
-    // Remove all platform-specific path separators from the end.
-    let path = fullname.trim_end_matches(is_separator);
-
-    // If the path contained *only* suffix characters (for example, if
-    // `fullname` were "///" and `suffix` were "/"), then `path` would
-    // be left with the empty string. In that case, we set `path` to be
-    // the original `fullname` to avoid returning the empty path.
-    let path = if path.is_empty() { fullname } else { path };
-
-    // Convert to path buffer and get last path component
-    let pb = PathBuf::from(path);
-    match pb.components().last() {
-        Some(c) => {
-            let name = c.as_os_str().to_str().unwrap();
-            if name == suffix {
-                name.to_string()
-            } else {
-                name.strip_suffix(suffix).unwrap_or(name).to_string()
-            }
-        }
-
-        None => "".to_owned(),
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_basenc/basenc.rs.html b/src/uu_basenc/basenc.rs.html deleted file mode 100644 index 653db6ac8..000000000 --- a/src/uu_basenc/basenc.rs.html +++ /dev/null @@ -1,176 +0,0 @@ -basenc.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jordy Dickinson <jordy.dickinson@gmail.com>
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-//spell-checker:ignore (args) lsbf msbf
-
-use clap::{App, Arg};
-use uu_base32::base_common::{self, Config, BASE_CMD_PARSE_ERROR};
-
-use uucore::{
-    encoding::Format,
-    error::{UResult, UUsageError},
-    InvalidEncodingHandling,
-};
-
-use std::io::{stdin, Read};
-
-static ABOUT: &str = "
- With no FILE, or when FILE is -, read standard input.
-
- When decoding, the input may contain newlines in addition to the bytes of
- the formal alphabet. Use --ignore-garbage to attempt to recover
- from any other non-alphabet bytes in the encoded stream.
-";
-
-const ENCODINGS: &[(&str, Format)] = &[
-    ("base64", Format::Base64),
-    ("base64url", Format::Base64Url),
-    ("base32", Format::Base32),
-    ("base32hex", Format::Base32Hex),
-    ("base16", Format::Base16),
-    ("base2lsbf", Format::Base2Lsbf),
-    ("base2msbf", Format::Base2Msbf),
-    ("z85", Format::Z85),
-    // common abbreviations. TODO: once we have clap 3.0 we can use `AppSettings::InferLongArgs` to get all abbreviations automatically
-    ("base2l", Format::Base2Lsbf),
-    ("base2m", Format::Base2Msbf),
-];
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]", uucore::execution_phrase())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    let mut app = base_common::base_app(ABOUT);
-    for encoding in ENCODINGS {
-        app = app.arg(Arg::new(encoding.0).long(encoding.0));
-    }
-    app
-}
-
-fn parse_cmd_args(args: impl uucore::Args) -> UResult<(Config, Format)> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(
-        args.collect_str(InvalidEncodingHandling::ConvertLossy)
-            .accept_any(),
-    );
-    let format = ENCODINGS
-        .iter()
-        .find(|encoding| matches.is_present(encoding.0))
-        .ok_or_else(|| UUsageError::new(BASE_CMD_PARSE_ERROR, "missing encoding type"))?
-        .1;
-    let config = Config::from(&matches)?;
-    Ok((config, format))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let (config, format) = parse_cmd_args(args)?;
-    // Create a reference to stdin so we can return a locked stdin from
-    // parse_base_cmd_args
-    let stdin_raw = stdin();
-    let mut input: Box<dyn Read> = base_common::get_input(&config, &stdin_raw)?;
-
-    base_common::handle_input(
-        &mut input,
-        format,
-        config.wrap_cols,
-        config.ignore_garbage,
-        config.decode,
-    )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_cat/cat.rs.html b/src/uu_cat/cat.rs.html deleted file mode 100644 index aef3de610..000000000 --- a/src/uu_cat/cat.rs.html +++ /dev/null @@ -1,1294 +0,0 @@ -cat.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jordi Boggiano <j.boggiano@seld.be>
-// (c) Evgeniy Klyuchikov <evgeniy.klyuchikov@gmail.com>
-// (c) Joshua S. Miller <jsmiller@uchicago.edu>
-// (c) Árni Dagur <arni@dagur.eu>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) nonprint nonblank nonprinting
-
-#[cfg(unix)]
-extern crate unix_socket;
-
-// last synced with: cat (GNU coreutils) 8.13
-use clap::{crate_version, App, Arg};
-use std::fs::{metadata, File};
-use std::io::{self, Read, Write};
-use thiserror::Error;
-use uucore::display::Quotable;
-use uucore::error::UResult;
-use uucore::fs::FileInformation;
-
-#[cfg(unix)]
-use std::os::unix::io::AsRawFd;
-
-/// Linux splice support
-#[cfg(any(target_os = "linux", target_os = "android"))]
-mod splice;
-
-/// Unix domain socket support
-#[cfg(unix)]
-use std::net::Shutdown;
-#[cfg(unix)]
-use std::os::unix::fs::FileTypeExt;
-#[cfg(unix)]
-use unix_socket::UnixStream;
-use uucore::InvalidEncodingHandling;
-
-static NAME: &str = "cat";
-static SYNTAX: &str = "[OPTION]... [FILE]...";
-static SUMMARY: &str = "Concatenate FILE(s), or standard input, to standard output
- With no FILE, or when FILE is -, read standard input.";
-
-#[derive(Error, Debug)]
-enum CatError {
-    /// Wrapper around `io::Error`
-    #[error("{0}")]
-    Io(#[from] io::Error),
-    /// Wrapper around `nix::Error`
-    #[cfg(any(target_os = "linux", target_os = "android"))]
-    #[error("{0}")]
-    Nix(#[from] nix::Error),
-    /// Unknown file type; it's not a regular file, socket, etc.
-    #[error("unknown filetype: {}", ft_debug)]
-    UnknownFiletype {
-        /// A debug print of the file type
-        ft_debug: String,
-    },
-    #[error("Is a directory")]
-    IsDirectory,
-    #[error("input file is output file")]
-    OutputIsInput,
-}
-
-type CatResult<T> = Result<T, CatError>;
-
-#[derive(PartialEq)]
-enum NumberingMode {
-    None,
-    NonEmpty,
-    All,
-}
-
-struct OutputOptions {
-    /// Line numbering mode
-    number: NumberingMode,
-
-    /// Suppress repeated empty output lines
-    squeeze_blank: bool,
-
-    /// display TAB characters as `tab`
-    show_tabs: bool,
-
-    /// Show end of lines
-    show_ends: bool,
-
-    /// use ^ and M- notation, except for LF (\\n) and TAB (\\t)
-    show_nonprint: bool,
-}
-
-impl OutputOptions {
-    fn tab(&self) -> &'static str {
-        if self.show_tabs {
-            "^I"
-        } else {
-            "\t"
-        }
-    }
-
-    fn end_of_line(&self) -> &'static str {
-        if self.show_ends {
-            "$\n"
-        } else {
-            "\n"
-        }
-    }
-
-    /// We can write fast if we can simply copy the contents of the file to
-    /// stdout, without augmenting the output with e.g. line numbers.
-    fn can_write_fast(&self) -> bool {
-        !(self.show_tabs
-            || self.show_nonprint
-            || self.show_ends
-            || self.squeeze_blank
-            || self.number != NumberingMode::None)
-    }
-}
-
-/// State that persists between output of each file. This struct is only used
-/// when we can't write fast.
-struct OutputState {
-    /// The current line number
-    line_number: usize,
-
-    /// Whether the output cursor is at the beginning of a new line
-    at_line_start: bool,
-
-    /// Whether we skipped a \r, which still needs to be printed
-    skipped_carriage_return: bool,
-
-    /// Whether we have already printed a blank line
-    one_blank_kept: bool,
-}
-
-#[cfg(unix)]
-trait FdReadable: Read + AsRawFd {}
-#[cfg(not(unix))]
-trait FdReadable: Read {}
-
-#[cfg(unix)]
-impl<T> FdReadable for T where T: Read + AsRawFd {}
-#[cfg(not(unix))]
-impl<T> FdReadable for T where T: Read {}
-
-/// Represents an open file handle, stream, or other device
-struct InputHandle<R: FdReadable> {
-    reader: R,
-    is_interactive: bool,
-}
-
-/// Concrete enum of recognized file types.
-///
-/// *Note*: `cat`-ing a directory should result in an
-/// CatError::IsDirectory
-enum InputType {
-    Directory,
-    File,
-    StdIn,
-    SymLink,
-    #[cfg(unix)]
-    BlockDevice,
-    #[cfg(unix)]
-    CharacterDevice,
-    #[cfg(unix)]
-    Fifo,
-    #[cfg(unix)]
-    Socket,
-}
-
-mod options {
-    pub static FILE: &str = "file";
-    pub static SHOW_ALL: &str = "show-all";
-    pub static NUMBER_NONBLANK: &str = "number-nonblank";
-    pub static SHOW_NONPRINTING_ENDS: &str = "e";
-    pub static SHOW_ENDS: &str = "show-ends";
-    pub static NUMBER: &str = "number";
-    pub static SQUEEZE_BLANK: &str = "squeeze-blank";
-    pub static SHOW_NONPRINTING_TABS: &str = "t";
-    pub static SHOW_TABS: &str = "show-tabs";
-    pub static SHOW_NONPRINTING: &str = "show-nonprinting";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let number_mode = if matches.is_present(options::NUMBER_NONBLANK) {
-        NumberingMode::NonEmpty
-    } else if matches.is_present(options::NUMBER) {
-        NumberingMode::All
-    } else {
-        NumberingMode::None
-    };
-
-    let show_nonprint = vec![
-        options::SHOW_ALL.to_owned(),
-        options::SHOW_NONPRINTING_ENDS.to_owned(),
-        options::SHOW_NONPRINTING_TABS.to_owned(),
-        options::SHOW_NONPRINTING.to_owned(),
-    ]
-    .iter()
-    .any(|v| matches.is_present(v));
-
-    let show_ends = vec![
-        options::SHOW_ENDS.to_owned(),
-        options::SHOW_ALL.to_owned(),
-        options::SHOW_NONPRINTING_ENDS.to_owned(),
-    ]
-    .iter()
-    .any(|v| matches.is_present(v));
-
-    let show_tabs = vec![
-        options::SHOW_ALL.to_owned(),
-        options::SHOW_TABS.to_owned(),
-        options::SHOW_NONPRINTING_TABS.to_owned(),
-    ]
-    .iter()
-    .any(|v| matches.is_present(v));
-
-    let squeeze_blank = matches.is_present(options::SQUEEZE_BLANK);
-    let files: Vec<String> = match matches.values_of(options::FILE) {
-        Some(v) => v.clone().map(|v| v.to_owned()).collect(),
-        None => vec!["-".to_owned()],
-    };
-
-    let options = OutputOptions {
-        show_ends,
-        number: number_mode,
-        show_nonprint,
-        show_tabs,
-        squeeze_blank,
-    };
-    cat_files(files, &options)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(SYNTAX)
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::new(options::SHOW_ALL)
-                .short('A')
-                .long(options::SHOW_ALL)
-                .help("equivalent to -vET"),
-        )
-        .arg(
-            Arg::new(options::NUMBER_NONBLANK)
-                .short('b')
-                .long(options::NUMBER_NONBLANK)
-                .help("number nonempty output lines, overrides -n")
-                .overrides_with(options::NUMBER),
-        )
-        .arg(
-            Arg::new(options::SHOW_NONPRINTING_ENDS)
-                .short('e')
-                .help("equivalent to -vE"),
-        )
-        .arg(
-            Arg::new(options::SHOW_ENDS)
-                .short('E')
-                .long(options::SHOW_ENDS)
-                .help("display $ at end of each line"),
-        )
-        .arg(
-            Arg::new(options::NUMBER)
-                .short('n')
-                .long(options::NUMBER)
-                .help("number all output lines"),
-        )
-        .arg(
-            Arg::new(options::SQUEEZE_BLANK)
-                .short('s')
-                .long(options::SQUEEZE_BLANK)
-                .help("suppress repeated empty output lines"),
-        )
-        .arg(
-            Arg::new(options::SHOW_NONPRINTING_TABS)
-                .short('t')
-                .long(options::SHOW_NONPRINTING_TABS)
-                .help("equivalent to -vT"),
-        )
-        .arg(
-            Arg::new(options::SHOW_TABS)
-                .short('T')
-                .long(options::SHOW_TABS)
-                .help("display TAB characters at ^I"),
-        )
-        .arg(
-            Arg::new(options::SHOW_NONPRINTING)
-                .short('v')
-                .long(options::SHOW_NONPRINTING)
-                .help("use ^ and M- notation, except for LF (\\n) and TAB (\\t)"),
-        )
-}
-
-fn cat_handle<R: FdReadable>(
-    handle: &mut InputHandle<R>,
-    options: &OutputOptions,
-    state: &mut OutputState,
-) -> CatResult<()> {
-    if options.can_write_fast() {
-        write_fast(handle)
-    } else {
-        write_lines(handle, options, state)
-    }
-}
-
-fn cat_path(
-    path: &str,
-    options: &OutputOptions,
-    state: &mut OutputState,
-    out_info: Option<&FileInformation>,
-) -> CatResult<()> {
-    if path == "-" {
-        let stdin = io::stdin();
-        let mut handle = InputHandle {
-            reader: stdin,
-            is_interactive: atty::is(atty::Stream::Stdin),
-        };
-        return cat_handle(&mut handle, options, state);
-    }
-    match get_input_type(path)? {
-        InputType::Directory => Err(CatError::IsDirectory),
-        #[cfg(unix)]
-        InputType::Socket => {
-            let socket = UnixStream::connect(path)?;
-            socket.shutdown(Shutdown::Write)?;
-            let mut handle = InputHandle {
-                reader: socket,
-                is_interactive: false,
-            };
-            cat_handle(&mut handle, options, state)
-        }
-        _ => {
-            let file = File::open(path)?;
-
-            if let Some(out_info) = out_info {
-                if out_info.file_size() != 0
-                    && FileInformation::from_file(&file).as_ref() == Some(out_info)
-                {
-                    return Err(CatError::OutputIsInput);
-                }
-            }
-
-            let mut handle = InputHandle {
-                reader: file,
-                is_interactive: false,
-            };
-            cat_handle(&mut handle, options, state)
-        }
-    }
-}
-
-fn cat_files(files: Vec<String>, options: &OutputOptions) -> UResult<()> {
-    let out_info = FileInformation::from_file(&std::io::stdout());
-
-    let mut state = OutputState {
-        line_number: 1,
-        at_line_start: true,
-        skipped_carriage_return: false,
-        one_blank_kept: false,
-    };
-    let mut error_messages: Vec<String> = Vec::new();
-
-    for path in &files {
-        if let Err(err) = cat_path(path, options, &mut state, out_info.as_ref()) {
-            error_messages.push(format!("{}: {}", path.maybe_quote(), err));
-        }
-    }
-    if state.skipped_carriage_return {
-        print!("\r");
-    }
-    if error_messages.is_empty() {
-        Ok(())
-    } else {
-        // each next line is expected to display "cat: …"
-        let line_joiner = format!("\n{}: ", uucore::util_name());
-
-        Err(uucore::error::USimpleError::new(
-            error_messages.len() as i32,
-            error_messages.join(&line_joiner),
-        ))
-    }
-}
-
-/// Classifies the `InputType` of file at `path` if possible
-///
-/// # Arguments
-///
-/// * `path` - Path on a file system to classify metadata
-fn get_input_type(path: &str) -> CatResult<InputType> {
-    if path == "-" {
-        return Ok(InputType::StdIn);
-    }
-
-    let ft = metadata(path)?.file_type();
-    match ft {
-        #[cfg(unix)]
-        ft if ft.is_block_device() => Ok(InputType::BlockDevice),
-        #[cfg(unix)]
-        ft if ft.is_char_device() => Ok(InputType::CharacterDevice),
-        #[cfg(unix)]
-        ft if ft.is_fifo() => Ok(InputType::Fifo),
-        #[cfg(unix)]
-        ft if ft.is_socket() => Ok(InputType::Socket),
-        ft if ft.is_dir() => Ok(InputType::Directory),
-        ft if ft.is_file() => Ok(InputType::File),
-        ft if ft.is_symlink() => Ok(InputType::SymLink),
-        _ => Err(CatError::UnknownFiletype {
-            ft_debug: format!("{:?}", ft),
-        }),
-    }
-}
-
-/// Writes handle to stdout with no configuration. This allows a
-/// simple memory copy.
-fn write_fast<R: FdReadable>(handle: &mut InputHandle<R>) -> CatResult<()> {
-    let stdout = io::stdout();
-    let mut stdout_lock = stdout.lock();
-    #[cfg(any(target_os = "linux", target_os = "android"))]
-    {
-        // If we're on Linux or Android, try to use the splice() system call
-        // for faster writing. If it works, we're done.
-        if !splice::write_fast_using_splice(handle, &stdout_lock)? {
-            return Ok(());
-        }
-    }
-    // If we're not on Linux or Android, or the splice() call failed,
-    // fall back on slower writing.
-    let mut buf = [0; 1024 * 64];
-    while let Ok(n) = handle.reader.read(&mut buf) {
-        if n == 0 {
-            break;
-        }
-        stdout_lock.write_all(&buf[..n])?;
-    }
-    Ok(())
-}
-
-/// Outputs file contents to stdout in a line-by-line fashion,
-/// propagating any errors that might occur.
-fn write_lines<R: FdReadable>(
-    handle: &mut InputHandle<R>,
-    options: &OutputOptions,
-    state: &mut OutputState,
-) -> CatResult<()> {
-    let mut in_buf = [0; 1024 * 31];
-    let stdout = io::stdout();
-    let mut writer = stdout.lock();
-
-    while let Ok(n) = handle.reader.read(&mut in_buf) {
-        if n == 0 {
-            break;
-        }
-        let in_buf = &in_buf[..n];
-        let mut pos = 0;
-        while pos < n {
-            // skip empty line_number enumerating them if needed
-            if in_buf[pos] == b'\n' {
-                // \r followed by \n is printed as ^M when show_ends is enabled, so that \r\n prints as ^M$
-                if state.skipped_carriage_return && options.show_ends {
-                    writer.write_all(b"^M")?;
-                    state.skipped_carriage_return = false;
-                }
-                if !state.at_line_start || !options.squeeze_blank || !state.one_blank_kept {
-                    state.one_blank_kept = true;
-                    if state.at_line_start && options.number == NumberingMode::All {
-                        write!(&mut writer, "{0:6}\t", state.line_number)?;
-                        state.line_number += 1;
-                    }
-                    writer.write_all(options.end_of_line().as_bytes())?;
-                    if handle.is_interactive {
-                        writer.flush()?;
-                    }
-                }
-                state.at_line_start = true;
-                pos += 1;
-                continue;
-            }
-            if state.skipped_carriage_return {
-                writer.write_all(b"\r")?;
-                state.skipped_carriage_return = false;
-                state.at_line_start = false;
-            }
-            state.one_blank_kept = false;
-            if state.at_line_start && options.number != NumberingMode::None {
-                write!(&mut writer, "{0:6}\t", state.line_number)?;
-                state.line_number += 1;
-            }
-
-            // print to end of line or end of buffer
-            let offset = if options.show_nonprint {
-                write_nonprint_to_end(&in_buf[pos..], &mut writer, options.tab().as_bytes())
-            } else if options.show_tabs {
-                write_tab_to_end(&in_buf[pos..], &mut writer)
-            } else {
-                write_to_end(&in_buf[pos..], &mut writer)
-            };
-            // end of buffer?
-            if offset + pos == in_buf.len() {
-                state.at_line_start = false;
-                break;
-            }
-            if in_buf[pos + offset] == b'\r' {
-                state.skipped_carriage_return = true;
-            } else {
-                assert_eq!(in_buf[pos + offset], b'\n');
-                // print suitable end of line
-                writer.write_all(options.end_of_line().as_bytes())?;
-                if handle.is_interactive {
-                    writer.flush()?;
-                }
-                state.at_line_start = true;
-            }
-            pos += offset + 1;
-        }
-    }
-
-    Ok(())
-}
-
-// write***_to_end methods
-// Write all symbols till \n or \r or end of buffer is reached
-// We need to stop at \r because it may be written as ^M depending on the byte after and settings;
-// however, write_nonprint_to_end doesn't need to stop at \r because it will always write \r as ^M.
-// Return the number of written symbols
-fn write_to_end<W: Write>(in_buf: &[u8], writer: &mut W) -> usize {
-    match in_buf.iter().position(|c| *c == b'\n' || *c == b'\r') {
-        Some(p) => {
-            writer.write_all(&in_buf[..p]).unwrap();
-            p
-        }
-        None => {
-            writer.write_all(in_buf).unwrap();
-            in_buf.len()
-        }
-    }
-}
-
-fn write_tab_to_end<W: Write>(mut in_buf: &[u8], writer: &mut W) -> usize {
-    let mut count = 0;
-    loop {
-        match in_buf
-            .iter()
-            .position(|c| *c == b'\n' || *c == b'\t' || *c == b'\r')
-        {
-            Some(p) => {
-                writer.write_all(&in_buf[..p]).unwrap();
-                if in_buf[p] == b'\n' {
-                    return count + p;
-                } else if in_buf[p] == b'\t' {
-                    writer.write_all(b"^I").unwrap();
-                    in_buf = &in_buf[p + 1..];
-                    count += p + 1;
-                } else {
-                    return count + p;
-                }
-            }
-            None => {
-                writer.write_all(in_buf).unwrap();
-                return in_buf.len();
-            }
-        };
-    }
-}
-
-fn write_nonprint_to_end<W: Write>(in_buf: &[u8], writer: &mut W, tab: &[u8]) -> usize {
-    let mut count = 0;
-
-    for byte in in_buf.iter().copied() {
-        if byte == b'\n' {
-            break;
-        }
-        match byte {
-            9 => writer.write_all(tab),
-            0..=8 | 10..=31 => writer.write_all(&[b'^', byte + 64]),
-            32..=126 => writer.write_all(&[byte]),
-            127 => writer.write_all(&[b'^', byte - 64]),
-            128..=159 => writer.write_all(&[b'M', b'-', b'^', byte - 64]),
-            160..=254 => writer.write_all(&[b'M', b'-', byte - 128]),
-            _ => writer.write_all(&[b'M', b'-', b'^', 63]),
-        }
-        .unwrap();
-        count += 1;
-    }
-    count
-}
-
-#[cfg(test)]
-mod tests {
-    use std::io::{stdout, BufWriter};
-
-    #[test]
-    fn test_write_nonprint_to_end_new_line() {
-        let mut writer = BufWriter::with_capacity(1024 * 64, stdout());
-        let in_buf = b"\n";
-        let tab = b"";
-        super::write_nonprint_to_end(in_buf, &mut writer, tab);
-        assert_eq!(writer.buffer().len(), 0);
-    }
-
-    #[test]
-    fn test_write_nonprint_to_end_9() {
-        let mut writer = BufWriter::with_capacity(1024 * 64, stdout());
-        let in_buf = &[9u8];
-        let tab = b"tab";
-        super::write_nonprint_to_end(in_buf, &mut writer, tab);
-        assert_eq!(writer.buffer(), tab);
-    }
-
-    #[test]
-    fn test_write_nonprint_to_end_0_to_8() {
-        for byte in 0u8..=8u8 {
-            let mut writer = BufWriter::with_capacity(1024 * 64, stdout());
-            let in_buf = &[byte];
-            let tab = b"";
-            super::write_nonprint_to_end(in_buf, &mut writer, tab);
-            assert_eq!(writer.buffer(), [b'^', byte + 64]);
-        }
-    }
-
-    #[test]
-    fn test_write_nonprint_to_end_10_to_31() {
-        for byte in 11u8..=31u8 {
-            let mut writer = BufWriter::with_capacity(1024 * 64, stdout());
-            let in_buf = &[byte];
-            let tab = b"";
-            super::write_nonprint_to_end(in_buf, &mut writer, tab);
-            assert_eq!(writer.buffer(), [b'^', byte + 64]);
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_cat/splice.rs.html b/src/uu_cat/splice.rs.html deleted file mode 100644 index 676ad2e19..000000000 --- a/src/uu_cat/splice.rs.html +++ /dev/null @@ -1,138 +0,0 @@ -splice.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-
use super::{CatResult, FdReadable, InputHandle};
-
-use nix::unistd;
-use std::os::unix::io::{AsRawFd, RawFd};
-
-use uucore::pipes::{pipe, splice, splice_exact};
-
-const SPLICE_SIZE: usize = 1024 * 128;
-const BUF_SIZE: usize = 1024 * 16;
-
-/// This function is called from `write_fast()` on Linux and Android. The
-/// function `splice()` is used to move data between two file descriptors
-/// without copying between kernel and user spaces. This results in a large
-/// speedup.
-///
-/// The `bool` in the result value indicates if we need to fall back to normal
-/// copying or not. False means we don't have to.
-#[inline]
-pub(super) fn write_fast_using_splice<R: FdReadable>(
-    handle: &mut InputHandle<R>,
-    write_fd: &impl AsRawFd,
-) -> CatResult<bool> {
-    let (pipe_rd, pipe_wr) = pipe()?;
-
-    loop {
-        match splice(&handle.reader, &pipe_wr, SPLICE_SIZE) {
-            Ok(n) => {
-                if n == 0 {
-                    return Ok(false);
-                }
-                if splice_exact(&pipe_rd, write_fd, n).is_err() {
-                    // If the first splice manages to copy to the intermediate
-                    // pipe, but the second splice to stdout fails for some reason
-                    // we can recover by copying the data that we have from the
-                    // intermediate pipe to stdout using normal read/write. Then
-                    // we tell the caller to fall back.
-                    copy_exact(pipe_rd.as_raw_fd(), write_fd.as_raw_fd(), n)?;
-                    return Ok(true);
-                }
-            }
-            Err(_) => {
-                return Ok(true);
-            }
-        }
-    }
-}
-
-/// Move exactly `num_bytes` bytes from `read_fd` to `write_fd`.
-///
-/// Panics if not enough bytes can be read.
-fn copy_exact(read_fd: RawFd, write_fd: RawFd, num_bytes: usize) -> nix::Result<()> {
-    let mut left = num_bytes;
-    let mut buf = [0; BUF_SIZE];
-    while left > 0 {
-        let read = unistd::read(read_fd, &mut buf)?;
-        assert_ne!(read, 0, "unexpected end of pipe");
-        let mut written = 0;
-        while written < read {
-            match unistd::write(write_fd, &buf[written..read])? {
-                0 => panic!(),
-                n => written += n,
-            }
-        }
-        left -= read;
-    }
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chcon/chcon.rs.html b/src/uu_chcon/chcon.rs.html deleted file mode 100644 index ceac3e13d..000000000 --- a/src/uu_chcon/chcon.rs.html +++ /dev/null @@ -1,1532 +0,0 @@ -chcon.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-
// spell-checker:ignore (vars) RFILE
-
-#![allow(clippy::upper_case_acronyms)]
-
-use uucore::error::{UResult, USimpleError, UUsageError};
-use uucore::{display::Quotable, show_error, show_warning};
-
-use clap::{App, Arg};
-use selinux::{OpaqueSecurityContext, SecurityContext};
-
-use std::borrow::Cow;
-use std::ffi::{CStr, CString, OsStr, OsString};
-use std::os::raw::c_int;
-use std::path::{Path, PathBuf};
-use std::{fs, io};
-
-mod errors;
-mod fts;
-
-use errors::*;
-
-static VERSION: &str = env!("CARGO_PKG_VERSION");
-static ABOUT: &str = "Change the SELinux security context of each FILE to CONTEXT. \n\
-                      With --reference, change the security context of each FILE to that of RFILE.";
-
-pub mod options {
-    pub static VERBOSE: &str = "verbose";
-
-    pub static REFERENCE: &str = "reference";
-
-    pub static USER: &str = "user";
-    pub static ROLE: &str = "role";
-    pub static TYPE: &str = "type";
-    pub static RANGE: &str = "range";
-
-    pub static RECURSIVE: &str = "recursive";
-
-    pub mod sym_links {
-        pub static FOLLOW_ARG_DIR_SYM_LINK: &str = "follow-arg-dir-sym-link";
-        pub static FOLLOW_DIR_SYM_LINKS: &str = "follow-dir-sym-links";
-        pub static NO_FOLLOW_SYM_LINKS: &str = "no-follow-sym-links";
-    }
-
-    pub mod dereference {
-        pub static DEREFERENCE: &str = "dereference";
-        pub static NO_DEREFERENCE: &str = "no-dereference";
-    }
-
-    pub mod preserve_root {
-        pub static PRESERVE_ROOT: &str = "preserve-root";
-        pub static NO_PRESERVE_ROOT: &str = "no-preserve-root";
-    }
-}
-
-fn get_usage() -> String {
-    format!(
-        "{0} [OPTION]... CONTEXT FILE... \n    \
-         {0} [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE... \n    \
-         {0} [OPTION]... --reference=RFILE FILE...",
-        uucore::execution_phrase()
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = get_usage();
-
-    let config = uu_app().override_usage(usage.as_ref());
-
-    let options = match parse_command_line(config, args) {
-        Ok(r) => r,
-        Err(r) => {
-            if let Error::CommandLine(r) = &r {
-                match r.kind {
-                    clap::ErrorKind::DisplayHelp | clap::ErrorKind::DisplayVersion => {
-                        println!("{}", r);
-                        return Ok(());
-                    }
-                    _ => {}
-                }
-            }
-
-            return Err(UUsageError::new(libc::EXIT_FAILURE, format!("{}.\n", r)));
-        }
-    };
-
-    let context = match &options.mode {
-        CommandLineMode::ReferenceBased { reference } => {
-            let result = match SecurityContext::of_path(reference, true, false) {
-                Ok(Some(context)) => Ok(context),
-
-                Ok(None) => {
-                    let err = io::Error::from_raw_os_error(libc::ENODATA);
-                    Err(Error::from_io1("Getting security context", reference, err))
-                }
-
-                Err(r) => Err(Error::from_selinux("Getting security context", r)),
-            };
-
-            match result {
-                Err(r) => {
-                    return Err(USimpleError::new(
-                        libc::EXIT_FAILURE,
-                        format!("{}.", report_full_error(&r)),
-                    ));
-                }
-
-                Ok(file_context) => SELinuxSecurityContext::File(file_context),
-            }
-        }
-
-        CommandLineMode::ContextBased { context } => {
-            let c_context = match os_str_to_c_string(context) {
-                Ok(context) => context,
-
-                Err(_r) => {
-                    return Err(USimpleError::new(
-                        libc::EXIT_FAILURE,
-                        format!("Invalid security context {}.", context.quote()),
-                    ));
-                }
-            };
-
-            if SecurityContext::from_c_str(&c_context, false).check() == Some(false) {
-                return Err(USimpleError::new(
-                    libc::EXIT_FAILURE,
-                    format!("Invalid security context {}.", context.quote()),
-                ));
-            }
-
-            SELinuxSecurityContext::String(Some(c_context))
-        }
-
-        CommandLineMode::Custom { .. } => SELinuxSecurityContext::String(None),
-    };
-
-    let root_dev_ino = if options.preserve_root && options.recursive_mode.is_recursive() {
-        match get_root_dev_ino() {
-            Ok(r) => Some(r),
-
-            Err(r) => {
-                return Err(USimpleError::new(
-                    libc::EXIT_FAILURE,
-                    format!("{}.", report_full_error(&r)),
-                ));
-            }
-        }
-    } else {
-        None
-    };
-
-    let results = process_files(&options, &context, root_dev_ino);
-    if results.is_empty() {
-        return Ok(());
-    }
-
-    for result in &results {
-        show_error!("{}.", report_full_error(result));
-    }
-    Err(libc::EXIT_FAILURE.into())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(VERSION)
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::dereference::DEREFERENCE)
-                .long(options::dereference::DEREFERENCE)
-                .conflicts_with(options::dereference::NO_DEREFERENCE)
-                .help(
-                    "Affect the referent of each symbolic link (this is the default), \
-                     rather than the symbolic link itself.",
-                ),
-        )
-        .arg(
-            Arg::new(options::dereference::NO_DEREFERENCE)
-                .short('h')
-                .long(options::dereference::NO_DEREFERENCE)
-                .help("Affect symbolic links instead of any referenced file."),
-        )
-        .arg(
-            Arg::new(options::preserve_root::PRESERVE_ROOT)
-                .long(options::preserve_root::PRESERVE_ROOT)
-                .conflicts_with(options::preserve_root::NO_PRESERVE_ROOT)
-                .help("Fail to operate recursively on '/'."),
-        )
-        .arg(
-            Arg::new(options::preserve_root::NO_PRESERVE_ROOT)
-                .long(options::preserve_root::NO_PRESERVE_ROOT)
-                .help("Do not treat '/' specially (the default)."),
-        )
-        .arg(
-            Arg::new(options::REFERENCE)
-                .long(options::REFERENCE)
-                .takes_value(true)
-                .value_name("RFILE")
-                .conflicts_with_all(&[options::USER, options::ROLE, options::TYPE, options::RANGE])
-                .help(
-                    "Use security context of RFILE, rather than specifying \
-                     a CONTEXT value.",
-                )
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::USER)
-                .short('u')
-                .long(options::USER)
-                .takes_value(true)
-                .value_name("USER")
-                .help("Set user USER in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::ROLE)
-                .short('r')
-                .long(options::ROLE)
-                .takes_value(true)
-                .value_name("ROLE")
-                .help("Set role ROLE in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::TYPE)
-                .short('t')
-                .long(options::TYPE)
-                .takes_value(true)
-                .value_name("TYPE")
-                .help("Set type TYPE in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::RANGE)
-                .short('l')
-                .long(options::RANGE)
-                .takes_value(true)
-                .value_name("RANGE")
-                .help("Set range RANGE in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::RECURSIVE)
-                .short('R')
-                .long(options::RECURSIVE)
-                .help("Operate on files and directories recursively."),
-        )
-        .arg(
-            Arg::new(options::sym_links::FOLLOW_ARG_DIR_SYM_LINK)
-                .short('H')
-                .requires(options::RECURSIVE)
-                .overrides_with_all(&[
-                    options::sym_links::FOLLOW_DIR_SYM_LINKS,
-                    options::sym_links::NO_FOLLOW_SYM_LINKS,
-                ])
-                .help(
-                    "If a command line argument is a symbolic link to a directory, \
-                     traverse it. Only valid when -R is specified.",
-                ),
-        )
-        .arg(
-            Arg::new(options::sym_links::FOLLOW_DIR_SYM_LINKS)
-                .short('L')
-                .requires(options::RECURSIVE)
-                .overrides_with_all(&[
-                    options::sym_links::FOLLOW_ARG_DIR_SYM_LINK,
-                    options::sym_links::NO_FOLLOW_SYM_LINKS,
-                ])
-                .help(
-                    "Traverse every symbolic link to a directory encountered. \
-                     Only valid when -R is specified.",
-                ),
-        )
-        .arg(
-            Arg::new(options::sym_links::NO_FOLLOW_SYM_LINKS)
-                .short('P')
-                .requires(options::RECURSIVE)
-                .overrides_with_all(&[
-                    options::sym_links::FOLLOW_ARG_DIR_SYM_LINK,
-                    options::sym_links::FOLLOW_DIR_SYM_LINKS,
-                ])
-                .help(
-                    "Do not traverse any symbolic links (default). \
-                     Only valid when -R is specified.",
-                ),
-        )
-        .arg(
-            Arg::new(options::VERBOSE)
-                .short('v')
-                .long(options::VERBOSE)
-                .help("Output a diagnostic for every file processed."),
-        )
-        .arg(
-            Arg::new("FILE")
-                .multiple_occurrences(true)
-                .min_values(1)
-                .allow_invalid_utf8(true),
-        )
-}
-
-#[derive(Debug)]
-struct Options {
-    verbose: bool,
-    preserve_root: bool,
-    recursive_mode: RecursiveMode,
-    affect_symlink_referent: bool,
-    mode: CommandLineMode,
-    files: Vec<PathBuf>,
-}
-
-fn parse_command_line(config: clap::App, args: impl uucore::Args) -> Result<Options> {
-    let matches = config.try_get_matches_from(args)?;
-
-    let verbose = matches.is_present(options::VERBOSE);
-
-    let (recursive_mode, affect_symlink_referent) = if matches.is_present(options::RECURSIVE) {
-        if matches.is_present(options::sym_links::FOLLOW_DIR_SYM_LINKS) {
-            if matches.is_present(options::dereference::NO_DEREFERENCE) {
-                return Err(Error::ArgumentsMismatch(format!(
-                    "'--{}' with '--{}' require '-P'",
-                    options::RECURSIVE,
-                    options::dereference::NO_DEREFERENCE
-                )));
-            }
-
-            (RecursiveMode::RecursiveAndFollowAllDirSymLinks, true)
-        } else if matches.is_present(options::sym_links::FOLLOW_ARG_DIR_SYM_LINK) {
-            if matches.is_present(options::dereference::NO_DEREFERENCE) {
-                return Err(Error::ArgumentsMismatch(format!(
-                    "'--{}' with '--{}' require '-P'",
-                    options::RECURSIVE,
-                    options::dereference::NO_DEREFERENCE
-                )));
-            }
-
-            (RecursiveMode::RecursiveAndFollowArgDirSymLinks, true)
-        } else {
-            if matches.is_present(options::dereference::DEREFERENCE) {
-                return Err(Error::ArgumentsMismatch(format!(
-                    "'--{}' with '--{}' require either '-H' or '-L'",
-                    options::RECURSIVE,
-                    options::dereference::DEREFERENCE
-                )));
-            }
-
-            (RecursiveMode::RecursiveButDoNotFollowSymLinks, false)
-        }
-    } else {
-        let no_dereference = matches.is_present(options::dereference::NO_DEREFERENCE);
-        (RecursiveMode::NotRecursive, !no_dereference)
-    };
-
-    // By default, do not preserve root.
-    let preserve_root = matches.is_present(options::preserve_root::PRESERVE_ROOT);
-
-    let mut files = matches.values_of_os("FILE").unwrap_or_default();
-
-    let mode = if let Some(path) = matches.value_of_os(options::REFERENCE) {
-        CommandLineMode::ReferenceBased {
-            reference: PathBuf::from(path),
-        }
-    } else if matches.is_present(options::USER)
-        || matches.is_present(options::ROLE)
-        || matches.is_present(options::TYPE)
-        || matches.is_present(options::RANGE)
-    {
-        CommandLineMode::Custom {
-            user: matches.value_of_os(options::USER).map(Into::into),
-            role: matches.value_of_os(options::ROLE).map(Into::into),
-            the_type: matches.value_of_os(options::TYPE).map(Into::into),
-            range: matches.value_of_os(options::RANGE).map(Into::into),
-        }
-    } else if let Some(context) = files.next() {
-        CommandLineMode::ContextBased {
-            context: context.into(),
-        }
-    } else {
-        return Err(Error::MissingContext);
-    };
-
-    let files: Vec<_> = files.map(PathBuf::from).collect();
-    if files.is_empty() {
-        return Err(Error::MissingFiles);
-    }
-
-    Ok(Options {
-        verbose,
-        preserve_root,
-        recursive_mode,
-        affect_symlink_referent,
-        mode,
-        files,
-    })
-}
-
-#[derive(Debug, Copy, Clone)]
-enum RecursiveMode {
-    NotRecursive,
-    /// Do not traverse any symbolic links.
-    RecursiveButDoNotFollowSymLinks,
-    /// Traverse every symbolic link to a directory encountered.
-    RecursiveAndFollowAllDirSymLinks,
-    /// If a command line argument is a symbolic link to a directory, traverse it.
-    RecursiveAndFollowArgDirSymLinks,
-}
-
-impl RecursiveMode {
-    fn is_recursive(self) -> bool {
-        match self {
-            RecursiveMode::NotRecursive => false,
-
-            RecursiveMode::RecursiveButDoNotFollowSymLinks
-            | RecursiveMode::RecursiveAndFollowAllDirSymLinks
-            | RecursiveMode::RecursiveAndFollowArgDirSymLinks => true,
-        }
-    }
-
-    fn fts_open_options(self) -> c_int {
-        match self {
-            RecursiveMode::NotRecursive | RecursiveMode::RecursiveButDoNotFollowSymLinks => {
-                fts_sys::FTS_PHYSICAL
-            }
-
-            RecursiveMode::RecursiveAndFollowAllDirSymLinks => fts_sys::FTS_LOGICAL,
-
-            RecursiveMode::RecursiveAndFollowArgDirSymLinks => {
-                fts_sys::FTS_PHYSICAL | fts_sys::FTS_COMFOLLOW
-            }
-        }
-    }
-}
-
-#[derive(Debug)]
-enum CommandLineMode {
-    ReferenceBased {
-        reference: PathBuf,
-    },
-    ContextBased {
-        context: OsString,
-    },
-    Custom {
-        user: Option<OsString>,
-        role: Option<OsString>,
-        the_type: Option<OsString>,
-        range: Option<OsString>,
-    },
-}
-
-fn process_files(
-    options: &Options,
-    context: &SELinuxSecurityContext,
-    root_dev_ino: Option<(libc::ino_t, libc::dev_t)>,
-) -> Vec<Error> {
-    let fts_options = options.recursive_mode.fts_open_options();
-    let mut fts = match fts::FTS::new(options.files.iter(), fts_options) {
-        Ok(fts) => fts,
-        Err(err) => return vec![err],
-    };
-
-    let mut errors = Vec::default();
-    loop {
-        match fts.read_next_entry() {
-            Ok(true) => {
-                if let Err(err) = process_file(options, context, &mut fts, root_dev_ino) {
-                    errors.push(err);
-                }
-            }
-
-            Ok(false) => break,
-
-            Err(err) => {
-                errors.push(err);
-                break;
-            }
-        }
-    }
-    errors
-}
-
-fn process_file(
-    options: &Options,
-    context: &SELinuxSecurityContext,
-    fts: &mut fts::FTS,
-    root_dev_ino: Option<(libc::ino_t, libc::dev_t)>,
-) -> Result<()> {
-    let mut entry = fts.last_entry_ref().unwrap();
-
-    let file_full_name = entry.path().map(PathBuf::from).ok_or_else(|| {
-        Error::from_io("File name validation", io::ErrorKind::InvalidInput.into())
-    })?;
-
-    let fts_access_path = entry.access_path().ok_or_else(|| {
-        let err = io::ErrorKind::InvalidInput.into();
-        Error::from_io1("File name validation", &file_full_name, err)
-    })?;
-
-    let err = |s, k: io::ErrorKind| Error::from_io1(s, &file_full_name, k.into());
-
-    let fts_err = |s| {
-        let r = io::Error::from_raw_os_error(entry.errno());
-        Err(Error::from_io1(s, &file_full_name, r))
-    };
-
-    // SAFETY: If `entry.fts_statp` is not null, then is is assumed to be valid.
-    let file_dev_ino = if let Some(stat) = entry.stat() {
-        (stat.st_ino, stat.st_dev)
-    } else {
-        return Err(err("Getting meta data", io::ErrorKind::InvalidInput));
-    };
-
-    let mut result = Ok(());
-
-    match entry.flags() {
-        fts_sys::FTS_D => {
-            if options.recursive_mode.is_recursive() {
-                if root_dev_ino_check(root_dev_ino, file_dev_ino) {
-                    // This happens e.g., with "chcon -R --preserve-root ... /"
-                    // and with "chcon -RH --preserve-root ... symlink-to-root".
-                    root_dev_ino_warn(&file_full_name);
-
-                    // Tell fts not to traverse into this hierarchy.
-                    let _ignored = fts.set(fts_sys::FTS_SKIP);
-
-                    // Ensure that we do not process "/" on the second visit.
-                    let _ignored = fts.read_next_entry();
-
-                    return Err(err("Modifying root path", io::ErrorKind::PermissionDenied));
-                }
-
-                return Ok(());
-            }
-        }
-
-        fts_sys::FTS_DP => {
-            if !options.recursive_mode.is_recursive() {
-                return Ok(());
-            }
-        }
-
-        fts_sys::FTS_NS => {
-            // For a top-level file or directory, this FTS_NS (stat failed) indicator is determined
-            // at the time of the initial fts_open call. With programs like chmod, chown, and chgrp,
-            // that modify permissions, it is possible that the file in question is accessible when
-            // control reaches this point. So, if this is the first time we've seen the FTS_NS for
-            // this file, tell fts_read to stat it "again".
-            if entry.level() == 0 && entry.number() == 0 {
-                entry.set_number(1);
-                let _ignored = fts.set(fts_sys::FTS_AGAIN);
-                return Ok(());
-            }
-
-            result = fts_err("Accessing");
-        }
-
-        fts_sys::FTS_ERR => result = fts_err("Accessing"),
-
-        fts_sys::FTS_DNR => result = fts_err("Reading directory"),
-
-        fts_sys::FTS_DC => {
-            if cycle_warning_required(options.recursive_mode.fts_open_options(), &entry) {
-                emit_cycle_warning(&file_full_name);
-                return Err(err("Reading cyclic directory", io::ErrorKind::InvalidData));
-            }
-        }
-
-        _ => {}
-    }
-
-    if entry.flags() == fts_sys::FTS_DP
-        && result.is_ok()
-        && root_dev_ino_check(root_dev_ino, file_dev_ino)
-    {
-        root_dev_ino_warn(&file_full_name);
-        result = Err(err("Modifying root path", io::ErrorKind::PermissionDenied));
-    }
-
-    if result.is_ok() {
-        if options.verbose {
-            println!(
-                "{}: Changing security context of: {}",
-                uucore::util_name(),
-                file_full_name.quote()
-            );
-        }
-
-        result = change_file_context(options, context, fts_access_path);
-    }
-
-    if !options.recursive_mode.is_recursive() {
-        let _ignored = fts.set(fts_sys::FTS_SKIP);
-    }
-    result
-}
-
-fn change_file_context(
-    options: &Options,
-    context: &SELinuxSecurityContext,
-    path: &Path,
-) -> Result<()> {
-    match &options.mode {
-        CommandLineMode::Custom {
-            user,
-            role,
-            the_type,
-            range,
-        } => {
-            let err0 = || -> Result<()> {
-                // If the file doesn't have a context, and we're not setting all of the context
-                // components, there isn't really an obvious default. Thus, we just give up.
-                let op = "Applying partial security context to unlabeled file";
-                let err = io::ErrorKind::InvalidInput.into();
-                Err(Error::from_io1(op, path, err))
-            };
-
-            let file_context =
-                match SecurityContext::of_path(path, options.affect_symlink_referent, false) {
-                    Ok(Some(context)) => context,
-
-                    Ok(None) => return err0(),
-                    Err(r) => return Err(Error::from_selinux("Getting security context", r)),
-                };
-
-            let c_file_context = match file_context.to_c_string() {
-                Ok(Some(context)) => context,
-
-                Ok(None) => return err0(),
-                Err(r) => return Err(Error::from_selinux("Getting security context", r)),
-            };
-
-            let se_context =
-                OpaqueSecurityContext::from_c_str(c_file_context.as_ref()).map_err(|_r| {
-                    let err = io::ErrorKind::InvalidInput.into();
-                    Error::from_io1("Creating security context", path, err)
-                })?;
-
-            type SetValueProc = fn(&OpaqueSecurityContext, &CStr) -> selinux::errors::Result<()>;
-
-            let list: &[(&Option<OsString>, SetValueProc)] = &[
-                (user, OpaqueSecurityContext::set_user),
-                (role, OpaqueSecurityContext::set_role),
-                (the_type, OpaqueSecurityContext::set_type),
-                (range, OpaqueSecurityContext::set_range),
-            ];
-
-            for (new_value, set_value_proc) in list {
-                if let Some(new_value) = new_value {
-                    let c_new_value = os_str_to_c_string(new_value).map_err(|_r| {
-                        let err = io::ErrorKind::InvalidInput.into();
-                        Error::from_io1("Creating security context", path, err)
-                    })?;
-
-                    set_value_proc(&se_context, &c_new_value)
-                        .map_err(|r| Error::from_selinux("Setting security context user", r))?;
-                }
-            }
-
-            let context_string = se_context
-                .to_c_string()
-                .map_err(|r| Error::from_selinux("Getting security context", r))?;
-
-            if c_file_context.as_ref().to_bytes() == context_string.as_ref().to_bytes() {
-                Ok(()) // Nothing to change.
-            } else {
-                SecurityContext::from_c_str(&context_string, false)
-                    .set_for_path(path, options.affect_symlink_referent, false)
-                    .map_err(|r| Error::from_selinux("Setting security context", r))
-            }
-        }
-
-        CommandLineMode::ReferenceBased { .. } | CommandLineMode::ContextBased { .. } => {
-            if let Some(c_context) = context.to_c_string()? {
-                SecurityContext::from_c_str(c_context.as_ref(), false)
-                    .set_for_path(path, options.affect_symlink_referent, false)
-                    .map_err(|r| Error::from_selinux("Setting security context", r))
-            } else {
-                let err = io::ErrorKind::InvalidInput.into();
-                Err(Error::from_io1("Setting security context", path, err))
-            }
-        }
-    }
-}
-
-#[cfg(unix)]
-pub(crate) fn os_str_to_c_string(s: &OsStr) -> Result<CString> {
-    use std::os::unix::ffi::OsStrExt;
-
-    CString::new(s.as_bytes())
-        .map_err(|_r| Error::from_io("CString::new()", io::ErrorKind::InvalidInput.into()))
-}
-
-/// Call `lstat()` to get the device and inode numbers for `/`.
-#[cfg(unix)]
-fn get_root_dev_ino() -> Result<(libc::ino_t, libc::dev_t)> {
-    use std::os::unix::fs::MetadataExt;
-
-    fs::symlink_metadata("/")
-        .map(|md| (md.ino(), md.dev()))
-        .map_err(|r| Error::from_io1("std::fs::symlink_metadata", "/", r))
-}
-
-fn root_dev_ino_check(
-    root_dev_ino: Option<(libc::ino_t, libc::dev_t)>,
-    dir_dev_ino: (libc::ino_t, libc::dev_t),
-) -> bool {
-    root_dev_ino.map_or(false, |root_dev_ino| root_dev_ino == dir_dev_ino)
-}
-
-fn root_dev_ino_warn(dir_name: &Path) {
-    if dir_name.as_os_str() == "/" {
-        show_warning!(
-            "It is dangerous to operate recursively on '/'. \
-             Use --{} to override this failsafe.",
-            options::preserve_root::NO_PRESERVE_ROOT,
-        );
-    } else {
-        show_warning!(
-            "It is dangerous to operate recursively on {} (same as '/'). \
-             Use --{} to override this failsafe.",
-            dir_name.quote(),
-            options::preserve_root::NO_PRESERVE_ROOT,
-        );
-    }
-}
-
-// When fts_read returns FTS_DC to indicate a directory cycle, it may or may not indicate
-// a real problem.
-// When a program like chgrp performs a recursive traversal that requires traversing symbolic links,
-// it is *not* a problem.
-// However, when invoked with "-P -R", it deserves a warning.
-// The fts_options parameter records the options that control this aspect of fts behavior,
-// so test that.
-fn cycle_warning_required(fts_options: c_int, entry: &fts::EntryRef) -> bool {
-    // When dereferencing no symlinks, or when dereferencing only those listed on the command line
-    // and we're not processing a command-line argument, then a cycle is a serious problem.
-    ((fts_options & fts_sys::FTS_PHYSICAL) != 0)
-        && (((fts_options & fts_sys::FTS_COMFOLLOW) == 0) || entry.level() != 0)
-}
-
-fn emit_cycle_warning(file_name: &Path) {
-    show_warning!(
-        "Circular directory structure.\n\
-This almost certainly means that you have a corrupted file system.\n\
-NOTIFY YOUR SYSTEM MANAGER.\n\
-The following directory is part of the cycle {}.",
-        file_name.quote()
-    )
-}
-
-#[derive(Debug)]
-enum SELinuxSecurityContext<'t> {
-    File(SecurityContext<'t>),
-    String(Option<CString>),
-}
-
-impl<'t> SELinuxSecurityContext<'t> {
-    fn to_c_string(&self) -> Result<Option<Cow<CStr>>> {
-        match self {
-            Self::File(context) => context
-                .to_c_string()
-                .map_err(|r| Error::from_selinux("SELinuxSecurityContext::to_c_string()", r)),
-
-            Self::String(context) => Ok(context.as_deref().map(Cow::Borrowed)),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chcon/errors.rs.html b/src/uu_chcon/errors.rs.html deleted file mode 100644 index 2237e877e..000000000 --- a/src/uu_chcon/errors.rs.html +++ /dev/null @@ -1,150 +0,0 @@ -errors.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-
use std::ffi::OsString;
-use std::fmt::Write;
-use std::io;
-
-use uucore::display::Quotable;
-
-pub(crate) type Result<T> = std::result::Result<T, Error>;
-
-#[derive(thiserror::Error, Debug)]
-pub(crate) enum Error {
-    #[error("No context is specified")]
-    MissingContext,
-
-    #[error("No files are specified")]
-    MissingFiles,
-
-    #[error("{0}")]
-    ArgumentsMismatch(String),
-
-    #[error(transparent)]
-    CommandLine(#[from] clap::Error),
-
-    #[error("{operation} failed")]
-    SELinux {
-        operation: &'static str,
-        source: selinux::errors::Error,
-    },
-
-    #[error("{operation} failed")]
-    Io {
-        operation: &'static str,
-        source: io::Error,
-    },
-
-    #[error("{operation} failed on {}", .operand1.quote())]
-    Io1 {
-        operation: &'static str,
-        operand1: OsString,
-        source: io::Error,
-    },
-}
-
-impl Error {
-    pub(crate) fn from_io(operation: &'static str, source: io::Error) -> Self {
-        Self::Io { operation, source }
-    }
-
-    pub(crate) fn from_io1(
-        operation: &'static str,
-        operand1: impl Into<OsString>,
-        source: io::Error,
-    ) -> Self {
-        Self::Io1 {
-            operation,
-            operand1: operand1.into(),
-            source,
-        }
-    }
-
-    pub(crate) fn from_selinux(operation: &'static str, source: selinux::errors::Error) -> Self {
-        Self::SELinux { operation, source }
-    }
-}
-
-pub(crate) fn report_full_error(mut err: &dyn std::error::Error) -> String {
-    let mut desc = String::with_capacity(256);
-    write!(&mut desc, "{}", err).unwrap();
-    while let Some(source) = err.source() {
-        err = source;
-        write!(&mut desc, ". {}", err).unwrap();
-    }
-    desc
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chcon/fts.rs.html b/src/uu_chcon/fts.rs.html deleted file mode 100644 index d0b0d9328..000000000 --- a/src/uu_chcon/fts.rs.html +++ /dev/null @@ -1,390 +0,0 @@ -fts.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
use std::ffi::{CStr, CString, OsStr};
-use std::marker::PhantomData;
-use std::os::raw::{c_int, c_long, c_short};
-use std::path::Path;
-use std::ptr::NonNull;
-use std::{io, iter, ptr, slice};
-
-use crate::errors::{Error, Result};
-use crate::os_str_to_c_string;
-
-#[derive(Debug)]
-pub(crate) struct FTS {
-    fts: ptr::NonNull<fts_sys::FTS>,
-
-    entry: Option<ptr::NonNull<fts_sys::FTSENT>>,
-    _phantom_data: PhantomData<fts_sys::FTSENT>,
-}
-
-impl FTS {
-    pub(crate) fn new<I>(paths: I, options: c_int) -> Result<Self>
-    where
-        I: IntoIterator,
-        I::Item: AsRef<OsStr>,
-    {
-        let files_paths: Vec<CString> = paths
-            .into_iter()
-            .map(|s| os_str_to_c_string(s.as_ref()))
-            .collect::<Result<_>>()?;
-
-        if files_paths.is_empty() {
-            return Err(Error::from_io(
-                "FTS::new()",
-                io::ErrorKind::InvalidInput.into(),
-            ));
-        }
-
-        let path_argv: Vec<_> = files_paths
-            .iter()
-            .map(CString::as_ref)
-            .map(CStr::as_ptr)
-            .chain(iter::once(ptr::null()))
-            .collect();
-
-        // SAFETY: We assume calling fts_open() is safe:
-        // - `path_argv` is an array holding at least one path, and null-terminated.
-        // - `compar` is None.
-        let fts = unsafe { fts_sys::fts_open(path_argv.as_ptr().cast(), options, None) };
-
-        let fts = ptr::NonNull::new(fts)
-            .ok_or_else(|| Error::from_io("fts_open()", io::Error::last_os_error()))?;
-
-        Ok(Self {
-            fts,
-            entry: None,
-            _phantom_data: PhantomData,
-        })
-    }
-
-    pub(crate) fn last_entry_ref(&mut self) -> Option<EntryRef> {
-        self.entry.map(move |entry| EntryRef::new(self, entry))
-    }
-
-    pub(crate) fn read_next_entry(&mut self) -> Result<bool> {
-        // SAFETY: We assume calling fts_read() is safe with a non-null `fts`
-        // pointer assumed to be valid.
-        let new_entry = unsafe { fts_sys::fts_read(self.fts.as_ptr()) };
-
-        self.entry = NonNull::new(new_entry);
-        if self.entry.is_none() {
-            let r = io::Error::last_os_error();
-            if let Some(0) = r.raw_os_error() {
-                Ok(false)
-            } else {
-                Err(Error::from_io("fts_read()", r))
-            }
-        } else {
-            Ok(true)
-        }
-    }
-
-    pub(crate) fn set(&mut self, instr: c_int) -> Result<()> {
-        let fts = self.fts.as_ptr();
-        let entry = self
-            .entry
-            .ok_or_else(|| Error::from_io("FTS::set()", io::ErrorKind::UnexpectedEof.into()))?;
-
-        // SAFETY: We assume calling fts_set() is safe with non-null `fts`
-        // and `entry` pointers assumed to be valid.
-        if unsafe { fts_sys::fts_set(fts, entry.as_ptr(), instr) } == -1 {
-            Err(Error::from_io("fts_set()", io::Error::last_os_error()))
-        } else {
-            Ok(())
-        }
-    }
-}
-
-impl Drop for FTS {
-    fn drop(&mut self) {
-        // SAFETY: We assume calling fts_close() is safe with a non-null `fts`
-        // pointer assumed to be valid.
-        unsafe { fts_sys::fts_close(self.fts.as_ptr()) };
-    }
-}
-
-#[derive(Debug)]
-pub(crate) struct EntryRef<'fts> {
-    pub(crate) pointer: ptr::NonNull<fts_sys::FTSENT>,
-
-    _fts: PhantomData<&'fts FTS>,
-    _phantom_data: PhantomData<fts_sys::FTSENT>,
-}
-
-impl<'fts> EntryRef<'fts> {
-    fn new(_fts: &'fts FTS, entry: ptr::NonNull<fts_sys::FTSENT>) -> Self {
-        Self {
-            pointer: entry,
-            _fts: PhantomData,
-            _phantom_data: PhantomData,
-        }
-    }
-
-    fn as_ref(&self) -> &fts_sys::FTSENT {
-        // SAFETY: `self.pointer` is a non-null pointer that is assumed to be valid.
-        unsafe { self.pointer.as_ref() }
-    }
-
-    fn as_mut(&mut self) -> &mut fts_sys::FTSENT {
-        // SAFETY: `self.pointer` is a non-null pointer that is assumed to be valid.
-        unsafe { self.pointer.as_mut() }
-    }
-
-    pub(crate) fn flags(&self) -> c_int {
-        c_int::from(self.as_ref().fts_info)
-    }
-
-    pub(crate) fn errno(&self) -> c_int {
-        self.as_ref().fts_errno
-    }
-
-    pub(crate) fn level(&self) -> c_short {
-        self.as_ref().fts_level
-    }
-
-    pub(crate) fn number(&self) -> c_long {
-        self.as_ref().fts_number
-    }
-
-    pub(crate) fn set_number(&mut self, new_number: c_long) {
-        self.as_mut().fts_number = new_number;
-    }
-
-    pub(crate) fn path(&self) -> Option<&Path> {
-        let entry = self.as_ref();
-        if entry.fts_pathlen == 0 {
-            return None;
-        }
-
-        NonNull::new(entry.fts_path)
-            .map(|path_ptr| {
-                let path_size = usize::from(entry.fts_pathlen).saturating_add(1);
-
-                // SAFETY: `entry.fts_path` is a non-null pointer that is assumed to be valid.
-                unsafe { slice::from_raw_parts(path_ptr.as_ptr().cast(), path_size) }
-            })
-            .and_then(|bytes| CStr::from_bytes_with_nul(bytes).ok())
-            .map(c_str_to_os_str)
-            .map(Path::new)
-    }
-
-    pub(crate) fn access_path(&self) -> Option<&Path> {
-        ptr::NonNull::new(self.as_ref().fts_accpath)
-            .map(|path_ptr| {
-                // SAFETY: `entry.fts_accpath` is a non-null pointer that is assumed to be valid.
-                unsafe { CStr::from_ptr(path_ptr.as_ptr()) }
-            })
-            .map(c_str_to_os_str)
-            .map(Path::new)
-    }
-
-    pub(crate) fn stat(&self) -> Option<&libc::stat> {
-        ptr::NonNull::new(self.as_ref().fts_statp).map(|stat_ptr| {
-            // SAFETY: `entry.fts_statp` is a non-null pointer that is assumed to be valid.
-            unsafe { stat_ptr.as_ref() }
-        })
-    }
-}
-
-#[cfg(unix)]
-fn c_str_to_os_str(s: &CStr) -> &OsStr {
-    use std::os::unix::ffi::OsStrExt;
-
-    OsStr::from_bytes(s.to_bytes())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chgrp/chgrp.rs.html b/src/uu_chgrp/chgrp.rs.html deleted file mode 100644 index cb5331a93..000000000 --- a/src/uu_chgrp/chgrp.rs.html +++ /dev/null @@ -1,294 +0,0 @@ -chgrp.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) COMFOLLOW Chowner RFILE RFILE's derefer dgid nonblank nonprint nonprinting
-
-use uucore::display::Quotable;
-pub use uucore::entries;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::perms::{chown_base, options, IfFrom};
-
-use clap::{App, Arg, ArgMatches};
-
-use std::fs;
-use std::os::unix::fs::MetadataExt;
-
-static ABOUT: &str = "Change the group of each FILE to GROUP.";
-static VERSION: &str = env!("CARGO_PKG_VERSION");
-
-fn get_usage() -> String {
-    format!(
-        "{0} [OPTION]... GROUP FILE...\n    {0} [OPTION]... --reference=RFILE FILE...",
-        uucore::execution_phrase()
-    )
-}
-
-fn parse_gid_and_uid(matches: &ArgMatches) -> UResult<(Option<u32>, Option<u32>, IfFrom)> {
-    let dest_gid = if let Some(file) = matches.value_of(options::REFERENCE) {
-        fs::metadata(&file)
-            .map(|meta| Some(meta.gid()))
-            .map_err_context(|| format!("failed to get attributes of {}", file.quote()))?
-    } else {
-        let group = matches.value_of(options::ARG_GROUP).unwrap_or_default();
-        if group.is_empty() {
-            None
-        } else {
-            match entries::grp2gid(group) {
-                Ok(g) => Some(g),
-                _ => {
-                    return Err(USimpleError::new(
-                        1,
-                        format!("invalid group: {}", group.quote()),
-                    ))
-                }
-            }
-        }
-    };
-    Ok((dest_gid, None, IfFrom::All))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = get_usage();
-
-    chown_base(
-        uu_app().override_usage(&usage[..]),
-        args,
-        options::ARG_GROUP,
-        parse_gid_and_uid,
-        true,
-    )
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(VERSION)
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::verbosity::CHANGES)
-                .short('c')
-                .long(options::verbosity::CHANGES)
-                .help("like verbose but report only when a change is made"),
-        )
-        .arg(
-            Arg::new(options::verbosity::SILENT)
-                .short('f')
-                .long(options::verbosity::SILENT),
-        )
-        .arg(
-            Arg::new(options::verbosity::QUIET)
-                .long(options::verbosity::QUIET)
-                .help("suppress most error messages"),
-        )
-        .arg(
-            Arg::new(options::verbosity::VERBOSE)
-                .short('v')
-                .long(options::verbosity::VERBOSE)
-                .help("output a diagnostic for every file processed"),
-        )
-        .arg(
-            Arg::new(options::dereference::DEREFERENCE)
-                .long(options::dereference::DEREFERENCE),
-        )
-        .arg(
-           Arg::new(options::dereference::NO_DEREFERENCE)
-               .short('h')
-               .long(options::dereference::NO_DEREFERENCE)
-               .help(
-                   "affect symbolic links instead of any referenced file (useful only on systems that can change the ownership of a symlink)",
-               ),
-        )
-        .arg(
-            Arg::new(options::preserve_root::PRESERVE)
-                .long(options::preserve_root::PRESERVE)
-                .help("fail to operate recursively on '/'"),
-        )
-        .arg(
-            Arg::new(options::preserve_root::NO_PRESERVE)
-                .long(options::preserve_root::NO_PRESERVE)
-                .help("do not treat '/' specially (the default)"),
-        )
-        .arg(
-            Arg::new(options::REFERENCE)
-                .long(options::REFERENCE)
-                .value_name("RFILE")
-                .help("use RFILE's group rather than specifying GROUP values")
-                .takes_value(true)
-                .multiple_occurrences(false),
-        )
-        .arg(
-            Arg::new(options::RECURSIVE)
-                .short('R')
-                .long(options::RECURSIVE)
-                .help("operate on files and directories recursively"),
-        )
-        .arg(
-            Arg::new(options::traverse::TRAVERSE)
-                .short(options::traverse::TRAVERSE.chars().next().unwrap())
-                .help("if a command line argument is a symbolic link to a directory, traverse it"),
-        )
-        .arg(
-            Arg::new(options::traverse::NO_TRAVERSE)
-                .short(options::traverse::NO_TRAVERSE.chars().next().unwrap())
-                .help("do not traverse any symbolic links (default)")
-                .overrides_with_all(&[options::traverse::TRAVERSE, options::traverse::EVERY]),
-        )
-        .arg(
-            Arg::new(options::traverse::EVERY)
-                .short(options::traverse::EVERY.chars().next().unwrap())
-                .help("traverse every symbolic link to a directory encountered"),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chmod/chmod.rs.html b/src/uu_chmod/chmod.rs.html deleted file mode 100644 index 8d1a7277b..000000000 --- a/src/uu_chmod/chmod.rs.html +++ /dev/null @@ -1,772 +0,0 @@ -chmod.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-
// This file is part of the uutils coreutils package.
-//
-// (c) Alex Lyon <arcterus@mail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) Chmoder cmode fmode fperm fref ugoa RFILE RFILE's
-
-use clap::{crate_version, App, Arg};
-use std::fs;
-use std::os::unix::fs::{MetadataExt, PermissionsExt};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{ExitCode, UResult, USimpleError, UUsageError};
-use uucore::fs::display_permissions_unix;
-use uucore::libc::mode_t;
-#[cfg(not(windows))]
-use uucore::mode;
-use uucore::{show_error, InvalidEncodingHandling};
-use walkdir::WalkDir;
-
-static ABOUT: &str = "Change the mode of each FILE to MODE.
- With --reference, change the mode of each FILE to that of RFILE.";
-
-mod options {
-    pub const CHANGES: &str = "changes";
-    pub const QUIET: &str = "quiet"; // visible_alias("silent")
-    pub const VERBOSE: &str = "verbose";
-    pub const NO_PRESERVE_ROOT: &str = "no-preserve-root";
-    pub const PRESERVE_ROOT: &str = "preserve-root";
-    pub const REFERENCE: &str = "RFILE";
-    pub const RECURSIVE: &str = "recursive";
-    pub const MODE: &str = "MODE";
-    pub const FILE: &str = "FILE";
-}
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... MODE[,MODE]... FILE...
-or: {0} [OPTION]... OCTAL-MODE FILE...
-or: {0} [OPTION]... --reference=RFILE FILE...",
-        uucore::execution_phrase()
-    )
-}
-
-fn get_long_usage() -> String {
-    String::from("Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=]?[0-7]+'.")
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let mut args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    // Before we can parse 'args' with clap (and previously getopts),
-    // a possible MODE prefix '-' needs to be removed (e.g. "chmod -x FILE").
-    let mode_had_minus_prefix = mode::strip_minus_from_mode(&mut args);
-
-    let usage = usage();
-    let after_help = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let changes = matches.is_present(options::CHANGES);
-    let quiet = matches.is_present(options::QUIET);
-    let verbose = matches.is_present(options::VERBOSE);
-    let preserve_root = matches.is_present(options::PRESERVE_ROOT);
-    let recursive = matches.is_present(options::RECURSIVE);
-    let fmode = match matches.value_of(options::REFERENCE) {
-        Some(fref) => match fs::metadata(fref) {
-            Ok(meta) => Some(meta.mode()),
-            Err(err) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("cannot stat attributes of {}: {}", fref.quote(), err),
-                ))
-            }
-        },
-        None => None,
-    };
-    let modes = matches.value_of(options::MODE).unwrap(); // should always be Some because required
-    let cmode = if mode_had_minus_prefix {
-        // clap parsing is finished, now put prefix back
-        format!("-{}", modes)
-    } else {
-        modes.to_string()
-    };
-    let mut files: Vec<String> = matches
-        .values_of(options::FILE)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-    let cmode = if fmode.is_some() {
-        // "--reference" and MODE are mutually exclusive
-        // if "--reference" was used MODE needs to be interpreted as another FILE
-        // it wasn't possible to implement this behavior directly with clap
-        files.push(cmode);
-        None
-    } else {
-        Some(cmode)
-    };
-
-    if files.is_empty() {
-        return Err(UUsageError::new(1, "missing operand".to_string()));
-    }
-
-    let chmoder = Chmoder {
-        changes,
-        quiet,
-        verbose,
-        preserve_root,
-        recursive,
-        fmode,
-        cmode,
-    };
-
-    chmoder.chmod(files)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::CHANGES)
-                .long(options::CHANGES)
-                .short('c')
-                .help("like verbose but report only when a change is made"),
-        )
-        .arg(
-            Arg::new(options::QUIET)
-                .long(options::QUIET)
-                .visible_alias("silent")
-                .short('f')
-                .help("suppress most error messages"),
-        )
-        .arg(
-            Arg::new(options::VERBOSE)
-                .long(options::VERBOSE)
-                .short('v')
-                .help("output a diagnostic for every file processed"),
-        )
-        .arg(
-            Arg::new(options::NO_PRESERVE_ROOT)
-                .long(options::NO_PRESERVE_ROOT)
-                .help("do not treat '/' specially (the default)"),
-        )
-        .arg(
-            Arg::new(options::PRESERVE_ROOT)
-                .long(options::PRESERVE_ROOT)
-                .help("fail to operate recursively on '/'"),
-        )
-        .arg(
-            Arg::new(options::RECURSIVE)
-                .long(options::RECURSIVE)
-                .short('R')
-                .help("change files and directories recursively"),
-        )
-        .arg(
-            Arg::new(options::REFERENCE)
-                .long("reference")
-                .takes_value(true)
-                .help("use RFILE's mode instead of MODE values"),
-        )
-        .arg(
-            Arg::new(options::MODE)
-                .required_unless_present(options::REFERENCE)
-                .takes_value(true),
-            // It would be nice if clap could parse with delimiter, e.g. "g-x,u+x",
-            // however .multiple_occurrences(true) cannot be used here because FILE already needs that.
-            // Only one positional argument with .multiple_occurrences(true) set is allowed per command
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .required_unless_present(options::MODE)
-                .multiple_occurrences(true),
-        )
-}
-
-struct Chmoder {
-    changes: bool,
-    quiet: bool,
-    verbose: bool,
-    preserve_root: bool,
-    recursive: bool,
-    fmode: Option<u32>,
-    cmode: Option<String>,
-}
-
-impl Chmoder {
-    fn chmod(&self, files: Vec<String>) -> UResult<()> {
-        let mut r = Ok(());
-
-        for filename in &files {
-            let filename = &filename[..];
-            let file = Path::new(filename);
-            if !file.exists() {
-                if is_symlink(file) {
-                    println!(
-                        "failed to change mode of {} from 0000 (---------) to 0000 (---------)",
-                        filename.quote()
-                    );
-                    if !self.quiet {
-                        return Err(USimpleError::new(
-                            1,
-                            format!("cannot operate on dangling symlink {}", filename.quote()),
-                        ));
-                    }
-                } else if !self.quiet {
-                    return Err(USimpleError::new(
-                        1,
-                        format!(
-                            "cannot access {}: No such file or directory",
-                            filename.quote()
-                        ),
-                    ));
-                }
-                return Err(ExitCode::new(1));
-            }
-            if self.recursive && self.preserve_root && filename == "/" {
-                return Err(USimpleError::new(
-                    1,
-                    format!(
-                        "it is dangerous to operate recursively on {}\nuse --no-preserve-root to override this failsafe",
-                        filename.quote()
-                    )
-                ));
-            }
-            if !self.recursive {
-                r = self.chmod_file(file).and(r);
-            } else {
-                for entry in WalkDir::new(&filename).into_iter().filter_map(|e| e.ok()) {
-                    let file = entry.path();
-                    r = self.chmod_file(file).and(r);
-                }
-            }
-        }
-        r
-    }
-
-    #[cfg(windows)]
-    fn chmod_file(&self, file: &Path) -> UResult<()> {
-        // chmod is useless on Windows
-        // it doesn't set any permissions at all
-        // instead it just sets the readonly attribute on the file
-        Ok(())
-    }
-    #[cfg(unix)]
-    fn chmod_file(&self, file: &Path) -> UResult<()> {
-        use uucore::mode::get_umask;
-
-        let fperm = match fs::metadata(file) {
-            Ok(meta) => meta.mode() & 0o7777,
-            Err(err) => {
-                if is_symlink(file) {
-                    if self.verbose {
-                        println!(
-                            "neither symbolic link {} nor referent has been changed",
-                            file.quote()
-                        );
-                    }
-                    return Ok(());
-                } else if err.kind() == std::io::ErrorKind::PermissionDenied {
-                    // These two filenames would normally be conditionally
-                    // quoted, but GNU's tests expect them to always be quoted
-                    return Err(USimpleError::new(
-                        1,
-                        format!("{}: Permission denied", file.quote()),
-                    ));
-                } else {
-                    return Err(USimpleError::new(1, format!("{}: {}", file.quote(), err)));
-                }
-            }
-        };
-        match self.fmode {
-            Some(mode) => self.change_file(fperm, mode, file)?,
-            None => {
-                let cmode_unwrapped = self.cmode.clone().unwrap();
-                let mut new_mode = fperm;
-                let mut naively_expected_new_mode = new_mode;
-                for mode in cmode_unwrapped.split(',') {
-                    // cmode is guaranteed to be Some in this case
-                    let arr: &[char] = &['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
-                    let result = if mode.contains(arr) {
-                        mode::parse_numeric(new_mode, mode, file.is_dir()).map(|v| (v, v))
-                    } else {
-                        mode::parse_symbolic(new_mode, mode, get_umask(), file.is_dir()).map(|m| {
-                            // calculate the new mode as if umask was 0
-                            let naive_mode = mode::parse_symbolic(
-                                naively_expected_new_mode,
-                                mode,
-                                0,
-                                file.is_dir(),
-                            )
-                            .unwrap(); // we know that mode must be valid, so this cannot fail
-                            (m, naive_mode)
-                        })
-                    };
-                    match result {
-                        Ok((mode, naive_mode)) => {
-                            new_mode = mode;
-                            naively_expected_new_mode = naive_mode;
-                        }
-                        Err(f) => {
-                            if !self.quiet {
-                                return Err(USimpleError::new(1, f));
-                            } else {
-                                return Err(ExitCode::new(1));
-                            }
-                        }
-                    }
-                }
-                self.change_file(fperm, new_mode, file)?;
-                // if a permission would have been removed if umask was 0, but it wasn't because umask was not 0, print an error and fail
-                if (new_mode & !naively_expected_new_mode) != 0 {
-                    return Err(USimpleError::new(
-                        1,
-                        format!(
-                            "{}: new permissions are {}, not {}",
-                            file.maybe_quote(),
-                            display_permissions_unix(new_mode as mode_t, false),
-                            display_permissions_unix(naively_expected_new_mode as mode_t, false)
-                        ),
-                    ));
-                }
-            }
-        }
-
-        Ok(())
-    }
-
-    #[cfg(unix)]
-    fn change_file(&self, fperm: u32, mode: u32, file: &Path) -> Result<(), i32> {
-        if fperm == mode {
-            if self.verbose && !self.changes {
-                println!(
-                    "mode of {} retained as {:04o} ({})",
-                    file.quote(),
-                    fperm,
-                    display_permissions_unix(fperm as mode_t, false),
-                );
-            }
-            Ok(())
-        } else if let Err(err) = fs::set_permissions(file, fs::Permissions::from_mode(mode)) {
-            if !self.quiet {
-                show_error!("{}", err);
-            }
-            if self.verbose {
-                println!(
-                    "failed to change mode of file {} from {:04o} ({}) to {:04o} ({})",
-                    file.quote(),
-                    fperm,
-                    display_permissions_unix(fperm as mode_t, false),
-                    mode,
-                    display_permissions_unix(mode as mode_t, false)
-                );
-            }
-            Err(1)
-        } else {
-            if self.verbose || self.changes {
-                println!(
-                    "mode of {} changed from {:04o} ({}) to {:04o} ({})",
-                    file.quote(),
-                    fperm,
-                    display_permissions_unix(fperm as mode_t, false),
-                    mode,
-                    display_permissions_unix(mode as mode_t, false)
-                );
-            }
-            Ok(())
-        }
-    }
-}
-
-pub fn is_symlink<P: AsRef<Path>>(path: P) -> bool {
-    match fs::symlink_metadata(path) {
-        Ok(m) => m.file_type().is_symlink(),
-        Err(_) => false,
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chown/chown.rs.html b/src/uu_chown/chown.rs.html deleted file mode 100644 index 376c6f79b..000000000 --- a/src/uu_chown/chown.rs.html +++ /dev/null @@ -1,466 +0,0 @@ -chown.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) COMFOLLOW Passwd RFILE RFILE's derefer dgid duid groupname
-
-use uucore::display::Quotable;
-pub use uucore::entries::{self, Group, Locate, Passwd};
-use uucore::perms::{chown_base, options, IfFrom};
-
-use uucore::error::{FromIo, UResult, USimpleError};
-
-use clap::{crate_version, App, Arg, ArgMatches};
-
-use std::fs;
-use std::os::unix::fs::MetadataExt;
-
-static ABOUT: &str = "change file owner and group";
-
-fn get_usage() -> String {
-    format!(
-        "{0} [OPTION]... [OWNER][:[GROUP]] FILE...\n{0} [OPTION]... --reference=RFILE FILE...",
-        uucore::execution_phrase()
-    )
-}
-
-fn parse_gid_uid_and_filter(matches: &ArgMatches) -> UResult<(Option<u32>, Option<u32>, IfFrom)> {
-    let filter = if let Some(spec) = matches.value_of(options::FROM) {
-        match parse_spec(spec, ':')? {
-            (Some(uid), None) => IfFrom::User(uid),
-            (None, Some(gid)) => IfFrom::Group(gid),
-            (Some(uid), Some(gid)) => IfFrom::UserGroup(uid, gid),
-            (None, None) => IfFrom::All,
-        }
-    } else {
-        IfFrom::All
-    };
-
-    let dest_uid: Option<u32>;
-    let dest_gid: Option<u32>;
-    if let Some(file) = matches.value_of(options::REFERENCE) {
-        let meta = fs::metadata(&file)
-            .map_err_context(|| format!("failed to get attributes of {}", file.quote()))?;
-        dest_gid = Some(meta.gid());
-        dest_uid = Some(meta.uid());
-    } else {
-        let (u, g) = parse_spec(matches.value_of(options::ARG_OWNER).unwrap(), ':')?;
-        dest_uid = u;
-        dest_gid = g;
-    }
-    Ok((dest_gid, dest_uid, filter))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = get_usage();
-
-    chown_base(
-        uu_app().override_usage(&usage[..]),
-        args,
-        options::ARG_OWNER,
-        parse_gid_uid_and_filter,
-        false,
-    )
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::verbosity::CHANGES)
-                .short('c')
-                .long(options::verbosity::CHANGES)
-                .help("like verbose but report only when a change is made"),
-        )
-        .arg(
-            Arg::new(options::dereference::DEREFERENCE)
-                .long(options::dereference::DEREFERENCE)
-                .help(
-                    "affect the referent of each symbolic link (this is the default), \
-                    rather than the symbolic link itself",
-                ),
-        )
-        .arg(
-            Arg::new(options::dereference::NO_DEREFERENCE)
-                .short('h')
-                .long(options::dereference::NO_DEREFERENCE)
-                .help(
-                    "affect symbolic links instead of any referenced file \
-                    (useful only on systems that can change the ownership of a symlink)",
-                ),
-        )
-        .arg(
-            Arg::new(options::FROM)
-                .long(options::FROM)
-                .help(
-                    "change the owner and/or group of each file only if its \
-                    current owner and/or group match those specified here. \
-                    Either may be omitted, in which case a match is not required \
-                    for the omitted attribute",
-                )
-                .value_name("CURRENT_OWNER:CURRENT_GROUP"),
-        )
-        .arg(
-            Arg::new(options::preserve_root::PRESERVE)
-                .long(options::preserve_root::PRESERVE)
-                .help("fail to operate recursively on '/'"),
-        )
-        .arg(
-            Arg::new(options::preserve_root::NO_PRESERVE)
-                .long(options::preserve_root::NO_PRESERVE)
-                .help("do not treat '/' specially (the default)"),
-        )
-        .arg(
-            Arg::new(options::verbosity::QUIET)
-                .long(options::verbosity::QUIET)
-                .help("suppress most error messages"),
-        )
-        .arg(
-            Arg::new(options::RECURSIVE)
-                .short('R')
-                .long(options::RECURSIVE)
-                .help("operate on files and directories recursively"),
-        )
-        .arg(
-            Arg::new(options::REFERENCE)
-                .long(options::REFERENCE)
-                .help("use RFILE's owner and group rather than specifying OWNER:GROUP values")
-                .value_name("RFILE")
-                .min_values(1),
-        )
-        .arg(
-            Arg::new(options::verbosity::SILENT)
-                .short('f')
-                .long(options::verbosity::SILENT),
-        )
-        .arg(
-            Arg::new(options::traverse::TRAVERSE)
-                .short(options::traverse::TRAVERSE.chars().next().unwrap())
-                .help("if a command line argument is a symbolic link to a directory, traverse it")
-                .overrides_with_all(&[options::traverse::EVERY, options::traverse::NO_TRAVERSE]),
-        )
-        .arg(
-            Arg::new(options::traverse::EVERY)
-                .short(options::traverse::EVERY.chars().next().unwrap())
-                .help("traverse every symbolic link to a directory encountered")
-                .overrides_with_all(&[options::traverse::TRAVERSE, options::traverse::NO_TRAVERSE]),
-        )
-        .arg(
-            Arg::new(options::traverse::NO_TRAVERSE)
-                .short(options::traverse::NO_TRAVERSE.chars().next().unwrap())
-                .help("do not traverse any symbolic links (default)")
-                .overrides_with_all(&[options::traverse::TRAVERSE, options::traverse::EVERY]),
-        )
-        .arg(
-            Arg::new(options::verbosity::VERBOSE)
-                .long(options::verbosity::VERBOSE)
-                .short('v')
-                .help("output a diagnostic for every file processed"),
-        )
-}
-
-/// Parse the username and groupname
-///
-/// In theory, it should be username:groupname
-/// but ...
-/// it can user.name:groupname
-/// or username.groupname
-///
-/// # Arguments
-///
-/// * `spec` - The input from the user
-/// * `sep` - Should be ':' or '.'
-fn parse_spec(spec: &str, sep: char) -> UResult<(Option<u32>, Option<u32>)> {
-    assert!(['.', ':'].contains(&sep));
-    let mut args = spec.splitn(2, sep);
-    let user = args.next().unwrap_or("");
-    let group = args.next().unwrap_or("");
-
-    let uid = if !user.is_empty() {
-        Some(match Passwd::locate(user) {
-            Ok(u) => u.uid, // We have been able to get the uid
-            Err(_) =>
-            // we have NOT been able to find the uid
-            // but we could be in the case where we have user.group
-            {
-                if spec.contains('.') && !spec.contains(':') && sep == ':' {
-                    // but the input contains a '.' but not a ':'
-                    // we might have something like username.groupname
-                    // So, try to parse it this way
-                    return parse_spec(spec, '.');
-                } else {
-                    return Err(USimpleError::new(
-                        1,
-                        format!("invalid user: {}", spec.quote()),
-                    ));
-                }
-            }
-        })
-    } else {
-        None
-    };
-    let gid = if !group.is_empty() {
-        Some(
-            Group::locate(group)
-                .map_err(|_| USimpleError::new(1, format!("invalid group: {}", spec.quote())))?
-                .gid,
-        )
-    } else {
-        None
-    };
-    Ok((uid, gid))
-}
-
-#[cfg(test)]
-mod test {
-    use super::*;
-
-    #[test]
-    fn test_parse_spec() {
-        assert!(matches!(parse_spec(":", ':'), Ok((None, None))));
-        assert!(matches!(parse_spec(".", ':'), Ok((None, None))));
-        assert!(matches!(parse_spec(".", '.'), Ok((None, None))));
-        assert!(format!("{}", parse_spec("::", ':').err().unwrap()).starts_with("invalid group: "));
-        assert!(format!("{}", parse_spec("..", ':').err().unwrap()).starts_with("invalid group: "));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chroot/chroot.rs.html b/src/uu_chroot/chroot.rs.html deleted file mode 100644 index 9640b273a..000000000 --- a/src/uu_chroot/chroot.rs.html +++ /dev/null @@ -1,486 +0,0 @@ -chroot.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-
// This file is part of the uutils coreutils package.
-//
-// (c) Vsevolod Velichko <torkvemada@sorokdva.net>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) NEWROOT Userspec pstatus
-mod error;
-
-use crate::error::ChrootError;
-use clap::{crate_version, App, Arg};
-use std::ffi::CString;
-use std::io::Error;
-use std::path::Path;
-use std::process::Command;
-use uucore::error::{set_exit_code, UResult};
-use uucore::libc::{self, chroot, setgid, setgroups, setuid};
-use uucore::{entries, InvalidEncodingHandling};
-
-static ABOUT: &str = "Run COMMAND with root directory set to NEWROOT.";
-static SYNTAX: &str = "[OPTION]... NEWROOT [COMMAND [ARG]...]";
-
-mod options {
-    pub const NEWROOT: &str = "newroot";
-    pub const USER: &str = "user";
-    pub const GROUP: &str = "group";
-    pub const GROUPS: &str = "groups";
-    pub const USERSPEC: &str = "userspec";
-    pub const COMMAND: &str = "command";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let default_shell: &'static str = "/bin/sh";
-    let default_option: &'static str = "-i";
-    let user_shell = std::env::var("SHELL");
-
-    let newroot: &Path = match matches.value_of(options::NEWROOT) {
-        Some(v) => Path::new(v),
-        None => return Err(ChrootError::MissingNewRoot.into()),
-    };
-
-    if !newroot.is_dir() {
-        return Err(ChrootError::NoSuchDirectory(format!("{}", newroot.display())).into());
-    }
-
-    let commands = match matches.values_of(options::COMMAND) {
-        Some(v) => v.collect(),
-        None => vec![],
-    };
-
-    // TODO: refactor the args and command matching
-    // See: https://github.com/uutils/coreutils/pull/2365#discussion_r647849967
-    let command: Vec<&str> = match commands.len() {
-        0 => {
-            let shell: &str = match user_shell {
-                Err(_) => default_shell,
-                Ok(ref s) => s.as_ref(),
-            };
-            vec![shell, default_option]
-        }
-        _ => commands,
-    };
-
-    assert!(!command.is_empty());
-    let chroot_command = command[0];
-    let chroot_args = &command[1..];
-
-    // NOTE: Tests can only trigger code beyond this point if they're invoked with root permissions
-    set_context(newroot, &matches)?;
-
-    let pstatus = match Command::new(chroot_command).args(chroot_args).status() {
-        Ok(status) => status,
-        Err(e) => return Err(ChrootError::CommandFailed(command[0].to_string(), e).into()),
-    };
-
-    let code = if pstatus.success() {
-        0
-    } else {
-        pstatus.code().unwrap_or(-1)
-    };
-    set_exit_code(code);
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .override_usage(SYNTAX)
-        .arg(
-            Arg::new(options::NEWROOT)
-                .hide(true)
-                .required(true)
-                .index(1),
-        )
-        .arg(
-            Arg::new(options::USER)
-                .short('u')
-                .long(options::USER)
-                .help("User (ID or name) to switch before running the program")
-                .value_name("USER"),
-        )
-        .arg(
-            Arg::new(options::GROUP)
-                .short('g')
-                .long(options::GROUP)
-                .help("Group (ID or name) to switch to")
-                .value_name("GROUP"),
-        )
-        .arg(
-            Arg::new(options::GROUPS)
-                .short('G')
-                .long(options::GROUPS)
-                .help("Comma-separated list of groups to switch to")
-                .value_name("GROUP1,GROUP2..."),
-        )
-        .arg(
-            Arg::new(options::USERSPEC)
-                .long(options::USERSPEC)
-                .help(
-                    "Colon-separated user and group to switch to. \
-                     Same as -u USER -g GROUP. \
-                     Userspec has higher preference than -u and/or -g",
-                )
-                .value_name("USER:GROUP"),
-        )
-        .arg(
-            Arg::new(options::COMMAND)
-                .hide(true)
-                .multiple_occurrences(true)
-                .index(2),
-        )
-}
-
-fn set_context(root: &Path, options: &clap::ArgMatches) -> UResult<()> {
-    let userspec_str = options.value_of(options::USERSPEC);
-    let user_str = options.value_of(options::USER).unwrap_or_default();
-    let group_str = options.value_of(options::GROUP).unwrap_or_default();
-    let groups_str = options.value_of(options::GROUPS).unwrap_or_default();
-    let userspec = match userspec_str {
-        Some(u) => {
-            let s: Vec<&str> = u.split(':').collect();
-            if s.len() != 2 || s.iter().any(|&spec| spec.is_empty()) {
-                return Err(ChrootError::InvalidUserspec(u.to_string()).into());
-            };
-            s
-        }
-        None => Vec::new(),
-    };
-
-    let (user, group) = if userspec.is_empty() {
-        (user_str, group_str)
-    } else {
-        (userspec[0], userspec[1])
-    };
-
-    enter_chroot(root)?;
-
-    set_groups_from_str(groups_str)?;
-    set_main_group(group)?;
-    set_user(user)?;
-    Ok(())
-}
-
-fn enter_chroot(root: &Path) -> UResult<()> {
-    std::env::set_current_dir(root).unwrap();
-    let err = unsafe {
-        chroot(CString::new(".").unwrap().as_bytes_with_nul().as_ptr() as *const libc::c_char)
-    };
-    if err == 0 {
-        Ok(())
-    } else {
-        Err(ChrootError::CannotEnter(format!("{}", root.display()), Error::last_os_error()).into())
-    }
-}
-
-fn set_main_group(group: &str) -> UResult<()> {
-    if !group.is_empty() {
-        let group_id = match entries::grp2gid(group) {
-            Ok(g) => g,
-            _ => return Err(ChrootError::NoSuchGroup(group.to_string()).into()),
-        };
-        let err = unsafe { setgid(group_id) };
-        if err != 0 {
-            return Err(
-                ChrootError::SetGidFailed(group_id.to_string(), Error::last_os_error()).into(),
-            );
-        }
-    }
-    Ok(())
-}
-
-#[cfg(any(target_vendor = "apple", target_os = "freebsd"))]
-fn set_groups(groups: Vec<libc::gid_t>) -> libc::c_int {
-    unsafe { setgroups(groups.len() as libc::c_int, groups.as_ptr()) }
-}
-
-#[cfg(target_os = "linux")]
-fn set_groups(groups: Vec<libc::gid_t>) -> libc::c_int {
-    unsafe { setgroups(groups.len() as libc::size_t, groups.as_ptr()) }
-}
-
-fn set_groups_from_str(groups: &str) -> UResult<()> {
-    if !groups.is_empty() {
-        let mut groups_vec = vec![];
-        for group in groups.split(',') {
-            let gid = match entries::grp2gid(group) {
-                Ok(g) => g,
-                Err(_) => return Err(ChrootError::NoSuchGroup(group.to_string()).into()),
-            };
-            groups_vec.push(gid);
-        }
-        let err = set_groups(groups_vec);
-        if err != 0 {
-            return Err(ChrootError::SetGroupsFailed(Error::last_os_error()).into());
-        }
-    }
-    Ok(())
-}
-
-fn set_user(user: &str) -> UResult<()> {
-    if !user.is_empty() {
-        let user_id = entries::usr2uid(user).unwrap();
-        let err = unsafe { setuid(user_id as libc::uid_t) };
-        if err != 0 {
-            return Err(
-                ChrootError::SetUserFailed(user.to_string(), Error::last_os_error()).into(),
-            );
-        }
-    }
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_chroot/error.rs.html b/src/uu_chroot/error.rs.html deleted file mode 100644 index 9e157eeb7..000000000 --- a/src/uu_chroot/error.rs.html +++ /dev/null @@ -1,166 +0,0 @@ -error.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-// spell-checker:ignore NEWROOT Userspec userspec
-//! Errors returned by chroot.
-use std::fmt::Display;
-use std::io::Error;
-use uucore::display::Quotable;
-use uucore::error::UError;
-
-/// Errors that can happen while executing chroot.
-#[derive(Debug)]
-pub enum ChrootError {
-    /// Failed to enter the specified directory.
-    CannotEnter(String, Error),
-
-    /// Failed to execute the specified command.
-    CommandFailed(String, Error),
-
-    /// The given user and group specification was invalid.
-    InvalidUserspec(String),
-
-    /// The new root directory was not given.
-    MissingNewRoot,
-
-    /// Failed to find the specified group.
-    NoSuchGroup(String),
-
-    /// The given directory does not exist.
-    NoSuchDirectory(String),
-
-    /// The call to `setgid()` failed.
-    SetGidFailed(String, Error),
-
-    /// The call to `setgroups()` failed.
-    SetGroupsFailed(Error),
-
-    /// The call to `setuid()` failed.
-    SetUserFailed(String, Error),
-}
-
-impl std::error::Error for ChrootError {}
-
-impl UError for ChrootError {
-    // TODO: Exit status:
-    // 125 if chroot itself fails
-    // 126 if command is found but cannot be invoked
-    // 127 if command cannot be found
-    fn code(&self) -> i32 {
-        1
-    }
-}
-
-impl Display for ChrootError {
-    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
-        match self {
-            ChrootError::CannotEnter(s, e) => write!(f, "cannot chroot to {}: {}", s.quote(), e,),
-            ChrootError::CommandFailed(s, e) => {
-                write!(f, "failed to run command {}: {}", s.to_string().quote(), e,)
-            }
-            ChrootError::InvalidUserspec(s) => write!(f, "invalid userspec: {}", s.quote(),),
-            ChrootError::MissingNewRoot => write!(
-                f,
-                "Missing operand: NEWROOT\nTry '{} --help' for more information.",
-                uucore::execution_phrase(),
-            ),
-            ChrootError::NoSuchGroup(s) => write!(f, "no such group: {}", s.maybe_quote(),),
-            ChrootError::NoSuchDirectory(s) => write!(
-                f,
-                "cannot change root directory to {}: no such directory",
-                s.quote(),
-            ),
-            ChrootError::SetGidFailed(s, e) => write!(f, "cannot set gid to {}: {}", s, e),
-            ChrootError::SetGroupsFailed(e) => write!(f, "cannot set groups: {}", e),
-            ChrootError::SetUserFailed(s, e) => {
-                write!(f, "cannot set user to {}: {}", s.maybe_quote(), e)
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_cksum/cksum.rs.html b/src/uu_cksum/cksum.rs.html deleted file mode 100644 index 16c4b7f89..000000000 --- a/src/uu_cksum/cksum.rs.html +++ /dev/null @@ -1,312 +0,0 @@ -cksum.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-
// This file is part of the uutils coreutils package.
-//
-// (c) Michael Gehring <mg@ebfe.org>
-//
-//  For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) fname
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{self, stdin, BufReader, Read};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-use uucore::show;
-use uucore::InvalidEncodingHandling;
-
-// NOTE: CRC_TABLE_LEN *must* be <= 256 as we cast 0..CRC_TABLE_LEN to u8
-const CRC_TABLE_LEN: usize = 256;
-const CRC_TABLE: [u32; CRC_TABLE_LEN] = generate_crc_table();
-
-const NAME: &str = "cksum";
-const SYNTAX: &str = "[OPTIONS] [FILE]...";
-const SUMMARY: &str = "Print CRC and size for each file";
-
-const fn generate_crc_table() -> [u32; CRC_TABLE_LEN] {
-    let mut table = [0; CRC_TABLE_LEN];
-
-    let mut i = 0;
-    while i < CRC_TABLE_LEN {
-        table[i] = crc_entry(i as u8) as u32;
-
-        i += 1;
-    }
-
-    table
-}
-
-const fn crc_entry(input: u8) -> u32 {
-    let mut crc = (input as u32) << 24;
-
-    let mut i = 0;
-    while i < 8 {
-        let if_condition = crc & 0x8000_0000;
-        let if_body = (crc << 1) ^ 0x04c1_1db7;
-        let else_body = crc << 1;
-
-        // NOTE: i feel like this is easier to understand than emulating an if statement in bitwise
-        //       ops
-        let condition_table = [else_body, if_body];
-
-        crc = condition_table[(if_condition != 0) as usize];
-        i += 1;
-    }
-
-    crc
-}
-
-#[inline]
-fn crc_update(crc: u32, input: u8) -> u32 {
-    (crc << 8) ^ CRC_TABLE[((crc >> 24) as usize ^ input as usize) & 0xFF]
-}
-
-#[inline]
-fn crc_final(mut crc: u32, mut length: usize) -> u32 {
-    while length != 0 {
-        crc = crc_update(crc, length as u8);
-        length >>= 8;
-    }
-
-    !crc
-}
-
-fn init_byte_array() -> Vec<u8> {
-    vec![0; 1024 * 1024]
-}
-
-#[inline]
-fn cksum(fname: &str) -> io::Result<(u32, usize)> {
-    let mut crc = 0u32;
-    let mut size = 0usize;
-
-    let mut rd: Box<dyn Read> = match fname {
-        "-" => Box::new(stdin()),
-        _ => {
-            let p = Path::new(fname);
-
-            // Directories should not give an error, but should be interpreted
-            // as empty files to match GNU semantics.
-            if p.is_dir() {
-                Box::new(BufReader::new(io::empty())) as Box<dyn Read>
-            } else {
-                Box::new(BufReader::new(File::open(p)?)) as Box<dyn Read>
-            }
-        }
-    };
-
-    let mut bytes = init_byte_array();
-    loop {
-        let num_bytes = rd.read(&mut bytes)?;
-        if num_bytes == 0 {
-            return Ok((crc_final(crc, size), size));
-        }
-        for &b in bytes[..num_bytes].iter() {
-            crc = crc_update(crc, b);
-        }
-        size += num_bytes;
-    }
-}
-
-mod options {
-    pub static FILE: &str = "file";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let files: Vec<String> = match matches.values_of(options::FILE) {
-        Some(v) => v.clone().map(|v| v.to_owned()).collect(),
-        None => vec![],
-    };
-
-    if files.is_empty() {
-        let (crc, size) = cksum("-")?;
-        println!("{} {}", crc, size);
-        return Ok(());
-    }
-
-    for fname in &files {
-        match cksum(fname.as_ref()).map_err_context(|| format!("{}", fname.maybe_quote())) {
-            Ok((crc, size)) => println!("{} {} {}", crc, size, fname),
-            Err(err) => show!(err),
-        };
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .about(SUMMARY)
-        .override_usage(SYNTAX)
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_comm/comm.rs.html b/src/uu_comm/comm.rs.html deleted file mode 100644 index 70ba85b4d..000000000 --- a/src/uu_comm/comm.rs.html +++ /dev/null @@ -1,364 +0,0 @@ -comm.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Michael Gehring <mg@ebfe.org>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) delim mkdelim
-
-use std::cmp::Ordering;
-use std::fs::File;
-use std::io::{self, stdin, BufRead, BufReader, Stdin};
-use std::path::Path;
-use uucore::error::FromIo;
-use uucore::error::UResult;
-use uucore::InvalidEncodingHandling;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-
-static ABOUT: &str = "compare two sorted files line by line";
-static LONG_HELP: &str = "";
-
-mod options {
-    pub const COLUMN_1: &str = "1";
-    pub const COLUMN_2: &str = "2";
-    pub const COLUMN_3: &str = "3";
-    pub const DELIMITER: &str = "output-delimiter";
-    pub const DELIMITER_DEFAULT: &str = "\t";
-    pub const FILE_1: &str = "FILE1";
-    pub const FILE_2: &str = "FILE2";
-}
-
-fn usage() -> String {
-    format!("{} [OPTION]... FILE1 FILE2", uucore::execution_phrase())
-}
-
-fn mkdelim(col: usize, opts: &ArgMatches) -> String {
-    let mut s = String::new();
-    let delim = opts.value_of(options::DELIMITER).unwrap();
-
-    if col > 1 && !opts.is_present(options::COLUMN_1) {
-        s.push_str(delim.as_ref());
-    }
-    if col > 2 && !opts.is_present(options::COLUMN_2) {
-        s.push_str(delim.as_ref());
-    }
-
-    s
-}
-
-fn ensure_nl(line: &mut String) {
-    if !line.ends_with('\n') {
-        line.push('\n');
-    }
-}
-
-enum LineReader {
-    Stdin(Stdin),
-    FileIn(BufReader<File>),
-}
-
-impl LineReader {
-    fn read_line(&mut self, buf: &mut String) -> io::Result<usize> {
-        match *self {
-            LineReader::Stdin(ref mut r) => r.read_line(buf),
-            LineReader::FileIn(ref mut r) => r.read_line(buf),
-        }
-    }
-}
-
-fn comm(a: &mut LineReader, b: &mut LineReader, opts: &ArgMatches) {
-    let delim: Vec<String> = (0..4).map(|col| mkdelim(col, opts)).collect();
-
-    let ra = &mut String::new();
-    let mut na = a.read_line(ra);
-    let rb = &mut String::new();
-    let mut nb = b.read_line(rb);
-
-    while na.is_ok() || nb.is_ok() {
-        let ord = match (na.is_ok(), nb.is_ok()) {
-            (false, true) => Ordering::Greater,
-            (true, false) => Ordering::Less,
-            (true, true) => match (&na, &nb) {
-                (&Ok(0), &Ok(0)) => break,
-                (&Ok(0), _) => Ordering::Greater,
-                (_, &Ok(0)) => Ordering::Less,
-                _ => ra.cmp(&rb),
-            },
-            _ => unreachable!(),
-        };
-
-        match ord {
-            Ordering::Less => {
-                if !opts.is_present(options::COLUMN_1) {
-                    ensure_nl(ra);
-                    print!("{}{}", delim[1], ra);
-                }
-                ra.clear();
-                na = a.read_line(ra);
-            }
-            Ordering::Greater => {
-                if !opts.is_present(options::COLUMN_2) {
-                    ensure_nl(rb);
-                    print!("{}{}", delim[2], rb);
-                }
-                rb.clear();
-                nb = b.read_line(rb);
-            }
-            Ordering::Equal => {
-                if !opts.is_present(options::COLUMN_3) {
-                    ensure_nl(ra);
-                    print!("{}{}", delim[3], ra);
-                }
-                ra.clear();
-                rb.clear();
-                na = a.read_line(ra);
-                nb = b.read_line(rb);
-            }
-        }
-    }
-}
-
-fn open_file(name: &str) -> io::Result<LineReader> {
-    match name {
-        "-" => Ok(LineReader::Stdin(stdin())),
-        _ => {
-            let f = File::open(&Path::new(name))?;
-            Ok(LineReader::FileIn(BufReader::new(f)))
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-    let filename1 = matches.value_of(options::FILE_1).unwrap();
-    let filename2 = matches.value_of(options::FILE_2).unwrap();
-    let mut f1 = open_file(filename1).map_err_context(|| filename1.to_string())?;
-    let mut f2 = open_file(filename2).map_err_context(|| filename2.to_string())?;
-
-    comm(&mut f1, &mut f2, &matches);
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::COLUMN_1)
-                .short('1')
-                .help("suppress column 1 (lines unique to FILE1)"),
-        )
-        .arg(
-            Arg::new(options::COLUMN_2)
-                .short('2')
-                .help("suppress column 2 (lines unique to FILE2)"),
-        )
-        .arg(
-            Arg::new(options::COLUMN_3)
-                .short('3')
-                .help("suppress column 3 (lines that appear in both files)"),
-        )
-        .arg(
-            Arg::new(options::DELIMITER)
-                .long(options::DELIMITER)
-                .help("separate columns with STR")
-                .value_name("STR")
-                .default_value(options::DELIMITER_DEFAULT)
-                .hide_default_value(true),
-        )
-        .arg(Arg::new(options::FILE_1).required(true))
-        .arg(Arg::new(options::FILE_2).required(true))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_cp/cp.rs.html b/src/uu_cp/cp.rs.html deleted file mode 100644 index 9e37013fd..000000000 --- a/src/uu_cp/cp.rs.html +++ /dev/null @@ -1,3170 +0,0 @@ -cp.rs - source -
   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-  11
-  12
-  13
-  14
-  15
-  16
-  17
-  18
-  19
-  20
-  21
-  22
-  23
-  24
-  25
-  26
-  27
-  28
-  29
-  30
-  31
-  32
-  33
-  34
-  35
-  36
-  37
-  38
-  39
-  40
-  41
-  42
-  43
-  44
-  45
-  46
-  47
-  48
-  49
-  50
-  51
-  52
-  53
-  54
-  55
-  56
-  57
-  58
-  59
-  60
-  61
-  62
-  63
-  64
-  65
-  66
-  67
-  68
-  69
-  70
-  71
-  72
-  73
-  74
-  75
-  76
-  77
-  78
-  79
-  80
-  81
-  82
-  83
-  84
-  85
-  86
-  87
-  88
-  89
-  90
-  91
-  92
-  93
-  94
-  95
-  96
-  97
-  98
-  99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 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
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-1129
-1130
-1131
-1132
-1133
-1134
-1135
-1136
-1137
-1138
-1139
-1140
-1141
-1142
-1143
-1144
-1145
-1146
-1147
-1148
-1149
-1150
-1151
-1152
-1153
-1154
-1155
-1156
-1157
-1158
-1159
-1160
-1161
-1162
-1163
-1164
-1165
-1166
-1167
-1168
-1169
-1170
-1171
-1172
-1173
-1174
-1175
-1176
-1177
-1178
-1179
-1180
-1181
-1182
-1183
-1184
-1185
-1186
-1187
-1188
-1189
-1190
-1191
-1192
-1193
-1194
-1195
-1196
-1197
-1198
-1199
-1200
-1201
-1202
-1203
-1204
-1205
-1206
-1207
-1208
-1209
-1210
-1211
-1212
-1213
-1214
-1215
-1216
-1217
-1218
-1219
-1220
-1221
-1222
-1223
-1224
-1225
-1226
-1227
-1228
-1229
-1230
-1231
-1232
-1233
-1234
-1235
-1236
-1237
-1238
-1239
-1240
-1241
-1242
-1243
-1244
-1245
-1246
-1247
-1248
-1249
-1250
-1251
-1252
-1253
-1254
-1255
-1256
-1257
-1258
-1259
-1260
-1261
-1262
-1263
-1264
-1265
-1266
-1267
-1268
-1269
-1270
-1271
-1272
-1273
-1274
-1275
-1276
-1277
-1278
-1279
-1280
-1281
-1282
-1283
-1284
-1285
-1286
-1287
-1288
-1289
-1290
-1291
-1292
-1293
-1294
-1295
-1296
-1297
-1298
-1299
-1300
-1301
-1302
-1303
-1304
-1305
-1306
-1307
-1308
-1309
-1310
-1311
-1312
-1313
-1314
-1315
-1316
-1317
-1318
-1319
-1320
-1321
-1322
-1323
-1324
-1325
-1326
-1327
-1328
-1329
-1330
-1331
-1332
-1333
-1334
-1335
-1336
-1337
-1338
-1339
-1340
-1341
-1342
-1343
-1344
-1345
-1346
-1347
-1348
-1349
-1350
-1351
-1352
-1353
-1354
-1355
-1356
-1357
-1358
-1359
-1360
-1361
-1362
-1363
-1364
-1365
-1366
-1367
-1368
-1369
-1370
-1371
-1372
-1373
-1374
-1375
-1376
-1377
-1378
-1379
-1380
-1381
-1382
-1383
-1384
-1385
-1386
-1387
-1388
-1389
-1390
-1391
-1392
-1393
-1394
-1395
-1396
-1397
-1398
-1399
-1400
-1401
-1402
-1403
-1404
-1405
-1406
-1407
-1408
-1409
-1410
-1411
-1412
-1413
-1414
-1415
-1416
-1417
-1418
-1419
-1420
-1421
-1422
-1423
-1424
-1425
-1426
-1427
-1428
-1429
-1430
-1431
-1432
-1433
-1434
-1435
-1436
-1437
-1438
-1439
-1440
-1441
-1442
-1443
-1444
-1445
-1446
-1447
-1448
-1449
-1450
-1451
-1452
-1453
-1454
-1455
-1456
-1457
-1458
-1459
-1460
-1461
-1462
-1463
-1464
-1465
-1466
-1467
-1468
-1469
-1470
-1471
-1472
-1473
-1474
-1475
-1476
-1477
-1478
-1479
-1480
-1481
-1482
-1483
-1484
-1485
-1486
-1487
-1488
-1489
-1490
-1491
-1492
-1493
-1494
-1495
-1496
-1497
-1498
-1499
-1500
-1501
-1502
-1503
-1504
-1505
-1506
-1507
-1508
-1509
-1510
-1511
-1512
-1513
-1514
-1515
-1516
-1517
-1518
-1519
-1520
-1521
-1522
-1523
-1524
-1525
-1526
-1527
-1528
-1529
-1530
-1531
-1532
-1533
-1534
-1535
-1536
-1537
-1538
-1539
-1540
-1541
-1542
-1543
-1544
-1545
-1546
-1547
-1548
-1549
-1550
-1551
-1552
-1553
-1554
-1555
-1556
-1557
-1558
-1559
-1560
-1561
-1562
-1563
-1564
-1565
-1566
-1567
-1568
-1569
-1570
-1571
-1572
-1573
-1574
-1575
-1576
-1577
-1578
-1579
-1580
-1581
-1582
-1583
-
#![allow(clippy::missing_safety_doc)]
-
-// This file is part of the uutils coreutils package.
-//
-// (c) Jordy Dickinson <jordy.dickinson@gmail.com>
-// (c) Joshua S. Miller <jsmiller@uchicago.edu>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) ficlone linkgs lstat nlink nlinks pathbuf reflink strs xattrs symlinked
-
-#[cfg(target_os = "linux")]
-#[macro_use]
-extern crate ioctl_sys;
-#[macro_use]
-extern crate quick_error;
-#[macro_use]
-extern crate uucore;
-
-use uucore::display::Quotable;
-use uucore::fs::FileInformation;
-#[cfg(windows)]
-use winapi::um::fileapi::CreateFileW;
-#[cfg(windows)]
-use winapi::um::fileapi::GetFileInformationByHandle;
-
-use std::borrow::Cow;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use filetime::FileTime;
-use quick_error::ResultExt;
-use std::collections::HashSet;
-use std::env;
-#[cfg(not(windows))]
-use std::ffi::CString;
-#[cfg(windows)]
-use std::ffi::OsStr;
-use std::fs;
-use std::fs::File;
-use std::fs::OpenOptions;
-use std::io;
-use std::io::{stdin, stdout, Write};
-use std::mem;
-#[cfg(target_os = "linux")]
-use std::os::unix::io::AsRawFd;
-#[cfg(windows)]
-use std::os::windows::ffi::OsStrExt;
-use std::path::{Path, PathBuf, StripPrefixError};
-use std::str::FromStr;
-use std::string::ToString;
-use uucore::backup_control::{self, BackupMode};
-use uucore::error::{set_exit_code, ExitCode, UError, UResult};
-use uucore::fs::{canonicalize, MissingHandling, ResolveMode};
-use walkdir::WalkDir;
-
-#[cfg(unix)]
-use std::os::unix::fs::PermissionsExt;
-
-#[cfg(target_os = "linux")]
-ioctl!(write ficlone with 0x94, 9; std::os::raw::c_int);
-
-quick_error! {
-    #[derive(Debug)]
-    pub enum Error {
-        /// Simple io::Error wrapper
-        IoErr(err: io::Error) { from() cause(err) display("{}", err)}
-
-        /// Wrapper for io::Error with path context
-        IoErrContext(err: io::Error, path: String) {
-            display("{}: {}", path, err)
-            context(path: &'a str, err: io::Error) -> (err, path.to_owned())
-            context(context: String, err: io::Error) -> (err, context)
-            cause(err)
-        }
-
-        /// General copy error
-        Error(err: String) {
-            display("{}", err)
-            from(err: String) -> (err)
-            from(err: &'static str) -> (err.to_string())
-        }
-
-        /// Represents the state when a non-fatal error has occurred
-        /// and not all files were copied.
-        NotAllFilesCopied {}
-
-        /// Simple walkdir::Error wrapper
-        WalkDirErr(err: walkdir::Error) { from() display("{}", err) cause(err) }
-
-        /// Simple std::path::StripPrefixError wrapper
-        StripPrefixError(err: StripPrefixError) { from() }
-
-        /// Result of a skipped file
-        Skipped(reason: String) { display("{}", reason) }
-
-        /// Result of a skipped file
-        InvalidArgument(description: String) { display("{}", description) }
-
-        /// All standard options are included as an an implementation
-        /// path, but those that are not implemented yet should return
-        /// a NotImplemented error.
-        NotImplemented(opt: String) { display("Option '{}' not yet implemented.", opt) }
-
-        /// Invalid arguments to backup
-        Backup(description: String) { display("{}\nTry '{} --help' for more information.", description, uucore::execution_phrase()) }
-    }
-}
-
-impl UError for Error {
-    fn code(&self) -> i32 {
-        EXIT_ERR
-    }
-}
-
-/// Continue next iteration of loop if result of expression is error
-macro_rules! or_continue(
-    ($expr:expr) => (match $expr {
-        Ok(temp) => temp,
-        Err(error) => {
-            show_error!("{}", error);
-            continue
-        },
-    })
-);
-
-/// Prompts the user yes/no and returns `true` if they successfully
-/// answered yes.
-macro_rules! prompt_yes(
-    ($($args:tt)+) => ({
-        print!($($args)+);
-        print!(" [y/N]: ");
-        crash_if_err!(1, stdout().flush());
-        let mut s = String::new();
-        match stdin().read_line(&mut s) {
-            Ok(_) => match s.char_indices().next() {
-                Some((_, x)) => x == 'y' || x == 'Y',
-                _ => false
-            },
-            _ => false
-        }
-    })
-);
-
-pub type CopyResult<T> = Result<T, Error>;
-pub type Source = PathBuf;
-pub type SourceSlice = Path;
-pub type Target = PathBuf;
-pub type TargetSlice = Path;
-
-/// Specifies whether when overwrite files
-#[derive(Clone, Eq, PartialEq)]
-pub enum ClobberMode {
-    Force,
-    RemoveDestination,
-    Standard,
-}
-
-/// Specifies whether when overwrite files
-#[derive(Clone, Eq, PartialEq)]
-pub enum OverwriteMode {
-    /// [Default] Always overwrite existing files
-    Clobber(ClobberMode),
-    /// Prompt before overwriting a file
-    Interactive(ClobberMode),
-    /// Never overwrite a file
-    NoClobber,
-}
-
-/// Possible arguments for `--reflink`.
-#[derive(Copy, Clone, Eq, PartialEq)]
-pub enum ReflinkMode {
-    Always,
-    Auto,
-    Never,
-}
-
-/// Specifies the expected file type of copy target
-pub enum TargetType {
-    Directory,
-    File,
-}
-
-pub enum CopyMode {
-    Link,
-    SymLink,
-    Sparse,
-    Copy,
-    Update,
-    AttrOnly,
-}
-
-// The ordering here determines the order in which attributes are (re-)applied.
-// In particular, Ownership must be changed first to avoid interfering with mode change.
-#[derive(Clone, Eq, PartialEq, Debug, PartialOrd, Ord)]
-pub enum Attribute {
-    #[cfg(unix)]
-    Ownership,
-    Mode,
-    Timestamps,
-    #[cfg(feature = "feat_selinux")]
-    Context,
-    Links,
-    Xattr,
-}
-
-/// Re-usable, extensible copy options
-#[allow(dead_code)]
-pub struct Options {
-    attributes_only: bool,
-    backup: BackupMode,
-    copy_contents: bool,
-    copy_mode: CopyMode,
-    dereference: bool,
-    no_target_dir: bool,
-    one_file_system: bool,
-    overwrite: OverwriteMode,
-    parents: bool,
-    strip_trailing_slashes: bool,
-    reflink_mode: ReflinkMode,
-    preserve_attributes: Vec<Attribute>,
-    recursive: bool,
-    backup_suffix: String,
-    target_dir: Option<String>,
-    update: bool,
-    verbose: bool,
-}
-
-static ABOUT: &str = "Copy SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.";
-static LONG_HELP: &str = "";
-static EXIT_ERR: i32 = 1;
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [-T] SOURCE DEST
-    {0} [OPTION]... SOURCE... DIRECTORY
-    {0} [OPTION]... -t DIRECTORY SOURCE...",
-        uucore::execution_phrase()
-    )
-}
-
-// Argument constants
-mod options {
-    pub const ARCHIVE: &str = "archive";
-    pub const ATTRIBUTES_ONLY: &str = "attributes-only";
-    pub const CLI_SYMBOLIC_LINKS: &str = "cli-symbolic-links";
-    pub const CONTEXT: &str = "context";
-    pub const COPY_CONTENTS: &str = "copy-contents";
-    pub const DEREFERENCE: &str = "dereference";
-    pub const FORCE: &str = "force";
-    pub const INTERACTIVE: &str = "interactive";
-    pub const LINK: &str = "link";
-    pub const NO_CLOBBER: &str = "no-clobber";
-    pub const NO_DEREFERENCE: &str = "no-dereference";
-    pub const NO_DEREFERENCE_PRESERVE_LINKS: &str = "no-dereference-preserve-links";
-    pub const NO_PRESERVE: &str = "no-preserve";
-    pub const NO_TARGET_DIRECTORY: &str = "no-target-directory";
-    pub const ONE_FILE_SYSTEM: &str = "one-file-system";
-    pub const PARENT: &str = "parent";
-    pub const PARENTS: &str = "parents";
-    pub const PATHS: &str = "paths";
-    pub const PRESERVE: &str = "preserve";
-    pub const PRESERVE_DEFAULT_ATTRIBUTES: &str = "preserve-default-attributes";
-    pub const RECURSIVE: &str = "recursive";
-    pub const RECURSIVE_ALIAS: &str = "recursive_alias";
-    pub const REFLINK: &str = "reflink";
-    pub const REMOVE_DESTINATION: &str = "remove-destination";
-    pub const SPARSE: &str = "sparse";
-    pub const STRIP_TRAILING_SLASHES: &str = "strip-trailing-slashes";
-    pub const SYMBOLIC_LINK: &str = "symbolic-link";
-    pub const TARGET_DIRECTORY: &str = "target-directory";
-    pub const UPDATE: &str = "update";
-    pub const VERBOSE: &str = "verbose";
-}
-
-#[cfg(unix)]
-static PRESERVABLE_ATTRIBUTES: &[&str] = &[
-    "mode",
-    "ownership",
-    "timestamps",
-    #[cfg(feature = "feat_selinux")]
-    "context",
-    "links",
-    "xattr",
-    "all",
-];
-
-#[cfg(not(unix))]
-static PRESERVABLE_ATTRIBUTES: &[&str] =
-    &["mode", "timestamps", "context", "links", "xattr", "all"];
-
-static DEFAULT_ATTRIBUTES: &[Attribute] = &[
-    Attribute::Mode,
-    #[cfg(unix)]
-    Attribute::Ownership,
-    Attribute::Timestamps,
-];
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(Arg::new(options::TARGET_DIRECTORY)
-             .short('t')
-             .conflicts_with(options::NO_TARGET_DIRECTORY)
-             .long(options::TARGET_DIRECTORY)
-             .value_name(options::TARGET_DIRECTORY)
-             .takes_value(true)
-             .help("copy all SOURCE arguments into target-directory"))
-        .arg(Arg::new(options::NO_TARGET_DIRECTORY)
-             .short('T')
-             .long(options::NO_TARGET_DIRECTORY)
-             .conflicts_with(options::TARGET_DIRECTORY)
-             .help("Treat DEST as a regular file and not a directory"))
-        .arg(Arg::new(options::INTERACTIVE)
-             .short('i')
-             .long(options::INTERACTIVE)
-             .conflicts_with(options::NO_CLOBBER)
-             .help("ask before overwriting files"))
-        .arg(Arg::new(options::LINK)
-             .short('l')
-             .long(options::LINK)
-             .overrides_with(options::REFLINK)
-             .help("hard-link files instead of copying"))
-        .arg(Arg::new(options::NO_CLOBBER)
-             .short('n')
-             .long(options::NO_CLOBBER)
-             .conflicts_with(options::INTERACTIVE)
-             .help("don't overwrite a file that already exists"))
-        .arg(Arg::new(options::RECURSIVE)
-             .short('r')
-             .long(options::RECURSIVE)
-             // --archive sets this option
-            .help("copy directories recursively"))
-        .arg(Arg::new(options::RECURSIVE_ALIAS)
-             .short('R')
-             .help("same as -r"))
-        .arg(Arg::new(options::STRIP_TRAILING_SLASHES)
-             .long(options::STRIP_TRAILING_SLASHES)
-             .help("remove any trailing slashes from each SOURCE argument"))
-        .arg(Arg::new(options::VERBOSE)
-             .short('v')
-             .long(options::VERBOSE)
-             .help("explicitly state what is being done"))
-        .arg(Arg::new(options::SYMBOLIC_LINK)
-             .short('s')
-             .long(options::SYMBOLIC_LINK)
-             .conflicts_with(options::LINK)
-             .overrides_with(options::REFLINK)
-             .help("make symbolic links instead of copying"))
-        .arg(Arg::new(options::FORCE)
-             .short('f')
-             .long(options::FORCE)
-             .help("if an existing destination file cannot be opened, remove it and \
-                    try again (this option is ignored when the -n option is also used). \
-                    Currently not implemented for Windows."))
-        .arg(Arg::new(options::REMOVE_DESTINATION)
-             .long(options::REMOVE_DESTINATION)
-             .conflicts_with(options::FORCE)
-             .help("remove each existing destination file before attempting to open it \
-                    (contrast with --force). On Windows, current only works for writeable files."))
-        .arg(backup_control::arguments::backup())
-        .arg(backup_control::arguments::backup_no_args())
-        .arg(backup_control::arguments::suffix())
-        .arg(Arg::new(options::UPDATE)
-             .short('u')
-             .long(options::UPDATE)
-             .help("copy only when the SOURCE file is newer than the destination file \
-                    or when the destination file is missing"))
-        .arg(Arg::new(options::REFLINK)
-             .long(options::REFLINK)
-             .takes_value(true)
-             .value_name("WHEN")
-             .help("control clone/CoW copies. See below"))
-        .arg(Arg::new(options::ATTRIBUTES_ONLY)
-             .long(options::ATTRIBUTES_ONLY)
-             .conflicts_with(options::COPY_CONTENTS)
-             .overrides_with(options::REFLINK)
-             .help("Don't copy the file data, just the attributes"))
-        .arg(Arg::new(options::PRESERVE)
-             .long(options::PRESERVE)
-             .takes_value(true)
-             .multiple_occurrences(true)
-             .use_delimiter(true)
-             .possible_values(PRESERVABLE_ATTRIBUTES)
-             .min_values(0)
-             .value_name("ATTR_LIST")
-             .conflicts_with_all(&[options::PRESERVE_DEFAULT_ATTRIBUTES, options::NO_PRESERVE])
-             // -d sets this option
-             // --archive sets this option
-             .help("Preserve the specified attributes (default: mode, ownership (unix only), timestamps), \
-                    if possible additional attributes: context, links, xattr, all"))
-        .arg(Arg::new(options::PRESERVE_DEFAULT_ATTRIBUTES)
-             .short('p')
-             .long(options::PRESERVE_DEFAULT_ATTRIBUTES)
-             .conflicts_with_all(&[options::PRESERVE, options::NO_PRESERVE, options::ARCHIVE])
-             .help("same as --preserve=mode,ownership(unix only),timestamps"))
-        .arg(Arg::new(options::NO_PRESERVE)
-             .long(options::NO_PRESERVE)
-             .takes_value(true)
-             .value_name("ATTR_LIST")
-             .conflicts_with_all(&[options::PRESERVE_DEFAULT_ATTRIBUTES, options::PRESERVE, options::ARCHIVE])
-             .help("don't preserve the specified attributes"))
-        .arg(Arg::new(options::PARENTS)
-            .long(options::PARENTS)
-            .alias(options::PARENT)
-            .help("use full source file name under DIRECTORY"))
-        .arg(Arg::new(options::NO_DEREFERENCE)
-             .short('P')
-             .long(options::NO_DEREFERENCE)
-             .conflicts_with(options::DEREFERENCE)
-             // -d sets this option
-             .help("never follow symbolic links in SOURCE"))
-        .arg(Arg::new(options::DEREFERENCE)
-             .short('L')
-             .long(options::DEREFERENCE)
-             .conflicts_with(options::NO_DEREFERENCE)
-             .help("always follow symbolic links in SOURCE"))
-        .arg(Arg::new(options::ARCHIVE)
-             .short('a')
-             .long(options::ARCHIVE)
-             .conflicts_with_all(&[options::PRESERVE_DEFAULT_ATTRIBUTES, options::PRESERVE, options::NO_PRESERVE])
-             .help("Same as -dR --preserve=all"))
-        .arg(Arg::new(options::NO_DEREFERENCE_PRESERVE_LINKS)
-             .short('d')
-             .help("same as --no-dereference --preserve=links"))
-        .arg(Arg::new(options::ONE_FILE_SYSTEM)
-             .short('x')
-             .long(options::ONE_FILE_SYSTEM)
-             .help("stay on this file system"))
-
-        // TODO: implement the following args
-        .arg(Arg::new(options::COPY_CONTENTS)
-             .long(options::COPY_CONTENTS)
-             .conflicts_with(options::ATTRIBUTES_ONLY)
-             .help("NotImplemented: copy contents of special files when recursive"))
-        .arg(Arg::new(options::SPARSE)
-             .long(options::SPARSE)
-             .takes_value(true)
-             .value_name("WHEN")
-             .help("NotImplemented: control creation of sparse files. See below"))
-        .arg(Arg::new(options::CONTEXT)
-             .long(options::CONTEXT)
-             .takes_value(true)
-             .value_name("CTX")
-             .help("NotImplemented: set SELinux security context of destination file to default type"))
-        .arg(Arg::new(options::CLI_SYMBOLIC_LINKS)
-             .short('H')
-             .help("NotImplemented: follow command-line symbolic links in SOURCE"))
-        // END TODO
-
-        .arg(Arg::new(options::PATHS)
-             .multiple_occurrences(true))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app()
-        .after_help(&*format!(
-            "{}\n{}",
-            LONG_HELP,
-            backup_control::BACKUP_CONTROL_LONG_HELP
-        ))
-        .override_usage(&usage[..])
-        .get_matches_from(args);
-
-    let options = Options::from_matches(&matches)?;
-
-    if options.overwrite == OverwriteMode::NoClobber && options.backup != BackupMode::NoBackup {
-        show_usage_error!("options --backup and --no-clobber are mutually exclusive");
-        return Err(ExitCode(EXIT_ERR).into());
-    }
-
-    let paths: Vec<String> = matches
-        .values_of(options::PATHS)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let (sources, target) = parse_path_args(&paths, &options)?;
-
-    if let Err(error) = copy(&sources, &target, &options) {
-        match error {
-            // Error::NotAllFilesCopied is non-fatal, but the error
-            // code should still be EXIT_ERR as does GNU cp
-            Error::NotAllFilesCopied => {}
-            // Else we caught a fatal bubbled-up error, log it to stderr
-            _ => show_error!("{}", error),
-        };
-        set_exit_code(EXIT_ERR);
-    }
-
-    Ok(())
-}
-
-impl ClobberMode {
-    fn from_matches(matches: &ArgMatches) -> ClobberMode {
-        if matches.is_present(options::FORCE) {
-            ClobberMode::Force
-        } else if matches.is_present(options::REMOVE_DESTINATION) {
-            ClobberMode::RemoveDestination
-        } else {
-            ClobberMode::Standard
-        }
-    }
-}
-
-impl OverwriteMode {
-    fn from_matches(matches: &ArgMatches) -> OverwriteMode {
-        if matches.is_present(options::INTERACTIVE) {
-            OverwriteMode::Interactive(ClobberMode::from_matches(matches))
-        } else if matches.is_present(options::NO_CLOBBER) {
-            OverwriteMode::NoClobber
-        } else {
-            OverwriteMode::Clobber(ClobberMode::from_matches(matches))
-        }
-    }
-}
-
-impl CopyMode {
-    fn from_matches(matches: &ArgMatches) -> CopyMode {
-        if matches.is_present(options::LINK) {
-            CopyMode::Link
-        } else if matches.is_present(options::SYMBOLIC_LINK) {
-            CopyMode::SymLink
-        } else if matches.is_present(options::SPARSE) {
-            CopyMode::Sparse
-        } else if matches.is_present(options::UPDATE) {
-            CopyMode::Update
-        } else if matches.is_present(options::ATTRIBUTES_ONLY) {
-            CopyMode::AttrOnly
-        } else {
-            CopyMode::Copy
-        }
-    }
-}
-
-impl FromStr for Attribute {
-    type Err = Error;
-
-    fn from_str(value: &str) -> CopyResult<Attribute> {
-        Ok(match &*value.to_lowercase() {
-            "mode" => Attribute::Mode,
-            #[cfg(unix)]
-            "ownership" => Attribute::Ownership,
-            "timestamps" => Attribute::Timestamps,
-            #[cfg(feature = "feat_selinux")]
-            "context" => Attribute::Context,
-            "links" => Attribute::Links,
-            "xattr" => Attribute::Xattr,
-            _ => {
-                return Err(Error::InvalidArgument(format!(
-                    "invalid attribute {}",
-                    value.quote()
-                )));
-            }
-        })
-    }
-}
-
-fn add_all_attributes() -> Vec<Attribute> {
-    use Attribute::*;
-
-    let attr = vec![
-        #[cfg(unix)]
-        Ownership,
-        Mode,
-        Timestamps,
-        #[cfg(feature = "feat_selinux")]
-        Context,
-        Links,
-        Xattr,
-    ];
-
-    attr
-}
-
-impl Options {
-    fn from_matches(matches: &ArgMatches) -> CopyResult<Options> {
-        let not_implemented_opts = vec![
-            options::COPY_CONTENTS,
-            options::SPARSE,
-            #[cfg(not(any(windows, unix)))]
-            options::ONE_FILE_SYSTEM,
-            options::CONTEXT,
-            #[cfg(windows)]
-            options::FORCE,
-        ];
-
-        for not_implemented_opt in not_implemented_opts {
-            if matches.is_present(not_implemented_opt) {
-                return Err(Error::NotImplemented(not_implemented_opt.to_string()));
-            }
-        }
-
-        let recursive = matches.is_present(options::RECURSIVE)
-            || matches.is_present(options::RECURSIVE_ALIAS)
-            || matches.is_present(options::ARCHIVE);
-
-        let backup_mode = match backup_control::determine_backup_mode(matches) {
-            Err(e) => return Err(Error::Backup(format!("{}", e))),
-            Ok(mode) => mode,
-        };
-
-        let backup_suffix = backup_control::determine_backup_suffix(matches);
-
-        let overwrite = OverwriteMode::from_matches(matches);
-
-        // Parse target directory options
-        let no_target_dir = matches.is_present(options::NO_TARGET_DIRECTORY);
-        let target_dir = matches
-            .value_of(options::TARGET_DIRECTORY)
-            .map(ToString::to_string);
-
-        // Parse attributes to preserve
-        let mut preserve_attributes: Vec<Attribute> = if matches.is_present(options::PRESERVE) {
-            match matches.values_of(options::PRESERVE) {
-                None => DEFAULT_ATTRIBUTES.to_vec(),
-                Some(attribute_strs) => {
-                    let mut attributes = Vec::new();
-                    for attribute_str in attribute_strs {
-                        if attribute_str == "all" {
-                            attributes = add_all_attributes();
-                            break;
-                        } else {
-                            attributes.push(Attribute::from_str(attribute_str)?);
-                        }
-                    }
-                    attributes
-                }
-            }
-        } else if matches.is_present(options::ARCHIVE) {
-            // --archive is used. Same as --preserve=all
-            add_all_attributes()
-        } else if matches.is_present(options::NO_DEREFERENCE_PRESERVE_LINKS) {
-            vec![Attribute::Links]
-        } else if matches.is_present(options::PRESERVE_DEFAULT_ATTRIBUTES) {
-            DEFAULT_ATTRIBUTES.to_vec()
-        } else {
-            vec![]
-        };
-
-        // Make sure ownership is changed before other attributes,
-        // as chown clears some of the permission and therefore could undo previous changes
-        // if not executed first.
-        preserve_attributes.sort_unstable();
-
-        let options = Options {
-            attributes_only: matches.is_present(options::ATTRIBUTES_ONLY),
-            copy_contents: matches.is_present(options::COPY_CONTENTS),
-            copy_mode: CopyMode::from_matches(matches),
-            // No dereference is set with -p, -d and --archive
-            dereference: !(matches.is_present(options::NO_DEREFERENCE)
-                || matches.is_present(options::NO_DEREFERENCE_PRESERVE_LINKS)
-                || matches.is_present(options::ARCHIVE)
-                || recursive)
-                || matches.is_present(options::DEREFERENCE),
-            one_file_system: matches.is_present(options::ONE_FILE_SYSTEM),
-            parents: matches.is_present(options::PARENTS),
-            update: matches.is_present(options::UPDATE),
-            verbose: matches.is_present(options::VERBOSE),
-            strip_trailing_slashes: matches.is_present(options::STRIP_TRAILING_SLASHES),
-            reflink_mode: {
-                if let Some(reflink) = matches.value_of(options::REFLINK) {
-                    match reflink {
-                        "always" => ReflinkMode::Always,
-                        "auto" => ReflinkMode::Auto,
-                        "never" => ReflinkMode::Never,
-                        value => {
-                            return Err(Error::InvalidArgument(format!(
-                                "invalid argument {} for \'reflink\'",
-                                value.quote()
-                            )));
-                        }
-                    }
-                } else {
-                    #[cfg(any(target_os = "linux", target_os = "macos"))]
-                    {
-                        ReflinkMode::Auto
-                    }
-                    #[cfg(not(any(target_os = "linux", target_os = "macos")))]
-                    {
-                        ReflinkMode::Never
-                    }
-                }
-            },
-            backup: backup_mode,
-            backup_suffix,
-            overwrite,
-            no_target_dir,
-            preserve_attributes,
-            recursive,
-            target_dir,
-        };
-
-        Ok(options)
-    }
-}
-
-impl TargetType {
-    /// Return TargetType required for `target`.
-    ///
-    /// Treat target as a dir if we have multiple sources or the target
-    /// exists and already is a directory
-    fn determine(sources: &[Source], target: &TargetSlice) -> TargetType {
-        if sources.len() > 1 || target.is_dir() {
-            TargetType::Directory
-        } else {
-            TargetType::File
-        }
-    }
-}
-
-/// Returns tuple of (Source paths, Target)
-fn parse_path_args(path_args: &[String], options: &Options) -> CopyResult<(Vec<Source>, Target)> {
-    let mut paths = path_args.iter().map(PathBuf::from).collect::<Vec<_>>();
-
-    if paths.is_empty() {
-        // No files specified
-        return Err("missing file operand".into());
-    }
-
-    // Return an error if the user requested to copy more than one
-    // file source to a file target
-    if options.no_target_dir && options.target_dir.is_none() && paths.len() > 2 {
-        return Err(format!("extra operand {:?}", paths[2]).into());
-    }
-
-    let target = match options.target_dir {
-        Some(ref target) => {
-            // All path args are sources, and the target dir was
-            // specified separately
-            PathBuf::from(target)
-        }
-        None => {
-            // If there was no explicit target-dir, then use the last
-            // path_arg
-            paths.pop().unwrap()
-        }
-    };
-
-    if options.strip_trailing_slashes {
-        for source in paths.iter_mut() {
-            *source = source.components().as_path().to_owned()
-        }
-    }
-
-    Ok((paths, target))
-}
-
-fn preserve_hardlinks(
-    hard_links: &mut Vec<(String, u64)>,
-    source: &std::path::Path,
-    dest: std::path::PathBuf,
-    found_hard_link: &mut bool,
-) -> CopyResult<()> {
-    // Redox does not currently support hard links
-    #[cfg(not(target_os = "redox"))]
-    {
-        if !source.is_dir() {
-            unsafe {
-                let inode: u64;
-                let nlinks: u64;
-                #[cfg(unix)]
-                {
-                    let src_path = CString::new(source.as_os_str().to_str().unwrap()).unwrap();
-                    let mut stat = mem::zeroed();
-                    if libc::lstat(src_path.as_ptr(), &mut stat) < 0 {
-                        return Err(format!(
-                            "cannot stat {:?}: {}",
-                            src_path,
-                            std::io::Error::last_os_error()
-                        )
-                        .into());
-                    }
-                    inode = stat.st_ino as u64;
-                    nlinks = stat.st_nlink as u64;
-                }
-                #[cfg(windows)]
-                {
-                    let src_path: Vec<u16> = OsStr::new(source).encode_wide().collect();
-                    #[allow(deprecated)]
-                    let stat = mem::uninitialized();
-                    let handle = CreateFileW(
-                        src_path.as_ptr(),
-                        winapi::um::winnt::GENERIC_READ,
-                        winapi::um::winnt::FILE_SHARE_READ,
-                        std::ptr::null_mut(),
-                        0,
-                        0,
-                        std::ptr::null_mut(),
-                    );
-                    if GetFileInformationByHandle(handle, stat) != 0 {
-                        return Err(format!(
-                            "cannot get file information {:?}: {}",
-                            source,
-                            std::io::Error::last_os_error()
-                        )
-                        .into());
-                    }
-                    inode = ((*stat).nFileIndexHigh as u64) << 32 | (*stat).nFileIndexLow as u64;
-                    nlinks = (*stat).nNumberOfLinks as u64;
-                }
-
-                for hard_link in hard_links.iter() {
-                    if hard_link.1 == inode {
-                        std::fs::hard_link(hard_link.0.clone(), dest.clone()).unwrap();
-                        *found_hard_link = true;
-                    }
-                }
-                if !(*found_hard_link) && nlinks > 1 {
-                    hard_links.push((dest.to_str().unwrap().to_string(), inode));
-                }
-            }
-        }
-    }
-    Ok(())
-}
-
-/// Copy all `sources` to `target`.  Returns an
-/// `Err(Error::NotAllFilesCopied)` if at least one non-fatal error was
-/// encountered.
-///
-/// Behavior depends on `options`, see [`Options`] for details.
-///
-/// [`Options`]: ./struct.Options.html
-fn copy(sources: &[Source], target: &TargetSlice, options: &Options) -> CopyResult<()> {
-    let target_type = TargetType::determine(sources, target);
-    verify_target_type(target, &target_type)?;
-
-    let mut preserve_hard_links = false;
-    for attribute in &options.preserve_attributes {
-        if *attribute == Attribute::Links {
-            preserve_hard_links = true;
-        }
-    }
-
-    let mut hard_links: Vec<(String, u64)> = vec![];
-
-    let mut non_fatal_errors = false;
-    let mut seen_sources = HashSet::with_capacity(sources.len());
-    let mut symlinked_files = HashSet::new();
-    for source in sources {
-        if seen_sources.contains(source) {
-            // FIXME: compare sources by the actual file they point to, not their path. (e.g. dir/file == dir/../dir/file in most cases)
-            show_warning!("source {} specified more than once", source.quote());
-        } else {
-            let mut found_hard_link = false;
-            if preserve_hard_links {
-                let dest = construct_dest_path(source, target, &target_type, options)?;
-                preserve_hardlinks(&mut hard_links, source, dest, &mut found_hard_link).unwrap();
-            }
-            if !found_hard_link {
-                if let Err(error) =
-                    copy_source(source, target, &target_type, options, &mut symlinked_files)
-                {
-                    match error {
-                        // When using --no-clobber, we don't want to show
-                        // an error message
-                        Error::NotAllFilesCopied => (),
-                        Error::Skipped(_) => {
-                            show_error!("{}", error);
-                        }
-                        _ => {
-                            show_error!("{}", error);
-                            non_fatal_errors = true
-                        }
-                    }
-                }
-            }
-            seen_sources.insert(source);
-        }
-    }
-    if non_fatal_errors {
-        Err(Error::NotAllFilesCopied)
-    } else {
-        Ok(())
-    }
-}
-
-fn construct_dest_path(
-    source_path: &Path,
-    target: &TargetSlice,
-    target_type: &TargetType,
-    options: &Options,
-) -> CopyResult<PathBuf> {
-    if options.no_target_dir && target.is_dir() {
-        return Err(format!(
-            "cannot overwrite directory {} with non-directory",
-            target.quote()
-        )
-        .into());
-    }
-
-    if options.parents && !target.is_dir() {
-        return Err("with --parents, the destination must be a directory".into());
-    }
-
-    Ok(match *target_type {
-        TargetType::Directory => {
-            let root = if options.parents {
-                Path::new("")
-            } else {
-                source_path.parent().unwrap_or(source_path)
-            };
-            localize_to_target(root, source_path, target)?
-        }
-        TargetType::File => target.to_path_buf(),
-    })
-}
-
-fn copy_source(
-    source: &SourceSlice,
-    target: &TargetSlice,
-    target_type: &TargetType,
-    options: &Options,
-    symlinked_files: &mut HashSet<FileInformation>,
-) -> CopyResult<()> {
-    let source_path = Path::new(&source);
-    if source_path.is_dir() {
-        // Copy as directory
-        copy_directory(source, target, options, symlinked_files)
-    } else {
-        // Copy as file
-        let dest = construct_dest_path(source_path, target, target_type, options)?;
-        copy_file(source_path, dest.as_path(), options, symlinked_files)
-    }
-}
-
-#[cfg(target_os = "windows")]
-fn adjust_canonicalization(p: &Path) -> Cow<Path> {
-    // In some cases, \\? can be missing on some Windows paths.  Add it at the
-    // beginning unless the path is prefixed with a device namespace.
-    const VERBATIM_PREFIX: &str = r#"\\?"#;
-    const DEVICE_NS_PREFIX: &str = r#"\\."#;
-
-    let has_prefix = p
-        .components()
-        .next()
-        .and_then(|comp| comp.as_os_str().to_str())
-        .map(|p_str| p_str.starts_with(VERBATIM_PREFIX) || p_str.starts_with(DEVICE_NS_PREFIX))
-        .unwrap_or_default();
-
-    if has_prefix {
-        p.into()
-    } else {
-        Path::new(VERBATIM_PREFIX).join(p).into()
-    }
-}
-
-/// Read the contents of the directory `root` and recursively copy the
-/// contents to `target`.
-///
-/// Any errors encountered copying files in the tree will be logged but
-/// will not cause a short-circuit.
-fn copy_directory(
-    root: &Path,
-    target: &TargetSlice,
-    options: &Options,
-    symlinked_files: &mut HashSet<FileInformation>,
-) -> CopyResult<()> {
-    if !options.recursive {
-        return Err(format!("omitting directory {}", root.quote()).into());
-    }
-
-    // if no-dereference is enabled and this is a symlink, copy it as a file
-    if !options.dereference && fs::symlink_metadata(root).unwrap().file_type().is_symlink() {
-        return copy_file(root, target, options, symlinked_files);
-    }
-
-    let current_dir =
-        env::current_dir().unwrap_or_else(|e| crash!(1, "failed to get current directory {}", e));
-
-    let root_path = current_dir.join(root);
-
-    let root_parent = if target.exists() {
-        root_path.parent()
-    } else {
-        Some(root_path.as_path())
-    };
-
-    #[cfg(unix)]
-    let mut hard_links: Vec<(String, u64)> = vec![];
-    let mut preserve_hard_links = false;
-    for attribute in &options.preserve_attributes {
-        if *attribute == Attribute::Links {
-            preserve_hard_links = true;
-        }
-    }
-
-    // This should be changed once Redox supports hardlinks
-    #[cfg(any(windows, target_os = "redox"))]
-    let mut hard_links: Vec<(String, u64)> = vec![];
-
-    for path in WalkDir::new(root)
-        .same_file_system(options.one_file_system)
-        .follow_links(options.dereference)
-    {
-        let p = or_continue!(path);
-        let is_symlink = fs::symlink_metadata(p.path())?.file_type().is_symlink();
-        let path = current_dir.join(&p.path());
-
-        let local_to_root_parent = match root_parent {
-            Some(parent) => {
-                #[cfg(windows)]
-                {
-                    // On Windows, some paths are starting with \\?
-                    // but not always, so, make sure that we are consistent for strip_prefix
-                    // See https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file for more info
-                    let parent_can = adjust_canonicalization(parent);
-                    let path_can = adjust_canonicalization(&path);
-
-                    or_continue!(&path_can.strip_prefix(&parent_can)).to_path_buf()
-                }
-                #[cfg(not(windows))]
-                {
-                    or_continue!(path.strip_prefix(&parent)).to_path_buf()
-                }
-            }
-            None => path.clone(),
-        };
-
-        let local_to_target = target.join(&local_to_root_parent);
-        if is_symlink && !options.dereference {
-            copy_link(&path, &local_to_target, symlinked_files)?;
-        } else if path.is_dir() && !local_to_target.exists() {
-            or_continue!(fs::create_dir_all(local_to_target));
-        } else if !path.is_dir() {
-            if preserve_hard_links {
-                let mut found_hard_link = false;
-                let source = path.to_path_buf();
-                let dest = local_to_target.as_path().to_path_buf();
-                preserve_hardlinks(&mut hard_links, &source, dest, &mut found_hard_link).unwrap();
-                if !found_hard_link {
-                    match copy_file(
-                        path.as_path(),
-                        local_to_target.as_path(),
-                        options,
-                        symlinked_files,
-                    ) {
-                        Ok(_) => Ok(()),
-                        Err(err) => {
-                            if fs::symlink_metadata(&source)?.file_type().is_symlink() {
-                                // silent the error with a symlink
-                                // In case we do --archive, we might copy the symlink
-                                // before the file itself
-                                Ok(())
-                            } else {
-                                Err(err)
-                            }
-                        }
-                    }?;
-                }
-            } else {
-                copy_file(
-                    path.as_path(),
-                    local_to_target.as_path(),
-                    options,
-                    symlinked_files,
-                )?;
-            }
-        }
-    }
-
-    Ok(())
-}
-
-impl OverwriteMode {
-    fn verify(&self, path: &Path) -> CopyResult<()> {
-        match *self {
-            OverwriteMode::NoClobber => Err(Error::NotAllFilesCopied),
-            OverwriteMode::Interactive(_) => {
-                if prompt_yes!("{}: overwrite {}? ", uucore::util_name(), path.quote()) {
-                    Ok(())
-                } else {
-                    Err(Error::Skipped(format!(
-                        "Not overwriting {} at user request",
-                        path.quote()
-                    )))
-                }
-            }
-            OverwriteMode::Clobber(_) => Ok(()),
-        }
-    }
-}
-
-fn copy_attribute(source: &Path, dest: &Path, attribute: &Attribute) -> CopyResult<()> {
-    let context = &*format!("{} -> {}", source.quote(), dest.quote());
-    let source_metadata = fs::symlink_metadata(source).context(context)?;
-    match *attribute {
-        Attribute::Mode => {
-            fs::set_permissions(dest, source_metadata.permissions()).context(context)?;
-            // FIXME: Implement this for windows as well
-            #[cfg(feature = "feat_acl")]
-            exacl::getfacl(source, None)
-                .and_then(|acl| exacl::setfacl(&[dest], &acl, None))
-                .map_err(|err| Error::Error(err.to_string()))?;
-        }
-        #[cfg(unix)]
-        Attribute::Ownership => {
-            use std::os::unix::prelude::MetadataExt;
-            use uucore::perms::wrap_chown;
-            use uucore::perms::Verbosity;
-            use uucore::perms::VerbosityLevel;
-
-            let dest_uid = source_metadata.uid();
-            let dest_gid = source_metadata.gid();
-
-            wrap_chown(
-                dest,
-                &dest.symlink_metadata().context(context)?,
-                Some(dest_uid),
-                Some(dest_gid),
-                false,
-                Verbosity {
-                    groups_only: false,
-                    level: VerbosityLevel::Normal,
-                },
-            )
-            .map_err(Error::Error)?;
-        }
-        Attribute::Timestamps => {
-            filetime::set_file_times(
-                Path::new(dest),
-                FileTime::from_last_access_time(&source_metadata),
-                FileTime::from_last_modification_time(&source_metadata),
-            )?;
-        }
-        #[cfg(feature = "feat_selinux")]
-        Attribute::Context => {
-            let context = selinux::SecurityContext::of_path(source, false, false).map_err(|e| {
-                format!(
-                    "failed to get security context of {}: {}",
-                    source.display(),
-                    e
-                )
-            })?;
-            if let Some(context) = context {
-                context.set_for_path(dest, false, false).map_err(|e| {
-                    format!(
-                        "failed to set security context for {}: {}",
-                        dest.display(),
-                        e
-                    )
-                })?;
-            }
-        }
-        Attribute::Links => {}
-        Attribute::Xattr => {
-            #[cfg(unix)]
-            {
-                let xattrs = xattr::list(source)?;
-                for attr in xattrs {
-                    if let Some(attr_value) = xattr::get(source, attr.clone())? {
-                        xattr::set(dest, attr, &attr_value[..])?;
-                    }
-                }
-            }
-            #[cfg(not(unix))]
-            {
-                return Err("XAttrs are only supported on unix.".to_string().into());
-            }
-        }
-    };
-
-    Ok(())
-}
-
-fn symlink_file(
-    source: &Path,
-    dest: &Path,
-    context: &str,
-    symlinked_files: &mut HashSet<FileInformation>,
-) -> CopyResult<()> {
-    #[cfg(not(windows))]
-    {
-        std::os::unix::fs::symlink(source, dest).context(context)?;
-    }
-    #[cfg(windows)]
-    {
-        std::os::windows::fs::symlink_file(source, dest).context(context)?;
-    }
-    if let Some(file_info) = FileInformation::from_path(dest, false) {
-        symlinked_files.insert(file_info);
-    }
-    Ok(())
-}
-
-fn context_for(src: &Path, dest: &Path) -> String {
-    format!("{} -> {}", src.quote(), dest.quote())
-}
-
-/// Implements a simple backup copy for the destination file.
-/// TODO: for the backup, should this function be replaced by `copy_file(...)`?
-fn backup_dest(dest: &Path, backup_path: &Path) -> CopyResult<PathBuf> {
-    fs::copy(dest, &backup_path)?;
-    Ok(backup_path.into())
-}
-
-fn handle_existing_dest(source: &Path, dest: &Path, options: &Options) -> CopyResult<()> {
-    if paths_refer_to_same_file(source, dest)? {
-        return Err(format!("{}: same file", context_for(source, dest)).into());
-    }
-
-    options.overwrite.verify(dest)?;
-
-    let backup_path = backup_control::get_backup_path(options.backup, dest, &options.backup_suffix);
-    if let Some(backup_path) = backup_path {
-        backup_dest(dest, &backup_path)?;
-    }
-
-    match options.overwrite {
-        // FIXME: print that the file was removed if --verbose is enabled
-        OverwriteMode::Clobber(ClobberMode::Force) => {
-            if fs::metadata(dest)?.permissions().readonly() {
-                fs::remove_file(dest)?;
-            }
-        }
-        OverwriteMode::Clobber(ClobberMode::RemoveDestination) => {
-            fs::remove_file(dest)?;
-        }
-        _ => (),
-    };
-
-    Ok(())
-}
-
-/// Copy the a file from `source` to `dest`. `source` will be dereferenced if
-/// `options.dereference` is set to true. `dest` will always be dereferenced.
-///
-/// Behavior when copying to existing files is contingent on the
-/// `options.overwrite` mode. If a file is skipped, the return type
-/// should be `Error:Skipped`
-///
-/// The original permissions of `source` will be copied to `dest`
-/// after a successful copy.
-fn copy_file(
-    source: &Path,
-    dest: &Path,
-    options: &Options,
-    symlinked_files: &mut HashSet<FileInformation>,
-) -> CopyResult<()> {
-    if dest.exists() {
-        handle_existing_dest(source, dest, options)?;
-    }
-
-    // Fail if dest is a dangling symlink or a symlink this program created previously
-    if fs::symlink_metadata(dest)
-        .map(|m| m.file_type().is_symlink())
-        .unwrap_or(false)
-    {
-        if FileInformation::from_path(dest, false)
-            .map(|info| symlinked_files.contains(&info))
-            .unwrap_or(false)
-        {
-            return Err(Error::Error(format!(
-                "will not copy '{}' through just-created symlink '{}'",
-                source.display(),
-                dest.display()
-            )));
-        }
-        if !dest.exists() {
-            return Err(Error::Error(format!(
-                "not writing through dangling symlink '{}'",
-                dest.display()
-            )));
-        }
-    }
-
-    if options.verbose {
-        println!("{}", context_for(source, dest));
-    }
-
-    // Calculate the context upfront before canonicalizing the path
-    let context = context_for(source, dest);
-    let context = context.as_str();
-
-    // canonicalize dest and source so that later steps can work with the paths directly
-    let dest = canonicalize(dest, MissingHandling::Missing, ResolveMode::Physical).unwrap();
-    let source = if options.dereference {
-        canonicalize(source, MissingHandling::Missing, ResolveMode::Physical).unwrap()
-    } else {
-        source.to_owned()
-    };
-
-    let dest_permissions = if dest.exists() {
-        dest.symlink_metadata().context(context)?.permissions()
-    } else {
-        #[allow(unused_mut)]
-        let mut permissions = source.symlink_metadata().context(context)?.permissions();
-        #[cfg(unix)]
-        {
-            use uucore::mode::get_umask;
-
-            let mut mode = permissions.mode();
-
-            // remove sticky bit, suid and gid bit
-            const SPECIAL_PERMS_MASK: u32 = 0o7000;
-            mode &= !SPECIAL_PERMS_MASK;
-
-            // apply umask
-            mode &= !get_umask();
-
-            permissions.set_mode(mode);
-        }
-        permissions
-    };
-
-    match options.copy_mode {
-        CopyMode::Link => {
-            fs::hard_link(&source, &dest).context(context)?;
-        }
-        CopyMode::Copy => {
-            copy_helper(&source, &dest, options, context, symlinked_files)?;
-        }
-        CopyMode::SymLink => {
-            symlink_file(&source, &dest, context, symlinked_files)?;
-        }
-        CopyMode::Sparse => return Err(Error::NotImplemented(options::SPARSE.to_string())),
-        CopyMode::Update => {
-            if dest.exists() {
-                let src_metadata = fs::symlink_metadata(&source)?;
-                let dest_metadata = fs::symlink_metadata(&dest)?;
-
-                let src_time = src_metadata.modified()?;
-                let dest_time = dest_metadata.modified()?;
-                if src_time <= dest_time {
-                    return Ok(());
-                } else {
-                    copy_helper(&source, &dest, options, context, symlinked_files)?;
-                }
-            } else {
-                copy_helper(&source, &dest, options, context, symlinked_files)?;
-            }
-        }
-        CopyMode::AttrOnly => {
-            OpenOptions::new()
-                .write(true)
-                .truncate(false)
-                .create(true)
-                .open(&dest)
-                .unwrap();
-        }
-    };
-
-    // TODO: implement something similar to gnu's lchown
-    if fs::symlink_metadata(&dest)
-        .map(|meta| !meta.file_type().is_symlink())
-        .unwrap_or(false)
-    {
-        // Here, to match GNU semantics, we quietly ignore an error
-        // if a user does not have the correct ownership to modify
-        // the permissions of a file.
-        //
-        // FWIW, the OS will throw an error later, on the write op, if
-        // the user does not have permission to write to the file.
-        fs::set_permissions(&dest, dest_permissions).ok();
-    }
-    for attribute in &options.preserve_attributes {
-        copy_attribute(&source, &dest, attribute)?;
-    }
-    Ok(())
-}
-
-/// Copy the file from `source` to `dest` either using the normal `fs::copy` or a
-/// copy-on-write scheme if --reflink is specified and the filesystem supports it.
-fn copy_helper(
-    source: &Path,
-    dest: &Path,
-    options: &Options,
-    context: &str,
-    symlinked_files: &mut HashSet<FileInformation>,
-) -> CopyResult<()> {
-    if options.parents {
-        let parent = dest.parent().unwrap_or(dest);
-        fs::create_dir_all(parent)?;
-    }
-    let is_symlink = fs::symlink_metadata(&source)?.file_type().is_symlink();
-    if source.as_os_str() == "/dev/null" {
-        /* workaround a limitation of fs::copy
-         * https://github.com/rust-lang/rust/issues/79390
-         */
-        File::create(dest).context(dest.display().to_string())?;
-    } else if is_symlink {
-        copy_link(source, dest, symlinked_files)?;
-    } else if options.reflink_mode != ReflinkMode::Never {
-        #[cfg(not(any(target_os = "linux", target_os = "macos")))]
-        return Err("--reflink is only supported on linux and macOS"
-            .to_string()
-            .into());
-
-        #[cfg(target_os = "macos")]
-        copy_on_write_macos(source, dest, options.reflink_mode, context)?;
-        #[cfg(target_os = "linux")]
-        copy_on_write_linux(source, dest, options.reflink_mode, context)?;
-    } else {
-        fs::copy(source, dest).context(context)?;
-    }
-
-    Ok(())
-}
-
-fn copy_link(
-    source: &Path,
-    dest: &Path,
-    symlinked_files: &mut HashSet<FileInformation>,
-) -> CopyResult<()> {
-    // Here, we will copy the symlink itself (actually, just recreate it)
-    let link = fs::read_link(&source)?;
-    let dest: Cow<'_, Path> = if dest.is_dir() {
-        match source.file_name() {
-            Some(name) => dest.join(name).into(),
-            None => crash!(
-                EXIT_ERR,
-                "cannot stat {}: No such file or directory",
-                source.quote()
-            ),
-        }
-    } else {
-        // we always need to remove the file to be able to create a symlink,
-        // even if it is writeable.
-        if dest.exists() {
-            fs::remove_file(dest)?;
-        }
-        dest.into()
-    };
-    symlink_file(&link, &dest, &*context_for(&link, &dest), symlinked_files)
-}
-
-/// Copies `source` to `dest` using copy-on-write if possible.
-#[cfg(target_os = "linux")]
-fn copy_on_write_linux(
-    source: &Path,
-    dest: &Path,
-    mode: ReflinkMode,
-    context: &str,
-) -> CopyResult<()> {
-    debug_assert!(mode != ReflinkMode::Never);
-
-    let src_file = File::open(source).context(context)?;
-    let dst_file = OpenOptions::new()
-        .write(true)
-        .truncate(false)
-        .create(true)
-        .open(dest)
-        .context(context)?;
-    match mode {
-        ReflinkMode::Always => unsafe {
-            let result = ficlone(dst_file.as_raw_fd(), src_file.as_raw_fd() as *const i32);
-            if result != 0 {
-                Err(format!(
-                    "failed to clone {:?} from {:?}: {}",
-                    source,
-                    dest,
-                    std::io::Error::last_os_error()
-                )
-                .into())
-            } else {
-                Ok(())
-            }
-        },
-        ReflinkMode::Auto => unsafe {
-            let result = ficlone(dst_file.as_raw_fd(), src_file.as_raw_fd() as *const i32);
-            if result != 0 {
-                fs::copy(source, dest).context(context)?;
-            }
-            Ok(())
-        },
-        ReflinkMode::Never => unreachable!(),
-    }
-}
-
-/// Copies `source` to `dest` using copy-on-write if possible.
-#[cfg(target_os = "macos")]
-fn copy_on_write_macos(
-    source: &Path,
-    dest: &Path,
-    mode: ReflinkMode,
-    context: &str,
-) -> CopyResult<()> {
-    debug_assert!(mode != ReflinkMode::Never);
-
-    // Extract paths in a form suitable to be passed to a syscall.
-    // The unwrap() is safe because they come from the command-line and so contain non nul
-    // character.
-    use std::os::unix::ffi::OsStrExt;
-    let src = CString::new(source.as_os_str().as_bytes()).unwrap();
-    let dst = CString::new(dest.as_os_str().as_bytes()).unwrap();
-
-    // clonefile(2) was introduced in macOS 10.12 so we cannot statically link against it
-    // for backward compatibility.
-    let clonefile = CString::new("clonefile").unwrap();
-    let raw_pfn = unsafe { libc::dlsym(libc::RTLD_NEXT, clonefile.as_ptr()) };
-
-    let mut error = 0;
-    if !raw_pfn.is_null() {
-        // Call clonefile(2).
-        // Safety: Casting a C function pointer to a rust function value is one of the few
-        // blessed uses of `transmute()`.
-        unsafe {
-            let pfn: extern "C" fn(
-                src: *const libc::c_char,
-                dst: *const libc::c_char,
-                flags: u32,
-            ) -> libc::c_int = std::mem::transmute(raw_pfn);
-            error = pfn(src.as_ptr(), dst.as_ptr(), 0);
-            if std::io::Error::last_os_error().kind() == std::io::ErrorKind::AlreadyExists {
-                // clonefile(2) fails if the destination exists.  Remove it and try again.  Do not
-                // bother to check if removal worked because we're going to try to clone again.
-                let _ = fs::remove_file(dest);
-                error = pfn(src.as_ptr(), dst.as_ptr(), 0);
-            }
-        }
-    }
-
-    if raw_pfn.is_null() || error != 0 {
-        // clonefile(2) is either not supported or it errored out (possibly because the FS does not
-        // support COW).
-        match mode {
-            ReflinkMode::Always => {
-                return Err(
-                    format!("failed to clone {:?} from {:?}: {}", source, dest, error).into(),
-                )
-            }
-            ReflinkMode::Auto => fs::copy(source, dest).context(context)?,
-            ReflinkMode::Never => unreachable!(),
-        };
-    }
-
-    Ok(())
-}
-
-/// Generate an error message if `target` is not the correct `target_type`
-pub fn verify_target_type(target: &Path, target_type: &TargetType) -> CopyResult<()> {
-    match (target_type, target.is_dir()) {
-        (&TargetType::Directory, false) => {
-            Err(format!("target: {} is not a directory", target.quote()).into())
-        }
-        (&TargetType::File, true) => Err(format!(
-            "cannot overwrite directory {} with non-directory",
-            target.quote()
-        )
-        .into()),
-        _ => Ok(()),
-    }
-}
-
-/// Remove the `root` prefix from `source` and prefix it with `target`
-/// to create a file that is local to `target`
-/// # Examples
-///
-/// ```ignore
-/// assert!(uu_cp::localize_to_target(
-///     &Path::new("a/source/"),
-///     &Path::new("a/source/c.txt"),
-///     &Path::new("target/"),
-/// ).unwrap() == Path::new("target/c.txt"))
-/// ```
-pub fn localize_to_target(root: &Path, source: &Path, target: &Path) -> CopyResult<PathBuf> {
-    let local_to_root = source.strip_prefix(&root)?;
-    Ok(target.join(&local_to_root))
-}
-
-pub fn paths_refer_to_same_file(p1: &Path, p2: &Path) -> io::Result<bool> {
-    // We have to take symlinks and relative paths into account.
-    let pathbuf1 = canonicalize(p1, MissingHandling::Normal, ResolveMode::Logical)?;
-    let pathbuf2 = canonicalize(p2, MissingHandling::Normal, ResolveMode::Logical)?;
-
-    Ok(pathbuf1 == pathbuf2)
-}
-
-#[test]
-fn test_cp_localize_to_target() {
-    assert!(
-        localize_to_target(
-            Path::new("a/source/"),
-            Path::new("a/source/c.txt"),
-            Path::new("target/")
-        )
-        .unwrap()
-            == Path::new("target/c.txt")
-    )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_csplit/csplit.rs.html b/src/uu_csplit/csplit.rs.html deleted file mode 100644 index b4c7afbac..000000000 --- a/src/uu_csplit/csplit.rs.html +++ /dev/null @@ -1,1626 +0,0 @@ -csplit.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-
#![crate_name = "uu_csplit"]
-
-#[macro_use]
-extern crate uucore;
-
-use std::cmp::Ordering;
-use std::io::{self, BufReader};
-use std::{
-    fs::{remove_file, File},
-    io::{BufRead, BufWriter, Write},
-};
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use regex::Regex;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-use uucore::InvalidEncodingHandling;
-
-mod csplit_error;
-mod patterns;
-mod split_name;
-
-use crate::csplit_error::CsplitError;
-use crate::split_name::SplitName;
-
-static SUMMARY: &str = "split a file into sections determined by context lines";
-static LONG_HELP: &str = "Output pieces of FILE separated by PATTERN(s) to files 'xx00', 'xx01', ..., and output byte counts of each piece to standard output.";
-
-mod options {
-    pub const SUFFIX_FORMAT: &str = "suffix-format";
-    pub const SUPPRESS_MATCHED: &str = "suppress-matched";
-    pub const DIGITS: &str = "digits";
-    pub const PREFIX: &str = "prefix";
-    pub const KEEP_FILES: &str = "keep-files";
-    pub const QUIET: &str = "quiet";
-    pub const ELIDE_EMPTY_FILES: &str = "elide-empty-files";
-    pub const FILE: &str = "file";
-    pub const PATTERN: &str = "pattern";
-}
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... FILE PATTERN...",
-        uucore::execution_phrase()
-    )
-}
-
-/// Command line options for csplit.
-pub struct CsplitOptions {
-    split_name: crate::SplitName,
-    keep_files: bool,
-    quiet: bool,
-    elide_empty_files: bool,
-    suppress_matched: bool,
-}
-
-impl CsplitOptions {
-    fn new(matches: &ArgMatches) -> CsplitOptions {
-        let keep_files = matches.is_present(options::KEEP_FILES);
-        let quiet = matches.is_present(options::QUIET);
-        let elide_empty_files = matches.is_present(options::ELIDE_EMPTY_FILES);
-        let suppress_matched = matches.is_present(options::SUPPRESS_MATCHED);
-
-        CsplitOptions {
-            split_name: crash_if_err!(
-                1,
-                SplitName::new(
-                    matches.value_of(options::PREFIX).map(str::to_string),
-                    matches.value_of(options::SUFFIX_FORMAT).map(str::to_string),
-                    matches.value_of(options::DIGITS).map(str::to_string)
-                )
-            ),
-            keep_files,
-            quiet,
-            elide_empty_files,
-            suppress_matched,
-        }
-    }
-}
-
-/// Splits a file into severals according to the command line patterns.
-///
-/// # Errors
-///
-/// - [`io::Error`] if there is some problem reading/writing from/to a file.
-/// - [`::CsplitError::LineOutOfRange`] if the line number pattern is larger than the number of input
-///   lines.
-/// - [`::CsplitError::LineOutOfRangeOnRepetition`], like previous but after applying the pattern
-///   more than once.
-/// - [`::CsplitError::MatchNotFound`] if no line matched a regular expression.
-/// - [`::CsplitError::MatchNotFoundOnRepetition`], like previous but after applying the pattern
-///   more than once.
-pub fn csplit<T>(
-    options: &CsplitOptions,
-    patterns: Vec<patterns::Pattern>,
-    input: T,
-) -> Result<(), CsplitError>
-where
-    T: BufRead,
-{
-    let mut input_iter = InputSplitter::new(input.lines().enumerate());
-    let mut split_writer = SplitWriter::new(options);
-    let ret = do_csplit(&mut split_writer, patterns, &mut input_iter);
-
-    // consume the rest
-    input_iter.rewind_buffer();
-    if let Some((_, line)) = input_iter.next() {
-        split_writer.new_writer()?;
-        split_writer.writeln(line?)?;
-        for (_, line) in input_iter {
-            split_writer.writeln(line?)?;
-        }
-        split_writer.finish_split();
-    }
-    // delete files on error by default
-    if ret.is_err() && !options.keep_files {
-        split_writer.delete_all_splits()?;
-    }
-    ret
-}
-
-fn do_csplit<I>(
-    split_writer: &mut SplitWriter,
-    patterns: Vec<patterns::Pattern>,
-    input_iter: &mut InputSplitter<I>,
-) -> Result<(), CsplitError>
-where
-    I: Iterator<Item = (usize, io::Result<String>)>,
-{
-    // split the file based on patterns
-    for pattern in patterns.into_iter() {
-        let pattern_as_str = pattern.to_string();
-        let is_skip = matches!(pattern, patterns::Pattern::SkipToMatch(_, _, _));
-        match pattern {
-            patterns::Pattern::UpToLine(n, ex) => {
-                let mut up_to_line = n;
-                for (_, ith) in ex.iter() {
-                    split_writer.new_writer()?;
-                    match split_writer.do_to_line(&pattern_as_str, up_to_line, input_iter) {
-                        // the error happened when applying the pattern more than once
-                        Err(CsplitError::LineOutOfRange(_)) if ith != 1 => {
-                            return Err(CsplitError::LineOutOfRangeOnRepetition(
-                                pattern_as_str.to_string(),
-                                ith - 1,
-                            ));
-                        }
-                        Err(err) => return Err(err),
-                        // continue the splitting process
-                        Ok(()) => (),
-                    }
-                    up_to_line += n;
-                }
-            }
-            patterns::Pattern::UpToMatch(regex, offset, ex)
-            | patterns::Pattern::SkipToMatch(regex, offset, ex) => {
-                for (max, ith) in ex.iter() {
-                    if is_skip {
-                        // when skipping a part of the input, no writer is created
-                        split_writer.as_dev_null();
-                    } else {
-                        split_writer.new_writer()?;
-                    }
-                    match (
-                        split_writer.do_to_match(&pattern_as_str, &regex, offset, input_iter),
-                        max,
-                    ) {
-                        // in case of ::pattern::ExecutePattern::Always, then it's fine not to find a
-                        // matching line
-                        (Err(CsplitError::MatchNotFound(_)), None) => {
-                            return Ok(());
-                        }
-                        // the error happened when applying the pattern more than once
-                        (Err(CsplitError::MatchNotFound(_)), Some(m)) if m != 1 && ith != 1 => {
-                            return Err(CsplitError::MatchNotFoundOnRepetition(
-                                pattern_as_str.to_string(),
-                                ith - 1,
-                            ));
-                        }
-                        (Err(err), _) => return Err(err),
-                        // continue the splitting process
-                        (Ok(()), _) => (),
-                    };
-                }
-            }
-        };
-    }
-    Ok(())
-}
-
-/// Write a portion of the input file into a split which filename is based on an incrementing
-/// counter.
-struct SplitWriter<'a> {
-    /// the options set through the command line
-    options: &'a CsplitOptions,
-    /// a split counter
-    counter: usize,
-    /// the writer to the current split
-    current_writer: Option<BufWriter<File>>,
-    /// the size in bytes of the current split
-    size: usize,
-    /// flag to indicate that no content should be written to a split
-    dev_null: bool,
-}
-
-impl<'a> Drop for SplitWriter<'a> {
-    fn drop(&mut self) {
-        if self.options.elide_empty_files && self.size == 0 {
-            let file_name = self.options.split_name.get(self.counter);
-            remove_file(file_name).expect("Failed to elide split");
-        }
-    }
-}
-
-impl<'a> SplitWriter<'a> {
-    fn new(options: &CsplitOptions) -> SplitWriter {
-        SplitWriter {
-            options,
-            counter: 0,
-            current_writer: None,
-            size: 0,
-            dev_null: false,
-        }
-    }
-
-    /// Creates a new split and returns its filename.
-    ///
-    /// # Errors
-    ///
-    /// The creation of the split file may fail with some [`io::Error`].
-    fn new_writer(&mut self) -> io::Result<()> {
-        let file_name = self.options.split_name.get(self.counter);
-        let file = File::create(&file_name)?;
-        self.current_writer = Some(BufWriter::new(file));
-        self.counter += 1;
-        self.size = 0;
-        self.dev_null = false;
-        Ok(())
-    }
-
-    /// The current split will not keep any of the read input lines.
-    fn as_dev_null(&mut self) {
-        self.dev_null = true;
-    }
-
-    /// Writes the line to the current split, appending a newline character.
-    /// If [`dev_null`] is true, then the line is discarded.
-    ///
-    /// # Errors
-    ///
-    /// Some [`io::Error`] may occur when attempting to write the line.
-    fn writeln(&mut self, line: String) -> io::Result<()> {
-        if !self.dev_null {
-            match self.current_writer {
-                Some(ref mut current_writer) => {
-                    let bytes = line.as_bytes();
-                    current_writer.write_all(bytes)?;
-                    current_writer.write_all(b"\n")?;
-                    self.size += bytes.len() + 1;
-                }
-                None => panic!("trying to write to a split that was not created"),
-            }
-        }
-        Ok(())
-    }
-
-    /// Perform some operations after completing a split, i.e., either remove it
-    /// if the [`::ELIDE_EMPTY_FILES_OPT`] option is enabled, or print how much bytes were written
-    /// to it if [`::QUIET_OPT`] is disabled.
-    ///
-    /// # Errors
-    ///
-    /// Some [`io::Error`] if the split could not be removed in case it should be elided.
-    fn finish_split(&mut self) {
-        if !self.dev_null {
-            if self.options.elide_empty_files && self.size == 0 {
-                self.counter -= 1;
-            } else if !self.options.quiet {
-                println!("{}", self.size);
-            }
-        }
-    }
-
-    /// Removes all the split files that were created.
-    ///
-    /// # Errors
-    ///
-    /// Returns an [`io::Error`] if there was a problem removing a split.
-    fn delete_all_splits(&self) -> io::Result<()> {
-        let mut ret = Ok(());
-        for ith in 0..self.counter {
-            let file_name = self.options.split_name.get(ith);
-            if let Err(err) = remove_file(file_name) {
-                ret = Err(err);
-            }
-        }
-        ret
-    }
-
-    /// Split the input stream up to the line number `n`.
-    ///
-    /// If the line number `n` is smaller than the current position in the input, then an empty
-    /// split is created.
-    ///
-    /// # Errors
-    ///
-    /// In addition to errors reading/writing from/to a file, if the line number
-    /// `n` is greater than the total available lines, then a
-    /// [`::CsplitError::LineOutOfRange`] error is returned.
-    fn do_to_line<I>(
-        &mut self,
-        pattern_as_str: &str,
-        n: usize,
-        input_iter: &mut InputSplitter<I>,
-    ) -> Result<(), CsplitError>
-    where
-        I: Iterator<Item = (usize, io::Result<String>)>,
-    {
-        input_iter.rewind_buffer();
-        input_iter.set_size_of_buffer(1);
-
-        let mut ret = Err(CsplitError::LineOutOfRange(pattern_as_str.to_string()));
-        while let Some((ln, line)) = input_iter.next() {
-            let l = line?;
-            match n.cmp(&(&ln + 1)) {
-                Ordering::Less => {
-                    assert!(
-                        input_iter.add_line_to_buffer(ln, l).is_none(),
-                        "the buffer is big enough to contain 1 line"
-                    );
-                    ret = Ok(());
-                    break;
-                }
-                Ordering::Equal => {
-                    assert!(
-                        self.options.suppress_matched
-                            || input_iter.add_line_to_buffer(ln, l).is_none(),
-                        "the buffer is big enough to contain 1 line"
-                    );
-                    ret = Ok(());
-                    break;
-                }
-                Ordering::Greater => (),
-            }
-            self.writeln(l)?;
-        }
-        self.finish_split();
-        ret
-    }
-
-    /// Read lines up to the line matching a [`Regex`]. With a non-zero offset,
-    /// the block of relevant lines can be extended (if positive), or reduced
-    /// (if negative).
-    ///
-    /// # Errors
-    ///
-    /// In addition to errors reading/writing from/to a file, the following errors may be returned:
-    /// - if no line matched, an [`::CsplitError::MatchNotFound`].
-    /// - if there are not enough lines to accommodate the offset, an
-    /// [`::CsplitError::LineOutOfRange`].
-    fn do_to_match<I>(
-        &mut self,
-        pattern_as_str: &str,
-        regex: &Regex,
-        mut offset: i32,
-        input_iter: &mut InputSplitter<I>,
-    ) -> Result<(), CsplitError>
-    where
-        I: Iterator<Item = (usize, io::Result<String>)>,
-    {
-        if offset >= 0 {
-            // The offset is zero or positive, no need for a buffer on the lines read.
-            // NOTE: drain the buffer of input_iter, no match should be done within.
-            for line in input_iter.drain_buffer() {
-                self.writeln(line)?;
-            }
-            // retain the matching line
-            input_iter.set_size_of_buffer(1);
-
-            while let Some((ln, line)) = input_iter.next() {
-                let l = line?;
-                if regex.is_match(&l) {
-                    match (self.options.suppress_matched, offset) {
-                        // no offset, add the line to the next split
-                        (false, 0) => {
-                            assert!(
-                                input_iter.add_line_to_buffer(ln, l).is_none(),
-                                "the buffer is big enough to contain 1 line"
-                            );
-                        }
-                        // a positive offset, some more lines need to be added to the current split
-                        (false, _) => self.writeln(l)?,
-                        _ => (),
-                    };
-                    offset -= 1;
-
-                    // write the extra lines required by the offset
-                    while offset > 0 {
-                        match input_iter.next() {
-                            Some((_, line)) => {
-                                self.writeln(line?)?;
-                            }
-                            None => {
-                                self.finish_split();
-                                return Err(CsplitError::LineOutOfRange(
-                                    pattern_as_str.to_string(),
-                                ));
-                            }
-                        };
-                        offset -= 1;
-                    }
-                    self.finish_split();
-                    return Ok(());
-                }
-                self.writeln(l)?;
-            }
-        } else {
-            // With a negative offset we use a buffer to keep the lines within the offset.
-            // NOTE: do not drain the buffer of input_iter, in case of an LineOutOfRange error
-            // but do not rewind it either since no match should be done within.
-            // The consequence is that the buffer may already be full with lines from a previous
-            // split, which is taken care of when calling `shrink_buffer_to_size`.
-            let offset_usize = -offset as usize;
-            input_iter.set_size_of_buffer(offset_usize);
-            while let Some((ln, line)) = input_iter.next() {
-                let l = line?;
-                if regex.is_match(&l) {
-                    for line in input_iter.shrink_buffer_to_size() {
-                        self.writeln(line)?;
-                    }
-                    if !self.options.suppress_matched {
-                        // add 1 to the buffer size to make place for the matched line
-                        input_iter.set_size_of_buffer(offset_usize + 1);
-                        assert!(
-                            input_iter.add_line_to_buffer(ln, l).is_none(),
-                            "should be big enough to hold every lines"
-                        );
-                    }
-                    self.finish_split();
-                    if input_iter.buffer_len() < offset_usize {
-                        return Err(CsplitError::LineOutOfRange(pattern_as_str.to_string()));
-                    }
-                    return Ok(());
-                }
-                if let Some(line) = input_iter.add_line_to_buffer(ln, l) {
-                    self.writeln(line)?;
-                }
-            }
-            // no match, drain the buffer into the current split
-            for line in input_iter.drain_buffer() {
-                self.writeln(line)?;
-            }
-        }
-
-        self.finish_split();
-        Err(CsplitError::MatchNotFound(pattern_as_str.to_string()))
-    }
-}
-
-/// An iterator which can output items from a buffer filled externally.
-/// This is used to pass matching lines to the next split and to support patterns with a negative offset.
-struct InputSplitter<I>
-where
-    I: Iterator<Item = (usize, io::Result<String>)>,
-{
-    iter: I,
-    buffer: Vec<<I as Iterator>::Item>,
-    /// the number of elements the buffer may hold
-    size: usize,
-    /// flag to indicate content off the buffer should be returned instead of off the wrapped
-    /// iterator
-    rewind: bool,
-}
-
-impl<I> InputSplitter<I>
-where
-    I: Iterator<Item = (usize, io::Result<String>)>,
-{
-    fn new(iter: I) -> InputSplitter<I> {
-        InputSplitter {
-            iter,
-            buffer: Vec::new(),
-            rewind: false,
-            size: 1,
-        }
-    }
-
-    /// Rewind the iteration by outputting the buffer's content.
-    fn rewind_buffer(&mut self) {
-        self.rewind = true;
-    }
-
-    /// Shrink the buffer so that its length is equal to the set size, returning an iterator for
-    /// the elements that were too much.
-    fn shrink_buffer_to_size(&mut self) -> impl Iterator<Item = String> + '_ {
-        let shrink_offset = if self.buffer.len() > self.size {
-            self.buffer.len() - self.size
-        } else {
-            0
-        };
-        self.buffer
-            .drain(..shrink_offset)
-            .map(|(_, line)| line.unwrap())
-    }
-
-    /// Drain the content of the buffer.
-    fn drain_buffer(&mut self) -> impl Iterator<Item = String> + '_ {
-        self.buffer.drain(..).map(|(_, line)| line.unwrap())
-    }
-
-    /// Set the maximum number of lines to keep.
-    fn set_size_of_buffer(&mut self, size: usize) {
-        self.size = size;
-    }
-
-    /// Add a line to the buffer. If the buffer has [`size`] elements, then its head is removed and
-    /// the new line is pushed to the buffer. The removed head is then available in the returned
-    /// option.
-    fn add_line_to_buffer(&mut self, ln: usize, line: String) -> Option<String> {
-        if self.rewind {
-            self.buffer.insert(0, (ln, Ok(line)));
-            None
-        } else if self.buffer.len() >= self.size {
-            let (_, head_line) = self.buffer.remove(0);
-            self.buffer.push((ln, Ok(line)));
-            Some(head_line.unwrap())
-        } else {
-            self.buffer.push((ln, Ok(line)));
-            None
-        }
-    }
-
-    /// Returns the number of lines stored in the buffer
-    fn buffer_len(&self) -> usize {
-        self.buffer.len()
-    }
-}
-
-impl<I> Iterator for InputSplitter<I>
-where
-    I: Iterator<Item = (usize, io::Result<String>)>,
-{
-    type Item = <I as Iterator>::Item;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        if self.rewind {
-            if !self.buffer.is_empty() {
-                return Some(self.buffer.remove(0));
-            }
-            self.rewind = false;
-        }
-        self.iter.next()
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    fn input_splitter() {
-        let input = vec![
-            Ok(String::from("aaa")),
-            Ok(String::from("bbb")),
-            Ok(String::from("ccc")),
-            Ok(String::from("ddd")),
-        ];
-        let mut input_splitter = InputSplitter::new(input.into_iter().enumerate());
-
-        input_splitter.set_size_of_buffer(2);
-        assert_eq!(input_splitter.buffer_len(), 0);
-
-        match input_splitter.next() {
-            Some((0, Ok(line))) => {
-                assert_eq!(line, String::from("aaa"));
-                assert_eq!(input_splitter.add_line_to_buffer(0, line), None);
-                assert_eq!(input_splitter.buffer_len(), 1);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((1, Ok(line))) => {
-                assert_eq!(line, String::from("bbb"));
-                assert_eq!(input_splitter.add_line_to_buffer(1, line), None);
-                assert_eq!(input_splitter.buffer_len(), 2);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((2, Ok(line))) => {
-                assert_eq!(line, String::from("ccc"));
-                assert_eq!(
-                    input_splitter.add_line_to_buffer(2, line),
-                    Some(String::from("aaa"))
-                );
-                assert_eq!(input_splitter.buffer_len(), 2);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        input_splitter.rewind_buffer();
-
-        match input_splitter.next() {
-            Some((1, Ok(line))) => {
-                assert_eq!(line, String::from("bbb"));
-                assert_eq!(input_splitter.buffer_len(), 1);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((2, Ok(line))) => {
-                assert_eq!(line, String::from("ccc"));
-                assert_eq!(input_splitter.buffer_len(), 0);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((3, Ok(line))) => {
-                assert_eq!(line, String::from("ddd"));
-                assert_eq!(input_splitter.buffer_len(), 0);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        assert!(input_splitter.next().is_none());
-    }
-
-    #[test]
-    fn input_splitter_interrupt_rewind() {
-        let input = vec![
-            Ok(String::from("aaa")),
-            Ok(String::from("bbb")),
-            Ok(String::from("ccc")),
-            Ok(String::from("ddd")),
-        ];
-        let mut input_splitter = InputSplitter::new(input.into_iter().enumerate());
-
-        input_splitter.set_size_of_buffer(3);
-        assert_eq!(input_splitter.buffer_len(), 0);
-
-        match input_splitter.next() {
-            Some((0, Ok(line))) => {
-                assert_eq!(line, String::from("aaa"));
-                assert_eq!(input_splitter.add_line_to_buffer(0, line), None);
-                assert_eq!(input_splitter.buffer_len(), 1);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((1, Ok(line))) => {
-                assert_eq!(line, String::from("bbb"));
-                assert_eq!(input_splitter.add_line_to_buffer(1, line), None);
-                assert_eq!(input_splitter.buffer_len(), 2);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((2, Ok(line))) => {
-                assert_eq!(line, String::from("ccc"));
-                assert_eq!(input_splitter.add_line_to_buffer(2, line), None);
-                assert_eq!(input_splitter.buffer_len(), 3);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        input_splitter.rewind_buffer();
-
-        match input_splitter.next() {
-            Some((0, Ok(line))) => {
-                assert_eq!(line, String::from("aaa"));
-                assert_eq!(input_splitter.add_line_to_buffer(0, line), None);
-                assert_eq!(input_splitter.buffer_len(), 3);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((0, Ok(line))) => {
-                assert_eq!(line, String::from("aaa"));
-                assert_eq!(input_splitter.buffer_len(), 2);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((1, Ok(line))) => {
-                assert_eq!(line, String::from("bbb"));
-                assert_eq!(input_splitter.buffer_len(), 1);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((2, Ok(line))) => {
-                assert_eq!(line, String::from("ccc"));
-                assert_eq!(input_splitter.buffer_len(), 0);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        match input_splitter.next() {
-            Some((3, Ok(line))) => {
-                assert_eq!(line, String::from("ddd"));
-                assert_eq!(input_splitter.buffer_len(), 0);
-            }
-            item => panic!("wrong item: {:?}", item),
-        };
-
-        assert!(input_splitter.next().is_none());
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    // get the file to split
-    let file_name = matches.value_of(options::FILE).unwrap();
-
-    // get the patterns to split on
-    let patterns: Vec<String> = matches
-        .values_of(options::PATTERN)
-        .unwrap()
-        .map(str::to_string)
-        .collect();
-    let patterns = patterns::get_patterns(&patterns[..])?;
-    let options = CsplitOptions::new(&matches);
-    if file_name == "-" {
-        let stdin = io::stdin();
-        Ok(csplit(&options, patterns, stdin.lock())?)
-    } else {
-        let file = File::open(file_name)
-            .map_err_context(|| format!("cannot access {}", file_name.quote()))?;
-        let file_metadata = file
-            .metadata()
-            .map_err_context(|| format!("cannot access {}", file_name.quote()))?;
-        if !file_metadata.is_file() {
-            return Err(CsplitError::NotRegularFile(file_name.to_string()).into());
-        }
-        Ok(csplit(&options, patterns, BufReader::new(file))?)
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::SUFFIX_FORMAT)
-                .short('b')
-                .long(options::SUFFIX_FORMAT)
-                .value_name("FORMAT")
-                .help("use sprintf FORMAT instead of %02d"),
-        )
-        .arg(
-            Arg::new(options::PREFIX)
-                .short('f')
-                .long(options::PREFIX)
-                .value_name("PREFIX")
-                .help("use PREFIX instead of 'xx'"),
-        )
-        .arg(
-            Arg::new(options::KEEP_FILES)
-                .short('k')
-                .long(options::KEEP_FILES)
-                .help("do not remove output files on errors"),
-        )
-        .arg(
-            Arg::new(options::SUPPRESS_MATCHED)
-                .long(options::SUPPRESS_MATCHED)
-                .help("suppress the lines matching PATTERN"),
-        )
-        .arg(
-            Arg::new(options::DIGITS)
-                .short('n')
-                .long(options::DIGITS)
-                .value_name("DIGITS")
-                .help("use specified number of digits instead of 2"),
-        )
-        .arg(
-            Arg::new(options::QUIET)
-                .short('s')
-                .long(options::QUIET)
-                .visible_alias("silent")
-                .help("do not print counts of output file sizes"),
-        )
-        .arg(
-            Arg::new(options::ELIDE_EMPTY_FILES)
-                .short('z')
-                .long(options::ELIDE_EMPTY_FILES)
-                .help("remove empty output files"),
-        )
-        .arg(Arg::new(options::FILE).hide(true).required(true))
-        .arg(
-            Arg::new(options::PATTERN)
-                .hide(true)
-                .multiple_occurrences(true)
-                .required(true),
-        )
-        .after_help(LONG_HELP)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_csplit/csplit_error.rs.html b/src/uu_csplit/csplit_error.rs.html deleted file mode 100644 index e3aab10cd..000000000 --- a/src/uu_csplit/csplit_error.rs.html +++ /dev/null @@ -1,96 +0,0 @@ -csplit_error.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-
use std::io;
-use thiserror::Error;
-
-use uucore::display::Quotable;
-use uucore::error::UError;
-
-/// Errors thrown by the csplit command
-#[derive(Debug, Error)]
-pub enum CsplitError {
-    #[error("IO error: {}", _0)]
-    IoError(io::Error),
-    #[error("{}: line number out of range", ._0.quote())]
-    LineOutOfRange(String),
-    #[error("{}: line number out of range on repetition {}", ._0.quote(), _1)]
-    LineOutOfRangeOnRepetition(String, usize),
-    #[error("{}: match not found", ._0.quote())]
-    MatchNotFound(String),
-    #[error("{}: match not found on repetition {}", ._0.quote(), _1)]
-    MatchNotFoundOnRepetition(String, usize),
-    #[error("line number must be greater than zero")]
-    LineNumberIsZero,
-    #[error("line number '{}' is smaller than preceding line number, {}", _0, _1)]
-    LineNumberSmallerThanPrevious(usize, usize),
-    #[error("{}: invalid pattern", ._0.quote())]
-    InvalidPattern(String),
-    #[error("invalid number: {}", ._0.quote())]
-    InvalidNumber(String),
-    #[error("incorrect conversion specification in suffix")]
-    SuffixFormatIncorrect,
-    #[error("too many % conversion specifications in suffix")]
-    SuffixFormatTooManyPercents,
-    #[error("{} is not a regular file", ._0.quote())]
-    NotRegularFile(String),
-}
-
-impl From<io::Error> for CsplitError {
-    fn from(error: io::Error) -> Self {
-        CsplitError::IoError(error)
-    }
-}
-
-impl UError for CsplitError {
-    fn code(&self) -> i32 {
-        1
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_csplit/patterns.rs.html b/src/uu_csplit/patterns.rs.html deleted file mode 100644 index 5f029022e..000000000 --- a/src/uu_csplit/patterns.rs.html +++ /dev/null @@ -1,702 +0,0 @@ -patterns.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-
// spell-checker:ignore (regex) SKIPTO UPTO ; (vars) ntimes
-
-use crate::csplit_error::CsplitError;
-use regex::Regex;
-
-/// The definition of a pattern to match on a line.
-#[derive(Debug)]
-pub enum Pattern {
-    /// Copy the file's content to a split up to, not including, the given line number. The number
-    /// of times the pattern is executed is detailed in [`ExecutePattern`].
-    UpToLine(usize, ExecutePattern),
-    /// Copy the file's content to a split up to, not including, the line matching the regex. The
-    /// integer is an offset relative to the matched line of what to include (if positive) or
-    /// to exclude (if negative). The number of times the pattern is executed is detailed in
-    /// [`ExecutePattern`].
-    UpToMatch(Regex, i32, ExecutePattern),
-    /// Skip the file's content up to, not including, the line matching the regex. The integer
-    /// is an offset relative to the matched line of what to include (if positive) or to exclude
-    /// (if negative). The number of times the pattern is executed is detailed in [`ExecutePattern`].
-    SkipToMatch(Regex, i32, ExecutePattern),
-}
-
-impl ToString for Pattern {
-    fn to_string(&self) -> String {
-        match self {
-            Pattern::UpToLine(n, _) => n.to_string(),
-            Pattern::UpToMatch(regex, 0, _) => format!("/{}/", regex.as_str()),
-            Pattern::UpToMatch(regex, offset, _) => format!("/{}/{:+}", regex.as_str(), offset),
-            Pattern::SkipToMatch(regex, 0, _) => format!("%{}%", regex.as_str()),
-            Pattern::SkipToMatch(regex, offset, _) => format!("%{}%{:+}", regex.as_str(), offset),
-        }
-    }
-}
-
-/// The number of times a pattern can be used.
-#[derive(Debug)]
-pub enum ExecutePattern {
-    /// Execute the pattern as many times as possible
-    Always,
-    /// Execute the pattern a fixed number of times
-    Times(usize),
-}
-
-impl ExecutePattern {
-    pub fn iter(&self) -> ExecutePatternIter {
-        match self {
-            ExecutePattern::Times(n) => ExecutePatternIter::new(Some(*n)),
-            ExecutePattern::Always => ExecutePatternIter::new(None),
-        }
-    }
-}
-
-pub struct ExecutePatternIter {
-    max: Option<usize>,
-    cur: usize,
-}
-
-impl ExecutePatternIter {
-    fn new(max: Option<usize>) -> ExecutePatternIter {
-        ExecutePatternIter { max, cur: 0 }
-    }
-}
-
-impl Iterator for ExecutePatternIter {
-    type Item = (Option<usize>, usize);
-
-    fn next(&mut self) -> Option<(Option<usize>, usize)> {
-        match self.max {
-            // iterate until m is reached
-            Some(m) => {
-                if self.cur == m {
-                    None
-                } else {
-                    self.cur += 1;
-                    Some((self.max, self.cur))
-                }
-            }
-            // no limit, just increment a counter
-            None => {
-                self.cur += 1;
-                Some((None, self.cur))
-            }
-        }
-    }
-}
-
-/// Parses the definitions of patterns given on the command line into a list of [`Pattern`]s.
-///
-/// # Errors
-///
-/// If a pattern is incorrect, a [`::CsplitError::InvalidPattern`] error is returned, which may be
-/// due to, e.g.,:
-/// - an invalid regular expression;
-/// - an invalid number for, e.g., the offset.
-pub fn get_patterns(args: &[String]) -> Result<Vec<Pattern>, CsplitError> {
-    let patterns = extract_patterns(args)?;
-    validate_line_numbers(&patterns)?;
-    Ok(patterns)
-}
-
-fn extract_patterns(args: &[String]) -> Result<Vec<Pattern>, CsplitError> {
-    let mut patterns = Vec::with_capacity(args.len());
-    let to_match_reg =
-        Regex::new(r"^(/(?P<UPTO>.+)/|%(?P<SKIPTO>.+)%)(?P<OFFSET>[\+-]\d+)?$").unwrap();
-    let execute_ntimes_reg = Regex::new(r"^\{(?P<TIMES>\d+)|\*\}$").unwrap();
-    let mut iter = args.iter().peekable();
-
-    while let Some(arg) = iter.next() {
-        // get the number of times a pattern is repeated, which is at least once plus whatever is
-        // in the quantifier.
-        let execute_ntimes = match iter.peek() {
-            None => ExecutePattern::Times(1),
-            Some(&next_item) => {
-                match execute_ntimes_reg.captures(next_item) {
-                    None => ExecutePattern::Times(1),
-                    Some(r) => {
-                        // skip the next item
-                        iter.next();
-                        if let Some(times) = r.name("TIMES") {
-                            ExecutePattern::Times(times.as_str().parse::<usize>().unwrap() + 1)
-                        } else {
-                            ExecutePattern::Always
-                        }
-                    }
-                }
-            }
-        };
-
-        // get the pattern definition
-        if let Some(captures) = to_match_reg.captures(arg) {
-            let offset = match captures.name("OFFSET") {
-                None => 0,
-                Some(m) => m.as_str().parse().unwrap(),
-            };
-            if let Some(up_to_match) = captures.name("UPTO") {
-                let pattern = Regex::new(up_to_match.as_str())
-                    .map_err(|_| CsplitError::InvalidPattern(arg.to_string()))?;
-                patterns.push(Pattern::UpToMatch(pattern, offset, execute_ntimes));
-            } else if let Some(skip_to_match) = captures.name("SKIPTO") {
-                let pattern = Regex::new(skip_to_match.as_str())
-                    .map_err(|_| CsplitError::InvalidPattern(arg.to_string()))?;
-                patterns.push(Pattern::SkipToMatch(pattern, offset, execute_ntimes));
-            }
-        } else if let Ok(line_number) = arg.parse::<usize>() {
-            patterns.push(Pattern::UpToLine(line_number, execute_ntimes));
-        } else {
-            return Err(CsplitError::InvalidPattern(arg.to_string()));
-        }
-    }
-    Ok(patterns)
-}
-
-/// Asserts the line numbers are in increasing order, starting at 1.
-fn validate_line_numbers(patterns: &[Pattern]) -> Result<(), CsplitError> {
-    patterns
-        .iter()
-        .filter_map(|pattern| match pattern {
-            Pattern::UpToLine(line_number, _) => Some(line_number),
-            _ => None,
-        })
-        .try_fold(0, |prev_ln, &current_ln| match (prev_ln, current_ln) {
-            // a line number cannot be zero
-            (_, 0) => Err(CsplitError::LineNumberIsZero),
-            // two consecutive numbers should not be equal
-            (n, m) if n == m => {
-                show_warning!("line number '{}' is the same as preceding line number", n);
-                Ok(n)
-            }
-            // a number cannot be greater than the one that follows
-            (n, m) if n > m => Err(CsplitError::LineNumberSmallerThanPrevious(m, n)),
-            (_, m) => Ok(m),
-        })?;
-    Ok(())
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    fn bad_pattern() {
-        let input = vec!["bad".to_string()];
-        assert!(get_patterns(input.as_slice()).is_err());
-    }
-
-    #[test]
-    fn up_to_line_pattern() {
-        let input: Vec<String> = vec!["24", "42", "{*}", "50", "{4}"]
-            .into_iter()
-            .map(|v| v.to_string())
-            .collect();
-        let patterns = get_patterns(input.as_slice()).unwrap();
-        assert_eq!(patterns.len(), 3);
-        match patterns.get(0) {
-            Some(Pattern::UpToLine(24, ExecutePattern::Times(1))) => (),
-            _ => panic!("expected UpToLine pattern"),
-        };
-        match patterns.get(1) {
-            Some(Pattern::UpToLine(42, ExecutePattern::Always)) => (),
-            _ => panic!("expected UpToLine pattern"),
-        };
-        match patterns.get(2) {
-            Some(Pattern::UpToLine(50, ExecutePattern::Times(5))) => (),
-            _ => panic!("expected UpToLine pattern"),
-        };
-    }
-
-    #[test]
-    fn up_to_match_pattern() {
-        let input: Vec<String> = vec![
-            "/test1.*end$/",
-            "/test2.*end$/",
-            "{*}",
-            "/test3.*end$/",
-            "{4}",
-            "/test4.*end$/+3",
-            "/test5.*end$/-3",
-        ]
-        .into_iter()
-        .map(|v| v.to_string())
-        .collect();
-        let patterns = get_patterns(input.as_slice()).unwrap();
-        assert_eq!(patterns.len(), 5);
-        match patterns.get(0) {
-            Some(Pattern::UpToMatch(reg, 0, ExecutePattern::Times(1))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test1.*end$");
-            }
-            _ => panic!("expected UpToMatch pattern"),
-        };
-        match patterns.get(1) {
-            Some(Pattern::UpToMatch(reg, 0, ExecutePattern::Always)) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test2.*end$");
-            }
-            _ => panic!("expected UpToMatch pattern"),
-        };
-        match patterns.get(2) {
-            Some(Pattern::UpToMatch(reg, 0, ExecutePattern::Times(5))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test3.*end$");
-            }
-            _ => panic!("expected UpToMatch pattern"),
-        };
-        match patterns.get(3) {
-            Some(Pattern::UpToMatch(reg, 3, ExecutePattern::Times(1))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test4.*end$");
-            }
-            _ => panic!("expected UpToMatch pattern"),
-        };
-        match patterns.get(4) {
-            Some(Pattern::UpToMatch(reg, -3, ExecutePattern::Times(1))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test5.*end$");
-            }
-            _ => panic!("expected UpToMatch pattern"),
-        };
-    }
-
-    #[test]
-    fn skip_to_match_pattern() {
-        let input: Vec<String> = vec![
-            "%test1.*end$%",
-            "%test2.*end$%",
-            "{*}",
-            "%test3.*end$%",
-            "{4}",
-            "%test4.*end$%+3",
-            "%test5.*end$%-3",
-        ]
-        .into_iter()
-        .map(|v| v.to_string())
-        .collect();
-        let patterns = get_patterns(input.as_slice()).unwrap();
-        assert_eq!(patterns.len(), 5);
-        match patterns.get(0) {
-            Some(Pattern::SkipToMatch(reg, 0, ExecutePattern::Times(1))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test1.*end$");
-            }
-            _ => panic!("expected SkipToMatch pattern"),
-        };
-        match patterns.get(1) {
-            Some(Pattern::SkipToMatch(reg, 0, ExecutePattern::Always)) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test2.*end$");
-            }
-            _ => panic!("expected SkipToMatch pattern"),
-        };
-        match patterns.get(2) {
-            Some(Pattern::SkipToMatch(reg, 0, ExecutePattern::Times(5))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test3.*end$");
-            }
-            _ => panic!("expected SkipToMatch pattern"),
-        };
-        match patterns.get(3) {
-            Some(Pattern::SkipToMatch(reg, 3, ExecutePattern::Times(1))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test4.*end$");
-            }
-            _ => panic!("expected SkipToMatch pattern"),
-        };
-        match patterns.get(4) {
-            Some(Pattern::SkipToMatch(reg, -3, ExecutePattern::Times(1))) => {
-                let parsed_reg = format!("{}", reg);
-                assert_eq!(parsed_reg, "test5.*end$");
-            }
-            _ => panic!("expected SkipToMatch pattern"),
-        };
-    }
-
-    #[test]
-    fn line_number_zero() {
-        let patterns = vec![Pattern::UpToLine(0, ExecutePattern::Times(1))];
-        match validate_line_numbers(&patterns) {
-            Err(CsplitError::LineNumberIsZero) => (),
-            _ => panic!("expected LineNumberIsZero error"),
-        }
-    }
-
-    #[test]
-    fn line_number_smaller_than_previous() {
-        let input: Vec<String> = vec!["10".to_string(), "5".to_string()];
-        match get_patterns(input.as_slice()) {
-            Err(CsplitError::LineNumberSmallerThanPrevious(5, 10)) => (),
-            _ => panic!("expected LineNumberSmallerThanPrevious error"),
-        }
-    }
-
-    #[test]
-    fn line_number_smaller_than_previous_separate() {
-        let input: Vec<String> = vec!["10".to_string(), "/20/".to_string(), "5".to_string()];
-        match get_patterns(input.as_slice()) {
-            Err(CsplitError::LineNumberSmallerThanPrevious(5, 10)) => (),
-            _ => panic!("expected LineNumberSmallerThanPrevious error"),
-        }
-    }
-
-    #[test]
-    fn line_number_zero_separate() {
-        let input: Vec<String> = vec!["10".to_string(), "/20/".to_string(), "0".to_string()];
-        match get_patterns(input.as_slice()) {
-            Err(CsplitError::LineNumberIsZero) => (),
-            _ => panic!("expected LineNumberIsZero error"),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_csplit/split_name.rs.html b/src/uu_csplit/split_name.rs.html deleted file mode 100644 index 4b31ec137..000000000 --- a/src/uu_csplit/split_name.rs.html +++ /dev/null @@ -1,844 +0,0 @@ -split_name.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-
// spell-checker:ignore (regex) diuox
-
-use regex::Regex;
-
-use crate::csplit_error::CsplitError;
-
-/// Computes the filename of a split, taking into consideration a possible user-defined suffix
-/// format.
-pub struct SplitName {
-    fn_split_name: Box<dyn Fn(usize) -> String>,
-}
-
-impl SplitName {
-    /// Creates a new SplitName with the given user-defined options:
-    /// - `prefix_opt` specifies a prefix for all splits.
-    /// - `format_opt` specifies a custom format for the suffix part of the filename, using the
-    /// `sprintf` format notation.
-    /// - `n_digits_opt` defines the width of the split number.
-    ///
-    /// # Caveats
-    ///
-    /// If `prefix_opt` and `format_opt` are defined, and the `format_opt` has some string appearing
-    /// before the conversion pattern (e.g., "here-%05d"), then it is appended to the passed prefix
-    /// via `prefix_opt`.
-    ///
-    /// If `n_digits_opt` and `format_opt` are defined, then width defined in `format_opt` is
-    /// taken.
-    pub fn new(
-        prefix_opt: Option<String>,
-        format_opt: Option<String>,
-        n_digits_opt: Option<String>,
-    ) -> Result<SplitName, CsplitError> {
-        // get the prefix
-        let prefix = prefix_opt.unwrap_or_else(|| "xx".to_string());
-        // the width for the split offset
-        let n_digits = n_digits_opt
-            .map(|opt| {
-                opt.parse::<usize>()
-                    .map_err(|_| CsplitError::InvalidNumber(opt))
-            })
-            .transpose()?
-            .unwrap_or(2);
-        // translate the custom format into a function
-        let fn_split_name: Box<dyn Fn(usize) -> String> = match format_opt {
-            None => Box::new(move |n: usize| -> String {
-                format!("{}{:0width$}", prefix, n, width = n_digits)
-            }),
-            Some(custom) => {
-                let spec =
-                    Regex::new(r"(?P<ALL>%((?P<FLAG>[0#-])(?P<WIDTH>\d+)?)?(?P<TYPE>[diuoxX]))")
-                        .unwrap();
-                let mut captures_iter = spec.captures_iter(&custom);
-                let custom_fn: Box<dyn Fn(usize) -> String> = match captures_iter.next() {
-                    Some(captures) => {
-                        let all = captures.name("ALL").unwrap();
-                        let before = custom[0..all.start()].to_owned();
-                        let after = custom[all.end()..].to_owned();
-                        let n_digits = match captures.name("WIDTH") {
-                            None => 0,
-                            Some(m) => m.as_str().parse::<usize>().unwrap(),
-                        };
-                        match (captures.name("FLAG"), captures.name("TYPE")) {
-                            (None, Some(ref t)) => match t.as_str() {
-                                "d" | "i" | "u" => Box::new(move |n: usize| -> String {
-                                    format!("{}{}{}{}", prefix, before, n, after)
-                                }),
-                                "o" => Box::new(move |n: usize| -> String {
-                                    format!("{}{}{:o}{}", prefix, before, n, after)
-                                }),
-                                "x" => Box::new(move |n: usize| -> String {
-                                    format!("{}{}{:x}{}", prefix, before, n, after)
-                                }),
-                                "X" => Box::new(move |n: usize| -> String {
-                                    format!("{}{}{:X}{}", prefix, before, n, after)
-                                }),
-                                _ => return Err(CsplitError::SuffixFormatIncorrect),
-                            },
-                            (Some(ref f), Some(ref t)) => {
-                                match (f.as_str(), t.as_str()) {
-                                    /*
-                                     * zero padding
-                                     */
-                                    // decimal
-                                    ("0", "d") | ("0", "i") | ("0", "u") => {
-                                        Box::new(move |n: usize| -> String {
-                                            format!(
-                                                "{}{}{:0width$}{}",
-                                                prefix,
-                                                before,
-                                                n,
-                                                after,
-                                                width = n_digits
-                                            )
-                                        })
-                                    }
-                                    // octal
-                                    ("0", "o") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:0width$o}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-                                    // lower hexadecimal
-                                    ("0", "x") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:0width$x}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-                                    // upper hexadecimal
-                                    ("0", "X") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:0width$X}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-
-                                    /*
-                                     * Alternate form
-                                     */
-                                    // octal
-                                    ("#", "o") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:>#width$o}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-                                    // lower hexadecimal
-                                    ("#", "x") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:>#width$x}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-                                    // upper hexadecimal
-                                    ("#", "X") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:>#width$X}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-
-                                    /*
-                                     * Left adjusted
-                                     */
-                                    // decimal
-                                    ("-", "d") | ("-", "i") | ("-", "u") => {
-                                        Box::new(move |n: usize| -> String {
-                                            format!(
-                                                "{}{}{:<#width$}{}",
-                                                prefix,
-                                                before,
-                                                n,
-                                                after,
-                                                width = n_digits
-                                            )
-                                        })
-                                    }
-                                    // octal
-                                    ("-", "o") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:<#width$o}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-                                    // lower hexadecimal
-                                    ("-", "x") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:<#width$x}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-                                    // upper hexadecimal
-                                    ("-", "X") => Box::new(move |n: usize| -> String {
-                                        format!(
-                                            "{}{}{:<#width$X}{}",
-                                            prefix,
-                                            before,
-                                            n,
-                                            after,
-                                            width = n_digits
-                                        )
-                                    }),
-
-                                    _ => return Err(CsplitError::SuffixFormatIncorrect),
-                                }
-                            }
-                            _ => return Err(CsplitError::SuffixFormatIncorrect),
-                        }
-                    }
-                    None => return Err(CsplitError::SuffixFormatIncorrect),
-                };
-
-                // there cannot be more than one format pattern
-                if captures_iter.next().is_some() {
-                    return Err(CsplitError::SuffixFormatTooManyPercents);
-                }
-                custom_fn
-            }
-        };
-
-        Ok(SplitName { fn_split_name })
-    }
-
-    /// Returns the filename of the i-th split.
-    pub fn get(&self, n: usize) -> String {
-        (self.fn_split_name)(n)
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    // spell-checker:ignore (path) xxcst
-
-    use super::*;
-
-    #[test]
-    fn invalid_number() {
-        let split_name = SplitName::new(None, None, Some(String::from("bad")));
-        match split_name {
-            Err(CsplitError::InvalidNumber(_)) => (),
-            _ => panic!("should fail with InvalidNumber"),
-        };
-    }
-
-    #[test]
-    fn invalid_suffix_format1() {
-        let split_name = SplitName::new(None, Some(String::from("no conversion string")), None);
-        match split_name {
-            Err(CsplitError::SuffixFormatIncorrect) => (),
-            _ => panic!("should fail with SuffixFormatIncorrect"),
-        };
-    }
-
-    #[test]
-    fn invalid_suffix_format2() {
-        let split_name = SplitName::new(None, Some(String::from("%042a")), None);
-        match split_name {
-            Err(CsplitError::SuffixFormatIncorrect) => (),
-            _ => panic!("should fail with SuffixFormatIncorrect"),
-        };
-    }
-
-    #[test]
-    fn default_formatter() {
-        let split_name = SplitName::new(None, None, None).unwrap();
-        assert_eq!(split_name.get(2), "xx02");
-    }
-
-    #[test]
-    fn default_formatter_with_prefix() {
-        let split_name = SplitName::new(Some(String::from("aaa")), None, None).unwrap();
-        assert_eq!(split_name.get(2), "aaa02");
-    }
-
-    #[test]
-    fn default_formatter_with_width() {
-        let split_name = SplitName::new(None, None, Some(String::from("5"))).unwrap();
-        assert_eq!(split_name.get(2), "xx00002");
-    }
-
-    #[test]
-    fn no_padding_decimal() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%d-")), None).unwrap();
-        assert_eq!(split_name.get(2), "xxcst-2-");
-    }
-
-    #[test]
-    fn zero_padding_decimal1() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%03d-")), None).unwrap();
-        assert_eq!(split_name.get(2), "xxcst-002-");
-    }
-
-    #[test]
-    fn zero_padding_decimal2() {
-        let split_name = SplitName::new(
-            Some(String::from("pre-")),
-            Some(String::from("cst-%03d-post")),
-            None,
-        )
-        .unwrap();
-        assert_eq!(split_name.get(2), "pre-cst-002-post");
-    }
-
-    #[test]
-    fn zero_padding_decimal3() {
-        let split_name = SplitName::new(
-            None,
-            Some(String::from("cst-%03d-")),
-            Some(String::from("42")),
-        )
-        .unwrap();
-        assert_eq!(split_name.get(2), "xxcst-002-");
-    }
-
-    #[test]
-    fn zero_padding_decimal4() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%03i-")), None).unwrap();
-        assert_eq!(split_name.get(2), "xxcst-002-");
-    }
-
-    #[test]
-    fn zero_padding_decimal5() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%03u-")), None).unwrap();
-        assert_eq!(split_name.get(2), "xxcst-002-");
-    }
-
-    #[test]
-    fn zero_padding_octal() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%03o-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-052-");
-    }
-
-    #[test]
-    fn zero_padding_lower_hex() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%03x-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-02a-");
-    }
-
-    #[test]
-    fn zero_padding_upper_hex() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%03X-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-02A-");
-    }
-
-    #[test]
-    fn alternate_form_octal() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%#10o-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-      0o52-");
-    }
-
-    #[test]
-    fn alternate_form_lower_hex() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%#10x-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-      0x2a-");
-    }
-
-    #[test]
-    fn alternate_form_upper_hex() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%#10X-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-      0x2A-");
-    }
-
-    #[test]
-    fn left_adjusted_decimal1() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%-10d-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-42        -");
-    }
-
-    #[test]
-    fn left_adjusted_decimal2() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%-10i-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-42        -");
-    }
-
-    #[test]
-    fn left_adjusted_decimal3() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%-10u-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-42        -");
-    }
-
-    #[test]
-    fn left_adjusted_octal() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%-10o-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-0o52      -");
-    }
-
-    #[test]
-    fn left_adjusted_lower_hex() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%-10x-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-0x2a      -");
-    }
-
-    #[test]
-    fn left_adjusted_upper_hex() {
-        let split_name = SplitName::new(None, Some(String::from("cst-%-10X-")), None).unwrap();
-        assert_eq!(split_name.get(42), "xxcst-0x2A      -");
-    }
-
-    #[test]
-    fn too_many_percent() {
-        let split_name = SplitName::new(None, Some(String::from("%02d-%-3x")), None);
-        match split_name {
-            Err(CsplitError::SuffixFormatTooManyPercents) => (),
-            _ => panic!("should fail with SuffixFormatTooManyPercents"),
-        };
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_cut/cut.rs.html b/src/uu_cut/cut.rs.html deleted file mode 100644 index 90f4a7cac..000000000 --- a/src/uu_cut/cut.rs.html +++ /dev/null @@ -1,1238 +0,0 @@ -cut.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-
// This file is part of the uutils coreutils package.
-//
-// (c) Rolf Morel <rolfmorel@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) delim sourcefiles
-
-#[macro_use]
-extern crate uucore;
-
-use bstr::io::BufReadExt;
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{stdin, stdout, BufReader, BufWriter, Read, Write};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-
-use self::searcher::Searcher;
-use uucore::ranges::Range;
-use uucore::InvalidEncodingHandling;
-
-mod searcher;
-
-static NAME: &str = "cut";
-static SYNTAX: &str =
-    "[-d] [-s] [-z] [--output-delimiter] ((-f|-b|-c) {{sequence}}) {{sourcefile}}+";
-static SUMMARY: &str =
-    "Prints specified byte or field columns from each line of stdin or the input files";
-static LONG_HELP: &str = "
- Each call must specify a mode (what to use for columns),
- a sequence (which columns to print), and provide a data source
-
- Specifying a mode
-
-    Use --bytes (-b) or --characters (-c) to specify byte mode
-
-    Use --fields (-f) to specify field mode, where each line is broken into
-    fields identified by a delimiter character. For example for a typical CSV
-    you could use this in combination with setting comma as the delimiter
-
- Specifying a sequence
-
-    A sequence is a group of 1 or more numbers or inclusive ranges separated
-    by a commas.
-
-    cut -f 2,5-7 some_file.txt
-    will display the 2nd, 5th, 6th, and 7th field for each source line
-
-    Ranges can extend to the end of the row by excluding the the second number
-
-    cut -f 3- some_file.txt
-    will display the 3rd field and all fields after for each source line
-
-    The first number of a range can be excluded, and this is effectively the
-    same as using 1 as the first number: it causes the range to begin at the
-    first column. Ranges can also display a single column
-
-    cut -f 1,3-5 some_file.txt
-    will display the 1st, 3rd, 4th, and 5th field for each source line
-
-    The --complement option, when used, inverts the effect of the sequence
-
-    cut --complement -f 4-6 some_file.txt
-    will display the every field but the 4th, 5th, and 6th
-
- Specifying a data source
-
-    If no sourcefile arguments are specified, stdin is used as the source of
-    lines to print
-
-    If sourcefile arguments are specified, stdin is ignored and all files are
-    read in consecutively if a sourcefile is not successfully read, a warning
-    will print to stderr, and the eventual status code will be 1, but cut
-    will continue to read through proceeding sourcefiles
-
-    To print columns from both STDIN and a file argument, use - (dash) as a
-    sourcefile argument to represent stdin.
-
- Field Mode options
-
-    The fields in each line are identified by a delimiter (separator)
-
-    Set the delimiter
-        Set the delimiter which separates fields in the file using the
-        --delimiter (-d) option. Setting the delimiter is optional.
-        If not set, a default delimiter of Tab will be used.
-
-    Optionally Filter based on delimiter
-        If the --only-delimited (-s) flag is provided, only lines which
-        contain the delimiter will be printed
-
-    Replace the delimiter
-        If the --output-delimiter option is provided, the argument used for
-        it will replace the delimiter character in each line printed. This is
-        useful for transforming tabular data - e.g. to convert a CSV to a
-        TSV (tab-separated file)
-
- Line endings
-
-    When the --zero-terminated (-z) option is used, cut sees \\0 (null) as the
-    'line ending' character (both for the purposes of reading lines and
-    separating printed lines) instead of \\n (newline). This is useful for
-    tabular data where some of the cells may contain newlines
-
-    echo 'ab\\0cd' | cut -z -c 1
-    will result in 'a\\0c\\0'
-";
-
-struct Options {
-    out_delim: Option<String>,
-    zero_terminated: bool,
-}
-
-struct FieldOptions {
-    delimiter: String, // one char long, String because of UTF8 representation
-    out_delimiter: Option<String>,
-    only_delimited: bool,
-    zero_terminated: bool,
-}
-
-enum Mode {
-    Bytes(Vec<Range>, Options),
-    Characters(Vec<Range>, Options),
-    Fields(Vec<Range>, FieldOptions),
-}
-
-fn stdout_writer() -> Box<dyn Write> {
-    if atty::is(atty::Stream::Stdout) {
-        Box::new(stdout())
-    } else {
-        Box::new(BufWriter::new(stdout())) as Box<dyn Write>
-    }
-}
-
-fn list_to_ranges(list: &str, complement: bool) -> Result<Vec<Range>, String> {
-    if complement {
-        Range::from_list(list).map(|r| uucore::ranges::complement(&r))
-    } else {
-        Range::from_list(list)
-    }
-}
-
-fn cut_bytes<R: Read>(reader: R, ranges: &[Range], opts: &Options) -> UResult<()> {
-    let newline_char = if opts.zero_terminated { b'\0' } else { b'\n' };
-    let buf_in = BufReader::new(reader);
-    let mut out = stdout_writer();
-    let delim = opts
-        .out_delim
-        .as_ref()
-        .map_or("", String::as_str)
-        .as_bytes();
-
-    let result = buf_in.for_byte_record(newline_char, |line| {
-        let mut print_delim = false;
-        for &Range { low, high } in ranges {
-            if low > line.len() {
-                break;
-            }
-            if print_delim {
-                out.write_all(delim)?;
-            } else if opts.out_delim.is_some() {
-                print_delim = true;
-            }
-            // change `low` from 1-indexed value to 0-index value
-            let low = low - 1;
-            let high = high.min(line.len());
-            out.write_all(&line[low..high])?;
-        }
-        out.write_all(&[newline_char])?;
-        Ok(true)
-    });
-
-    if let Err(e) = result {
-        return Err(USimpleError::new(1, e.to_string()));
-    }
-
-    Ok(())
-}
-
-#[allow(clippy::cognitive_complexity)]
-fn cut_fields_delimiter<R: Read>(
-    reader: R,
-    ranges: &[Range],
-    delim: &str,
-    only_delimited: bool,
-    newline_char: u8,
-    out_delim: &str,
-) -> UResult<()> {
-    let buf_in = BufReader::new(reader);
-    let mut out = stdout_writer();
-    let input_delim_len = delim.len();
-
-    let result = buf_in.for_byte_record_with_terminator(newline_char, |line| {
-        let mut fields_pos = 1;
-        let mut low_idx = 0;
-        let mut delim_search = Searcher::new(line, delim.as_bytes()).peekable();
-        let mut print_delim = false;
-
-        if delim_search.peek().is_none() {
-            if !only_delimited {
-                out.write_all(line)?;
-                if line[line.len() - 1] != newline_char {
-                    out.write_all(&[newline_char])?;
-                }
-            }
-
-            return Ok(true);
-        }
-
-        for &Range { low, high } in ranges {
-            if low - fields_pos > 0 {
-                low_idx = match delim_search.nth(low - fields_pos - 1) {
-                    Some(index) => index + input_delim_len,
-                    None => break,
-                };
-            }
-
-            for _ in 0..=high - low {
-                if print_delim {
-                    out.write_all(out_delim.as_bytes())?;
-                } else {
-                    print_delim = true;
-                }
-
-                match delim_search.next() {
-                    Some(high_idx) => {
-                        let segment = &line[low_idx..high_idx];
-
-                        out.write_all(segment)?;
-
-                        low_idx = high_idx + input_delim_len;
-                        fields_pos = high + 1;
-                    }
-                    None => {
-                        let segment = &line[low_idx..];
-
-                        out.write_all(segment)?;
-
-                        if line[line.len() - 1] == newline_char {
-                            return Ok(true);
-                        }
-                        break;
-                    }
-                }
-            }
-        }
-
-        out.write_all(&[newline_char])?;
-        Ok(true)
-    });
-
-    if let Err(e) = result {
-        return Err(USimpleError::new(1, e.to_string()));
-    }
-
-    Ok(())
-}
-
-#[allow(clippy::cognitive_complexity)]
-fn cut_fields<R: Read>(reader: R, ranges: &[Range], opts: &FieldOptions) -> UResult<()> {
-    let newline_char = if opts.zero_terminated { b'\0' } else { b'\n' };
-    if let Some(ref o_delim) = opts.out_delimiter {
-        return cut_fields_delimiter(
-            reader,
-            ranges,
-            &opts.delimiter,
-            opts.only_delimited,
-            newline_char,
-            o_delim,
-        );
-    }
-
-    let buf_in = BufReader::new(reader);
-    let mut out = stdout_writer();
-    let delim_len = opts.delimiter.len();
-
-    let result = buf_in.for_byte_record_with_terminator(newline_char, |line| {
-        let mut fields_pos = 1;
-        let mut low_idx = 0;
-        let mut delim_search = Searcher::new(line, opts.delimiter.as_bytes()).peekable();
-        let mut print_delim = false;
-
-        if delim_search.peek().is_none() {
-            if !opts.only_delimited {
-                out.write_all(line)?;
-                if line[line.len() - 1] != newline_char {
-                    out.write_all(&[newline_char])?;
-                }
-            }
-
-            return Ok(true);
-        }
-
-        for &Range { low, high } in ranges {
-            if low - fields_pos > 0 {
-                if let Some(delim_pos) = delim_search.nth(low - fields_pos - 1) {
-                    low_idx = if print_delim {
-                        delim_pos
-                    } else {
-                        delim_pos + delim_len
-                    }
-                } else {
-                    break;
-                }
-            }
-
-            match delim_search.nth(high - low) {
-                Some(high_idx) => {
-                    let segment = &line[low_idx..high_idx];
-
-                    out.write_all(segment)?;
-
-                    print_delim = true;
-                    low_idx = high_idx;
-                    fields_pos = high + 1;
-                }
-                None => {
-                    let segment = &line[low_idx..line.len()];
-
-                    out.write_all(segment)?;
-
-                    if line[line.len() - 1] == newline_char {
-                        return Ok(true);
-                    }
-                    break;
-                }
-            }
-        }
-        out.write_all(&[newline_char])?;
-        Ok(true)
-    });
-
-    if let Err(e) = result {
-        return Err(USimpleError::new(1, e.to_string()));
-    }
-
-    Ok(())
-}
-
-fn cut_files(mut filenames: Vec<String>, mode: Mode) -> UResult<()> {
-    let mut stdin_read = false;
-
-    if filenames.is_empty() {
-        filenames.push("-".to_owned());
-    }
-
-    for filename in &filenames {
-        if filename == "-" {
-            if stdin_read {
-                continue;
-            }
-
-            show_if_err!(match mode {
-                Mode::Bytes(ref ranges, ref opts) => cut_bytes(stdin(), ranges, opts),
-                Mode::Characters(ref ranges, ref opts) => cut_bytes(stdin(), ranges, opts),
-                Mode::Fields(ref ranges, ref opts) => cut_fields(stdin(), ranges, opts),
-            });
-
-            stdin_read = true;
-        } else {
-            let path = Path::new(&filename[..]);
-
-            if path.is_dir() {
-                show_error!("{}: Is a directory", filename.maybe_quote());
-                continue;
-            }
-
-            show_if_err!(File::open(&path)
-                .map_err_context(|| filename.maybe_quote().to_string())
-                .and_then(|file| {
-                    match &mode {
-                        Mode::Bytes(ref ranges, ref opts) => cut_bytes(file, ranges, opts),
-                        Mode::Characters(ref ranges, ref opts) => cut_bytes(file, ranges, opts),
-                        Mode::Fields(ref ranges, ref opts) => cut_fields(file, ranges, opts),
-                    }
-                }));
-        }
-    }
-
-    Ok(())
-}
-
-mod options {
-    pub const BYTES: &str = "bytes";
-    pub const CHARACTERS: &str = "characters";
-    pub const DELIMITER: &str = "delimiter";
-    pub const FIELDS: &str = "fields";
-    pub const ZERO_TERMINATED: &str = "zero-terminated";
-    pub const ONLY_DELIMITED: &str = "only-delimited";
-    pub const OUTPUT_DELIMITER: &str = "output-delimiter";
-    pub const COMPLEMENT: &str = "complement";
-    pub const FILE: &str = "file";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let complement = matches.is_present(options::COMPLEMENT);
-
-    let mode_parse = match (
-        matches.value_of(options::BYTES),
-        matches.value_of(options::CHARACTERS),
-        matches.value_of(options::FIELDS),
-    ) {
-        (Some(byte_ranges), None, None) => list_to_ranges(byte_ranges, complement).map(|ranges| {
-            Mode::Bytes(
-                ranges,
-                Options {
-                    out_delim: Some(
-                        matches
-                            .value_of(options::OUTPUT_DELIMITER)
-                            .unwrap_or_default()
-                            .to_owned(),
-                    ),
-                    zero_terminated: matches.is_present(options::ZERO_TERMINATED),
-                },
-            )
-        }),
-        (None, Some(char_ranges), None) => list_to_ranges(char_ranges, complement).map(|ranges| {
-            Mode::Characters(
-                ranges,
-                Options {
-                    out_delim: Some(
-                        matches
-                            .value_of(options::OUTPUT_DELIMITER)
-                            .unwrap_or_default()
-                            .to_owned(),
-                    ),
-                    zero_terminated: matches.is_present(options::ZERO_TERMINATED),
-                },
-            )
-        }),
-        (None, None, Some(field_ranges)) => {
-            list_to_ranges(field_ranges, complement).and_then(|ranges| {
-                let out_delim = match matches.value_of(options::OUTPUT_DELIMITER) {
-                    Some(s) => {
-                        if s.is_empty() {
-                            Some("\0".to_owned())
-                        } else {
-                            Some(s.to_owned())
-                        }
-                    }
-                    None => None,
-                };
-
-                let only_delimited = matches.is_present(options::ONLY_DELIMITED);
-                let zero_terminated = matches.is_present(options::ZERO_TERMINATED);
-
-                match matches.value_of(options::DELIMITER) {
-                    Some(mut delim) => {
-                        // GNU's `cut` supports `-d=` to set the delimiter to `=`.
-                        // Clap parsing is limited in this situation, see:
-                        // https://github.com/uutils/coreutils/issues/2424#issuecomment-863825242
-                        // Since clap parsing handles `-d=` as delimiter explicitly set to "" and
-                        // an empty delimiter is not accepted by GNU's `cut` (and makes no sense),
-                        // we can use this as basis for a simple workaround:
-                        if delim.is_empty() {
-                            delim = "=";
-                        }
-                        if delim.chars().count() > 1 {
-                            Err("invalid input: The '--delimiter' ('-d') option expects empty or 1 character long, but was provided a value 2 characters or longer".into())
-                        } else {
-                            let delim = if delim.is_empty() {
-                                "\0".to_owned()
-                            } else {
-                                delim.to_owned()
-                            };
-
-                            Ok(Mode::Fields(
-                                ranges,
-                                FieldOptions {
-                                    delimiter: delim,
-                                    out_delimiter: out_delim,
-                                    only_delimited,
-                                    zero_terminated,
-                                },
-                            ))
-                        }
-                    }
-                    None => Ok(Mode::Fields(
-                        ranges,
-                        FieldOptions {
-                            delimiter: "\t".to_owned(),
-                            out_delimiter: out_delim,
-                            only_delimited,
-                            zero_terminated,
-                        },
-                    )),
-                }
-            })
-        }
-        (ref b, ref c, ref f) if b.is_some() || c.is_some() || f.is_some() => Err(
-            "invalid usage: expects no more than one of --fields (-f), --chars (-c) or --bytes (-b)".into()
-        ),
-        _ => Err("invalid usage: expects one of --fields (-f), --chars (-c) or --bytes (-b)".into()),
-    };
-
-    let mode_parse = match mode_parse {
-        Err(_) => mode_parse,
-        Ok(mode) => match mode {
-            Mode::Bytes(_, _) | Mode::Characters(_, _)
-                if matches.is_present(options::DELIMITER) =>
-            {
-                Err("invalid input: The '--delimiter' ('-d') option only usable if printing a sequence of fields".into())
-            }
-            Mode::Bytes(_, _) | Mode::Characters(_, _)
-                if matches.is_present(options::ONLY_DELIMITED) =>
-            {
-                Err("invalid input: The '--only-delimited' ('-s') option only usable if printing a sequence of fields".into())
-            }
-            _ => Ok(mode),
-        },
-    };
-
-    let files: Vec<String> = matches
-        .values_of(options::FILE)
-        .unwrap_or_default()
-        .map(str::to_owned)
-        .collect();
-
-    match mode_parse {
-        Ok(mode) => cut_files(files, mode),
-        Err(e) => Err(USimpleError::new(1, e)),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(SYNTAX)
-        .about(SUMMARY)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::BYTES)
-                .short('b')
-                .long(options::BYTES)
-                .takes_value(true)
-                .help("filter byte columns from the input source")
-                .allow_hyphen_values(true)
-                .value_name("LIST")
-                .display_order(1),
-        )
-        .arg(
-            Arg::new(options::CHARACTERS)
-                .short('c')
-                .long(options::CHARACTERS)
-                .help("alias for character mode")
-                .takes_value(true)
-                .allow_hyphen_values(true)
-                .value_name("LIST")
-                .display_order(2),
-        )
-        .arg(
-            Arg::new(options::DELIMITER)
-                .short('d')
-                .long(options::DELIMITER)
-                .help("specify the delimiter character that separates fields in the input source. Defaults to Tab.")
-                .takes_value(true)
-                .value_name("DELIM")
-                .display_order(3),
-        )
-        .arg(
-            Arg::new(options::FIELDS)
-                .short('f')
-                .long(options::FIELDS)
-                .help("filter field columns from the input source")
-                .takes_value(true)
-                .allow_hyphen_values(true)
-                .value_name("LIST")
-                .display_order(4),
-        )
-        .arg(
-            Arg::new(options::COMPLEMENT)
-                .long(options::COMPLEMENT)
-                .help("invert the filter - instead of displaying only the filtered columns, display all but those columns")
-                .takes_value(false)
-                .display_order(5),
-        )
-        .arg(
-            Arg::new(options::ONLY_DELIMITED)
-            .short('s')
-                .long(options::ONLY_DELIMITED)
-                .help("in field mode, only print lines which contain the delimiter")
-                .takes_value(false)
-                .display_order(6),
-        )
-        .arg(
-            Arg::new(options::ZERO_TERMINATED)
-            .short('z')
-                .long(options::ZERO_TERMINATED)
-                .help("instead of filtering columns based on line, filter columns based on \\0 (NULL character)")
-                .takes_value(false)
-                .display_order(8),
-        )
-        .arg(
-            Arg::new(options::OUTPUT_DELIMITER)
-            .long(options::OUTPUT_DELIMITER)
-                .help("in field mode, replace the delimiter in output lines with this option's argument")
-                .takes_value(true)
-                .value_name("NEW_DELIM")
-                .display_order(7),
-        )
-        .arg(
-            Arg::new(options::FILE)
-            .hide(true)
-                .multiple_occurrences(true)
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_cut/searcher.rs.html b/src/uu_cut/searcher.rs.html deleted file mode 100644 index a58565360..000000000 --- a/src/uu_cut/searcher.rs.html +++ /dev/null @@ -1,214 +0,0 @@ -searcher.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-
// This file is part of the uutils coreutils package.
-//
-// (c) Rolf Morel <rolfmorel@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-use memchr::memchr;
-
-pub struct Searcher<'a> {
-    haystack: &'a [u8],
-    needle: &'a [u8],
-    position: usize,
-}
-
-impl<'a> Searcher<'a> {
-    pub fn new(haystack: &'a [u8], needle: &'a [u8]) -> Searcher<'a> {
-        assert!(!needle.is_empty());
-        Searcher {
-            haystack,
-            needle,
-            position: 0,
-        }
-    }
-}
-
-impl<'a> Iterator for Searcher<'a> {
-    type Item = usize;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        loop {
-            if let Some(match_idx) = memchr(self.needle[0], self.haystack) {
-                if self.needle.len() == 1
-                    || self.haystack[match_idx + 1..].starts_with(&self.needle[1..])
-                {
-                    let match_pos = self.position + match_idx;
-                    let skip = match_idx + self.needle.len();
-                    self.haystack = &self.haystack[skip..];
-                    self.position += skip;
-                    return Some(match_pos);
-                } else {
-                    let skip = match_idx + 1;
-                    self.haystack = &self.haystack[skip..];
-                    self.position += skip;
-                    // continue
-                }
-            } else {
-                return None;
-            }
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use super::*;
-
-    const NEEDLE: &[u8] = "ab".as_bytes();
-
-    #[test]
-    fn test_normal() {
-        let iter = Searcher::new("a.a.a".as_bytes(), "a".as_bytes());
-        let items: Vec<usize> = iter.collect();
-        assert_eq!(vec![0, 2, 4], items);
-    }
-
-    #[test]
-    fn test_empty() {
-        let iter = Searcher::new("".as_bytes(), "a".as_bytes());
-        let items: Vec<usize> = iter.collect();
-        assert_eq!(vec![] as Vec<usize>, items);
-    }
-
-    fn test_multibyte(line: &[u8], expected: Vec<usize>) {
-        let iter = Searcher::new(line, NEEDLE);
-        let items: Vec<usize> = iter.collect();
-        assert_eq!(expected, items);
-    }
-
-    #[test]
-    fn test_multibyte_normal() {
-        test_multibyte("...ab...ab...".as_bytes(), vec![3, 8]);
-    }
-
-    #[test]
-    fn test_multibyte_needle_head_at_end() {
-        test_multibyte("a".as_bytes(), vec![]);
-    }
-
-    #[test]
-    fn test_multibyte_starting_needle() {
-        test_multibyte("ab...ab...".as_bytes(), vec![0, 5]);
-    }
-
-    #[test]
-    fn test_multibyte_trailing_needle() {
-        test_multibyte("...ab...ab".as_bytes(), vec![3, 8]);
-    }
-
-    #[test]
-    fn test_multibyte_first_byte_false_match() {
-        test_multibyte("aA..aCaC..ab..aD".as_bytes(), vec![10]);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_date/date.rs.html b/src/uu_date/date.rs.html deleted file mode 100644 index 422266cca..000000000 --- a/src/uu_date/date.rs.html +++ /dev/null @@ -1,852 +0,0 @@ -date.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-
// This file is part of the uutils coreutils package.
-//
-// (c) Anthony Deschamps <anthony.j.deschamps@gmail.com>
-// (c) Sylvestre Ledru <sylvestre@debian.org>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (chrono) Datelike Timelike ; (format) DATEFILE MMDDhhmm ; (vars) datetime datetimes
-
-use chrono::{DateTime, FixedOffset, Local, Offset, Utc};
-#[cfg(windows)]
-use chrono::{Datelike, Timelike};
-use clap::{crate_version, App, Arg};
-#[cfg(all(unix, not(target_os = "macos"), not(target_os = "redox")))]
-use libc::{clock_settime, timespec, CLOCK_REALTIME};
-use std::fs::File;
-use std::io::{BufRead, BufReader};
-use std::path::PathBuf;
-use uucore::display::Quotable;
-#[cfg(not(any(target_os = "macos", target_os = "redox")))]
-use uucore::error::FromIo;
-use uucore::error::{UResult, USimpleError};
-use uucore::show_error;
-#[cfg(windows)]
-use winapi::{
-    shared::minwindef::WORD,
-    um::{minwinbase::SYSTEMTIME, sysinfoapi::SetSystemTime},
-};
-
-// Options
-const DATE: &str = "date";
-const HOURS: &str = "hours";
-const MINUTES: &str = "minutes";
-const SECONDS: &str = "seconds";
-const HOUR: &str = "hour";
-const MINUTE: &str = "minute";
-const SECOND: &str = "second";
-const NS: &str = "ns";
-
-const NAME: &str = "date";
-const ABOUT: &str = "print or set the system date and time";
-
-const OPT_DATE: &str = "date";
-const OPT_FORMAT: &str = "format";
-const OPT_FILE: &str = "file";
-const OPT_DEBUG: &str = "debug";
-const OPT_ISO_8601: &str = "iso-8601";
-const OPT_RFC_EMAIL: &str = "rfc-email";
-const OPT_RFC_3339: &str = "rfc-3339";
-const OPT_SET: &str = "set";
-const OPT_REFERENCE: &str = "reference";
-const OPT_UNIVERSAL: &str = "universal";
-const OPT_UNIVERSAL_2: &str = "utc";
-
-// Help strings
-
-static ISO_8601_HELP_STRING: &str = "output date/time in ISO 8601 format.
- FMT='date' for date only (the default),
- 'hours', 'minutes', 'seconds', or 'ns'
- for date and time to the indicated precision.
- Example: 2006-08-14T02:34:56-06:00";
-
-static RFC_5322_HELP_STRING: &str = "output date and time in RFC 5322 format.
- Example: Mon, 14 Aug 2006 02:34:56 -0600";
-
-static RFC_3339_HELP_STRING: &str = "output date/time in RFC 3339 format.
- FMT='date', 'seconds', or 'ns'
- for date and time to the indicated precision.
- Example: 2006-08-14 02:34:56-06:00";
-
-#[cfg(not(any(target_os = "macos", target_os = "redox")))]
-static OPT_SET_HELP_STRING: &str = "set time described by STRING";
-#[cfg(target_os = "macos")]
-static OPT_SET_HELP_STRING: &str = "set time described by STRING (not available on mac yet)";
-#[cfg(target_os = "redox")]
-static OPT_SET_HELP_STRING: &str = "set time described by STRING (not available on redox yet)";
-
-/// Settings for this program, parsed from the command line
-struct Settings {
-    utc: bool,
-    format: Format,
-    date_source: DateSource,
-    set_to: Option<DateTime<FixedOffset>>,
-}
-
-/// Various ways of displaying the date
-enum Format {
-    Iso8601(Iso8601Format),
-    Rfc5322,
-    Rfc3339(Rfc3339Format),
-    Custom(String),
-    Default,
-}
-
-/// Various places that dates can come from
-enum DateSource {
-    Now,
-    Custom(String),
-    File(PathBuf),
-}
-
-enum Iso8601Format {
-    Date,
-    Hours,
-    Minutes,
-    Seconds,
-    Ns,
-}
-
-impl<'a> From<&'a str> for Iso8601Format {
-    fn from(s: &str) -> Self {
-        match s {
-            HOURS | HOUR => Iso8601Format::Hours,
-            MINUTES | MINUTE => Iso8601Format::Minutes,
-            SECONDS | SECOND => Iso8601Format::Seconds,
-            NS => Iso8601Format::Ns,
-            DATE => Iso8601Format::Date,
-            // Should be caught by clap
-            _ => panic!("Invalid format: {}", s),
-        }
-    }
-}
-
-enum Rfc3339Format {
-    Date,
-    Seconds,
-    Ns,
-}
-
-impl<'a> From<&'a str> for Rfc3339Format {
-    fn from(s: &str) -> Self {
-        match s {
-            DATE => Rfc3339Format::Date,
-            SECONDS | SECOND => Rfc3339Format::Seconds,
-            NS => Rfc3339Format::Ns,
-            // Should be caught by clap
-            _ => panic!("Invalid format: {}", s),
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let syntax = format!(
-        "{0} [OPTION]... [+FORMAT]...
- {0} [OPTION]... [MMDDhhmm[[CC]YY][.ss]]",
-        NAME
-    );
-    let matches = uu_app().override_usage(&syntax[..]).get_matches_from(args);
-
-    let format = if let Some(form) = matches.value_of(OPT_FORMAT) {
-        if !form.starts_with('+') {
-            return Err(USimpleError::new(
-                1,
-                format!("invalid date {}", form.quote()),
-            ));
-        }
-        let form = form[1..].to_string();
-        Format::Custom(form)
-    } else if let Some(fmt) = matches
-        .values_of(OPT_ISO_8601)
-        .map(|mut iter| iter.next().unwrap_or(DATE).into())
-    {
-        Format::Iso8601(fmt)
-    } else if matches.is_present(OPT_RFC_EMAIL) {
-        Format::Rfc5322
-    } else if let Some(fmt) = matches.value_of(OPT_RFC_3339).map(Into::into) {
-        Format::Rfc3339(fmt)
-    } else {
-        Format::Default
-    };
-
-    let date_source = if let Some(date) = matches.value_of(OPT_DATE) {
-        DateSource::Custom(date.into())
-    } else if let Some(file) = matches.value_of(OPT_FILE) {
-        DateSource::File(file.into())
-    } else {
-        DateSource::Now
-    };
-
-    let set_to = match matches.value_of(OPT_SET).map(parse_date) {
-        None => None,
-        Some(Err((input, _err))) => {
-            return Err(USimpleError::new(
-                1,
-                format!("invalid date {}", input.quote()),
-            ));
-        }
-        Some(Ok(date)) => Some(date),
-    };
-
-    let settings = Settings {
-        utc: matches.is_present(OPT_UNIVERSAL),
-        format,
-        date_source,
-        set_to,
-    };
-
-    if let Some(date) = settings.set_to {
-        // All set time functions expect UTC datetimes.
-        let date: DateTime<Utc> = if settings.utc {
-            date.with_timezone(&Utc)
-        } else {
-            date.into()
-        };
-
-        return set_system_datetime(date);
-    } else {
-        // Declare a file here because it needs to outlive the `dates` iterator.
-        let file: File;
-
-        // Get the current time, either in the local time zone or UTC.
-        let now: DateTime<FixedOffset> = if settings.utc {
-            let now = Utc::now();
-            now.with_timezone(&now.offset().fix())
-        } else {
-            let now = Local::now();
-            now.with_timezone(now.offset())
-        };
-
-        // Iterate over all dates - whether it's a single date or a file.
-        let dates: Box<dyn Iterator<Item = _>> = match settings.date_source {
-            DateSource::Custom(ref input) => {
-                let date = parse_date(input.clone());
-                let iter = std::iter::once(date);
-                Box::new(iter)
-            }
-            DateSource::File(ref path) => {
-                file = File::open(path).unwrap();
-                let lines = BufReader::new(file).lines();
-                let iter = lines.filter_map(Result::ok).map(parse_date);
-                Box::new(iter)
-            }
-            DateSource::Now => {
-                let iter = std::iter::once(Ok(now));
-                Box::new(iter)
-            }
-        };
-
-        let format_string = make_format_string(&settings);
-
-        // Format all the dates
-        for date in dates {
-            match date {
-                Ok(date) => {
-                    // GNU `date` uses `%N` for nano seconds, however crate::chrono uses `%f`
-                    let format_string = &format_string.replace("%N", "%f");
-                    let formatted = date.format(format_string).to_string().replace("%f", "%N");
-                    println!("{}", formatted);
-                }
-                Err((input, _err)) => show_error!("invalid date {}", input.quote()),
-            }
-        }
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_DATE)
-                .short('d')
-                .long(OPT_DATE)
-                .takes_value(true)
-                .help("display time described by STRING, not 'now'"),
-        )
-        .arg(
-            Arg::new(OPT_FILE)
-                .short('f')
-                .long(OPT_FILE)
-                .takes_value(true)
-                .help("like --date; once for each line of DATEFILE"),
-        )
-        .arg(
-            Arg::new(OPT_ISO_8601)
-                .short('I')
-                .long(OPT_ISO_8601)
-                .takes_value(true)
-                .help(ISO_8601_HELP_STRING),
-        )
-        .arg(
-            Arg::new(OPT_RFC_EMAIL)
-                .short('R')
-                .long(OPT_RFC_EMAIL)
-                .help(RFC_5322_HELP_STRING),
-        )
-        .arg(
-            Arg::new(OPT_RFC_3339)
-                .long(OPT_RFC_3339)
-                .takes_value(true)
-                .help(RFC_3339_HELP_STRING),
-        )
-        .arg(
-            Arg::new(OPT_DEBUG)
-                .long(OPT_DEBUG)
-                .help("annotate the parsed date, and warn about questionable usage to stderr"),
-        )
-        .arg(
-            Arg::new(OPT_REFERENCE)
-                .short('r')
-                .long(OPT_REFERENCE)
-                .takes_value(true)
-                .help("display the last modification time of FILE"),
-        )
-        .arg(
-            Arg::new(OPT_SET)
-                .short('s')
-                .long(OPT_SET)
-                .takes_value(true)
-                .help(OPT_SET_HELP_STRING),
-        )
-        .arg(
-            Arg::new(OPT_UNIVERSAL)
-                .short('u')
-                .long(OPT_UNIVERSAL)
-                .alias(OPT_UNIVERSAL_2)
-                .help("print or set Coordinated Universal Time (UTC)"),
-        )
-        .arg(Arg::new(OPT_FORMAT).multiple_occurrences(false))
-}
-
-/// Return the appropriate format string for the given settings.
-fn make_format_string(settings: &Settings) -> &str {
-    match settings.format {
-        Format::Iso8601(ref fmt) => match *fmt {
-            Iso8601Format::Date => "%F",
-            Iso8601Format::Hours => "%FT%H%:z",
-            Iso8601Format::Minutes => "%FT%H:%M%:z",
-            Iso8601Format::Seconds => "%FT%T%:z",
-            Iso8601Format::Ns => "%FT%T,%f%:z",
-        },
-        Format::Rfc5322 => "%a, %d %h %Y %T %z",
-        Format::Rfc3339(ref fmt) => match *fmt {
-            Rfc3339Format::Date => "%F",
-            Rfc3339Format::Seconds => "%F %T%:z",
-            Rfc3339Format::Ns => "%F %T.%f%:z",
-        },
-        Format::Custom(ref fmt) => fmt,
-        Format::Default => "%c",
-    }
-}
-
-/// Parse a `String` into a `DateTime`.
-/// If it fails, return a tuple of the `String` along with its `ParseError`.
-fn parse_date<S: AsRef<str> + Clone>(
-    s: S,
-) -> Result<DateTime<FixedOffset>, (String, chrono::format::ParseError)> {
-    // TODO: The GNU date command can parse a wide variety of inputs.
-    s.as_ref().parse().map_err(|e| (s.as_ref().into(), e))
-}
-
-#[cfg(not(any(unix, windows)))]
-fn set_system_datetime(_date: DateTime<Utc>) -> UResult<()> {
-    unimplemented!("setting date not implemented (unsupported target)");
-}
-
-#[cfg(target_os = "macos")]
-fn set_system_datetime(_date: DateTime<Utc>) -> UResult<()> {
-    Err(USimpleError::new(
-        1,
-        "setting the date is not supported by macOS".to_string(),
-    ))
-}
-
-#[cfg(target_os = "redox")]
-fn set_system_datetime(_date: DateTime<Utc>) -> UResult<()> {
-    Err(USimpleError::new(
-        1,
-        "setting the date is not supported by Redox".to_string(),
-    ))
-}
-
-#[cfg(all(unix, not(target_os = "macos"), not(target_os = "redox")))]
-/// System call to set date (unix).
-/// See here for more:
-/// https://doc.rust-lang.org/libc/i686-unknown-linux-gnu/libc/fn.clock_settime.html
-/// https://linux.die.net/man/3/clock_settime
-/// https://www.gnu.org/software/libc/manual/html_node/Time-Types.html
-fn set_system_datetime(date: DateTime<Utc>) -> UResult<()> {
-    let timespec = timespec {
-        tv_sec: date.timestamp() as _,
-        tv_nsec: date.timestamp_subsec_nanos() as _,
-    };
-
-    let result = unsafe { clock_settime(CLOCK_REALTIME, &timespec) };
-
-    if result != 0 {
-        Err(std::io::Error::last_os_error().map_err_context(|| "cannot set date".to_string()))
-    } else {
-        Ok(())
-    }
-}
-
-#[cfg(windows)]
-/// System call to set date (Windows).
-/// See here for more:
-/// https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-setsystemtime
-/// https://docs.microsoft.com/en-us/windows/win32/api/minwinbase/ns-minwinbase-systemtime
-fn set_system_datetime(date: DateTime<Utc>) -> UResult<()> {
-    let system_time = SYSTEMTIME {
-        wYear: date.year() as WORD,
-        wMonth: date.month() as WORD,
-        // Ignored
-        wDayOfWeek: 0,
-        wDay: date.day() as WORD,
-        wHour: date.hour() as WORD,
-        wMinute: date.minute() as WORD,
-        wSecond: date.second() as WORD,
-        // TODO: be careful of leap seconds - valid range is [0, 999] - how to handle?
-        wMilliseconds: ((date.nanosecond() / 1_000_000) % 1000) as WORD,
-    };
-
-    let result = unsafe { SetSystemTime(&system_time) };
-
-    if result == 0 {
-        Err(std::io::Error::last_os_error().map_err_context(|| "cannot set date".to_string()))
-    } else {
-        Ok(())
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_dd/conversion_tables.rs.html b/src/uu_dd/conversion_tables.rs.html deleted file mode 100644 index 7f6e61383..000000000 --- a/src/uu_dd/conversion_tables.rs.html +++ /dev/null @@ -1,446 +0,0 @@ -conversion_tables.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-
// This file is part of the uutils coreutils package.
-//
-// (c) Tyler Steele <tyler.steele@protonmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// Note: Conversion tables are just lookup tables.
-// eg. The ASCII->EBCDIC table stores the EBCDIC code at the index
-// obtained by treating the ASCII representation as a number.
-
-pub type ConversionTable = [u8; 256];
-
-pub const ASCII_UCASE_TO_LCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
-    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
-    0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
-    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
-    0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
-    0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
-    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
-    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
-    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
-    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
-    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
-    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
-    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_LCASE_TO_UCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
-    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
-    0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
-    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
-    0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
-    0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
-    0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
-    0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
-    0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
-    0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
-    0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
-    0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
-    0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_TO_EBCDIC: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x9a, 0x6d,
-    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0x5f, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x6a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0x4a, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xa1, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_TO_EBCDIC_UCASE_TO_LCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xad, 0xe0, 0xbd, 0x9a, 0x6d,
-    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0x5f, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x6a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0x4a, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xa1, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_TO_EBCDIC_LCASE_TO_UCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x9a, 0x6d,
-    0x79, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xc0, 0x4f, 0xd0, 0x5f, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x6a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0x4a, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xa1, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_TO_IBM: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d,
-    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_TO_IBM_UCASE_TO_LCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d,
-    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const ASCII_TO_IBM_LCASE_TO_UCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d,
-    0x79, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const EBCDIC_TO_ASCII: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x9c, 0x09, 0x86, 0x7f, 0x97, 0x8d, 0x8e, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x9d, 0x85, 0x08, 0x87, 0x18, 0x19, 0x92, 0x8f, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x80, 0x81, 0x82, 0x83, 0x84, 0x0a, 0x17, 0x1b, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x05, 0x06, 0x07,
-    0x90, 0x91, 0x16, 0x93, 0x94, 0x95, 0x96, 0x04, 0x98, 0x99, 0x9a, 0x9b, 0x14, 0x15, 0x9e, 0x1a,
-    0x20, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xd5, 0x2e, 0x3c, 0x28, 0x2b, 0x7c,
-    0x26, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0x21, 0x24, 0x2a, 0x29, 0x3b, 0x7e,
-    0x2d, 0x2f, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xcb, 0x2c, 0x25, 0x5f, 0x3e, 0x3f,
-    0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xc0, 0xc1, 0xc2, 0x60, 0x3a, 0x23, 0x40, 0x27, 0x3d, 0x22,
-    0xc3, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
-    0xca, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x5e, 0xcc, 0xcd, 0xce, 0xcf, 0xd0,
-    0xd1, 0xe5, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0xd2, 0xd3, 0xd4, 0x5b, 0xd6, 0xd7,
-    0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0x5d, 0xe6, 0xe7,
-    0x7b, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed,
-    0x7d, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x51, 0x52, 0xee, 0xef, 0xf0, 0xf1, 0xf2, 0xf3,
-    0x5c, 0x9f, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
-    0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const EBCDIC_TO_ASCII_UCASE_TO_LCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d,
-    0x79, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
-    0x97, 0x98, 0x99, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-pub const EBCDIC_TO_ASCII_LCASE_TO_UCASE: ConversionTable = [
-    0x00, 0x01, 0x02, 0x03, 0x37, 0x2d, 0x2e, 0x2f, 0x16, 0x05, 0x25, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
-    0x10, 0x11, 0x12, 0x13, 0x3c, 0x3d, 0x32, 0x26, 0x18, 0x19, 0x3f, 0x27, 0x1c, 0x1d, 0x1e, 0x1f,
-    0x40, 0x5a, 0x7f, 0x7b, 0x5b, 0x6c, 0x50, 0x7d, 0x4d, 0x5d, 0x5c, 0x4e, 0x6b, 0x60, 0x4b, 0x61,
-    0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0x7a, 0x5e, 0x4c, 0x7e, 0x6e, 0x6f,
-    0x7c, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xad, 0xe0, 0xbd, 0x5f, 0x6d,
-    0x79, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6,
-    0xd7, 0xd8, 0xd9, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xc0, 0x4f, 0xd0, 0xa1, 0x07,
-    0x20, 0x21, 0x22, 0x23, 0x24, 0x15, 0x06, 0x17, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x09, 0x0a, 0x1b,
-    0x30, 0x31, 0x1a, 0x33, 0x34, 0x35, 0x36, 0x08, 0x38, 0x39, 0x3a, 0x3b, 0x04, 0x14, 0x3e, 0xe1,
-    0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
-    0x58, 0x59, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75,
-    0x76, 0x77, 0x78, 0x80, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e,
-    0x9f, 0xa0, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
-    0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 0xda, 0xdb,
-    0xdc, 0xdd, 0xde, 0xdf, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
-];
-
-
- \ No newline at end of file diff --git a/src/uu_dd/datastructures.rs.html b/src/uu_dd/datastructures.rs.html deleted file mode 100644 index 1207b5f88..000000000 --- a/src/uu_dd/datastructures.rs.html +++ /dev/null @@ -1,354 +0,0 @@ -datastructures.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Tyler Steele <tyler.steele@protonmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-// spell-checker:ignore ctable, outfile
-
-use std::error::Error;
-use std::time;
-
-use uucore::error::UError;
-
-use crate::conversion_tables::*;
-
-pub struct ProgUpdate {
-    pub read_stat: ReadStat,
-    pub write_stat: WriteStat,
-    pub duration: time::Duration,
-}
-
-#[derive(Clone, Copy, Default)]
-pub struct ReadStat {
-    pub reads_complete: u64,
-    pub reads_partial: u64,
-    pub records_truncated: u32,
-}
-impl std::ops::AddAssign for ReadStat {
-    fn add_assign(&mut self, other: Self) {
-        *self = Self {
-            reads_complete: self.reads_complete + other.reads_complete,
-            reads_partial: self.reads_partial + other.reads_partial,
-            records_truncated: self.records_truncated + other.records_truncated,
-        }
-    }
-}
-
-#[derive(Clone, Copy)]
-pub struct WriteStat {
-    pub writes_complete: u64,
-    pub writes_partial: u64,
-    pub bytes_total: u128,
-}
-impl std::ops::AddAssign for WriteStat {
-    fn add_assign(&mut self, other: Self) {
-        *self = Self {
-            writes_complete: self.writes_complete + other.writes_complete,
-            writes_partial: self.writes_partial + other.writes_partial,
-            bytes_total: self.bytes_total + other.bytes_total,
-        }
-    }
-}
-
-type Cbs = usize;
-
-/// Stores all Conv Flags that apply to the input
-#[derive(Debug, Default, PartialEq)]
-pub struct IConvFlags {
-    pub ctable: Option<&'static ConversionTable>,
-    pub block: Option<Cbs>,
-    pub unblock: Option<Cbs>,
-    pub swab: bool,
-    pub sync: Option<u8>,
-    pub noerror: bool,
-}
-
-/// Stores all Conv Flags that apply to the output
-#[derive(Debug, Default, PartialEq)]
-pub struct OConvFlags {
-    pub sparse: bool,
-    pub excl: bool,
-    pub nocreat: bool,
-    pub notrunc: bool,
-    pub fdatasync: bool,
-    pub fsync: bool,
-}
-
-/// Stores all Flags that apply to the input
-#[derive(Debug, Default, PartialEq)]
-pub struct IFlags {
-    pub cio: bool,
-    pub direct: bool,
-    pub directory: bool,
-    pub dsync: bool,
-    pub sync: bool,
-    pub nocache: bool,
-    pub nonblock: bool,
-    pub noatime: bool,
-    pub noctty: bool,
-    pub nofollow: bool,
-    pub nolinks: bool,
-    pub binary: bool,
-    pub text: bool,
-    pub fullblock: bool,
-    pub count_bytes: bool,
-    pub skip_bytes: bool,
-}
-
-/// Stores all Flags that apply to the output
-#[derive(Debug, Default, PartialEq)]
-pub struct OFlags {
-    pub append: bool,
-    pub cio: bool,
-    pub direct: bool,
-    pub directory: bool,
-    pub dsync: bool,
-    pub sync: bool,
-    pub nocache: bool,
-    pub nonblock: bool,
-    pub noatime: bool,
-    pub noctty: bool,
-    pub nofollow: bool,
-    pub nolinks: bool,
-    pub binary: bool,
-    pub text: bool,
-    pub seek_bytes: bool,
-}
-
-/// The value of the status cl-option.
-/// Controls printing of transfer stats
-#[derive(Copy, Clone, Debug, PartialEq)]
-pub enum StatusLevel {
-    Progress,
-    Noxfer,
-    None,
-}
-
-/// The value of count=N
-/// Defaults to Reads(N)
-/// if iflag=count_bytes
-/// then becomes Bytes(N)
-#[derive(Debug, PartialEq)]
-pub enum CountType {
-    Reads(usize),
-    Bytes(usize),
-}
-
-#[derive(Debug)]
-pub enum InternalError {
-    WrongInputType,
-    WrongOutputType,
-    InvalidConvBlockUnblockCase,
-}
-
-impl std::fmt::Display for InternalError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            Self::WrongInputType | Self::WrongOutputType => {
-                write!(f, "Internal dd error: Wrong Input/Output data type")
-            }
-            Self::InvalidConvBlockUnblockCase => {
-                write!(f, "Invalid Conversion, Block, or Unblock data")
-            }
-        }
-    }
-}
-
-impl Error for InternalError {}
-impl UError for InternalError {}
-
-pub mod options {
-    pub const INFILE: &str = "if";
-    pub const OUTFILE: &str = "of";
-    pub const IBS: &str = "ibs";
-    pub const OBS: &str = "obs";
-    pub const BS: &str = "bs";
-    pub const CBS: &str = "cbs";
-    pub const COUNT: &str = "count";
-    pub const SKIP: &str = "skip";
-    pub const SEEK: &str = "seek";
-    pub const STATUS: &str = "status";
-    pub const CONV: &str = "conv";
-    pub const IFLAG: &str = "iflag";
-    pub const OFLAG: &str = "oflag";
-}
-
-
- \ No newline at end of file diff --git a/src/uu_dd/dd.rs.html b/src/uu_dd/dd.rs.html deleted file mode 100644 index 6f16cd103..000000000 --- a/src/uu_dd/dd.rs.html +++ /dev/null @@ -1,2260 +0,0 @@ -dd.rs - source -
   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-  11
-  12
-  13
-  14
-  15
-  16
-  17
-  18
-  19
-  20
-  21
-  22
-  23
-  24
-  25
-  26
-  27
-  28
-  29
-  30
-  31
-  32
-  33
-  34
-  35
-  36
-  37
-  38
-  39
-  40
-  41
-  42
-  43
-  44
-  45
-  46
-  47
-  48
-  49
-  50
-  51
-  52
-  53
-  54
-  55
-  56
-  57
-  58
-  59
-  60
-  61
-  62
-  63
-  64
-  65
-  66
-  67
-  68
-  69
-  70
-  71
-  72
-  73
-  74
-  75
-  76
-  77
-  78
-  79
-  80
-  81
-  82
-  83
-  84
-  85
-  86
-  87
-  88
-  89
-  90
-  91
-  92
-  93
-  94
-  95
-  96
-  97
-  98
-  99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 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
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-
// This file is part of the uutils coreutils package.
-//
-// (c) Tyler Steele <tyler.steele@protonmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore fname, tname, fpath, specfile, testfile, unspec, ifile, ofile, outfile, fullblock, urand, fileio, atoe, atoibm, behaviour, bmax, bremain, btotal, cflags, creat, ctable, ctty, datastructures, doesnt, etoa, fileout, fname, gnudd, iconvflags, nocache, noctty, noerror, nofollow, nolinks, nonblock, oconvflags, outfile, parseargs, rlen, rmax, rposition, rremain, rsofar, rstat, sigusr, sigval, wlen, wstat
-
-#[cfg(test)]
-mod dd_unit_tests;
-
-mod datastructures;
-use datastructures::*;
-
-mod parseargs;
-use parseargs::Matches;
-
-mod conversion_tables;
-use conversion_tables::*;
-
-use std::cmp;
-use std::convert::TryInto;
-use std::env;
-#[cfg(target_os = "linux")]
-use std::error::Error;
-use std::fs::{File, OpenOptions};
-use std::io::{self, Read, Seek, Write};
-#[cfg(target_os = "linux")]
-use std::os::unix::fs::OpenOptionsExt;
-use std::path::Path;
-use std::sync::mpsc;
-#[cfg(target_os = "linux")]
-use std::sync::{atomic::AtomicUsize, atomic::Ordering, Arc};
-use std::thread;
-use std::time;
-
-use byte_unit::Byte;
-use clap::{crate_version, App, Arg, ArgMatches};
-use gcd::Gcd;
-#[cfg(target_os = "linux")]
-use signal_hook::consts::signal;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-const ABOUT: &str = "copy, and optionally convert, a file system resource";
-const BUF_INIT_BYTE: u8 = 0xDD;
-const NEWLINE: u8 = b'\n';
-const SPACE: u8 = b' ';
-
-struct Input<R: Read> {
-    src: R,
-    non_ascii: bool,
-    ibs: usize,
-    print_level: Option<StatusLevel>,
-    count: Option<CountType>,
-    cflags: IConvFlags,
-    iflags: IFlags,
-}
-
-impl Input<io::Stdin> {
-    fn new(matches: &Matches) -> UResult<Self> {
-        let ibs = parseargs::parse_ibs(matches)?;
-        let non_ascii = parseargs::parse_input_non_ascii(matches)?;
-        let print_level = parseargs::parse_status_level(matches)?;
-        let cflags = parseargs::parse_conv_flag_input(matches)?;
-        let iflags = parseargs::parse_iflags(matches)?;
-        let skip = parseargs::parse_skip_amt(&ibs, &iflags, matches)?;
-        let count = parseargs::parse_count(&iflags, matches)?;
-
-        let mut i = Input {
-            src: io::stdin(),
-            non_ascii,
-            ibs,
-            print_level,
-            count,
-            cflags,
-            iflags,
-        };
-
-        if let Some(amt) = skip {
-            let mut buf = vec![BUF_INIT_BYTE; amt];
-            i.force_fill(&mut buf, amt)
-                .map_err_context(|| "failed to read input".to_string())?;
-        }
-
-        Ok(i)
-    }
-}
-
-#[cfg(target_os = "linux")]
-fn make_linux_iflags(iflags: &IFlags) -> Option<libc::c_int> {
-    let mut flag = 0;
-
-    if iflags.direct {
-        flag |= libc::O_DIRECT;
-    }
-    if iflags.directory {
-        flag |= libc::O_DIRECTORY;
-    }
-    if iflags.dsync {
-        flag |= libc::O_DSYNC;
-    }
-    if iflags.noatime {
-        flag |= libc::O_NOATIME;
-    }
-    if iflags.noctty {
-        flag |= libc::O_NOCTTY;
-    }
-    if iflags.nofollow {
-        flag |= libc::O_NOFOLLOW;
-    }
-    if iflags.nonblock {
-        flag |= libc::O_NONBLOCK;
-    }
-    if iflags.sync {
-        flag |= libc::O_SYNC;
-    }
-
-    if flag != 0 {
-        Some(flag)
-    } else {
-        None
-    }
-}
-
-impl Input<File> {
-    fn new(matches: &Matches) -> UResult<Self> {
-        let ibs = parseargs::parse_ibs(matches)?;
-        let non_ascii = parseargs::parse_input_non_ascii(matches)?;
-        let print_level = parseargs::parse_status_level(matches)?;
-        let cflags = parseargs::parse_conv_flag_input(matches)?;
-        let iflags = parseargs::parse_iflags(matches)?;
-        let skip = parseargs::parse_skip_amt(&ibs, &iflags, matches)?;
-        let count = parseargs::parse_count(&iflags, matches)?;
-
-        if let Some(fname) = matches.value_of(options::INFILE) {
-            let mut src = {
-                let mut opts = OpenOptions::new();
-                opts.read(true);
-
-                #[cfg(target_os = "linux")]
-                if let Some(libc_flags) = make_linux_iflags(&iflags) {
-                    opts.custom_flags(libc_flags);
-                }
-
-                opts.open(fname)
-                    .map_err_context(|| "failed to open input file".to_string())?
-            };
-
-            if let Some(amt) = skip {
-                let amt: u64 = amt
-                    .try_into()
-                    .map_err(|_| USimpleError::new(1, "failed to parse seek amount"))?;
-                src.seek(io::SeekFrom::Start(amt))
-                    .map_err_context(|| "failed to seek in input file".to_string())?;
-            }
-
-            let i = Input {
-                src,
-                non_ascii,
-                ibs,
-                print_level,
-                count,
-                cflags,
-                iflags,
-            };
-
-            Ok(i)
-        } else {
-            Err(Box::new(InternalError::WrongInputType))
-        }
-    }
-}
-
-impl<R: Read> Read for Input<R> {
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        let mut base_idx = 0;
-        let target_len = buf.len();
-        loop {
-            match self.src.read(&mut buf[base_idx..]) {
-                Ok(0) => return Ok(base_idx),
-                Ok(rlen) if self.iflags.fullblock => {
-                    base_idx += rlen;
-
-                    if base_idx >= target_len {
-                        return Ok(target_len);
-                    }
-                }
-                Ok(len) => return Ok(len),
-                Err(e) if e.kind() == io::ErrorKind::Interrupted => continue,
-                Err(_) if self.cflags.noerror => return Ok(base_idx),
-                Err(e) => return Err(e),
-            }
-        }
-    }
-}
-
-impl<R: Read> Input<R> {
-    /// Fills a given buffer.
-    /// Reads in increments of 'self.ibs'.
-    /// The start of each ibs-sized read follows the previous one.
-    fn fill_consecutive(&mut self, buf: &mut Vec<u8>) -> std::io::Result<ReadStat> {
-        let mut reads_complete = 0;
-        let mut reads_partial = 0;
-        let mut bytes_total = 0;
-
-        for chunk in buf.chunks_mut(self.ibs) {
-            match self.read(chunk)? {
-                rlen if rlen == self.ibs => {
-                    bytes_total += rlen;
-                    reads_complete += 1;
-                }
-                rlen if rlen > 0 => {
-                    bytes_total += rlen;
-                    reads_partial += 1;
-                }
-                _ => break,
-            }
-        }
-
-        buf.truncate(bytes_total);
-        Ok(ReadStat {
-            reads_complete,
-            reads_partial,
-            // Records are not truncated when filling.
-            records_truncated: 0,
-        })
-    }
-
-    /// Fills a given buffer.
-    /// Reads in increments of 'self.ibs'.
-    /// The start of each ibs-sized read is aligned to multiples of ibs; remaining space is filled with the 'pad' byte.
-    fn fill_blocks(&mut self, buf: &mut Vec<u8>, pad: u8) -> std::io::Result<ReadStat> {
-        let mut reads_complete = 0;
-        let mut reads_partial = 0;
-        let mut base_idx = 0;
-
-        while base_idx < buf.len() {
-            let next_blk = cmp::min(base_idx + self.ibs, buf.len());
-            let target_len = next_blk - base_idx;
-
-            match self.read(&mut buf[base_idx..next_blk])? {
-                0 => break,
-                rlen if rlen < target_len => {
-                    reads_partial += 1;
-                    let padding = vec![pad; target_len - rlen];
-                    buf.splice(base_idx + rlen..next_blk, padding.into_iter());
-                }
-                _ => {
-                    reads_complete += 1;
-                }
-            }
-
-            base_idx += self.ibs;
-        }
-
-        buf.truncate(base_idx);
-        Ok(ReadStat {
-            reads_complete,
-            reads_partial,
-            records_truncated: 0,
-        })
-    }
-
-    /// Force-fills a buffer, ignoring zero-length reads which would otherwise be
-    /// interpreted as EOF.
-    /// Note: This will not return unless the source (eventually) produces
-    /// enough bytes to meet target_len.
-    fn force_fill(&mut self, buf: &mut [u8], target_len: usize) -> std::io::Result<usize> {
-        let mut base_idx = 0;
-        while base_idx < target_len {
-            base_idx += self.read(&mut buf[base_idx..target_len])?;
-        }
-
-        Ok(base_idx)
-    }
-}
-
-trait OutputTrait: Sized + Write {
-    fn new(matches: &Matches) -> UResult<Self>;
-    fn fsync(&mut self) -> io::Result<()>;
-    fn fdatasync(&mut self) -> io::Result<()>;
-}
-
-struct Output<W: Write> {
-    dst: W,
-    obs: usize,
-    cflags: OConvFlags,
-}
-
-impl OutputTrait for Output<io::Stdout> {
-    fn new(matches: &Matches) -> UResult<Self> {
-        let obs = parseargs::parse_obs(matches)?;
-        let cflags = parseargs::parse_conv_flag_output(matches)?;
-
-        let dst = io::stdout();
-
-        Ok(Output { dst, obs, cflags })
-    }
-
-    fn fsync(&mut self) -> io::Result<()> {
-        self.dst.flush()
-    }
-
-    fn fdatasync(&mut self) -> io::Result<()> {
-        self.dst.flush()
-    }
-}
-
-impl<W: Write> Output<W>
-where
-    Self: OutputTrait,
-{
-    fn write_blocks(&mut self, buf: Vec<u8>) -> io::Result<WriteStat> {
-        let mut writes_complete = 0;
-        let mut writes_partial = 0;
-        let mut bytes_total = 0;
-
-        for chunk in buf.chunks(self.obs) {
-            match self.write(chunk)? {
-                wlen if wlen < chunk.len() => {
-                    writes_partial += 1;
-                    bytes_total += wlen;
-                }
-                wlen => {
-                    writes_complete += 1;
-                    bytes_total += wlen;
-                }
-            }
-        }
-
-        Ok(WriteStat {
-            writes_complete,
-            writes_partial,
-            bytes_total: bytes_total.try_into().unwrap_or(0u128),
-        })
-    }
-
-    fn dd_out<R: Read>(mut self, mut i: Input<R>) -> UResult<()> {
-        let mut rstat = ReadStat {
-            reads_complete: 0,
-            reads_partial: 0,
-            records_truncated: 0,
-        };
-        let mut wstat = WriteStat {
-            writes_complete: 0,
-            writes_partial: 0,
-            bytes_total: 0,
-        };
-        let start = time::Instant::now();
-        let bsize = calc_bsize(i.ibs, self.obs);
-
-        let prog_tx = {
-            let (tx, rx) = mpsc::channel();
-            thread::spawn(gen_prog_updater(rx, i.print_level));
-            tx
-        };
-
-        while below_count_limit(&i.count, &rstat, &wstat) {
-            // Read/Write
-            let loop_bsize = calc_loop_bsize(&i.count, &rstat, &wstat, i.ibs, bsize);
-            match read_helper(&mut i, loop_bsize)? {
-                (
-                    ReadStat {
-                        reads_complete: 0,
-                        reads_partial: 0,
-                        ..
-                    },
-                    _,
-                ) => break,
-                (rstat_update, buf) => {
-                    let wstat_update = self
-                        .write_blocks(buf)
-                        .map_err_context(|| "failed to write output".to_string())?;
-
-                    rstat += rstat_update;
-                    wstat += wstat_update;
-                }
-            };
-            // Update Prog
-            prog_tx
-                .send(ProgUpdate {
-                    read_stat: rstat,
-                    write_stat: wstat,
-                    duration: start.elapsed(),
-                })
-                .map_err(|_| USimpleError::new(1, "failed to write output"))?;
-        }
-
-        if self.cflags.fsync {
-            self.fsync()
-                .map_err_context(|| "failed to write output".to_string())?;
-        } else if self.cflags.fdatasync {
-            self.fdatasync()
-                .map_err_context(|| "failed to write output".to_string())?;
-        }
-
-        match i.print_level {
-            Some(StatusLevel::None) => {}
-            Some(StatusLevel::Noxfer) => print_io_lines(&ProgUpdate {
-                read_stat: rstat,
-                write_stat: wstat,
-                duration: start.elapsed(),
-            }),
-            Some(StatusLevel::Progress) | None => print_transfer_stats(&ProgUpdate {
-                read_stat: rstat,
-                write_stat: wstat,
-                duration: start.elapsed(),
-            }),
-        }
-        Ok(())
-    }
-}
-
-#[cfg(target_os = "linux")]
-fn make_linux_oflags(oflags: &OFlags) -> Option<libc::c_int> {
-    let mut flag = 0;
-
-    // oflag=FLAG
-    if oflags.append {
-        flag |= libc::O_APPEND;
-    }
-    if oflags.direct {
-        flag |= libc::O_DIRECT;
-    }
-    if oflags.directory {
-        flag |= libc::O_DIRECTORY;
-    }
-    if oflags.dsync {
-        flag |= libc::O_DSYNC;
-    }
-    if oflags.noatime {
-        flag |= libc::O_NOATIME;
-    }
-    if oflags.noctty {
-        flag |= libc::O_NOCTTY;
-    }
-    if oflags.nofollow {
-        flag |= libc::O_NOFOLLOW;
-    }
-    if oflags.nonblock {
-        flag |= libc::O_NONBLOCK;
-    }
-    if oflags.sync {
-        flag |= libc::O_SYNC;
-    }
-
-    if flag != 0 {
-        Some(flag)
-    } else {
-        None
-    }
-}
-
-impl OutputTrait for Output<File> {
-    fn new(matches: &Matches) -> UResult<Self> {
-        fn open_dst(path: &Path, cflags: &OConvFlags, oflags: &OFlags) -> Result<File, io::Error> {
-            let mut opts = OpenOptions::new();
-            opts.write(true)
-                .create(!cflags.nocreat)
-                .truncate(!cflags.notrunc)
-                .create_new(cflags.excl)
-                .append(oflags.append);
-
-            #[cfg(target_os = "linux")]
-            if let Some(libc_flags) = make_linux_oflags(oflags) {
-                opts.custom_flags(libc_flags);
-            }
-
-            opts.open(path)
-        }
-        let obs = parseargs::parse_obs(matches)?;
-        let cflags = parseargs::parse_conv_flag_output(matches)?;
-        let oflags = parseargs::parse_oflags(matches)?;
-        let seek = parseargs::parse_seek_amt(&obs, &oflags, matches)?;
-
-        if let Some(fname) = matches.value_of(options::OUTFILE) {
-            let mut dst = open_dst(Path::new(&fname), &cflags, &oflags)
-                .map_err_context(|| format!("failed to open {}", fname.quote()))?;
-
-            if let Some(amt) = seek {
-                let amt: u64 = amt
-                    .try_into()
-                    .map_err(|_| USimpleError::new(1, "failed to parse seek amount"))?;
-                dst.seek(io::SeekFrom::Start(amt))
-                    .map_err_context(|| "failed to seek in output file".to_string())?;
-            }
-
-            Ok(Output { dst, obs, cflags })
-        } else {
-            // The following error should only occur if someone
-            // mistakenly calls Output::<File>::new() without checking
-            // if 'of' has been provided. In this case,
-            // Output::<io::stdout>::new() is probably intended.
-            Err(Box::new(InternalError::WrongOutputType))
-        }
-    }
-
-    fn fsync(&mut self) -> io::Result<()> {
-        self.dst.flush()?;
-        self.dst.sync_all()
-    }
-
-    fn fdatasync(&mut self) -> io::Result<()> {
-        self.dst.flush()?;
-        self.dst.sync_data()
-    }
-}
-
-impl Seek for Output<File> {
-    fn seek(&mut self, pos: io::SeekFrom) -> io::Result<u64> {
-        self.dst.seek(pos)
-    }
-}
-
-impl Write for Output<File> {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        fn is_sparse(buf: &[u8]) -> bool {
-            buf.iter().all(|&e| e == 0u8)
-        }
-        // -----------------------------
-        if self.cflags.sparse && is_sparse(buf) {
-            let seek_amt: i64 = buf
-                .len()
-                .try_into()
-                .expect("Internal dd Error: Seek amount greater than signed 64-bit integer");
-            self.dst.seek(io::SeekFrom::Current(seek_amt))?;
-            Ok(buf.len())
-        } else {
-            self.dst.write(buf)
-        }
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        self.dst.flush()
-    }
-}
-
-impl Write for Output<io::Stdout> {
-    fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
-        self.dst.write(buf)
-    }
-
-    fn flush(&mut self) -> io::Result<()> {
-        self.dst.flush()
-    }
-}
-
-/// Splits the content of buf into cbs-length blocks
-/// Appends padding as specified by conv=block and cbs=N
-/// Expects ascii encoded data
-fn block(buf: Vec<u8>, cbs: usize, rstat: &mut ReadStat) -> Vec<Vec<u8>> {
-    let mut blocks = buf
-        .split(|&e| e == NEWLINE)
-        .map(|split| split.to_vec())
-        .fold(Vec::new(), |mut blocks, mut split| {
-            if split.len() > cbs {
-                rstat.records_truncated += 1;
-            }
-            split.resize(cbs, SPACE);
-            blocks.push(split);
-
-            blocks
-        });
-
-    if let Some(last) = blocks.last() {
-        if last.iter().all(|&e| e == SPACE) {
-            blocks.pop();
-        }
-    }
-
-    blocks
-}
-
-/// Trims padding from each cbs-length partition of buf
-/// as specified by conv=unblock and cbs=N
-/// Expects ascii encoded data
-fn unblock(buf: Vec<u8>, cbs: usize) -> Vec<u8> {
-    buf.chunks(cbs).fold(Vec::new(), |mut acc, block| {
-        if let Some(last_char_idx) = block.iter().rposition(|&e| e != SPACE) {
-            // Include text up to last space.
-            acc.extend(&block[..=last_char_idx]);
-        }
-
-        acc.push(NEWLINE);
-        acc
-    })
-}
-
-/// A helper for teasing out which options must be applied and in which order.
-/// Some user options, such as the presence of conversion tables, will determine whether the input is assumed to be ascii. The parser sets the Input::non_ascii flag accordingly.
-/// Examples:
-///     - If conv=ebcdic or conv=ibm is specified then block, unblock or swab must be performed before the conversion happens since the source will start in ascii.
-///     - If conv=ascii is specified then block, unblock or swab must be performed after the conversion since the source starts in ebcdic.
-///     - If no conversion is specified then the source is assumed to be in ascii.
-/// For more info see `info dd`
-fn conv_block_unblock_helper<R: Read>(
-    mut buf: Vec<u8>,
-    i: &mut Input<R>,
-    rstat: &mut ReadStat,
-) -> Result<Vec<u8>, InternalError> {
-    // Local Predicate Fns -------------------------------------------------
-    fn should_block_then_conv<R: Read>(i: &Input<R>) -> bool {
-        !i.non_ascii && i.cflags.block.is_some()
-    }
-    fn should_conv_then_block<R: Read>(i: &Input<R>) -> bool {
-        i.non_ascii && i.cflags.block.is_some()
-    }
-    fn should_unblock_then_conv<R: Read>(i: &Input<R>) -> bool {
-        !i.non_ascii && i.cflags.unblock.is_some()
-    }
-    fn should_conv_then_unblock<R: Read>(i: &Input<R>) -> bool {
-        i.non_ascii && i.cflags.unblock.is_some()
-    }
-    fn conv_only<R: Read>(i: &Input<R>) -> bool {
-        i.cflags.ctable.is_some() && i.cflags.block.is_none() && i.cflags.unblock.is_none()
-    }
-    // Local Helper Fns ----------------------------------------------------
-    fn apply_conversion(buf: &mut [u8], ct: &ConversionTable) {
-        for idx in 0..buf.len() {
-            buf[idx] = ct[buf[idx] as usize];
-        }
-    }
-    // --------------------------------------------------------------------
-    if conv_only(i) {
-        // no block/unblock
-        let ct = i.cflags.ctable.unwrap();
-        apply_conversion(&mut buf, ct);
-
-        Ok(buf)
-    } else if should_block_then_conv(i) {
-        // ascii input so perform the block first
-        let cbs = i.cflags.block.unwrap();
-
-        let mut blocks = block(buf, cbs, rstat);
-
-        if let Some(ct) = i.cflags.ctable {
-            for buf in blocks.iter_mut() {
-                apply_conversion(buf, ct);
-            }
-        }
-
-        let blocks = blocks.into_iter().flatten().collect();
-
-        Ok(blocks)
-    } else if should_conv_then_block(i) {
-        // Non-ascii so perform the conversion first
-        let cbs = i.cflags.block.unwrap();
-
-        if let Some(ct) = i.cflags.ctable {
-            apply_conversion(&mut buf, ct);
-        }
-
-        let blocks = block(buf, cbs, rstat).into_iter().flatten().collect();
-
-        Ok(blocks)
-    } else if should_unblock_then_conv(i) {
-        // ascii input so perform the unblock first
-        let cbs = i.cflags.unblock.unwrap();
-
-        let mut buf = unblock(buf, cbs);
-
-        if let Some(ct) = i.cflags.ctable {
-            apply_conversion(&mut buf, ct);
-        }
-
-        Ok(buf)
-    } else if should_conv_then_unblock(i) {
-        // Non-ascii input so perform the conversion first
-        let cbs = i.cflags.unblock.unwrap();
-
-        if let Some(ct) = i.cflags.ctable {
-            apply_conversion(&mut buf, ct);
-        }
-
-        let buf = unblock(buf, cbs);
-
-        Ok(buf)
-    } else {
-        // The following error should not happen, as it results from
-        // insufficient command line data. This case should be caught
-        // by the parser before making it this far.
-        // Producing this error is an alternative to risking an unwrap call
-        // on 'cbs' if the required data is not provided.
-        Err(InternalError::InvalidConvBlockUnblockCase)
-    }
-}
-
-/// Read helper performs read operations common to all dd reads, and dispatches the buffer to relevant helper functions as dictated by the operations requested by the user.
-fn read_helper<R: Read>(i: &mut Input<R>, bsize: usize) -> UResult<(ReadStat, Vec<u8>)> {
-    // Local Predicate Fns -----------------------------------------------
-    fn is_conv<R: Read>(i: &Input<R>) -> bool {
-        i.cflags.ctable.is_some()
-    }
-    fn is_block<R: Read>(i: &Input<R>) -> bool {
-        i.cflags.block.is_some()
-    }
-    fn is_unblock<R: Read>(i: &Input<R>) -> bool {
-        i.cflags.unblock.is_some()
-    }
-    // Local Helper Fns -------------------------------------------------
-    fn perform_swab(buf: &mut [u8]) {
-        for base in (1..buf.len()).step_by(2) {
-            buf.swap(base, base - 1);
-        }
-    }
-    // ------------------------------------------------------------------
-    // Read
-    let mut buf = vec![BUF_INIT_BYTE; bsize];
-    let mut rstat = match i.cflags.sync {
-        Some(ch) => i
-            .fill_blocks(&mut buf, ch)
-            .map_err_context(|| "failed to write output".to_string())?,
-        _ => i
-            .fill_consecutive(&mut buf)
-            .map_err_context(|| "failed to write output".to_string())?,
-    };
-    // Return early if no data
-    if rstat.reads_complete == 0 && rstat.reads_partial == 0 {
-        return Ok((rstat, buf));
-    }
-
-    // Perform any conv=x[,x...] options
-    if i.cflags.swab {
-        perform_swab(&mut buf);
-    }
-    if is_conv(i) || is_block(i) || is_unblock(i) {
-        let buf = conv_block_unblock_helper(buf, i, &mut rstat)?;
-        Ok((rstat, buf))
-    } else {
-        Ok((rstat, buf))
-    }
-}
-
-// Print io lines of a status update:
-// <complete>+<partial> records in
-// <complete>+<partial> records out
-fn print_io_lines(update: &ProgUpdate) {
-    eprintln!(
-        "{}+{} records in",
-        update.read_stat.reads_complete, update.read_stat.reads_partial
-    );
-    if update.read_stat.records_truncated > 0 {
-        eprintln!("{} truncated records", update.read_stat.records_truncated);
-    }
-    eprintln!(
-        "{}+{} records out",
-        update.write_stat.writes_complete, update.write_stat.writes_partial
-    );
-}
-// Print the progress line of a status update:
-// <byte-count> bytes (<base-1000-size>, <base-2-size>) copied, <time> s, <base-2-rate>/s
-fn make_prog_line(update: &ProgUpdate) -> String {
-    let btotal_metric = Byte::from_bytes(update.write_stat.bytes_total)
-        .get_appropriate_unit(false)
-        .format(0);
-    let btotal_bin = Byte::from_bytes(update.write_stat.bytes_total)
-        .get_appropriate_unit(true)
-        .format(0);
-    let safe_millis = cmp::max(1, update.duration.as_millis());
-    let transfer_rate = Byte::from_bytes(1000 * (update.write_stat.bytes_total / safe_millis))
-        .get_appropriate_unit(false)
-        .format(1);
-
-    format!(
-        "{} bytes ({}, {}) copied, {:.1} s, {}/s",
-        update.write_stat.bytes_total,
-        btotal_metric,
-        btotal_bin,
-        update.duration.as_secs_f64(),
-        transfer_rate
-    )
-}
-// Print progress line only. Overwrite the current line.
-fn reprint_prog_line(update: &ProgUpdate) {
-    eprint!("\r{}", make_prog_line(update));
-}
-// Print progress line only. Print as a new line.
-fn print_prog_line(update: &ProgUpdate) {
-    eprintln!("{}", make_prog_line(update));
-}
-// Print both io lines and progress line.
-fn print_transfer_stats(update: &ProgUpdate) {
-    print_io_lines(update);
-    print_prog_line(update);
-}
-
-// Generate a progress updater that tracks progress, receives updates, and responds to progress update requests (signals).
-// Signals:
-// - SIGUSR1: Trigger progress line reprint. Linux (GNU & BSD) only.
-// - TODO: SIGINFO: Trigger progress line reprint. BSD-style Linux only.
-fn gen_prog_updater(rx: mpsc::Receiver<ProgUpdate>, print_level: Option<StatusLevel>) -> impl Fn() {
-    // --------------------------------------------------------------
-    #[cfg(target_os = "linux")]
-    const SIGUSR1_USIZE: usize = signal::SIGUSR1 as usize;
-    // --------------------------------------------------------------
-    #[cfg(target_os = "linux")]
-    fn posixly_correct() -> bool {
-        env::var("POSIXLY_CORRECT").is_ok()
-    }
-    #[cfg(target_os = "linux")]
-    fn register_linux_signal_handler(sigval: Arc<AtomicUsize>) -> Result<(), Box<dyn Error>> {
-        if !posixly_correct() {
-            signal_hook::flag::register_usize(signal::SIGUSR1, sigval, SIGUSR1_USIZE)?;
-        }
-
-        Ok(())
-    }
-    // --------------------------------------------------------------
-    move || {
-        #[cfg(target_os = "linux")]
-        let sigval = Arc::new(AtomicUsize::new(0));
-
-        #[cfg(target_os = "linux")]
-        register_linux_signal_handler(sigval.clone()).unwrap_or_else(|e| {
-            if Some(StatusLevel::None) != print_level {
-                eprintln!(
-                    "Internal dd Warning: Unable to register signal handler \n\t{}",
-                    e
-                );
-            }
-        });
-
-        while let Ok(update) = rx.recv() {
-            // (Re)print status line if progress is requested.
-            if Some(StatusLevel::Progress) == print_level {
-                reprint_prog_line(&update);
-            }
-            // Handle signals
-            #[cfg(target_os = "linux")]
-            if let SIGUSR1_USIZE = sigval.load(Ordering::Relaxed) {
-                print_transfer_stats(&update);
-            };
-        }
-    }
-}
-
-// Calculate a 'good' internal buffer size.
-// For performance of the read/write functions, the buffer should hold
-// both an integral number of reads and an integral number of writes. For
-// sane real-world memory use, it should not be too large. I believe
-// the least common multiple is a good representation of these interests.
-// https://en.wikipedia.org/wiki/Least_common_multiple#Using_the_greatest_common_divisor
-fn calc_bsize(ibs: usize, obs: usize) -> usize {
-    let gcd = Gcd::gcd(ibs, obs);
-    // calculate the lcm from gcd
-    (ibs / gcd) * obs
-}
-
-// Calculate the buffer size appropriate for this loop iteration, respecting
-// a count=N if present.
-fn calc_loop_bsize(
-    count: &Option<CountType>,
-    rstat: &ReadStat,
-    wstat: &WriteStat,
-    ibs: usize,
-    ideal_bsize: usize,
-) -> usize {
-    match count {
-        Some(CountType::Reads(rmax)) => {
-            let rmax: u64 = (*rmax).try_into().unwrap();
-            let rsofar = rstat.reads_complete + rstat.reads_partial;
-            let rremain: usize = (rmax - rsofar).try_into().unwrap();
-            cmp::min(ideal_bsize, rremain * ibs)
-        }
-        Some(CountType::Bytes(bmax)) => {
-            let bmax: u128 = (*bmax).try_into().unwrap();
-            let bremain: usize = (bmax - wstat.bytes_total).try_into().unwrap();
-            cmp::min(ideal_bsize, bremain)
-        }
-        None => ideal_bsize,
-    }
-}
-
-// Decide if the current progress is below a count=N limit or return
-// true if no such limit is set.
-fn below_count_limit(count: &Option<CountType>, rstat: &ReadStat, wstat: &WriteStat) -> bool {
-    match count {
-        Some(CountType::Reads(n)) => {
-            let n = (*n).try_into().unwrap();
-            rstat.reads_complete + rstat.reads_partial <= n
-        }
-        Some(CountType::Bytes(n)) => {
-            let n = (*n).try_into().unwrap();
-            wstat.bytes_total <= n
-        }
-        None => true,
-    }
-}
-
-fn append_dashes_if_not_present(mut acc: Vec<String>, mut s: String) -> Vec<String> {
-    if !s.starts_with("--") && !s.starts_with('-') {
-        s.insert_str(0, "--");
-    }
-    acc.push(s);
-    acc
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let dashed_args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any()
-        .into_iter()
-        .fold(Vec::new(), append_dashes_if_not_present);
-
-    let matches = uu_app()
-        //.after_help(TODO: Add note about multiplier strings here.)
-        .get_matches_from(dashed_args);
-
-    match (
-        matches.is_present(options::INFILE),
-        matches.is_present(options::OUTFILE),
-    ) {
-        (true, true) => {
-            let i = Input::<File>::new(&matches)?;
-            let o = Output::<File>::new(&matches)?;
-            o.dd_out(i)
-        }
-        (false, true) => {
-            let i = Input::<io::Stdin>::new(&matches)?;
-            let o = Output::<File>::new(&matches)?;
-            o.dd_out(i)
-        }
-        (true, false) => {
-            let i = Input::<File>::new(&matches)?;
-            let o = Output::<io::Stdout>::new(&matches)?;
-            o.dd_out(i)
-        }
-        (false, false) => {
-            let i = Input::<io::Stdin>::new(&matches)?;
-            let o = Output::<io::Stdout>::new(&matches)?;
-            o.dd_out(i)
-        }
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::INFILE)
-                .long(options::INFILE)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("FILE")
-                .help("(alternatively if=FILE) specifies the file used for input. When not specified, stdin is used instead")
-        )
-        .arg(
-            Arg::new(options::OUTFILE)
-                .long(options::OUTFILE)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("FILE")
-                .help("(alternatively of=FILE) specifies the file used for output. When not specified, stdout is used instead")
-        )
-        .arg(
-            Arg::new(options::IBS)
-                .long(options::IBS)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively ibs=N) specifies the size of buffer used for reads (default: 512). Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::OBS)
-                .long(options::OBS)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively obs=N) specifies the size of buffer used for writes (default: 512). Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::BS)
-                .long(options::BS)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively bs=N) specifies ibs=N and obs=N (default: 512). If ibs or obs are also specified, bs=N takes precedence. Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::CBS)
-                .long(options::CBS)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively cbs=BYTES) specifies the 'conversion block size' in bytes. Applies to the conv=block, and conv=unblock operations. Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::SKIP)
-                .long(options::SKIP)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively skip=N) causes N ibs-sized records of input to be skipped before beginning copy/convert operations. See iflag=count_bytes if skipping N bytes is preferred. Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::SEEK)
-                .long(options::SEEK)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively seek=N) seeks N obs-sized records into output before beginning copy/convert operations. See oflag=seek_bytes if seeking N bytes is preferred. Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::COUNT)
-                .long(options::COUNT)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("N")
-                .help("(alternatively count=N) stop reading input after N ibs-sized read operations rather than proceeding until EOF. See iflag=count_bytes if stopping after N bytes is preferred. Multiplier strings permitted.")
-        )
-        .arg(
-            Arg::new(options::STATUS)
-                .long(options::STATUS)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("LEVEL")
-                .help("(alternatively status=LEVEL) controls whether volume and performance stats are written to stderr.
-
-When unspecified, dd will print stats upon completion. An example is below.
-\t6+0 records in
-\t16+0 records out
-\t8192 bytes (8.2 kB, 8.0 KiB) copied, 0.00057009 s, 14.4 MB/s
-The first two lines are the 'volume' stats and the final line is the 'performance' stats.
-The volume stats indicate the number of complete and partial ibs-sized reads, or obs-sized writes that took place during the copy. The format of the volume stats is <complete>+<partial>. If records have been truncated (see conv=block), the volume stats will contain the number of truncated records.
-
-Permissible LEVEL values are:
-\t progress: Print periodic performance stats as the copy proceeds.
-\t noxfer: Print final volume stats, but not performance stats.
-\t none: Do not print any stats.
-
-Printing performance stats is also triggered by the INFO signal (where supported), or the USR1 signal. Setting the POSIXLY_CORRECT environment variable to any value (including an empty value) will cause the USR1 signal to be ignored.
-
-")
-        )
-        .arg(
-            Arg::new(options::CONV)
-                .long(options::CONV)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("CONV")
-                .help("(alternatively conv=CONV[,CONV]) specifies a comma-separated list of conversion options or (for legacy reasons) file flags. Conversion options and file flags may be intermixed.
-
-Conversion options:
-\t One of {ascii, ebcdic, ibm} will perform an encoding conversion.
-\t\t 'ascii' converts from EBCDIC to ASCII. This is the inverse of the 'ebcdic' option.
-\t\t 'ebcdic' converts from ASCII to EBCDIC. This is the inverse of the 'ascii' option.
-\t\t 'ibm' converts from ASCII to EBCDIC, applying the conventions for '[', ']' and '~' specified in POSIX.
-
-\t One of {ucase, lcase} will perform a case conversion. Works in conjunction with option {ascii, ebcdic, ibm} to infer input encoding. If no other conversion option is specified, input is assumed to be ascii.
-\t\t 'ucase' converts from lower-case to upper-case
-\t\t 'lcase' converts from upper-case to lower-case.
-
-\t One of {block, unblock}. Convert between lines terminated by newline characters, and fixed-width lines padded by spaces (without any newlines). Both the 'block' and 'unblock' options require cbs=BYTES be specified.
-\t\t 'block' for each newline less than the size indicated by cbs=BYTES, remove the newline and pad with spaces up to cbs. Lines longer than cbs are truncated.
-\t\t 'unblock' for each block of input of the size indicated by cbs=BYTES, remove right-trailing spaces and replace with a newline character.
-
-\t 'sparse' attempts to seek the output when an obs-sized block consists of only zeros.
-\t 'swab' swaps each adjacent pair of bytes. If an odd number of bytes is present, the final byte is omitted.
-\t 'sync' pad each ibs-sided block with zeros. If 'block' or 'unblock' is specified, pad with spaces instead.
-
-Conversion Flags:
-\t One of {excl, nocreat}
-\t\t 'excl' the output file must be created. Fail if the output file is already present.
-\t\t 'nocreat' the output file will not be created. Fail if the output file in not already present.
-\t 'notrunc' the output file will not be truncated. If this option is not present, output will be truncated when opened.
-\t 'noerror' all read errors will be ignored. If this option is not present, dd will only ignore Error::Interrupted.
-\t 'fdatasync' data will be written before finishing.
-\t 'fsync' data and metadata will be written before finishing.
-
-")
-        )
-        .arg(
-            Arg::new(options::IFLAG)
-                .long(options::IFLAG)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("FLAG")
-                .help("(alternatively iflag=FLAG[,FLAG]) a comma separated list of input flags which specify how the input source is treated. FLAG may be any of the input-flags or general-flags specified below.
-
-Input-Flags
-\t 'count_bytes' a value to count=N will be interpreted as bytes.
-\t 'skip_bytes' a value to skip=N will be interpreted as bytes.
-\t 'fullblock' wait for ibs bytes from each read. zero-length reads are still considered EOF.
-
-General-Flags
-\t 'direct' use direct I/O for data.
-\t 'directory' fail unless the given input (if used as an iflag) or output (if used as an oflag) is a directory.
-\t 'dsync' use synchronized I/O for data.
-\t 'sync' use synchronized I/O for data and metadata.
-\t 'nonblock' use non-blocking I/O.
-\t 'noatime' do not update access time.
-\t 'nocache' request that OS drop cache.
-\t 'noctty' do not assign a controlling tty.
-\t 'nofollow' do not follow system links.
-
-")
-        )
-        .arg(
-            Arg::new(options::OFLAG)
-                .long(options::OFLAG)
-                .takes_value(true)
-                .require_equals(true)
-                .value_name("FLAG")
-                .help("(alternatively oflag=FLAG[,FLAG]) a comma separated list of output flags which specify how the output source is treated. FLAG may be any of the output-flags or general-flags specified below.
-
-Output-Flags
-\t 'append' open file in append mode. Consider setting conv=notrunc as well.
-\t 'seek_bytes' a value to seek=N will be interpreted as bytes.
-
-General-Flags
-\t 'direct' use direct I/O for data.
-\t 'directory' fail unless the given input (if used as an iflag) or output (if used as an oflag) is a directory.
-\t 'dsync' use synchronized I/O for data.
-\t 'sync' use synchronized I/O for data and metadata.
-\t 'nonblock' use non-blocking I/O.
-\t 'noatime' do not update access time.
-\t 'nocache' request that OS drop cache.
-\t 'noctty' do not assign a controlling tty.
-\t 'nofollow' do not follow system links.
-
-")
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_dd/parseargs.rs.html b/src/uu_dd/parseargs.rs.html deleted file mode 100644 index 33f78cbd6..000000000 --- a/src/uu_dd/parseargs.rs.html +++ /dev/null @@ -1,1400 +0,0 @@ -parseargs.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-
// This file is part of the uutils coreutils package.
-//
-// (c) Tyler Steele <tyler.steele@protonmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-// spell-checker:ignore ctty, ctable, iconvflags, oconvflags
-
-#[cfg(test)]
-mod unit_tests;
-
-use super::*;
-use std::error::Error;
-use uucore::error::UError;
-
-pub type Matches = ArgMatches;
-
-/// Parser Errors describe errors with parser input
-#[derive(Debug, PartialEq)]
-pub enum ParseError {
-    MultipleFmtTable,
-    MultipleUCaseLCase,
-    MultipleBlockUnblock,
-    MultipleExclNoCreate,
-    FlagNoMatch(String),
-    ConvFlagNoMatch(String),
-    MultiplierStringParseFailure(String),
-    MultiplierStringOverflow(String),
-    BlockUnblockWithoutCBS,
-    StatusLevelNotRecognized(String),
-    Unimplemented(String),
-}
-
-impl std::fmt::Display for ParseError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            Self::MultipleFmtTable => {
-                write!(
-                    f,
-                    "Only one of conv=ascii conv=ebcdic or conv=ibm may be specified"
-                )
-            }
-            Self::MultipleUCaseLCase => {
-                write!(f, "Only one of conv=lcase or conv=ucase may be specified")
-            }
-            Self::MultipleBlockUnblock => {
-                write!(f, "Only one of conv=block or conv=unblock may be specified")
-            }
-            Self::MultipleExclNoCreate => {
-                write!(f, "Only one ov conv=excl or conv=nocreat may be specified")
-            }
-            Self::FlagNoMatch(arg) => {
-                write!(f, "Unrecognized iflag=FLAG or oflag=FLAG -> {}", arg)
-            }
-            Self::ConvFlagNoMatch(arg) => {
-                write!(f, "Unrecognized conv=CONV -> {}", arg)
-            }
-            Self::MultiplierStringParseFailure(arg) => {
-                write!(f, "Unrecognized byte multiplier -> {}", arg)
-            }
-            Self::MultiplierStringOverflow(arg) => {
-                write!(
-                    f,
-                    "Multiplier string would overflow on current system -> {}",
-                    arg
-                )
-            }
-            Self::BlockUnblockWithoutCBS => {
-                write!(f, "conv=block or conv=unblock specified without cbs=N")
-            }
-            Self::StatusLevelNotRecognized(arg) => {
-                write!(f, "status=LEVEL not recognized -> {}", arg)
-            }
-            Self::Unimplemented(arg) => {
-                write!(f, "feature not implemented on this system -> {}", arg)
-            }
-        }
-    }
-}
-
-impl Error for ParseError {}
-
-impl UError for ParseError {
-    fn code(&self) -> i32 {
-        1
-    }
-}
-
-/// Some flags specified as part of a conv=CONV[,CONV]... block
-/// relate to the input file, others to the output file.
-#[derive(Debug, PartialEq)]
-enum ConvFlag {
-    // Input
-    FmtAtoE,
-    FmtEtoA,
-    FmtAtoI,
-    Block,
-    Unblock,
-    UCase,
-    LCase,
-    Swab,
-    Sync,
-    NoError,
-    // Output
-    Sparse,
-    Excl,
-    NoCreat,
-    NoTrunc,
-    FDataSync,
-    FSync,
-}
-
-impl std::str::FromStr for ConvFlag {
-    type Err = ParseError;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        match s {
-            // Input
-            "ascii" => Ok(Self::FmtEtoA),
-            "ebcdic" => Ok(Self::FmtAtoE),
-            "ibm" => Ok(Self::FmtAtoI),
-            "lcase" => Ok(Self::LCase),
-            "ucase" => Ok(Self::UCase),
-            "block" => Ok(Self::Block),
-            "unblock" => Ok(Self::Unblock),
-            "swab" => Ok(Self::Swab),
-            "sync" => Ok(Self::Sync),
-            "noerror" => Ok(Self::NoError),
-            // Output
-            "sparse" => Ok(Self::Sparse),
-            "excl" => Ok(Self::Excl),
-            "nocreat" => Ok(Self::NoCreat),
-            "notrunc" => Ok(Self::NoTrunc),
-            "fdatasync" => Ok(Self::FDataSync),
-            "fsync" => Ok(Self::FSync),
-            _ => Err(ParseError::ConvFlagNoMatch(String::from(s))),
-        }
-    }
-}
-
-#[derive(Debug, PartialEq)]
-enum Flag {
-    // Input only
-    FullBlock,
-    CountBytes,
-    SkipBytes,
-    // Either
-    #[allow(unused)]
-    Cio,
-    #[allow(unused)]
-    Direct,
-    #[allow(unused)]
-    Directory,
-    #[allow(unused)]
-    Dsync,
-    #[allow(unused)]
-    Sync,
-    #[allow(unused)]
-    NoCache,
-    #[allow(unused)]
-    NonBlock,
-    #[allow(unused)]
-    NoATime,
-    #[allow(unused)]
-    NoCtty,
-    #[allow(unused)]
-    NoFollow,
-    #[allow(unused)]
-    NoLinks,
-    #[allow(unused)]
-    Binary,
-    #[allow(unused)]
-    Text,
-    // Output only
-    Append,
-    SeekBytes,
-}
-
-impl std::str::FromStr for Flag {
-    type Err = ParseError;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        match s {
-            // Input only
-            "fullblock" => Ok(Self::FullBlock),
-            "count_bytes" => Ok(Self::CountBytes),
-            "skip_bytes" => Ok(Self::SkipBytes),
-            // Either
-            "cio" =>
-            // Ok(Self::Cio),
-            {
-                Err(ParseError::Unimplemented(s.to_string()))
-            }
-            "direct" =>
-            // Ok(Self::Direct),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::Direct)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "directory" =>
-            // Ok(Self::Directory),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::Directory)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "dsync" =>
-            // Ok(Self::Dsync),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::Dsync)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "sync" =>
-            // Ok(Self::Sync),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::Sync)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "nocache" =>
-            // Ok(Self::NoCache),
-            {
-                Err(ParseError::Unimplemented(s.to_string()))
-            }
-            "nonblock" =>
-            // Ok(Self::NonBlock),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::NonBlock)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "noatime" =>
-            // Ok(Self::NoATime),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::NoATime)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "noctty" =>
-            // Ok(Self::NoCtty),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::NoCtty)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "nofollow" =>
-            // Ok(Self::NoFollow),
-            {
-                if cfg!(target_os = "linux") {
-                    Ok(Self::NoFollow)
-                } else {
-                    Err(ParseError::Unimplemented(s.to_string()))
-                }
-            }
-            "nolinks" =>
-            // Ok(Self::NoLinks),
-            {
-                Err(ParseError::Unimplemented(s.to_string()))
-            }
-            "binary" =>
-            // Ok(Self::Binary),
-            {
-                Err(ParseError::Unimplemented(s.to_string()))
-            }
-            "text" =>
-            // Ok(Self::Text),
-            {
-                Err(ParseError::Unimplemented(s.to_string()))
-            }
-            // Output only
-            "append" => Ok(Self::Append),
-            "seek_bytes" => Ok(Self::SeekBytes),
-            _ => Err(ParseError::FlagNoMatch(String::from(s))),
-        }
-    }
-}
-
-impl std::str::FromStr for StatusLevel {
-    type Err = ParseError;
-
-    fn from_str(s: &str) -> Result<Self, Self::Err> {
-        match s {
-            "none" => Ok(StatusLevel::None),
-            "noxfer" => Ok(StatusLevel::Noxfer),
-            "progress" => Ok(StatusLevel::Progress),
-            _ => Err(ParseError::StatusLevelNotRecognized(s.to_string())),
-        }
-    }
-}
-
-/// Parse bytes using str::parse, then map error if needed.
-fn parse_bytes_only(s: &str) -> Result<usize, ParseError> {
-    s.parse()
-        .map_err(|_| ParseError::MultiplierStringParseFailure(s.to_string()))
-}
-
-/// Parse byte and multiplier like 512, 5KiB, or 1G.
-/// Uses uucore::parse_size, and adds the 'w' and 'c' suffixes which are mentioned
-/// in dd's info page.
-fn parse_bytes_with_opt_multiplier(s: &str) -> Result<usize, ParseError> {
-    if let Some(idx) = s.rfind('c') {
-        parse_bytes_only(&s[..idx])
-    } else if let Some(idx) = s.rfind('w') {
-        let partial = parse_bytes_only(&s[..idx])?;
-
-        partial
-            .checked_mul(2)
-            .ok_or_else(|| ParseError::MultiplierStringOverflow(s.to_string()))
-    } else {
-        uucore::parse_size::parse_size(s).map_err(|e| match e {
-            uucore::parse_size::ParseSizeError::ParseFailure(s) => {
-                ParseError::MultiplierStringParseFailure(s)
-            }
-            uucore::parse_size::ParseSizeError::SizeTooBig(s) => {
-                ParseError::MultiplierStringOverflow(s)
-            }
-        })
-    }
-}
-
-pub fn parse_ibs(matches: &Matches) -> Result<usize, ParseError> {
-    if let Some(mixed_str) = matches.value_of(options::BS) {
-        parse_bytes_with_opt_multiplier(mixed_str)
-    } else if let Some(mixed_str) = matches.value_of(options::IBS) {
-        parse_bytes_with_opt_multiplier(mixed_str)
-    } else {
-        Ok(512)
-    }
-}
-
-fn parse_cbs(matches: &Matches) -> Result<Option<usize>, ParseError> {
-    if let Some(s) = matches.value_of(options::CBS) {
-        let bytes = parse_bytes_with_opt_multiplier(s)?;
-        Ok(Some(bytes))
-    } else {
-        Ok(None)
-    }
-}
-
-pub fn parse_status_level(matches: &Matches) -> Result<Option<StatusLevel>, ParseError> {
-    match matches.value_of(options::STATUS) {
-        Some(s) => {
-            let st = s.parse()?;
-            Ok(Some(st))
-        }
-        None => Ok(None),
-    }
-}
-
-pub fn parse_obs(matches: &Matches) -> Result<usize, ParseError> {
-    if let Some(mixed_str) = matches.value_of("bs") {
-        parse_bytes_with_opt_multiplier(mixed_str)
-    } else if let Some(mixed_str) = matches.value_of("obs") {
-        parse_bytes_with_opt_multiplier(mixed_str)
-    } else {
-        Ok(512)
-    }
-}
-
-fn parse_ctable(fmt: Option<ConvFlag>, case: Option<ConvFlag>) -> Option<&'static ConversionTable> {
-    fn parse_conv_and_case_table(
-        fmt: &ConvFlag,
-        case: &ConvFlag,
-    ) -> Option<&'static ConversionTable> {
-        match (fmt, case) {
-            (ConvFlag::FmtAtoE, ConvFlag::UCase) => Some(&ASCII_TO_EBCDIC_LCASE_TO_UCASE),
-            (ConvFlag::FmtAtoE, ConvFlag::LCase) => Some(&ASCII_TO_EBCDIC_UCASE_TO_LCASE),
-            (ConvFlag::FmtEtoA, ConvFlag::UCase) => Some(&EBCDIC_TO_ASCII_LCASE_TO_UCASE),
-            (ConvFlag::FmtEtoA, ConvFlag::LCase) => Some(&EBCDIC_TO_ASCII_UCASE_TO_LCASE),
-            (ConvFlag::FmtAtoI, ConvFlag::UCase) => Some(&ASCII_TO_IBM_UCASE_TO_LCASE),
-            (ConvFlag::FmtAtoI, ConvFlag::LCase) => Some(&ASCII_TO_IBM_LCASE_TO_UCASE),
-            (_, _) => None,
-        }
-    }
-    fn parse_conv_table_only(fmt: &ConvFlag) -> Option<&'static ConversionTable> {
-        match fmt {
-            ConvFlag::FmtAtoE => Some(&ASCII_TO_EBCDIC),
-            ConvFlag::FmtEtoA => Some(&EBCDIC_TO_ASCII),
-            ConvFlag::FmtAtoI => Some(&ASCII_TO_IBM),
-            _ => None,
-        }
-    }
-    // ------------------------------------------------------------------------
-    match (fmt, case) {
-        // Both [ascii | ebcdic | ibm] and [lcase | ucase] specified
-        (Some(fmt), Some(case)) => parse_conv_and_case_table(&fmt, &case),
-        // Only [ascii | ebcdic | ibm] specified
-        (Some(fmt), None) => parse_conv_table_only(&fmt),
-        // Only [lcase | ucase] specified
-        (None, Some(ConvFlag::UCase)) => Some(&ASCII_LCASE_TO_UCASE),
-        (None, Some(ConvFlag::LCase)) => Some(&ASCII_UCASE_TO_LCASE),
-        // ST else...
-        (_, _) => None,
-    }
-}
-
-fn parse_flag_list<T: std::str::FromStr<Err = ParseError>>(
-    tag: &str,
-    matches: &Matches,
-) -> Result<Vec<T>, ParseError> {
-    let mut flags = Vec::new();
-
-    if let Some(comma_str) = matches.value_of(tag) {
-        for s in comma_str.split(',') {
-            let flag = s.parse()?;
-            flags.push(flag);
-        }
-    }
-
-    Ok(flags)
-}
-
-/// Parse Conversion Options (Input Variety)
-/// Construct and validate a IConvFlags
-pub fn parse_conv_flag_input(matches: &Matches) -> Result<IConvFlags, ParseError> {
-    let mut iconvflags = IConvFlags::default();
-    let mut fmt = None;
-    let mut case = None;
-    let mut is_sync = false;
-
-    let flags = parse_flag_list(options::CONV, matches)?;
-    let cbs = parse_cbs(matches)?;
-
-    for flag in flags {
-        match flag {
-            ConvFlag::FmtEtoA => {
-                if fmt.is_some() {
-                    return Err(ParseError::MultipleFmtTable);
-                } else {
-                    fmt = Some(flag);
-                    // From the GNU documentation:
-                    //
-                    // > ‘ascii’
-                    // >
-                    // > Convert EBCDIC to ASCII, using the conversion
-                    // > table specified by POSIX. This provides a 1:1
-                    // > translation for all 256 bytes. This implies
-                    // > ‘conv=unblock’; input is converted to ASCII
-                    // > before trailing spaces are deleted.
-                    //
-                    // -- https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html
-                    if cbs.is_some() {
-                        iconvflags.unblock = cbs;
-                    }
-                }
-            }
-            ConvFlag::FmtAtoE => {
-                if fmt.is_some() {
-                    return Err(ParseError::MultipleFmtTable);
-                } else {
-                    fmt = Some(flag);
-                    // From the GNU documentation:
-                    //
-                    // > ‘ebcdic’
-                    // >
-                    // > Convert ASCII to EBCDIC. This is the inverse
-                    // > of the ‘ascii’ conversion. This implies
-                    // > ‘conv=block’; trailing spaces are added before
-                    // > being converted to EBCDIC.
-                    //
-                    // -- https://www.gnu.org/software/coreutils/manual/html_node/dd-invocation.html
-                    if cbs.is_some() {
-                        iconvflags.block = cbs;
-                    }
-                }
-            }
-            ConvFlag::FmtAtoI => {
-                if fmt.is_some() {
-                    return Err(ParseError::MultipleFmtTable);
-                } else {
-                    fmt = Some(flag);
-                }
-            }
-            ConvFlag::UCase => {
-                if case.is_some() {
-                    return Err(ParseError::MultipleUCaseLCase);
-                } else {
-                    case = Some(flag)
-                }
-            }
-            ConvFlag::LCase => {
-                if case.is_some() {
-                    return Err(ParseError::MultipleUCaseLCase);
-                } else {
-                    case = Some(flag)
-                }
-            }
-            ConvFlag::Block => match (cbs, iconvflags.unblock) {
-                (Some(cbs), None) => iconvflags.block = Some(cbs),
-                (None, _) => return Err(ParseError::BlockUnblockWithoutCBS),
-                (_, Some(_)) => return Err(ParseError::MultipleBlockUnblock),
-            },
-            ConvFlag::Unblock => match (cbs, iconvflags.block) {
-                (Some(cbs), None) => iconvflags.unblock = Some(cbs),
-                (None, _) => return Err(ParseError::BlockUnblockWithoutCBS),
-                (_, Some(_)) => return Err(ParseError::MultipleBlockUnblock),
-            },
-            ConvFlag::Swab => iconvflags.swab = true,
-            ConvFlag::Sync => is_sync = true,
-            ConvFlag::NoError => iconvflags.noerror = true,
-            _ => {}
-        }
-    }
-
-    // The final conversion table depends on both
-    // fmt (eg. ASCII -> EBCDIC)
-    // case (eg. UCASE -> LCASE)
-    // So the final value can't be set until all flags are parsed.
-    let ctable = parse_ctable(fmt, case);
-
-    // The final value of sync depends on block/unblock
-    // block implies sync with ' '
-    // unblock implies sync with 0
-    // So the final value can't be set until all flags are parsed.
-    let sync = if is_sync && (iconvflags.block.is_some() || iconvflags.unblock.is_some()) {
-        Some(b' ')
-    } else if is_sync {
-        Some(0u8)
-    } else {
-        None
-    };
-
-    Ok(IConvFlags {
-        ctable,
-        sync,
-        ..iconvflags
-    })
-}
-
-/// Parse Conversion Options (Output Variety)
-/// Construct and validate a OConvFlags
-pub fn parse_conv_flag_output(matches: &Matches) -> Result<OConvFlags, ParseError> {
-    let mut oconvflags = OConvFlags::default();
-
-    let flags = parse_flag_list(options::CONV, matches)?;
-
-    for flag in flags {
-        match flag {
-            ConvFlag::Sparse => oconvflags.sparse = true,
-            ConvFlag::Excl => {
-                if !oconvflags.nocreat {
-                    oconvflags.excl = true;
-                } else {
-                    return Err(ParseError::MultipleExclNoCreate);
-                }
-            }
-            ConvFlag::NoCreat => {
-                if !oconvflags.excl {
-                    oconvflags.nocreat = true;
-                } else {
-                    return Err(ParseError::MultipleExclNoCreate);
-                }
-            }
-            ConvFlag::NoTrunc => oconvflags.notrunc = true,
-            ConvFlag::FDataSync => oconvflags.fdatasync = true,
-            ConvFlag::FSync => oconvflags.fsync = true,
-            _ => {}
-        }
-    }
-
-    Ok(oconvflags)
-}
-
-/// Parse IFlags struct from CL-input
-pub fn parse_iflags(matches: &Matches) -> Result<IFlags, ParseError> {
-    let mut iflags = IFlags::default();
-
-    let flags = parse_flag_list(options::IFLAG, matches)?;
-
-    for flag in flags {
-        match flag {
-            Flag::Cio => iflags.cio = true,
-            Flag::Direct => iflags.direct = true,
-            Flag::Directory => iflags.directory = true,
-            Flag::Dsync => iflags.dsync = true,
-            Flag::Sync => iflags.sync = true,
-            Flag::NoCache => iflags.nocache = true,
-            Flag::NonBlock => iflags.nonblock = true,
-            Flag::NoATime => iflags.noatime = true,
-            Flag::NoCtty => iflags.noctty = true,
-            Flag::NoFollow => iflags.nofollow = true,
-            Flag::NoLinks => iflags.nolinks = true,
-            Flag::Binary => iflags.binary = true,
-            Flag::Text => iflags.text = true,
-            Flag::FullBlock => iflags.fullblock = true,
-            Flag::CountBytes => iflags.count_bytes = true,
-            Flag::SkipBytes => iflags.skip_bytes = true,
-            _ => {}
-        }
-    }
-
-    Ok(iflags)
-}
-
-/// Parse OFlags struct from CL-input
-pub fn parse_oflags(matches: &Matches) -> Result<OFlags, ParseError> {
-    let mut oflags = OFlags::default();
-
-    let flags = parse_flag_list(options::OFLAG, matches)?;
-
-    for flag in flags {
-        match flag {
-            Flag::Append => oflags.append = true,
-            Flag::Cio => oflags.cio = true,
-            Flag::Direct => oflags.direct = true,
-            Flag::Directory => oflags.directory = true,
-            Flag::Dsync => oflags.dsync = true,
-            Flag::Sync => oflags.sync = true,
-            Flag::NoCache => oflags.nocache = true,
-            Flag::NonBlock => oflags.nonblock = true,
-            Flag::NoATime => oflags.noatime = true,
-            Flag::NoCtty => oflags.noctty = true,
-            Flag::NoFollow => oflags.nofollow = true,
-            Flag::NoLinks => oflags.nolinks = true,
-            Flag::Binary => oflags.binary = true,
-            Flag::Text => oflags.text = true,
-            Flag::SeekBytes => oflags.seek_bytes = true,
-            _ => {}
-        }
-    }
-
-    Ok(oflags)
-}
-
-/// Parse the amount of the input file to skip.
-pub fn parse_skip_amt(
-    ibs: &usize,
-    iflags: &IFlags,
-    matches: &Matches,
-) -> Result<Option<usize>, ParseError> {
-    if let Some(amt) = matches.value_of(options::SKIP) {
-        let n = parse_bytes_with_opt_multiplier(amt)?;
-        if iflags.skip_bytes {
-            Ok(Some(n))
-        } else {
-            Ok(Some(ibs * n))
-        }
-    } else {
-        Ok(None)
-    }
-}
-
-/// Parse the amount of the output file to seek.
-pub fn parse_seek_amt(
-    obs: &usize,
-    oflags: &OFlags,
-    matches: &Matches,
-) -> Result<Option<usize>, ParseError> {
-    if let Some(amt) = matches.value_of(options::SEEK) {
-        let n = parse_bytes_with_opt_multiplier(amt)?;
-        if oflags.seek_bytes {
-            Ok(Some(n))
-        } else {
-            Ok(Some(obs * n))
-        }
-    } else {
-        Ok(None)
-    }
-}
-
-/// Parse the value of count=N and the type of N implied by iflags
-pub fn parse_count(iflags: &IFlags, matches: &Matches) -> Result<Option<CountType>, ParseError> {
-    if let Some(amt) = matches.value_of(options::COUNT) {
-        let n = parse_bytes_with_opt_multiplier(amt)?;
-        if iflags.count_bytes {
-            Ok(Some(CountType::Bytes(n)))
-        } else {
-            Ok(Some(CountType::Reads(n)))
-        }
-    } else {
-        Ok(None)
-    }
-}
-
-/// Parse whether the args indicate the input is not ascii
-pub fn parse_input_non_ascii(matches: &Matches) -> Result<bool, ParseError> {
-    if let Some(conv_opts) = matches.value_of(options::CONV) {
-        Ok(conv_opts.contains("ascii"))
-    } else {
-        Ok(false)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_df/df.rs.html b/src/uu_df/df.rs.html deleted file mode 100644 index 7796ab033..000000000 --- a/src/uu_df/df.rs.html +++ /dev/null @@ -1,1072 +0,0 @@ -df.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-
// This file is part of the uutils coreutils package.
-//
-// (c) Fangxu Hu <framlog@gmail.com>
-// (c) Sylvestre Ledru <sylvestre@debian.org>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-use uucore::error::UError;
-use uucore::error::UResult;
-#[cfg(unix)]
-use uucore::fsext::statfs_fn;
-use uucore::fsext::{read_fs_list, FsUsage, MountInfo};
-
-use clap::{crate_version, App, Arg};
-
-use number_prefix::NumberPrefix;
-use std::cell::Cell;
-use std::collections::HashMap;
-use std::collections::HashSet;
-
-use std::error::Error;
-#[cfg(unix)]
-use std::ffi::CString;
-use std::fmt::Display;
-#[cfg(unix)]
-use std::mem;
-
-#[cfg(windows)]
-use std::path::Path;
-
-static ABOUT: &str = "Show information about the file system on which each FILE resides,\n\
-                      or all file systems by default.";
-
-static OPT_ALL: &str = "all";
-static OPT_BLOCKSIZE: &str = "blocksize";
-static OPT_DIRECT: &str = "direct";
-static OPT_TOTAL: &str = "total";
-static OPT_HUMAN_READABLE: &str = "human-readable";
-static OPT_HUMAN_READABLE_2: &str = "human-readable-2";
-static OPT_INODES: &str = "inodes";
-static OPT_KILO: &str = "kilo";
-static OPT_LOCAL: &str = "local";
-static OPT_NO_SYNC: &str = "no-sync";
-static OPT_OUTPUT: &str = "output";
-static OPT_PATHS: &str = "paths";
-static OPT_PORTABILITY: &str = "portability";
-static OPT_SYNC: &str = "sync";
-static OPT_TYPE: &str = "type";
-static OPT_PRINT_TYPE: &str = "print-type";
-static OPT_EXCLUDE_TYPE: &str = "exclude-type";
-
-/// Store names of file systems as a selector.
-/// Note: `exclude` takes priority over `include`.
-struct FsSelector {
-    include: HashSet<String>,
-    exclude: HashSet<String>,
-}
-
-struct Options {
-    show_local_fs: bool,
-    show_all_fs: bool,
-    show_listed_fs: bool,
-    show_fs_type: bool,
-    show_inode_instead: bool,
-    // block_size: usize,
-    human_readable_base: i64,
-    fs_selector: FsSelector,
-}
-
-#[derive(Debug, Clone)]
-struct Filesystem {
-    mount_info: MountInfo,
-    usage: FsUsage,
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-impl FsSelector {
-    fn new() -> FsSelector {
-        FsSelector {
-            include: HashSet::new(),
-            exclude: HashSet::new(),
-        }
-    }
-
-    #[inline(always)]
-    fn include(&mut self, fs_type: String) {
-        self.include.insert(fs_type);
-    }
-
-    #[inline(always)]
-    fn exclude(&mut self, fs_type: String) {
-        self.exclude.insert(fs_type);
-    }
-
-    fn should_select(&self, fs_type: &str) -> bool {
-        if self.exclude.contains(fs_type) {
-            return false;
-        }
-        self.include.is_empty() || self.include.contains(fs_type)
-    }
-}
-
-impl Options {
-    fn new() -> Options {
-        Options {
-            show_local_fs: false,
-            show_all_fs: false,
-            show_listed_fs: false,
-            show_fs_type: false,
-            show_inode_instead: false,
-            // block_size: match env::var("BLOCKSIZE") {
-            //     Ok(size) => size.parse().unwrap(),
-            //     Err(_) => 512,
-            // },
-            human_readable_base: -1,
-            fs_selector: FsSelector::new(),
-        }
-    }
-}
-
-impl Filesystem {
-    // TODO: resolve uuid in `mount_info.dev_name` if exists
-    fn new(mount_info: MountInfo) -> Option<Filesystem> {
-        let _stat_path = if !mount_info.mount_dir.is_empty() {
-            mount_info.mount_dir.clone()
-        } else {
-            #[cfg(unix)]
-            {
-                mount_info.dev_name.clone()
-            }
-            #[cfg(windows)]
-            {
-                // On windows, we expect the volume id
-                mount_info.dev_id.clone()
-            }
-        };
-        #[cfg(unix)]
-        unsafe {
-            let path = CString::new(_stat_path).unwrap();
-            let mut statvfs = mem::zeroed();
-            if statfs_fn(path.as_ptr(), &mut statvfs) < 0 {
-                None
-            } else {
-                Some(Filesystem {
-                    mount_info,
-                    usage: FsUsage::new(statvfs),
-                })
-            }
-        }
-        #[cfg(windows)]
-        Some(Filesystem {
-            mount_info,
-            usage: FsUsage::new(Path::new(&_stat_path)),
-        })
-    }
-}
-
-fn filter_mount_list(vmi: Vec<MountInfo>, paths: &[String], opt: &Options) -> Vec<MountInfo> {
-    vmi.into_iter()
-        .filter_map(|mi| {
-            if (mi.remote && opt.show_local_fs)
-                || (mi.dummy && !opt.show_all_fs && !opt.show_listed_fs)
-                || !opt.fs_selector.should_select(&mi.fs_type)
-            {
-                None
-            } else {
-                if paths.is_empty() {
-                    // No path specified
-                    return Some((mi.dev_id.clone(), mi));
-                }
-                if paths.contains(&mi.mount_dir) {
-                    // One or more paths have been provided
-                    Some((mi.dev_id.clone(), mi))
-                } else {
-                    // Not a path we want to see
-                    None
-                }
-            }
-        })
-        .fold(
-            HashMap::<String, Cell<MountInfo>>::new(),
-            |mut acc, (id, mi)| {
-                #[allow(clippy::map_entry)]
-                {
-                    if acc.contains_key(&id) {
-                        let seen = acc[&id].replace(mi.clone());
-                        let target_nearer_root = seen.mount_dir.len() > mi.mount_dir.len();
-                        // With bind mounts, prefer items nearer the root of the source
-                        let source_below_root = !seen.mount_root.is_empty()
-                            && !mi.mount_root.is_empty()
-                            && seen.mount_root.len() < mi.mount_root.len();
-                        // let "real" devices with '/' in the name win.
-                        if (!mi.dev_name.starts_with('/') || seen.dev_name.starts_with('/'))
-                            // let points towards the root of the device win.
-                            && (!target_nearer_root || source_below_root)
-                            // let an entry over-mounted on a new device win...
-                            && (seen.dev_name == mi.dev_name
-                            /* ... but only when matching an existing mnt point,
-                            to avoid problematic replacement when given
-                            inaccurate mount lists, seen with some chroot
-                            environments for example.  */
-                            || seen.mount_dir != mi.mount_dir)
-                        {
-                            acc[&id].replace(seen);
-                        }
-                    } else {
-                        acc.insert(id, Cell::new(mi));
-                    }
-                    acc
-                }
-            },
-        )
-        .into_iter()
-        .map(|ent| ent.1.into_inner())
-        .collect::<Vec<_>>()
-}
-
-/// Convert `value` to a human readable string based on `base`.
-/// e.g. It returns 1G when value is 1 * 1024 * 1024 * 1024 and base is 1024.
-/// Note: It returns `value` if `base` isn't positive.
-fn human_readable(value: u64, base: i64) -> UResult<String> {
-    let base_str = match base {
-        d if d < 0 => value.to_string(),
-
-        // ref: [Binary prefix](https://en.wikipedia.org/wiki/Binary_prefix) @@ <https://archive.is/cnwmF>
-        // ref: [SI/metric prefix](https://en.wikipedia.org/wiki/Metric_prefix) @@ <https://archive.is/QIuLj>
-        1000 => match NumberPrefix::decimal(value as f64) {
-            NumberPrefix::Standalone(bytes) => bytes.to_string(),
-            NumberPrefix::Prefixed(prefix, bytes) => format!("{:.1}{}", bytes, prefix.symbol()),
-        },
-
-        1024 => match NumberPrefix::binary(value as f64) {
-            NumberPrefix::Standalone(bytes) => bytes.to_string(),
-            NumberPrefix::Prefixed(prefix, bytes) => format!("{:.1}{}", bytes, prefix.symbol()),
-        },
-
-        _ => return Err(DfError::InvalidBaseValue(base.to_string()).into()),
-    };
-
-    Ok(base_str)
-}
-
-fn use_size(free_size: u64, total_size: u64) -> String {
-    if total_size == 0 {
-        return String::from("-");
-    }
-    return format!(
-        "{:.0}%",
-        100f64 - 100f64 * (free_size as f64 / total_size as f64)
-    );
-}
-
-#[derive(Debug)]
-enum DfError {
-    InvalidBaseValue(String),
-}
-
-impl Display for DfError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            DfError::InvalidBaseValue(s) => write!(f, "Internal error: Unknown base value {}", s),
-        }
-    }
-}
-
-impl Error for DfError {}
-
-impl UError for DfError {
-    fn code(&self) -> i32 {
-        match self {
-            DfError::InvalidBaseValue(_) => 1,
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let paths: Vec<String> = matches
-        .values_of(OPT_PATHS)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    #[cfg(windows)]
-    {
-        if matches.is_present(OPT_INODES) {
-            println!("{}: doesn't support -i option", uucore::util_name());
-            return Ok(());
-        }
-    }
-
-    let mut opt = Options::new();
-    if matches.is_present(OPT_LOCAL) {
-        opt.show_local_fs = true;
-    }
-    if matches.is_present(OPT_ALL) {
-        opt.show_all_fs = true;
-    }
-    if matches.is_present(OPT_INODES) {
-        opt.show_inode_instead = true;
-    }
-    if matches.is_present(OPT_PRINT_TYPE) {
-        opt.show_fs_type = true;
-    }
-    if matches.is_present(OPT_HUMAN_READABLE) {
-        opt.human_readable_base = 1024;
-    }
-    if matches.is_present(OPT_HUMAN_READABLE_2) {
-        opt.human_readable_base = 1000;
-    }
-    for fs_type in matches.values_of_lossy(OPT_TYPE).unwrap_or_default() {
-        opt.fs_selector.include(fs_type.to_owned());
-    }
-    for fs_type in matches
-        .values_of_lossy(OPT_EXCLUDE_TYPE)
-        .unwrap_or_default()
-    {
-        opt.fs_selector.exclude(fs_type.to_owned());
-    }
-
-    let fs_list = filter_mount_list(read_fs_list(), &paths, &opt)
-        .into_iter()
-        .filter_map(Filesystem::new)
-        .filter(|fs| fs.usage.blocks != 0 || opt.show_all_fs || opt.show_listed_fs)
-        .collect::<Vec<_>>();
-
-    // set headers
-    let mut header = vec!["Filesystem"];
-    if opt.show_fs_type {
-        header.push("Type");
-    }
-    header.extend_from_slice(&if opt.show_inode_instead {
-        // spell-checker:disable-next-line
-        ["Inodes", "Iused", "IFree", "IUses%"]
-    } else {
-        [
-            if opt.human_readable_base == -1 {
-                "1k-blocks"
-            } else {
-                "Size"
-            },
-            "Used",
-            "Available",
-            "Use%",
-        ]
-    });
-    if cfg!(target_os = "macos") && !opt.show_inode_instead {
-        header.insert(header.len() - 1, "Capacity");
-    }
-    header.push("Mounted on");
-
-    for (idx, title) in header.iter().enumerate() {
-        if idx == 0 || idx == header.len() - 1 {
-            print!("{0: <16} ", title);
-        } else if opt.show_fs_type && idx == 1 {
-            print!("{0: <5} ", title);
-        } else if idx == header.len() - 2 {
-            print!("{0: >5} ", title);
-        } else {
-            print!("{0: >12} ", title);
-        }
-    }
-    println!();
-    for fs in fs_list.iter() {
-        print!("{0: <16} ", fs.mount_info.dev_name);
-        if opt.show_fs_type {
-            print!("{0: <5} ", fs.mount_info.fs_type);
-        }
-        if opt.show_inode_instead {
-            print!(
-                "{0: >12} ",
-                human_readable(fs.usage.files, opt.human_readable_base)?
-            );
-            print!(
-                "{0: >12} ",
-                human_readable(fs.usage.files - fs.usage.ffree, opt.human_readable_base)?
-            );
-            print!(
-                "{0: >12} ",
-                human_readable(fs.usage.ffree, opt.human_readable_base)?
-            );
-            print!(
-                "{0: >5} ",
-                format!(
-                    "{0:.1}%",
-                    100f64 - 100f64 * (fs.usage.ffree as f64 / fs.usage.files as f64)
-                )
-            );
-        } else {
-            let total_size = fs.usage.blocksize * fs.usage.blocks;
-            let free_size = fs.usage.blocksize * fs.usage.bfree;
-            print!(
-                "{0: >12} ",
-                human_readable(total_size, opt.human_readable_base)?
-            );
-            print!(
-                "{0: >12} ",
-                human_readable(total_size - free_size, opt.human_readable_base)?
-            );
-            print!(
-                "{0: >12} ",
-                human_readable(free_size, opt.human_readable_base)?
-            );
-            if cfg!(target_os = "macos") {
-                let used = fs.usage.blocks - fs.usage.bfree;
-                let blocks = used + fs.usage.bavail;
-                print!("{0: >12} ", use_size(used, blocks));
-            }
-            print!("{0: >5} ", use_size(free_size, total_size));
-        }
-        print!("{0: <16}", fs.mount_info.mount_dir);
-        println!();
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_ALL)
-                .short('a')
-                .long("all")
-                .help("include dummy file systems"),
-        )
-        .arg(
-            Arg::new(OPT_BLOCKSIZE)
-                .short('B')
-                .long("block-size")
-                .takes_value(true)
-                .help(
-                    "scale sizes by SIZE before printing them; e.g.\
-                     '-BM' prints sizes in units of 1,048,576 bytes",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_DIRECT)
-                .long("direct")
-                .help("show statistics for a file instead of mount point"),
-        )
-        .arg(
-            Arg::new(OPT_TOTAL)
-                .long("total")
-                .help("produce a grand total"),
-        )
-        .arg(
-            Arg::new(OPT_HUMAN_READABLE)
-                .short('h')
-                .long("human-readable")
-                .conflicts_with(OPT_HUMAN_READABLE_2)
-                .help("print sizes in human readable format (e.g., 1K 234M 2G)"),
-        )
-        .arg(
-            Arg::new(OPT_HUMAN_READABLE_2)
-                .short('H')
-                .long("si")
-                .conflicts_with(OPT_HUMAN_READABLE)
-                .help("likewise, but use powers of 1000 not 1024"),
-        )
-        .arg(
-            Arg::new(OPT_INODES)
-                .short('i')
-                .long("inodes")
-                .help("list inode information instead of block usage"),
-        )
-        .arg(Arg::new(OPT_KILO).short('k').help("like --block-size=1K"))
-        .arg(
-            Arg::new(OPT_LOCAL)
-                .short('l')
-                .long("local")
-                .help("limit listing to local file systems"),
-        )
-        .arg(
-            Arg::new(OPT_NO_SYNC)
-                .long("no-sync")
-                .conflicts_with(OPT_SYNC)
-                .help("do not invoke sync before getting usage info (default)"),
-        )
-        .arg(
-            Arg::new(OPT_OUTPUT)
-                .long("output")
-                .takes_value(true)
-                .use_delimiter(true)
-                .help(
-                    "use the output format defined by FIELD_LIST,\
-                     or print all fields if FIELD_LIST is omitted.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_PORTABILITY)
-                .short('P')
-                .long("portability")
-                .help("use the POSIX output format"),
-        )
-        .arg(
-            Arg::new(OPT_SYNC)
-                .long("sync")
-                .conflicts_with(OPT_NO_SYNC)
-                .help("invoke sync before getting usage info"),
-        )
-        .arg(
-            Arg::new(OPT_TYPE)
-                .short('t')
-                .long("type")
-                .allow_invalid_utf8(true)
-                .takes_value(true)
-                .use_delimiter(true)
-                .help("limit listing to file systems of type TYPE"),
-        )
-        .arg(
-            Arg::new(OPT_PRINT_TYPE)
-                .short('T')
-                .long("print-type")
-                .help("print file system type"),
-        )
-        .arg(
-            Arg::new(OPT_EXCLUDE_TYPE)
-                .short('x')
-                .long("exclude-type")
-                .takes_value(true)
-                .use_delimiter(true)
-                .help("limit listing to file systems not of type TYPE"),
-        )
-        .arg(Arg::new(OPT_PATHS).multiple_occurrences(true))
-        .override_help("Filesystem(s) to list")
-}
-
-
- \ No newline at end of file diff --git a/src/uu_dircolors/colors.rs.html b/src/uu_dircolors/colors.rs.html deleted file mode 100644 index 602a3988f..000000000 --- a/src/uu_dircolors/colors.rs.html +++ /dev/null @@ -1,390 +0,0 @@ -colors.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// spell-checker:ignore (ToDO) EIGHTBIT ETERM MULTIHARDLINK cpio dtterm jfbterm konsole kterm mlterm rmvb rxvt stat'able svgz tmux webm xspf
-
-pub const INTERNAL_DB: &str = r#"# Configuration file for dircolors, a utility to help you set the
-# LS_COLORS environment variable used by GNU ls with the --color option.
-# Copyright (C) 1996-2016 Free Software Foundation, Inc.
-# Copying and distribution of this file, with or without modification,
-# are permitted provided the copyright notice and this notice are preserved.
-# The keywords COLOR, OPTIONS, and EIGHTBIT (honored by the
-# slackware version of dircolors) are recognized but ignored.
-# Below are TERM entries, which can be a glob patterns, to match
-# against the TERM environment variable to determine if it is colorizable.
-TERM Eterm
-TERM ansi
-TERM color-xterm
-TERM con[0-9]*x[0-9]*
-TERM cons25
-TERM console
-TERM cygwin
-TERM dtterm
-TERM eterm-color
-TERM gnome
-TERM gnome-256color
-TERM hurd
-TERM jfbterm
-TERM konsole
-TERM kterm
-TERM linux
-TERM linux-c
-TERM mach-color
-TERM mach-gnu-color
-TERM mlterm
-TERM putty
-TERM putty-256color
-TERM rxvt*
-TERM screen*
-TERM st
-TERM st-256color
-TERM terminator
-TERM tmux*
-TERM vt100
-TERM xterm*
-# Below are the color init strings for the basic file types. A color init
-# string consists of one or more of the following numeric codes:
-# Attribute codes:
-# 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed
-# Text color codes:
-# 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
-# Background color codes:
-# 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
-#NORMAL 00 # no color code at all
-#FILE 00 # regular file: use no color at all
-RESET 0 # reset to "normal" color
-DIR 01;34 # directory
-LINK 01;36 # symbolic link. (If you set this to 'target' instead of a
- # numerical value, the color is as for the file pointed to.)
-MULTIHARDLINK 00 # regular file with more than one link
-FIFO 40;33 # pipe
-SOCK 01;35 # socket
-DOOR 01;35 # door
-BLK 40;33;01 # block device driver
-CHR 40;33;01 # character device driver
-ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file ...
-MISSING 00 # ... and the files they point to
-SETUID 37;41 # file that is setuid (u+s)
-SETGID 30;43 # file that is setgid (g+s)
-CAPABILITY 30;41 # file with capability
-STICKY_OTHER_WRITABLE 30;42 # dir that is sticky and other-writable (+t,o+w)
-OTHER_WRITABLE 34;42 # dir that is other-writable (o+w) and not sticky
-STICKY 37;44 # dir with the sticky bit set (+t) and not other-writable
-# This is for files with execute permission:
-EXEC 01;32
-# List any file extensions like '.gz' or '.tar' that you would like ls
-# to colorize below. Put the extension, a space, and the color init string.
-# (and any comments you want to add after a '#')
-# If you use DOS-style suffixes, you may want to uncomment the following:
-#.cmd 01;32 # executables (bright green)
-#.exe 01;32
-#.com 01;32
-#.btm 01;32
-#.bat 01;32
-# Or if you want to colorize scripts even if they do not have the
-# executable bit actually set.
-#.sh 01;32
-#.csh 01;32
- # archives or compressed (bright red)
-.tar 01;31
-.tgz 01;31
-.arc 01;31
-.arj 01;31
-.taz 01;31
-.lha 01;31
-.lz4 01;31
-.lzh 01;31
-.lzma 01;31
-.tlz 01;31
-.txz 01;31
-.tzo 01;31
-.t7z 01;31
-.zip 01;31
-.z 01;31
-.Z 01;31
-.dz 01;31
-.gz 01;31
-.lrz 01;31
-.lz 01;31
-.lzo 01;31
-.xz 01;31
-.bz2 01;31
-.bz 01;31
-.tbz 01;31
-.tbz2 01;31
-.tz 01;31
-.deb 01;31
-.rpm 01;31
-.jar 01;31
-.war 01;31
-.ear 01;31
-.sar 01;31
-.rar 01;31
-.alz 01;31
-.ace 01;31
-.zoo 01;31
-.cpio 01;31
-.7z 01;31
-.rz 01;31
-.cab 01;31
-# image formats
-.jpg 01;35
-.jpeg 01;35
-.gif 01;35
-.bmp 01;35
-.pbm 01;35
-.pgm 01;35
-.ppm 01;35
-.tga 01;35
-.xbm 01;35
-.xpm 01;35
-.tif 01;35
-.tiff 01;35
-.png 01;35
-.svg 01;35
-.svgz 01;35
-.mng 01;35
-.pcx 01;35
-.mov 01;35
-.mpg 01;35
-.mpeg 01;35
-.m2v 01;35
-.mkv 01;35
-.webm 01;35
-.ogm 01;35
-.mp4 01;35
-.m4v 01;35
-.mp4v 01;35
-.vob 01;35
-.qt 01;35
-.nuv 01;35
-.wmv 01;35
-.asf 01;35
-.rm 01;35
-.rmvb 01;35
-.flc 01;35
-.avi 01;35
-.fli 01;35
-.flv 01;35
-.gl 01;35
-.dl 01;35
-.xcf 01;35
-.xwd 01;35
-.yuv 01;35
-.cgm 01;35
-.emf 01;35
-# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
-.ogv 01;35
-.ogx 01;35
-# audio formats
-.aac 00;36
-.au 00;36
-.flac 00;36
-.m4a 00;36
-.mid 00;36
-.midi 00;36
-.mka 00;36
-.mp3 00;36
-.mpc 00;36
-.ogg 00;36
-.ra 00;36
-.wav 00;36
-# http://wiki.xiph.org/index.php/MIME_Types_and_File_Extensions
-.oga 00;36
-.opus 00;36
-.spx 00;36
-.xspf 00;36"#;
-
-
- \ No newline at end of file diff --git a/src/uu_dircolors/dircolors.rs.html b/src/uu_dircolors/dircolors.rs.html deleted file mode 100644 index f48c856e3..000000000 --- a/src/uu_dircolors/dircolors.rs.html +++ /dev/null @@ -1,754 +0,0 @@ -dircolors.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-// (c) Mitchell Mebane <mitchell.mebane@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) clrtoeol dircolors eightbit endcode fnmatch leftcode multihardlink rightcode setenv sgid suid
-
-use std::borrow::Borrow;
-use std::env;
-use std::fs::File;
-use std::io::{BufRead, BufReader};
-
-use clap::{crate_version, App, Arg};
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError, UUsageError};
-
-mod options {
-    pub const BOURNE_SHELL: &str = "bourne-shell";
-    pub const C_SHELL: &str = "c-shell";
-    pub const PRINT_DATABASE: &str = "print-database";
-    pub const FILE: &str = "FILE";
-}
-
-static SYNTAX: &str = "[OPTION]... [FILE]";
-static SUMMARY: &str = "Output commands to set the LS_COLORS environment variable.";
-static LONG_HELP: &str = "
- If FILE is specified, read it to determine which colors to use for which
- file types and extensions.  Otherwise, a precompiled database is used.
- For details on the format of these files, run 'dircolors --print-database'
-";
-
-mod colors;
-use self::colors::INTERNAL_DB;
-
-#[derive(PartialEq, Debug)]
-pub enum OutputFmt {
-    Shell,
-    CShell,
-    Unknown,
-}
-
-pub fn guess_syntax() -> OutputFmt {
-    use std::path::Path;
-    match env::var("SHELL") {
-        Ok(ref s) if !s.is_empty() => {
-            let shell_path: &Path = s.as_ref();
-            if let Some(name) = shell_path.file_name() {
-                if name == "csh" || name == "tcsh" {
-                    OutputFmt::CShell
-                } else {
-                    OutputFmt::Shell
-                }
-            } else {
-                OutputFmt::Shell
-            }
-        }
-        _ => OutputFmt::Unknown,
-    }
-}
-
-fn usage() -> String {
-    format!("{0} {1}", uucore::execution_phrase(), SYNTAX)
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(&args);
-
-    let files = matches
-        .values_of(options::FILE)
-        .map_or(vec![], |file_values| file_values.collect());
-
-    // clap provides .conflicts_with / .conflicts_with_all, but we want to
-    // manually handle conflicts so we can match the output of GNU coreutils
-    if (matches.is_present(options::C_SHELL) || matches.is_present(options::BOURNE_SHELL))
-        && matches.is_present(options::PRINT_DATABASE)
-    {
-        return Err(UUsageError::new(
-            1,
-            "the options to output dircolors' internal database and\nto select a shell \
-             syntax are mutually exclusive",
-        ));
-    }
-
-    if matches.is_present(options::PRINT_DATABASE) {
-        if !files.is_empty() {
-            return Err(UUsageError::new(
-                1,
-                format!(
-                    "extra operand {}\nfile operands cannot be combined with \
-                     --print-database (-p)",
-                    files[0].quote()
-                ),
-            ));
-        }
-        println!("{}", INTERNAL_DB);
-        return Ok(());
-    }
-
-    let mut out_format = OutputFmt::Unknown;
-    if matches.is_present(options::C_SHELL) {
-        out_format = OutputFmt::CShell;
-    } else if matches.is_present(options::BOURNE_SHELL) {
-        out_format = OutputFmt::Shell;
-    }
-
-    if out_format == OutputFmt::Unknown {
-        match guess_syntax() {
-            OutputFmt::Unknown => {
-                return Err(USimpleError::new(
-                    1,
-                    "no SHELL environment variable, and no shell type option given",
-                ));
-            }
-            fmt => out_format = fmt,
-        }
-    }
-
-    let result;
-    if files.is_empty() {
-        result = parse(INTERNAL_DB.lines(), out_format, "")
-    } else {
-        if files.len() > 1 {
-            return Err(UUsageError::new(
-                1,
-                format!("extra operand {}", files[1].quote()),
-            ));
-        }
-        match File::open(files[0]) {
-            Ok(f) => {
-                let fin = BufReader::new(f);
-                result = parse(fin.lines().filter_map(Result::ok), out_format, files[0])
-            }
-            Err(e) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("{}: {}", files[0].maybe_quote(), e),
-                ));
-            }
-        }
-    }
-
-    match result {
-        Ok(s) => {
-            println!("{}", s);
-            Ok(())
-        }
-        Err(s) => {
-            return Err(USimpleError::new(1, s));
-        }
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(SUMMARY)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::BOURNE_SHELL)
-                .long("sh")
-                .short('b')
-                .visible_alias("bourne-shell")
-                .help("output Bourne shell code to set LS_COLORS")
-                .display_order(1),
-        )
-        .arg(
-            Arg::new(options::C_SHELL)
-                .long("csh")
-                .short('c')
-                .visible_alias("c-shell")
-                .help("output C shell code to set LS_COLORS")
-                .display_order(2),
-        )
-        .arg(
-            Arg::new(options::PRINT_DATABASE)
-                .long("print-database")
-                .short('p')
-                .help("print the byte counts")
-                .display_order(3),
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-pub trait StrUtils {
-    /// Remove comments and trim whitespace
-    fn purify(&self) -> &Self;
-    /// Like split_whitespace() but only produce 2 components
-    fn split_two(&self) -> (&str, &str);
-    fn fnmatch(&self, pattern: &str) -> bool;
-}
-
-impl StrUtils for str {
-    fn purify(&self) -> &Self {
-        let mut line = self;
-        for (n, _) in self
-            .as_bytes()
-            .iter()
-            .enumerate()
-            .filter(|(_, c)| **c == b'#')
-        {
-            // Ignore the content after '#'
-            // only if it is preceded by at least one whitespace
-            match self[..n].chars().last() {
-                Some(c) if c.is_whitespace() => {
-                    line = &self[..n - c.len_utf8()];
-                    break;
-                }
-                None => {
-                    // n == 0
-                    line = &self[..0];
-                    break;
-                }
-                _ => (),
-            }
-        }
-        line.trim()
-    }
-
-    fn split_two(&self) -> (&str, &str) {
-        if let Some(b) = self.find(char::is_whitespace) {
-            let key = &self[..b];
-            if let Some(e) = self[b..].find(|c: char| !c.is_whitespace()) {
-                (key, &self[b + e..])
-            } else {
-                (key, "")
-            }
-        } else {
-            ("", "")
-        }
-    }
-
-    fn fnmatch(&self, pat: &str) -> bool {
-        pat.parse::<glob::Pattern>().unwrap().matches(self)
-    }
-}
-
-#[derive(PartialEq)]
-enum ParseState {
-    Global,
-    Matched,
-    Continue,
-    Pass,
-}
-use std::collections::HashMap;
-use uucore::InvalidEncodingHandling;
-
-fn parse<T>(lines: T, fmt: OutputFmt, fp: &str) -> Result<String, String>
-where
-    T: IntoIterator,
-    T::Item: Borrow<str>,
-{
-    // 1440 > $(dircolors | wc -m)
-    let mut result = String::with_capacity(1440);
-    match fmt {
-        OutputFmt::Shell => result.push_str("LS_COLORS='"),
-        OutputFmt::CShell => result.push_str("setenv LS_COLORS '"),
-        _ => unreachable!(),
-    }
-
-    let mut table: HashMap<&str, &str> = HashMap::with_capacity(48);
-    table.insert("normal", "no");
-    table.insert("norm", "no");
-    table.insert("file", "fi");
-    table.insert("reset", "rs");
-    table.insert("dir", "di");
-    table.insert("lnk", "ln");
-    table.insert("link", "ln");
-    table.insert("symlink", "ln");
-    table.insert("orphan", "or");
-    table.insert("missing", "mi");
-    table.insert("fifo", "pi");
-    table.insert("pipe", "pi");
-    table.insert("sock", "so");
-    table.insert("blk", "bd");
-    table.insert("block", "bd");
-    table.insert("chr", "cd");
-    table.insert("char", "cd");
-    table.insert("door", "do");
-    table.insert("exec", "ex");
-    table.insert("left", "lc");
-    table.insert("leftcode", "lc");
-    table.insert("right", "rc");
-    table.insert("rightcode", "rc");
-    table.insert("end", "ec");
-    table.insert("endcode", "ec");
-    table.insert("suid", "su");
-    table.insert("setuid", "su");
-    table.insert("sgid", "sg");
-    table.insert("setgid", "sg");
-    table.insert("sticky", "st");
-    table.insert("other_writable", "ow");
-    table.insert("owr", "ow");
-    table.insert("sticky_other_writable", "tw");
-    table.insert("owt", "tw");
-    table.insert("capability", "ca");
-    table.insert("multihardlink", "mh");
-    table.insert("clrtoeol", "cl");
-
-    let term = env::var("TERM").unwrap_or_else(|_| "none".to_owned());
-    let term = term.as_str();
-
-    let mut state = ParseState::Global;
-
-    for (num, line) in lines.into_iter().enumerate() {
-        let num = num + 1;
-        let line = line.borrow().purify();
-        if line.is_empty() {
-            continue;
-        }
-
-        let (key, val) = line.split_two();
-        if val.is_empty() {
-            return Err(format!(
-                "{}:{}: invalid line;  missing second token",
-                fp.maybe_quote(),
-                num
-            ));
-        }
-        let lower = key.to_lowercase();
-
-        if lower == "term" {
-            if term.fnmatch(val) {
-                state = ParseState::Matched;
-            } else if state != ParseState::Matched {
-                state = ParseState::Pass;
-            }
-        } else {
-            if state == ParseState::Matched {
-                // prevent subsequent mismatched TERM from
-                // cancelling the input
-                state = ParseState::Continue;
-            }
-            if state != ParseState::Pass {
-                if key.starts_with('.') {
-                    result.push_str(format!("*{}={}:", key, val).as_str());
-                } else if key.starts_with('*') {
-                    result.push_str(format!("{}={}:", key, val).as_str());
-                } else if lower == "options" || lower == "color" || lower == "eightbit" {
-                    // Slackware only. Ignore
-                } else if let Some(s) = table.get(lower.as_str()) {
-                    result.push_str(format!("{}={}:", s, val).as_str());
-                } else {
-                    return Err(format!(
-                        "{}:{}: unrecognized keyword {}",
-                        fp.maybe_quote(),
-                        num,
-                        key
-                    ));
-                }
-            }
-        }
-    }
-
-    match fmt {
-        OutputFmt::Shell => result.push_str("';\nexport LS_COLORS"),
-        OutputFmt::CShell => result.push('\''),
-        _ => unreachable!(),
-    }
-
-    Ok(result)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_dirname/dirname.rs.html b/src/uu_dirname/dirname.rs.html deleted file mode 100644 index 2da1ee4e4..000000000 --- a/src/uu_dirname/dirname.rs.html +++ /dev/null @@ -1,198 +0,0 @@ -dirname.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-95
-96
-97
-
// This file is part of the uutils coreutils package.
-//
-// (c) Derek Chiang <derekchiang93@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-use clap::{crate_version, App, Arg};
-use std::path::Path;
-use uucore::display::print_verbatim;
-use uucore::error::{UResult, UUsageError};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "strip last component from file name";
-
-mod options {
-    pub const ZERO: &str = "zero";
-    pub const DIR: &str = "dir";
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION] NAME...", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    String::from(
-        "Output each NAME with its last non-slash component and trailing slashes
-        removed; if NAME contains no /'s, output '.' (meaning the current directory).",
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let usage = usage();
-    let after_help = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let separator = if matches.is_present(options::ZERO) {
-        "\0"
-    } else {
-        "\n"
-    };
-
-    let dirnames: Vec<String> = matches
-        .values_of(options::DIR)
-        .unwrap_or_default()
-        .map(str::to_owned)
-        .collect();
-
-    if !dirnames.is_empty() {
-        for path in dirnames.iter() {
-            let p = Path::new(path);
-            match p.parent() {
-                Some(d) => {
-                    if d.components().next() == None {
-                        print!(".")
-                    } else {
-                        print_verbatim(d).unwrap();
-                    }
-                }
-                None => {
-                    if p.is_absolute() || path == "/" {
-                        print!("/");
-                    } else {
-                        print!(".");
-                    }
-                }
-            }
-            print!("{}", separator);
-        }
-    } else {
-        return Err(UUsageError::new(1, "missing operand"));
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .about(ABOUT)
-        .version(crate_version!())
-        .arg(
-            Arg::new(options::ZERO)
-                .long(options::ZERO)
-                .short('z')
-                .help("separate output with NUL rather than newline"),
-        )
-        .arg(Arg::new(options::DIR).hide(true).multiple_occurrences(true))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_du/du.rs.html b/src/uu_du/du.rs.html deleted file mode 100644 index 0fdbc9d7d..000000000 --- a/src/uu_du/du.rs.html +++ /dev/null @@ -1,1728 +0,0 @@ -du.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-812
-813
-814
-815
-816
-817
-818
-819
-820
-821
-822
-823
-824
-825
-826
-827
-828
-829
-830
-831
-832
-833
-834
-835
-836
-837
-838
-839
-840
-841
-842
-843
-844
-845
-846
-847
-848
-849
-850
-851
-852
-853
-854
-855
-856
-857
-858
-859
-860
-861
-862
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Derek Chiang <derekchiang93@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-#[macro_use]
-extern crate uucore;
-
-use chrono::prelude::DateTime;
-use chrono::Local;
-use clap::ArgMatches;
-use clap::{crate_version, App, Arg};
-use std::collections::HashSet;
-use std::convert::TryFrom;
-use std::env;
-use std::fs;
-#[cfg(not(windows))]
-use std::fs::Metadata;
-use std::io::{ErrorKind, Result};
-use std::iter;
-#[cfg(not(windows))]
-use std::os::unix::fs::MetadataExt;
-#[cfg(windows)]
-use std::os::windows::fs::MetadataExt;
-#[cfg(windows)]
-use std::os::windows::io::AsRawHandle;
-#[cfg(windows)]
-use std::path::Path;
-use std::path::PathBuf;
-use std::str::FromStr;
-use std::time::{Duration, UNIX_EPOCH};
-use std::{error::Error, fmt::Display};
-use uucore::display::{print_verbatim, Quotable};
-use uucore::error::{UError, UResult};
-use uucore::parse_size::{parse_size, ParseSizeError};
-use uucore::InvalidEncodingHandling;
-#[cfg(windows)]
-use winapi::shared::minwindef::{DWORD, LPVOID};
-#[cfg(windows)]
-use winapi::um::fileapi::{FILE_ID_INFO, FILE_STANDARD_INFO};
-#[cfg(windows)]
-use winapi::um::minwinbase::{FileIdInfo, FileStandardInfo};
-#[cfg(windows)]
-use winapi::um::winbase::GetFileInformationByHandleEx;
-#[cfg(windows)]
-use winapi::um::winnt::{FILE_ID_128, ULONGLONG};
-
-mod options {
-    pub const NULL: &str = "0";
-    pub const ALL: &str = "all";
-    pub const APPARENT_SIZE: &str = "apparent-size";
-    pub const BLOCK_SIZE: &str = "block-size";
-    pub const BYTES: &str = "b";
-    pub const TOTAL: &str = "c";
-    pub const MAX_DEPTH: &str = "d";
-    pub const HUMAN_READABLE: &str = "h";
-    pub const BLOCK_SIZE_1K: &str = "k";
-    pub const COUNT_LINKS: &str = "l";
-    pub const BLOCK_SIZE_1M: &str = "m";
-    pub const SEPARATE_DIRS: &str = "S";
-    pub const SUMMARIZE: &str = "s";
-    pub const THRESHOLD: &str = "threshold";
-    pub const SI: &str = "si";
-    pub const TIME: &str = "time";
-    pub const TIME_STYLE: &str = "time-style";
-    pub const ONE_FILE_SYSTEM: &str = "one-file-system";
-    pub const DEREFERENCE: &str = "dereference";
-    pub const INODES: &str = "inodes";
-    pub const FILE: &str = "FILE";
-}
-
-const SUMMARY: &str = "estimate file space usage";
-const LONG_HELP: &str = "
-Display values are in units of the first available SIZE from --block-size,
-and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
-Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).
-
-SIZE is an integer and optional unit (example: 10M is 10*1024*1024).
-Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB,... (powers
-of 1000).
-";
-
-// TODO: Support Z & Y (currently limited by size of u64)
-const UNITS: [(char, u32); 6] = [('E', 6), ('P', 5), ('T', 4), ('G', 3), ('M', 2), ('K', 1)];
-
-struct Options {
-    all: bool,
-    util_name: String,
-    max_depth: Option<usize>,
-    total: bool,
-    separate_dirs: bool,
-    one_file_system: bool,
-    dereference: bool,
-    inodes: bool,
-}
-
-#[derive(PartialEq, Eq, Hash, Clone, Copy)]
-struct FileInfo {
-    file_id: u128,
-    dev_id: u64,
-}
-
-struct Stat {
-    path: PathBuf,
-    is_dir: bool,
-    size: u64,
-    blocks: u64,
-    inodes: u64,
-    inode: Option<FileInfo>,
-    created: Option<u64>,
-    accessed: u64,
-    modified: u64,
-}
-
-impl Stat {
-    fn new(path: PathBuf, options: &Options) -> Result<Stat> {
-        let metadata = if options.dereference {
-            fs::metadata(&path)?
-        } else {
-            fs::symlink_metadata(&path)?
-        };
-
-        #[cfg(not(windows))]
-        let file_info = FileInfo {
-            file_id: metadata.ino() as u128,
-            dev_id: metadata.dev(),
-        };
-        #[cfg(not(windows))]
-        return Ok(Stat {
-            path,
-            is_dir: metadata.is_dir(),
-            size: metadata.len(),
-            blocks: metadata.blocks() as u64,
-            inodes: 1,
-            inode: Some(file_info),
-            created: birth_u64(&metadata),
-            accessed: metadata.atime() as u64,
-            modified: metadata.mtime() as u64,
-        });
-
-        #[cfg(windows)]
-        let size_on_disk = get_size_on_disk(&path);
-        #[cfg(windows)]
-        let file_info = get_file_info(&path);
-        #[cfg(windows)]
-        Ok(Stat {
-            path,
-            is_dir: metadata.is_dir(),
-            size: metadata.len(),
-            blocks: size_on_disk / 1024 * 2,
-            inode: file_info,
-            inodes: 1,
-            created: windows_creation_time_to_unix_time(metadata.creation_time()),
-            accessed: windows_time_to_unix_time(metadata.last_access_time()),
-            modified: windows_time_to_unix_time(metadata.last_write_time()),
-        })
-    }
-}
-
-#[cfg(windows)]
-// https://doc.rust-lang.org/std/os/windows/fs/trait.MetadataExt.html#tymethod.last_access_time
-// "The returned 64-bit value [...] which represents the number of 100-nanosecond intervals since January 1, 1601 (UTC)."
-// "If the underlying filesystem does not support last access time, the returned value is 0."
-fn windows_time_to_unix_time(win_time: u64) -> u64 {
-    (win_time / 10_000_000).saturating_sub(11_644_473_600)
-}
-
-#[cfg(windows)]
-fn windows_creation_time_to_unix_time(win_time: u64) -> Option<u64> {
-    (win_time / 10_000_000).checked_sub(11_644_473_600)
-}
-
-#[cfg(not(windows))]
-fn birth_u64(meta: &Metadata) -> Option<u64> {
-    meta.created()
-        .ok()
-        .and_then(|t| t.duration_since(UNIX_EPOCH).ok())
-        .map(|e| e.as_secs() as u64)
-}
-
-#[cfg(windows)]
-fn get_size_on_disk(path: &Path) -> u64 {
-    let mut size_on_disk = 0;
-
-    // bind file so it stays in scope until end of function
-    // if it goes out of scope the handle below becomes invalid
-    let file = match fs::File::open(path) {
-        Ok(file) => file,
-        Err(_) => return size_on_disk, // opening directories will fail
-    };
-
-    let handle = file.as_raw_handle();
-
-    unsafe {
-        let mut file_info: FILE_STANDARD_INFO = core::mem::zeroed();
-        let file_info_ptr: *mut FILE_STANDARD_INFO = &mut file_info;
-
-        let success = GetFileInformationByHandleEx(
-            handle,
-            FileStandardInfo,
-            file_info_ptr as LPVOID,
-            std::mem::size_of::<FILE_STANDARD_INFO>() as DWORD,
-        );
-
-        if success != 0 {
-            size_on_disk = *file_info.AllocationSize.QuadPart() as u64;
-        }
-    }
-
-    size_on_disk
-}
-
-#[cfg(windows)]
-fn get_file_info(path: &Path) -> Option<FileInfo> {
-    let mut result = None;
-
-    let file = match fs::File::open(path) {
-        Ok(file) => file,
-        Err(_) => return result,
-    };
-
-    let handle = file.as_raw_handle();
-
-    unsafe {
-        let mut file_info: FILE_ID_INFO = core::mem::zeroed();
-        let file_info_ptr: *mut FILE_ID_INFO = &mut file_info;
-
-        let success = GetFileInformationByHandleEx(
-            handle,
-            FileIdInfo,
-            file_info_ptr as LPVOID,
-            std::mem::size_of::<FILE_ID_INFO>() as DWORD,
-        );
-
-        if success != 0 {
-            result = Some(FileInfo {
-                file_id: std::mem::transmute::<FILE_ID_128, u128>(file_info.FileId),
-                dev_id: std::mem::transmute::<ULONGLONG, u64>(file_info.VolumeSerialNumber),
-            });
-        }
-    }
-
-    result
-}
-
-fn read_block_size(s: Option<&str>) -> usize {
-    if let Some(s) = s {
-        parse_size(s)
-            .unwrap_or_else(|e| crash!(1, "{}", format_error_message(e, s, options::BLOCK_SIZE)))
-    } else {
-        for env_var in &["DU_BLOCK_SIZE", "BLOCK_SIZE", "BLOCKSIZE"] {
-            if let Ok(env_size) = env::var(env_var) {
-                if let Ok(v) = parse_size(&env_size) {
-                    return v;
-                }
-            }
-        }
-        if env::var("POSIXLY_CORRECT").is_ok() {
-            512
-        } else {
-            1024
-        }
-    }
-}
-
-fn choose_size(matches: &ArgMatches, stat: &Stat) -> u64 {
-    if matches.is_present(options::INODES) {
-        stat.inodes
-    } else if matches.is_present(options::APPARENT_SIZE) || matches.is_present(options::BYTES) {
-        stat.size
-    } else {
-        // The st_blocks field indicates the number of blocks allocated to the file, 512-byte units.
-        // See: http://linux.die.net/man/2/stat
-        stat.blocks * 512
-    }
-}
-
-// this takes `my_stat` to avoid having to stat files multiple times.
-// XXX: this should use the impl Trait return type when it is stabilized
-fn du(
-    mut my_stat: Stat,
-    options: &Options,
-    depth: usize,
-    inodes: &mut HashSet<FileInfo>,
-) -> Box<dyn DoubleEndedIterator<Item = Stat>> {
-    let mut stats = vec![];
-    let mut futures = vec![];
-
-    if my_stat.is_dir {
-        let read = match fs::read_dir(&my_stat.path) {
-            Ok(read) => read,
-            Err(e) => {
-                eprintln!(
-                    "{}: cannot read directory {}: {}",
-                    options.util_name,
-                    my_stat.path.quote(),
-                    e
-                );
-                return Box::new(iter::once(my_stat));
-            }
-        };
-
-        for f in read {
-            match f {
-                Ok(entry) => match Stat::new(entry.path(), options) {
-                    Ok(this_stat) => {
-                        if let Some(inode) = this_stat.inode {
-                            if inodes.contains(&inode) {
-                                continue;
-                            }
-                            inodes.insert(inode);
-                        }
-                        if this_stat.is_dir {
-                            if options.one_file_system {
-                                if let (Some(this_inode), Some(my_inode)) =
-                                    (this_stat.inode, my_stat.inode)
-                                {
-                                    if this_inode.dev_id != my_inode.dev_id {
-                                        continue;
-                                    }
-                                }
-                            }
-                            futures.push(du(this_stat, options, depth + 1, inodes));
-                        } else {
-                            my_stat.size += this_stat.size;
-                            my_stat.blocks += this_stat.blocks;
-                            my_stat.inodes += 1;
-                            if options.all {
-                                stats.push(this_stat);
-                            }
-                        }
-                    }
-                    Err(error) => match error.kind() {
-                        ErrorKind::PermissionDenied => {
-                            let description = format!("cannot access {}", entry.path().quote());
-                            let error_message = "Permission denied";
-                            show_error_custom_description!(description, "{}", error_message)
-                        }
-                        _ => show_error!("cannot access {}: {}", entry.path().quote(), error),
-                    },
-                },
-                Err(error) => show_error!("{}", error),
-            }
-        }
-    }
-
-    stats.extend(futures.into_iter().flatten().filter(|stat| {
-        if !options.separate_dirs && stat.path.parent().unwrap() == my_stat.path {
-            my_stat.size += stat.size;
-            my_stat.blocks += stat.blocks;
-            my_stat.inodes += stat.inodes;
-        }
-        options
-            .max_depth
-            .map_or(true, |max_depth| depth < max_depth)
-    }));
-    stats.push(my_stat);
-    Box::new(stats.into_iter())
-}
-
-fn convert_size_human(size: u64, multiplier: u64, _block_size: u64) -> String {
-    for &(unit, power) in &UNITS {
-        let limit = multiplier.pow(power);
-        if size >= limit {
-            return format!("{:.1}{}", (size as f64) / (limit as f64), unit);
-        }
-    }
-    if size == 0 {
-        return "0".to_string();
-    }
-    format!("{}B", size)
-}
-
-fn convert_size_b(size: u64, _multiplier: u64, _block_size: u64) -> String {
-    format!("{}", ((size as f64) / (1_f64)).ceil())
-}
-
-fn convert_size_k(size: u64, multiplier: u64, _block_size: u64) -> String {
-    format!("{}", ((size as f64) / (multiplier as f64)).ceil())
-}
-
-fn convert_size_m(size: u64, multiplier: u64, _block_size: u64) -> String {
-    format!(
-        "{}",
-        ((size as f64) / ((multiplier * multiplier) as f64)).ceil()
-    )
-}
-
-fn convert_size_other(size: u64, _multiplier: u64, block_size: u64) -> String {
-    format!("{}", ((size as f64) / (block_size as f64)).ceil())
-}
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [FILE]...
-    {0} [OPTION]... --files0-from=F",
-        uucore::execution_phrase()
-    )
-}
-
-#[derive(Debug)]
-enum DuError {
-    InvalidMaxDepthArg(String),
-    SummarizeDepthConflict(String),
-    InvalidTimeStyleArg(String),
-    InvalidTimeArg(String),
-}
-
-impl Display for DuError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            DuError::InvalidMaxDepthArg(s) => write!(f, "invalid maximum depth {}", s.quote()),
-            DuError::SummarizeDepthConflict(s) => {
-                write!(
-                    f,
-                    "summarizing conflicts with --max-depth={}",
-                    s.maybe_quote()
-                )
-            }
-            DuError::InvalidTimeStyleArg(s) => write!(
-                f,
-                "invalid argument {} for 'time style'
-Valid arguments are:
-- 'full-iso'
-- 'long-iso'
-- 'iso'
-Try '{} --help' for more information.",
-                s.quote(),
-                uucore::execution_phrase()
-            ),
-            DuError::InvalidTimeArg(s) => write!(
-                f,
-                "Invalid argument {} for --time.
-'birth' and 'creation' arguments are not supported on this platform.",
-                s.quote()
-            ),
-        }
-    }
-}
-
-impl Error for DuError {}
-
-impl UError for DuError {
-    fn code(&self) -> i32 {
-        match self {
-            Self::InvalidMaxDepthArg(_) => 1,
-            Self::SummarizeDepthConflict(_) => 1,
-            Self::InvalidTimeStyleArg(_) => 1,
-            Self::InvalidTimeArg(_) => 1,
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-#[allow(clippy::cognitive_complexity)]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let summarize = matches.is_present(options::SUMMARIZE);
-
-    let max_depth = parse_depth(matches.value_of(options::MAX_DEPTH), summarize)?;
-
-    let options = Options {
-        all: matches.is_present(options::ALL),
-        util_name: uucore::util_name().to_owned(),
-        max_depth,
-        total: matches.is_present(options::TOTAL),
-        separate_dirs: matches.is_present(options::SEPARATE_DIRS),
-        one_file_system: matches.is_present(options::ONE_FILE_SYSTEM),
-        dereference: matches.is_present(options::DEREFERENCE),
-        inodes: matches.is_present(options::INODES),
-    };
-
-    let files = match matches.value_of(options::FILE) {
-        Some(_) => matches.values_of(options::FILE).unwrap().collect(),
-        None => vec!["."],
-    };
-
-    if options.inodes
-        && (matches.is_present(options::APPARENT_SIZE) || matches.is_present(options::BYTES))
-    {
-        show_warning!("options --apparent-size and -b are ineffective with --inodes")
-    }
-
-    let block_size = u64::try_from(read_block_size(matches.value_of(options::BLOCK_SIZE))).unwrap();
-
-    let threshold = matches.value_of(options::THRESHOLD).map(|s| {
-        Threshold::from_str(s)
-            .unwrap_or_else(|e| crash!(1, "{}", format_error_message(e, s, options::THRESHOLD)))
-    });
-
-    let multiplier: u64 = if matches.is_present(options::SI) {
-        1000
-    } else {
-        1024
-    };
-    let convert_size_fn = {
-        if matches.is_present(options::HUMAN_READABLE) || matches.is_present(options::SI) {
-            convert_size_human
-        } else if matches.is_present(options::BYTES) {
-            convert_size_b
-        } else if matches.is_present(options::BLOCK_SIZE_1K) {
-            convert_size_k
-        } else if matches.is_present(options::BLOCK_SIZE_1M) {
-            convert_size_m
-        } else {
-            convert_size_other
-        }
-    };
-    let convert_size = |size: u64| {
-        if options.inodes {
-            size.to_string()
-        } else {
-            convert_size_fn(size, multiplier, block_size)
-        }
-    };
-
-    let time_format_str = parse_time_style(matches.value_of("time-style"))?;
-
-    let line_separator = if matches.is_present(options::NULL) {
-        "\0"
-    } else {
-        "\n"
-    };
-
-    let mut grand_total = 0;
-    for path_string in files {
-        let path = PathBuf::from(&path_string);
-        match Stat::new(path, &options) {
-            Ok(stat) => {
-                let mut inodes: HashSet<FileInfo> = HashSet::new();
-                if let Some(inode) = stat.inode {
-                    inodes.insert(inode);
-                }
-                let iter = du(stat, &options, 0, &mut inodes);
-                let (_, len) = iter.size_hint();
-                let len = len.unwrap();
-                for (index, stat) in iter.enumerate() {
-                    let size = choose_size(&matches, &stat);
-
-                    if threshold.map_or(false, |threshold| threshold.should_exclude(size)) {
-                        continue;
-                    }
-
-                    if matches.is_present(options::TIME) {
-                        let tm = {
-                            let secs = {
-                                match matches.value_of(options::TIME) {
-                                    Some(s) => match s {
-                                        "ctime" | "status" => stat.modified,
-                                        "access" | "atime" | "use" => stat.accessed,
-                                        "birth" | "creation" => stat
-                                            .created
-                                            .ok_or_else(|| DuError::InvalidTimeArg(s.into()))?,
-                                        // below should never happen as clap already restricts the values.
-                                        _ => unreachable!("Invalid field for --time"),
-                                    },
-                                    None => stat.modified,
-                                }
-                            };
-                            DateTime::<Local>::from(UNIX_EPOCH + Duration::from_secs(secs))
-                        };
-                        if !summarize || index == len - 1 {
-                            let time_str = tm.format(time_format_str).to_string();
-                            print!("{}\t{}\t", convert_size(size), time_str);
-                            print_verbatim(stat.path).unwrap();
-                            print!("{}", line_separator);
-                        }
-                    } else if !summarize || index == len - 1 {
-                        print!("{}\t", convert_size(size));
-                        print_verbatim(stat.path).unwrap();
-                        print!("{}", line_separator);
-                    }
-                    if options.total && index == (len - 1) {
-                        // The last element will be the total size of the the path under
-                        // path_string.  We add it to the grand total.
-                        grand_total += size;
-                    }
-                }
-            }
-            Err(_) => {
-                show_error!(
-                    "{}: {}",
-                    path_string.maybe_quote(),
-                    "No such file or directory"
-                );
-            }
-        }
-    }
-
-    if options.total {
-        print!("{}\ttotal", convert_size(grand_total));
-        print!("{}", line_separator);
-    }
-
-    Ok(())
-}
-
-fn parse_time_style(s: Option<&str>) -> UResult<&str> {
-    match s {
-        Some(s) => match s {
-            "full-iso" => Ok("%Y-%m-%d %H:%M:%S.%f %z"),
-            "long-iso" => Ok("%Y-%m-%d %H:%M"),
-            "iso" => Ok("%Y-%m-%d"),
-            _ => Err(DuError::InvalidTimeStyleArg(s.into()).into()),
-        },
-        None => Ok("%Y-%m-%d %H:%M"),
-    }
-}
-
-fn parse_depth(max_depth_str: Option<&str>, summarize: bool) -> UResult<Option<usize>> {
-    let max_depth = max_depth_str.as_ref().and_then(|s| s.parse::<usize>().ok());
-    match (max_depth_str, max_depth) {
-        (Some(s), _) if summarize => Err(DuError::SummarizeDepthConflict(s.into()).into()),
-        (Some(s), None) => Err(DuError::InvalidMaxDepthArg(s.into()).into()),
-        (Some(_), Some(_)) | (None, _) => Ok(max_depth),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(SUMMARY)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::ALL)
-                .short('a')
-                .long(options::ALL)
-                .help("write counts for all files, not just directories"),
-        )
-        .arg(
-            Arg::new(options::APPARENT_SIZE)
-                .long(options::APPARENT_SIZE)
-                .help(
-                    "print apparent sizes,  rather  than  disk  usage \
-                    although  the apparent  size is usually smaller, it may be larger due to holes \
-                    in ('sparse') files, internal  fragmentation,  indirect  blocks, and the like"
-                )
-                .alias("app") // The GNU test suite uses this alias
-        )
-        .arg(
-            Arg::new(options::BLOCK_SIZE)
-                .short('B')
-                .long(options::BLOCK_SIZE)
-                .value_name("SIZE")
-                .help(
-                    "scale sizes  by  SIZE before printing them. \
-                    E.g., '-BM' prints sizes in units of 1,048,576 bytes.  See SIZE format below."
-                )
-        )
-        .arg(
-            Arg::new(options::BYTES)
-                .short('b')
-                .long("bytes")
-                .help("equivalent to '--apparent-size --block-size=1'")
-        )
-        .arg(
-            Arg::new(options::TOTAL)
-                .long("total")
-                .short('c')
-                .help("produce a grand total")
-        )
-        .arg(
-            Arg::new(options::MAX_DEPTH)
-                .short('d')
-                .long("max-depth")
-                .value_name("N")
-                .help(
-                    "print the total for a directory (or file, with --all) \
-                    only if it is N or fewer levels below the command \
-                    line argument;  --max-depth=0 is the same as --summarize"
-                )
-        )
-        .arg(
-            Arg::new(options::HUMAN_READABLE)
-                .long("human-readable")
-                .short('h')
-                .help("print sizes in human readable format (e.g., 1K 234M 2G)")
-        )
-        .arg(
-            Arg::new(options::INODES)
-                .long(options::INODES)
-                .help(
-                    "list inode usage information instead of block usage like --block-size=1K"
-                )
-        )
-        .arg(
-            Arg::new(options::BLOCK_SIZE_1K)
-                .short('k')
-                .help("like --block-size=1K")
-        )
-        .arg(
-            Arg::new(options::COUNT_LINKS)
-                .short('l')
-                .long("count-links")
-                .help("count sizes many times if hard linked")
-        )
-        .arg(
-            Arg::new(options::DEREFERENCE)
-                .short('L')
-                .long(options::DEREFERENCE)
-                .help("dereference all symbolic links")
-        )
-        // .arg(
-        //     Arg::new("no-dereference")
-        //         .short('P')
-        //         .long("no-dereference")
-        //         .help("don't follow any symbolic links (this is the default)")
-        // )
-        .arg(
-            Arg::new(options::BLOCK_SIZE_1M)
-                .short('m')
-                .help("like --block-size=1M")
-        )
-        .arg(
-            Arg::new(options::NULL)
-                .short('0')
-                .long("null")
-                .help("end each output line with 0 byte rather than newline")
-        )
-        .arg(
-            Arg::new(options::SEPARATE_DIRS)
-                .short('S')
-                .long("separate-dirs")
-                .help("do not include size of subdirectories")
-        )
-        .arg(
-            Arg::new(options::SUMMARIZE)
-                .short('s')
-                .long("summarize")
-                .help("display only a total for each argument")
-        )
-        .arg(
-            Arg::new(options::SI)
-                .long(options::SI)
-                .help("like -h, but use powers of 1000 not 1024")
-        )
-        .arg(
-            Arg::new(options::ONE_FILE_SYSTEM)
-                .short('x')
-                .long(options::ONE_FILE_SYSTEM)
-                .help("skip directories on different file systems")
-        )
-        .arg(
-            Arg::new(options::THRESHOLD)
-                .short('t')
-                .long(options::THRESHOLD)
-                .alias("th")
-                .value_name("SIZE")
-                .number_of_values(1)
-                .allow_hyphen_values(true)
-                .help("exclude entries smaller than SIZE if positive, \
-                          or entries greater than SIZE if negative")
-        )
-        // .arg(
-        //     Arg::new("")
-        //         .short('x')
-        //         .long("exclude-from")
-        //         .value_name("FILE")
-        //         .help("exclude files that match any pattern in FILE")
-        // )
-        // .arg(
-        //     Arg::new("exclude")
-        //         .long("exclude")
-        //         .value_name("PATTERN")
-        //         .help("exclude files that match PATTERN")
-        // )
-        .arg(
-            Arg::new(options::TIME)
-                .long(options::TIME)
-                .value_name("WORD")
-                .require_equals(true)
-                .min_values(0)
-                .possible_values(&["atime", "access", "use", "ctime", "status", "birth", "creation"])
-                .help(
-                    "show time of the last modification of any file in the \
-                    directory, or any of its subdirectories.  If WORD is given, show time as WORD instead \
-                    of modification time: atime, access, use, ctime, status, birth or creation"
-                )
-        )
-        .arg(
-            Arg::new(options::TIME_STYLE)
-                .long(options::TIME_STYLE)
-                .value_name("STYLE")
-                .help(
-                    "show times using style STYLE: \
-                    full-iso, long-iso, iso, +FORMAT FORMAT is interpreted like 'date'"
-                )
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true)
-        )
-}
-
-#[derive(Clone, Copy)]
-enum Threshold {
-    Lower(u64),
-    Upper(u64),
-}
-
-impl FromStr for Threshold {
-    type Err = ParseSizeError;
-
-    fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
-        let offset = if s.starts_with(&['-', '+'][..]) { 1 } else { 0 };
-
-        let size = u64::try_from(parse_size(&s[offset..])?).unwrap();
-
-        if s.starts_with('-') {
-            Ok(Threshold::Upper(size))
-        } else {
-            Ok(Threshold::Lower(size))
-        }
-    }
-}
-
-impl Threshold {
-    fn should_exclude(&self, size: u64) -> bool {
-        match *self {
-            Threshold::Upper(threshold) => size > threshold,
-            Threshold::Lower(threshold) => size < threshold,
-        }
-    }
-}
-
-fn format_error_message(error: ParseSizeError, s: &str, option: &str) -> String {
-    // NOTE:
-    // GNU's du echos affected flag, -B or --block-size (-t or --threshold), depending user's selection
-    // GNU's du does distinguish between "invalid (suffix in) argument"
-    match error {
-        ParseSizeError::ParseFailure(_) => format!("invalid --{} argument {}", option, s.quote()),
-        ParseSizeError::SizeTooBig(_) => format!("--{} argument {} too large", option, s.quote()),
-    }
-}
-
-#[cfg(test)]
-mod test_du {
-    #[allow(unused_imports)]
-    use super::*;
-
-    #[test]
-    fn test_read_block_size() {
-        let test_data = [
-            (Some("1024".to_string()), 1024),
-            (Some("K".to_string()), 1024),
-            (None, 1024),
-        ];
-        for it in test_data.iter() {
-            assert_eq!(read_block_size(it.0.as_deref()), it.1);
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_echo/echo.rs.html b/src/uu_echo/echo.rs.html deleted file mode 100644 index 8e0b2cfea..000000000 --- a/src/uu_echo/echo.rs.html +++ /dev/null @@ -1,378 +0,0 @@ -echo.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Derek Chiang <derekchiang93@gmail.com>
-// (c) Christopher Brown <ccbrown112@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-use clap::{crate_version, App, Arg};
-use std::io::{self, Write};
-use std::iter::Peekable;
-use std::str::Chars;
-use uucore::error::{FromIo, UResult};
-use uucore::InvalidEncodingHandling;
-
-const NAME: &str = "echo";
-const SUMMARY: &str = "display a line of text";
-const USAGE: &str = "[OPTIONS]... [STRING]...";
-const AFTER_HELP: &str = r#"
- Echo the STRING(s) to standard output.
-
- If -e is in effect, the following sequences are recognized:
-
- \\\\      backslash
- \\a      alert (BEL)
- \\b      backspace
- \\c      produce no further output
- \\e      escape
- \\f      form feed
- \\n      new line
- \\r      carriage return
- \\t      horizontal tab
- \\v      vertical tab
- \\0NNN   byte with octal value NNN (1 to 3 digits)
- \\xHH    byte with hexadecimal value HH (1 to 2 digits)
-"#;
-
-mod options {
-    pub const STRING: &str = "STRING";
-    pub const NO_NEWLINE: &str = "no_newline";
-    pub const ENABLE_BACKSLASH_ESCAPE: &str = "enable_backslash_escape";
-    pub const DISABLE_BACKSLASH_ESCAPE: &str = "disable_backslash_escape";
-}
-
-fn parse_code(
-    input: &mut Peekable<Chars>,
-    base: u32,
-    max_digits: u32,
-    bits_per_digit: u32,
-) -> Option<char> {
-    let mut ret = 0x8000_0000;
-    for _ in 0..max_digits {
-        match input.peek().and_then(|c| c.to_digit(base)) {
-            Some(n) => ret = (ret << bits_per_digit) | n,
-            None => break,
-        }
-        input.next();
-    }
-    std::char::from_u32(ret)
-}
-
-fn print_escaped(input: &str, mut output: impl Write) -> io::Result<bool> {
-    let mut should_stop = false;
-
-    let mut buffer = ['\\'; 2];
-
-    let mut iter = input.chars().peekable();
-    while let Some(mut c) = iter.next() {
-        let mut start = 1;
-
-        if c == '\\' {
-            if let Some(next) = iter.next() {
-                c = match next {
-                    '\\' => '\\',
-                    'a' => '\x07',
-                    'b' => '\x08',
-                    'c' => {
-                        should_stop = true;
-                        break;
-                    }
-                    'e' => '\x1b',
-                    'f' => '\x0c',
-                    'n' => '\n',
-                    'r' => '\r',
-                    't' => '\t',
-                    'v' => '\x0b',
-                    'x' => parse_code(&mut iter, 16, 2, 4).unwrap_or_else(|| {
-                        start = 0;
-                        next
-                    }),
-                    '0' => parse_code(&mut iter, 8, 3, 3).unwrap_or_else(|| {
-                        start = 0;
-                        next
-                    }),
-                    _ => {
-                        start = 0;
-                        next
-                    }
-                };
-            }
-        }
-
-        buffer[1] = c;
-
-        // because printing char slices is apparently not available in the standard library
-        for ch in &buffer[start..] {
-            write!(output, "{}", ch)?;
-        }
-    }
-
-    Ok(should_stop)
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-    let matches = uu_app().get_matches_from(args);
-
-    let no_newline = matches.is_present(options::NO_NEWLINE);
-    let escaped = matches.is_present(options::ENABLE_BACKSLASH_ESCAPE);
-    let values: Vec<String> = match matches.values_of(options::STRING) {
-        Some(s) => s.map(|s| s.to_string()).collect(),
-        None => vec!["".to_string()],
-    };
-
-    execute(no_newline, escaped, values).map_err_context(|| "could not write to stdout".to_string())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        // TrailingVarArg specifies the final positional argument is a VarArg
-        // and it doesn't attempts the parse any further args.
-        // Final argument must have multiple(true) or the usage string equivalent.
-        .setting(clap::AppSettings::TrailingVarArg)
-        .setting(clap::AppSettings::AllowHyphenValues)
-        .version(crate_version!())
-        .about(SUMMARY)
-        .after_help(AFTER_HELP)
-        .override_usage(USAGE)
-        .arg(
-            Arg::new(options::NO_NEWLINE)
-                .short('n')
-                .help("do not output the trailing newline")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::ENABLE_BACKSLASH_ESCAPE)
-                .short('e')
-                .help("enable interpretation of backslash escapes")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::DISABLE_BACKSLASH_ESCAPE)
-                .short('E')
-                .help("disable interpretation of backslash escapes (default)")
-                .takes_value(false),
-        )
-        .arg(Arg::new(options::STRING).multiple_occurrences(true))
-}
-
-fn execute(no_newline: bool, escaped: bool, free: Vec<String>) -> io::Result<()> {
-    let stdout = io::stdout();
-    let mut output = stdout.lock();
-
-    for (i, input) in free.iter().enumerate() {
-        if i > 0 {
-            write!(output, " ")?;
-        }
-        if escaped {
-            let should_stop = print_escaped(input, &mut output)?;
-            if should_stop {
-                break;
-            }
-        } else {
-            write!(output, "{}", input)?;
-        }
-    }
-
-    if !no_newline {
-        writeln!(output)?;
-    }
-
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_env/env.rs.html b/src/uu_env/env.rs.html deleted file mode 100644 index 4a91791fd..000000000 --- a/src/uu_env/env.rs.html +++ /dev/null @@ -1,652 +0,0 @@ -env.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jordi Boggiano <j.boggiano@seld.be>
-// (c) Thomas Queiroz <thomasqueirozb@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-/* last synced with: env (GNU coreutils) 8.13 */
-
-// spell-checker:ignore (ToDO) chdir execvp progname subcommand subcommands unsets setenv putenv spawnp
-
-#[macro_use]
-extern crate clap;
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{App, AppSettings, Arg};
-use ini::Ini;
-use std::borrow::Cow;
-use std::env;
-use std::io::{self, Write};
-use std::iter::Iterator;
-use std::process::Command;
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError, UUsageError};
-
-const USAGE: &str = "env [OPTION]... [-] [NAME=VALUE]... [COMMAND [ARG]...]";
-const AFTER_HELP: &str = "\
-A mere - implies -i. If no COMMAND, print the resulting environment.
-";
-
-struct Options<'a> {
-    ignore_env: bool,
-    null: bool,
-    running_directory: Option<&'a str>,
-    files: Vec<&'a str>,
-    unsets: Vec<&'a str>,
-    sets: Vec<(&'a str, &'a str)>,
-    program: Vec<&'a str>,
-}
-
-// print name=value env pairs on screen
-// if null is true, separate pairs with a \0, \n otherwise
-fn print_env(null: bool) {
-    let stdout_raw = io::stdout();
-    let mut stdout = stdout_raw.lock();
-    for (n, v) in env::vars() {
-        write!(stdout, "{}={}{}", n, v, if null { '\0' } else { '\n' }).unwrap();
-    }
-}
-
-fn parse_name_value_opt<'a>(opts: &mut Options<'a>, opt: &'a str) -> UResult<bool> {
-    // is it a NAME=VALUE like opt ?
-    if let Some(idx) = opt.find('=') {
-        // yes, so push name, value pair
-        let (name, value) = opt.split_at(idx);
-        opts.sets.push((name, &value['='.len_utf8()..]));
-
-        Ok(false)
-    } else {
-        // no, it's a program-like opt
-        parse_program_opt(opts, opt).map(|_| true)
-    }
-}
-
-fn parse_program_opt<'a>(opts: &mut Options<'a>, opt: &'a str) -> UResult<()> {
-    if opts.null {
-        Err(UUsageError::new(
-            125,
-            "cannot specify --null (-0) with command".to_string(),
-        ))
-    } else {
-        opts.program.push(opt);
-        Ok(())
-    }
-}
-
-fn load_config_file(opts: &mut Options) -> UResult<()> {
-    // NOTE: config files are parsed using an INI parser b/c it's available and compatible with ".env"-style files
-    //   ... * but support for actual INI files, although working, is not intended, nor claimed
-    for &file in &opts.files {
-        let conf = if file == "-" {
-            let stdin = io::stdin();
-            let mut stdin_locked = stdin.lock();
-            Ini::read_from(&mut stdin_locked)
-        } else {
-            Ini::load_from_file(file)
-        };
-
-        let conf =
-            conf.map_err(|e| USimpleError::new(1, format!("{}: {}", file.maybe_quote(), e)))?;
-
-        for (_, prop) in &conf {
-            // ignore all INI section lines (treat them as comments)
-            for (key, value) in prop.iter() {
-                env::set_var(key, value);
-            }
-        }
-    }
-
-    Ok(())
-}
-
-#[cfg(not(windows))]
-fn build_command<'a, 'b>(args: &'a mut Vec<&'b str>) -> (Cow<'b, str>, &'a [&'b str]) {
-    let progname = Cow::from(args[0]);
-    (progname, &args[1..])
-}
-
-#[cfg(windows)]
-fn build_command<'a, 'b>(args: &'a mut Vec<&'b str>) -> (Cow<'b, str>, &'a [&'b str]) {
-    args.insert(0, "/d/c");
-    let progname = env::var("ComSpec")
-        .map(Cow::from)
-        .unwrap_or_else(|_| Cow::from("cmd"));
-
-    (progname, &args[..])
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(crate_name!())
-        .version(crate_version!())
-        .author(crate_authors!())
-        .about(crate_description!())
-        .override_usage(USAGE)
-        .after_help(AFTER_HELP)
-        .setting(AppSettings::AllowExternalSubcommands)
-        .arg(Arg::new("ignore-environment")
-            .short('i')
-            .long("ignore-environment")
-            .help("start with an empty environment"))
-        .arg(Arg::new("chdir")
-            .short('C') // GNU env compatibility
-            .long("chdir")
-            .takes_value(true)
-            .number_of_values(1)
-            .value_name("DIR")
-            .help("change working directory to DIR"))
-        .arg(Arg::new("null")
-            .short('0')
-            .long("null")
-            .help("end each output line with a 0 byte rather than a newline (only valid when \
-                    printing the environment)"))
-        .arg(Arg::new("file")
-            .short('f')
-            .long("file")
-            .takes_value(true)
-            .number_of_values(1)
-            .value_name("PATH")
-            .multiple_occurrences(true)
-            .help("read and set variables from a \".env\"-style configuration file (prior to any \
-                    unset and/or set)"))
-        .arg(Arg::new("unset")
-            .short('u')
-            .long("unset")
-            .takes_value(true)
-            .number_of_values(1)
-            .value_name("NAME")
-            .multiple_occurrences(true)
-            .help("remove variable from the environment"))
-}
-
-fn run_env(args: impl uucore::Args) -> UResult<()> {
-    let app = uu_app();
-    let matches = app.get_matches_from(args);
-
-    let ignore_env = matches.is_present("ignore-environment");
-    let null = matches.is_present("null");
-    let running_directory = matches.value_of("chdir");
-    let files = matches
-        .values_of("file")
-        .map(Iterator::collect)
-        .unwrap_or_else(|| Vec::with_capacity(0));
-    let unsets = matches
-        .values_of("unset")
-        .map(Iterator::collect)
-        .unwrap_or_else(|| Vec::with_capacity(0));
-
-    let mut opts = Options {
-        ignore_env,
-        null,
-        running_directory,
-        files,
-        unsets,
-        sets: vec![],
-        program: vec![],
-    };
-
-    // change directory
-    if let Some(d) = opts.running_directory {
-        match env::set_current_dir(d) {
-            Ok(()) => d,
-            Err(error) => {
-                return Err(USimpleError::new(
-                    125,
-                    format!("cannot change directory to \"{}\": {}", d, error),
-                ));
-            }
-        };
-    }
-
-    // we handle the name, value pairs and the program to be executed by treating them as external
-    // subcommands in clap
-    if let Some((external, matches)) = matches.subcommand() {
-        let mut begin_prog_opts = false;
-
-        if external == "-" {
-            // "-" implies -i and stop parsing opts
-            opts.ignore_env = true;
-        } else {
-            begin_prog_opts = parse_name_value_opt(&mut opts, external)?;
-        }
-
-        if let Some(mut iter) = matches.values_of("") {
-            // read NAME=VALUE arguments (and up to a single program argument)
-            while !begin_prog_opts {
-                if let Some(opt) = iter.next() {
-                    begin_prog_opts = parse_name_value_opt(&mut opts, opt)?;
-                } else {
-                    break;
-                }
-            }
-
-            // read any leftover program arguments
-            for opt in iter {
-                parse_program_opt(&mut opts, opt)?;
-            }
-        }
-    }
-
-    // GNU env tests this behavior
-    if opts.program.is_empty() && running_directory.is_some() {
-        return Err(UUsageError::new(
-            125,
-            "must specify command with --chdir (-C)".to_string(),
-        ));
-    }
-
-    // NOTE: we manually set and unset the env vars below rather than using Command::env() to more
-    //       easily handle the case where no command is given
-
-    // remove all env vars if told to ignore presets
-    if opts.ignore_env {
-        for (ref name, _) in env::vars() {
-            env::remove_var(name);
-        }
-    }
-
-    // load .env-style config file prior to those given on the command-line
-    load_config_file(&mut opts)?;
-
-    // unset specified env vars
-    for name in &opts.unsets {
-        if name.is_empty() || name.contains(0 as char) || name.contains('=') {
-            return Err(USimpleError::new(
-                125,
-                format!("cannot unset {}: Invalid argument", name.quote()),
-            ));
-        }
-
-        env::remove_var(name);
-    }
-
-    // set specified env vars
-    for &(name, val) in &opts.sets {
-        /*
-         * set_var panics if name is an empty string
-         * set_var internally calls setenv (on unix at least), while GNU env calls putenv instead.
-         *
-         * putenv returns successfully if provided with something like "=a" and modifies the environ
-         * variable to contain "=a" inside it, effectively modifying the process' current environment
-         * to contain a malformed string in it. Using GNU's implementation, the command `env =a`
-         * prints out the malformed string and even invokes the child process with that environment.
-         * This can be seen by using `env -i =a env` or `env -i =a cat /proc/self/environ`
-         *
-         * POSIX.1-2017 doesn't seem to mention what to do if the string is malformed (at least
-         * not in "Chapter 8, Environment Variables" or in the definition for environ and various
-         * exec*'s or in the description of env in the "Shell & Utilities" volume).
-         *
-         * It also doesn't specify any checks for putenv before modifying the environ variable, which
-         * is likely why glibc doesn't do so. However, the first set_var argument cannot point to
-         * an empty string or a string containing '='.
-         *
-         * There is no benefit in replicating GNU's env behavior, since it will only modify the
-         * environment in weird ways
-         */
-
-        if name.is_empty() {
-            show_warning!("no name specified for value {}", val.quote());
-            continue;
-        }
-        env::set_var(name, val);
-    }
-
-    if !opts.program.is_empty() {
-        // we need to execute a command
-        let (prog, args) = build_command(&mut opts.program);
-
-        /*
-         * On Unix-like systems Command::status either ends up calling either fork or posix_spawnp
-         * (which ends up calling clone). Keep using the current process would be ideal, but the
-         * standard library contains many checks and fail-safes to ensure the process ends up being
-         * created. This is much simpler than dealing with the hassles of calling execvp directly.
-         */
-        match Command::new(&*prog).args(args).status() {
-            Ok(exit) if !exit.success() => return Err(exit.code().unwrap().into()),
-            Err(ref err) if err.kind() == io::ErrorKind::NotFound => return Err(127.into()),
-            Err(_) => return Err(126.into()),
-            Ok(_) => (),
-        }
-    } else {
-        // no program provided, so just dump all env vars to stdout
-        print_env(opts.null);
-    }
-
-    Ok(())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    run_env(args)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_expand/expand.rs.html b/src/uu_expand/expand.rs.html deleted file mode 100644 index 8c0c09c9b..000000000 --- a/src/uu_expand/expand.rs.html +++ /dev/null @@ -1,796 +0,0 @@ -expand.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-
// This file is part of the uutils coreutils package.
-//
-// (c) Virgile Andreani <virgile.andreani@anbuco.fr>
-// (c) kwantam <kwantam@gmail.com>
-//     * 2015-04-28 ~ updated to work with both UTF-8 and non-UTF-8 encodings
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) ctype cwidth iflag nbytes nspaces nums tspaces uflag
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use std::fs::File;
-use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
-use std::str::from_utf8;
-use unicode_width::UnicodeWidthChar;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Convert tabs in each FILE to spaces, writing to standard output.
- With no FILE, or when FILE is -, read standard input.";
-
-pub mod options {
-    pub static TABS: &str = "tabs";
-    pub static INITIAL: &str = "initial";
-    pub static NO_UTF8: &str = "no-utf8";
-    pub static FILES: &str = "FILES";
-}
-
-static LONG_HELP: &str = "";
-
-static DEFAULT_TABSTOP: usize = 8;
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-/// The mode to use when replacing tabs beyond the last one specified in
-/// the `--tabs` argument.
-enum RemainingMode {
-    None,
-    Slash,
-    Plus,
-}
-
-/// Decide whether the character is either a space or a comma.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// assert!(is_space_or_comma(' '))
-/// assert!(is_space_or_comma(','))
-/// assert!(!is_space_or_comma('a'))
-/// ```
-fn is_space_or_comma(c: char) -> bool {
-    c == ' ' || c == ','
-}
-
-/// Parse a list of tabstops from a `--tabs` argument.
-///
-/// This function returns both the vector of numbers appearing in the
-/// comma- or space-separated list, and also an optional mode, specified
-/// by either a "/" or a "+" character appearing before the final number
-/// in the list. This mode defines the strategy to use for computing the
-/// number of spaces to use for columns beyond the end of the tab stop
-/// list specified here.
-fn tabstops_parse(s: String) -> (RemainingMode, Vec<usize>) {
-    // Leading commas and spaces are ignored.
-    let s = s.trim_start_matches(is_space_or_comma);
-
-    // If there were only commas and spaces in the string, just use the
-    // default tabstops.
-    if s.is_empty() {
-        return (RemainingMode::None, vec![DEFAULT_TABSTOP]);
-    }
-
-    let mut nums = vec![];
-    let mut remaining_mode = RemainingMode::None;
-    for word in s.split(is_space_or_comma) {
-        let bytes = word.as_bytes();
-        for i in 0..bytes.len() {
-            match bytes[i] {
-                b'+' => {
-                    remaining_mode = RemainingMode::Plus;
-                }
-                b'/' => {
-                    remaining_mode = RemainingMode::Slash;
-                }
-                _ => {
-                    // Parse a number from the byte sequence.
-                    let num = from_utf8(&bytes[i..]).unwrap().parse::<usize>().unwrap();
-
-                    // Tab size must be positive.
-                    if num == 0 {
-                        crash!(1, "{}\n", "tab size cannot be 0");
-                    }
-
-                    // Tab sizes must be ascending.
-                    if let Some(last_stop) = nums.last() {
-                        if *last_stop >= num {
-                            crash!(1, "tab sizes must be ascending");
-                        }
-                    }
-
-                    // Append this tab stop to the list of all tabstops.
-                    nums.push(num);
-                    break;
-                }
-            }
-        }
-    }
-    // If no numbers could be parsed (for example, if `s` were "+,+,+"),
-    // then just use the default tabstops.
-    if nums.is_empty() {
-        nums = vec![DEFAULT_TABSTOP];
-    }
-    (remaining_mode, nums)
-}
-
-struct Options {
-    files: Vec<String>,
-    tabstops: Vec<usize>,
-    tspaces: String,
-    iflag: bool,
-    uflag: bool,
-
-    /// Strategy for expanding tabs for columns beyond those specified
-    /// in `tabstops`.
-    remaining_mode: RemainingMode,
-}
-
-impl Options {
-    fn new(matches: &ArgMatches) -> Options {
-        let (remaining_mode, tabstops) = match matches.value_of(options::TABS) {
-            Some(s) => tabstops_parse(s.to_string()),
-            None => (RemainingMode::None, vec![DEFAULT_TABSTOP]),
-        };
-
-        let iflag = matches.is_present(options::INITIAL);
-        let uflag = !matches.is_present(options::NO_UTF8);
-
-        // avoid allocations when dumping out long sequences of spaces
-        // by precomputing the longest string of spaces we will ever need
-        let nspaces = tabstops
-            .iter()
-            .scan(0, |pr, &it| {
-                let ret = Some(it - *pr);
-                *pr = it;
-                ret
-            })
-            .max()
-            .unwrap(); // length of tabstops is guaranteed >= 1
-        let tspaces = " ".repeat(nspaces);
-
-        let files: Vec<String> = match matches.values_of(options::FILES) {
-            Some(s) => s.map(|v| v.to_string()).collect(),
-            None => vec!["-".to_owned()],
-        };
-
-        Options {
-            files,
-            tabstops,
-            tspaces,
-            iflag,
-            uflag,
-            remaining_mode,
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    expand(Options::new(&matches)).map_err_context(|| "failed to write output".to_string())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::INITIAL)
-                .long(options::INITIAL)
-                .short('i')
-                .help("do not convert tabs after non blanks"),
-        )
-        .arg(
-            Arg::new(options::TABS)
-                .long(options::TABS)
-                .short('t')
-                .value_name("N, LIST")
-                .takes_value(true)
-                .help("have tabs N characters apart, not 8 or use comma separated list of explicit tab positions"),
-        )
-        .arg(
-            Arg::new(options::NO_UTF8)
-                .long(options::NO_UTF8)
-                .short('U')
-                .help("interpret input file as 8-bit ASCII rather than UTF-8"),
-        ).arg(
-            Arg::new(options::FILES)
-                .multiple_occurrences(true)
-                .hide(true)
-                .takes_value(true)
-        )
-}
-
-fn open(path: String) -> BufReader<Box<dyn Read + 'static>> {
-    let file_buf;
-    if path == "-" {
-        BufReader::new(Box::new(stdin()) as Box<dyn Read>)
-    } else {
-        file_buf = match File::open(&path[..]) {
-            Ok(a) => a,
-            Err(e) => crash!(1, "{}: {}\n", path.maybe_quote(), e),
-        };
-        BufReader::new(Box::new(file_buf) as Box<dyn Read>)
-    }
-}
-
-/// Compute the number of spaces to the next tabstop.
-///
-/// `tabstops` is the sequence of tabstop locations.
-///
-/// `col` is the index of the current cursor in the line being written.
-///
-/// If `remaining_mode` is [`RemainingMode::Plus`], then the last entry
-/// in the `tabstops` slice is interpreted as a relative number of
-/// spaces, which this function will return for every input value of
-/// `col` beyond the end of the second-to-last element of `tabstops`.
-///
-/// If `remaining_mode` is [`RemainingMode::Plus`], then the last entry
-/// in the `tabstops` slice is interpreted as a relative number of
-/// spaces, which this function will return for every input value of
-/// `col` beyond the end of the second-to-last element of `tabstops`.
-fn next_tabstop(tabstops: &[usize], col: usize, remaining_mode: &RemainingMode) -> usize {
-    let num_tabstops = tabstops.len();
-    match remaining_mode {
-        RemainingMode::Plus => match tabstops[0..num_tabstops - 1].iter().find(|&&t| t > col) {
-            Some(t) => t - col,
-            None => tabstops[num_tabstops - 1] - 1,
-        },
-        RemainingMode::Slash => match tabstops[0..num_tabstops - 1].iter().find(|&&t| t > col) {
-            Some(t) => t - col,
-            None => tabstops[num_tabstops - 1] - col % tabstops[num_tabstops - 1],
-        },
-        RemainingMode::None => {
-            if num_tabstops == 1 {
-                tabstops[0] - col % tabstops[0]
-            } else {
-                match tabstops.iter().find(|&&t| t > col) {
-                    Some(t) => t - col,
-                    None => 1,
-                }
-            }
-        }
-    }
-}
-
-#[derive(PartialEq, Eq, Debug)]
-enum CharType {
-    Backspace,
-    Tab,
-    Other,
-}
-
-fn expand(options: Options) -> std::io::Result<()> {
-    use self::CharType::*;
-
-    let mut output = BufWriter::new(stdout());
-    let ts = options.tabstops.as_ref();
-    let mut buf = Vec::new();
-
-    for file in options.files.into_iter() {
-        let mut fh = open(file);
-
-        while match fh.read_until(b'\n', &mut buf) {
-            Ok(s) => s > 0,
-            Err(_) => buf.is_empty(),
-        } {
-            let mut col = 0;
-            let mut byte = 0;
-            let mut init = true;
-
-            while byte < buf.len() {
-                let (ctype, cwidth, nbytes) = if options.uflag {
-                    let nbytes = char::from(buf[byte]).len_utf8();
-
-                    if byte + nbytes > buf.len() {
-                        // don't overrun buffer because of invalid UTF-8
-                        (Other, 1, 1)
-                    } else if let Ok(t) = from_utf8(&buf[byte..byte + nbytes]) {
-                        match t.chars().next() {
-                            Some('\t') => (Tab, 0, nbytes),
-                            Some('\x08') => (Backspace, 0, nbytes),
-                            Some(c) => (Other, UnicodeWidthChar::width(c).unwrap_or(0), nbytes),
-                            None => {
-                                // no valid char at start of t, so take 1 byte
-                                (Other, 1, 1)
-                            }
-                        }
-                    } else {
-                        (Other, 1, 1) // implicit assumption: non-UTF-8 char is 1 col wide
-                    }
-                } else {
-                    (
-                        match buf[byte] {
-                            // always take exactly 1 byte in strict ASCII mode
-                            0x09 => Tab,
-                            0x08 => Backspace,
-                            _ => Other,
-                        },
-                        1,
-                        1,
-                    )
-                };
-
-                // figure out how many columns this char takes up
-                match ctype {
-                    Tab => {
-                        // figure out how many spaces to the next tabstop
-                        let nts = next_tabstop(ts, col, &options.remaining_mode);
-                        col += nts;
-
-                        // now dump out either spaces if we're expanding, or a literal tab if we're not
-                        if init || !options.iflag {
-                            if nts <= options.tspaces.len() {
-                                output.write_all(options.tspaces[..nts].as_bytes())?
-                            } else {
-                                output.write_all(" ".repeat(nts).as_bytes())?;
-                            };
-                        } else {
-                            output.write_all(&buf[byte..byte + nbytes])?;
-                        }
-                    }
-                    _ => {
-                        col = if ctype == Other {
-                            col + cwidth
-                        } else if col > 0 {
-                            col - 1
-                        } else {
-                            0
-                        };
-
-                        // if we're writing anything other than a space, then we're
-                        // done with the line's leading spaces
-                        if buf[byte] != 0x20 {
-                            init = false;
-                        }
-
-                        output.write_all(&buf[byte..byte + nbytes])?;
-                    }
-                }
-
-                byte += nbytes; // advance the pointer
-            }
-
-            output.flush()?;
-            buf.truncate(0); // clear the buffer
-        }
-    }
-    Ok(())
-}
-
-#[cfg(test)]
-mod tests {
-    use super::next_tabstop;
-    use super::RemainingMode;
-
-    #[test]
-    fn test_next_tabstop_remaining_mode_none() {
-        assert_eq!(next_tabstop(&[1, 5], 0, &RemainingMode::None), 1);
-        assert_eq!(next_tabstop(&[1, 5], 3, &RemainingMode::None), 2);
-        assert_eq!(next_tabstop(&[1, 5], 6, &RemainingMode::None), 1);
-    }
-
-    #[test]
-    fn test_next_tabstop_remaining_mode_plus() {
-        assert_eq!(next_tabstop(&[1, 5], 0, &RemainingMode::Plus), 1);
-        assert_eq!(next_tabstop(&[1, 5], 3, &RemainingMode::Plus), 4);
-        assert_eq!(next_tabstop(&[1, 5], 6, &RemainingMode::Plus), 4);
-    }
-
-    #[test]
-    fn test_next_tabstop_remaining_mode_slash() {
-        assert_eq!(next_tabstop(&[1, 5], 0, &RemainingMode::Slash), 1);
-        assert_eq!(next_tabstop(&[1, 5], 3, &RemainingMode::Slash), 2);
-        assert_eq!(next_tabstop(&[1, 5], 6, &RemainingMode::Slash), 4);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_expr/expr.rs.html b/src/uu_expr/expr.rs.html deleted file mode 100644 index f6080a53c..000000000 --- a/src/uu_expr/expr.rs.html +++ /dev/null @@ -1,282 +0,0 @@ -expr.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-
//* This file is part of the uutils coreutils package.
-//*
-//* (c) Roman Gafiyatullin <r.gafiyatullin@me.com>
-//*
-//* For the full copyright and license information, please view the LICENSE
-//* file that was distributed with this source code.
-
-use clap::{crate_version, App, Arg};
-use uucore::error::{UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-mod syntax_tree;
-mod tokens;
-
-const VERSION: &str = "version";
-const HELP: &str = "help";
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .arg(Arg::new(VERSION).long(VERSION))
-        .arg(Arg::new(HELP).long(HELP))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    // For expr utility we do not want getopts.
-    // The following usage should work without escaping hyphens: `expr -15 = 1 +  2 \* \( 3 - -4 \)`
-
-    if maybe_handle_help_or_version(&args) {
-        Ok(())
-    } else {
-        let token_strings = args[1..].to_vec();
-
-        match process_expr(&token_strings) {
-            Ok(expr_result) => print_expr_ok(&expr_result),
-            Err(expr_error) => Err(USimpleError::new(2, &expr_error)),
-        }
-    }
-}
-
-fn process_expr(token_strings: &[String]) -> Result<String, String> {
-    let maybe_tokens = tokens::strings_to_tokens(token_strings);
-    let maybe_ast = syntax_tree::tokens_to_ast(maybe_tokens);
-    evaluate_ast(maybe_ast)
-}
-
-fn print_expr_ok(expr_result: &str) -> UResult<()> {
-    println!("{}", expr_result);
-    if expr_result == "0" || expr_result.is_empty() {
-        Err(1.into())
-    } else {
-        Ok(())
-    }
-}
-
-fn evaluate_ast(maybe_ast: Result<Box<syntax_tree::AstNode>, String>) -> Result<String, String> {
-    maybe_ast.and_then(|ast| ast.evaluate())
-}
-
-fn maybe_handle_help_or_version(args: &[String]) -> bool {
-    if args.len() == 2 {
-        if args[1] == "--help" {
-            print_help();
-            true
-        } else if args[1] == "--version" {
-            print_version();
-            true
-        } else {
-            false
-        }
-    } else {
-        false
-    }
-}
-
-fn print_help() {
-    //! The following is taken from GNU coreutils' "expr --help" output.
-    println!(
-        r#"Usage: expr EXPRESSION
-  or:  expr OPTION
-
-      --help       display this help and exit
-      --version    output version information and exit
-
-Print the value of EXPRESSION to standard output.  A blank line below
-separates increasing precedence groups.  EXPRESSION may be:
-
-  ARG1 | ARG2       ARG1 if it is neither null nor 0, otherwise ARG2
-
-  ARG1 & ARG2       ARG1 if neither argument is null or 0, otherwise 0
-
-  ARG1 < ARG2       ARG1 is less than ARG2
-  ARG1 <= ARG2      ARG1 is less than or equal to ARG2
-  ARG1 = ARG2       ARG1 is equal to ARG2
-  ARG1 != ARG2      ARG1 is unequal to ARG2
-  ARG1 >= ARG2      ARG1 is greater than or equal to ARG2
-  ARG1 > ARG2       ARG1 is greater than ARG2
-
-  ARG1 + ARG2       arithmetic sum of ARG1 and ARG2
-  ARG1 - ARG2       arithmetic difference of ARG1 and ARG2
-
-  ARG1 * ARG2       arithmetic product of ARG1 and ARG2
-  ARG1 / ARG2       arithmetic quotient of ARG1 divided by ARG2
-  ARG1 % ARG2       arithmetic remainder of ARG1 divided by ARG2
-
-  STRING : REGEXP   anchored pattern match of REGEXP in STRING
-
-  match STRING REGEXP        same as STRING : REGEXP
-  substr STRING POS LENGTH   substring of STRING, POS counted from 1
-  index STRING CHARS         index in STRING where any CHARS is found, or 0
-  length STRING              length of STRING
-  + TOKEN                    interpret TOKEN as a string, even if it is a
-                               keyword like 'match' or an operator like '/'
-
-  ( EXPRESSION )             value of EXPRESSION
-
-Beware that many operators need to be escaped or quoted for shells.
-Comparisons are arithmetic if both ARGs are numbers, else lexicographical.
-Pattern matches return the string matched between \( and \) or null; if
-\( and \) are not used, they return the number of characters matched or 0.
-
-Exit status is 0 if EXPRESSION is neither null nor 0, 1 if EXPRESSION is null
-or 0, 2 if EXPRESSION is syntactically invalid, and 3 if an error occurred.
-
-Environment variables:
-    * EXPR_DEBUG_TOKENS=1   dump expression's tokens
-    * EXPR_DEBUG_RPN=1      dump expression represented in reverse polish notation
-    * EXPR_DEBUG_SYA_STEP=1 dump each parser step
-    * EXPR_DEBUG_AST=1      dump expression represented abstract syntax tree"#
-    );
-}
-
-fn print_version() {
-    println!("{} {}", uucore::util_name(), crate_version!());
-}
-
-
- \ No newline at end of file diff --git a/src/uu_expr/syntax_tree.rs.html b/src/uu_expr/syntax_tree.rs.html deleted file mode 100644 index cf50ad30d..000000000 --- a/src/uu_expr/syntax_tree.rs.html +++ /dev/null @@ -1,1078 +0,0 @@ -syntax_tree.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-
//* This file is part of the uutils coreutils package.
-//*
-//* (c) Roman Gafiyatullin <r.gafiyatullin@me.com>
-//*
-//* For the full copyright and license information, please view the LICENSE
-//* file that was distributed with this source code.
-
-//!
-//! Here we employ shunting-yard algorithm for building AST from tokens according to operators' precedence and associative-ness.
-//! * `<https://en.wikipedia.org/wiki/Shunting-yard_algorithm>`
-//!
-
-// spell-checker:ignore (ToDO) binop binops ints paren prec
-
-use num_bigint::BigInt;
-use num_traits::{One, Zero};
-use onig::{Regex, RegexOptions, Syntax};
-
-use crate::tokens::Token;
-
-type TokenStack = Vec<(usize, Token)>;
-pub type OperandsList = Vec<Box<AstNode>>;
-
-#[derive(Debug)]
-pub enum AstNode {
-    Leaf {
-        token_idx: usize,
-        value: String,
-    },
-    Node {
-        token_idx: usize,
-        op_type: String,
-        operands: OperandsList,
-    },
-}
-impl AstNode {
-    fn debug_dump(&self) {
-        self.debug_dump_impl(1);
-    }
-    fn debug_dump_impl(&self, depth: usize) {
-        for _ in 0..depth {
-            print!("\t",);
-        }
-        match self {
-            AstNode::Leaf { token_idx, value } => println!(
-                "Leaf( {} ) at #{} ( evaluate -> {:?} )",
-                value,
-                token_idx,
-                self.evaluate()
-            ),
-            AstNode::Node {
-                token_idx,
-                op_type,
-                operands,
-            } => {
-                println!(
-                    "Node( {} ) at #{} (evaluate -> {:?})",
-                    op_type,
-                    token_idx,
-                    self.evaluate()
-                );
-                for operand in operands {
-                    operand.debug_dump_impl(depth + 1);
-                }
-            }
-        }
-    }
-
-    fn new_node(token_idx: usize, op_type: &str, operands: OperandsList) -> Box<AstNode> {
-        Box::new(AstNode::Node {
-            token_idx,
-            op_type: op_type.into(),
-            operands,
-        })
-    }
-    fn new_leaf(token_idx: usize, value: &str) -> Box<AstNode> {
-        Box::new(AstNode::Leaf {
-            token_idx,
-            value: value.into(),
-        })
-    }
-    pub fn evaluate(&self) -> Result<String, String> {
-        match self {
-            AstNode::Leaf { value, .. } => Ok(value.clone()),
-            AstNode::Node { op_type, .. } => match self.operand_values() {
-                Err(reason) => Err(reason),
-                Ok(operand_values) => match op_type.as_ref() {
-                    "+" => {
-                        infix_operator_two_ints(|a: BigInt, b: BigInt| Ok(a + b), &operand_values)
-                    }
-                    "-" => {
-                        infix_operator_two_ints(|a: BigInt, b: BigInt| Ok(a - b), &operand_values)
-                    }
-                    "*" => {
-                        infix_operator_two_ints(|a: BigInt, b: BigInt| Ok(a * b), &operand_values)
-                    }
-                    "/" => infix_operator_two_ints(
-                        |a: BigInt, b: BigInt| {
-                            if b.is_zero() {
-                                Err("division by zero".to_owned())
-                            } else {
-                                Ok(a / b)
-                            }
-                        },
-                        &operand_values,
-                    ),
-                    "%" => infix_operator_two_ints(
-                        |a: BigInt, b: BigInt| {
-                            if b.is_zero() {
-                                Err("division by zero".to_owned())
-                            } else {
-                                Ok(a % b)
-                            }
-                        },
-                        &operand_values,
-                    ),
-                    "=" => infix_operator_two_ints_or_two_strings(
-                        |a: BigInt, b: BigInt| Ok(bool_as_int(a == b)),
-                        |a: &String, b: &String| Ok(bool_as_string(a == b)),
-                        &operand_values,
-                    ),
-                    "!=" => infix_operator_two_ints_or_two_strings(
-                        |a: BigInt, b: BigInt| Ok(bool_as_int(a != b)),
-                        |a: &String, b: &String| Ok(bool_as_string(a != b)),
-                        &operand_values,
-                    ),
-                    "<" => infix_operator_two_ints_or_two_strings(
-                        |a: BigInt, b: BigInt| Ok(bool_as_int(a < b)),
-                        |a: &String, b: &String| Ok(bool_as_string(a < b)),
-                        &operand_values,
-                    ),
-                    ">" => infix_operator_two_ints_or_two_strings(
-                        |a: BigInt, b: BigInt| Ok(bool_as_int(a > b)),
-                        |a: &String, b: &String| Ok(bool_as_string(a > b)),
-                        &operand_values,
-                    ),
-                    "<=" => infix_operator_two_ints_or_two_strings(
-                        |a: BigInt, b: BigInt| Ok(bool_as_int(a <= b)),
-                        |a: &String, b: &String| Ok(bool_as_string(a <= b)),
-                        &operand_values,
-                    ),
-                    ">=" => infix_operator_two_ints_or_two_strings(
-                        |a: BigInt, b: BigInt| Ok(bool_as_int(a >= b)),
-                        |a: &String, b: &String| Ok(bool_as_string(a >= b)),
-                        &operand_values,
-                    ),
-                    "|" => Ok(infix_operator_or(&operand_values)),
-                    "&" => Ok(infix_operator_and(&operand_values)),
-                    ":" | "match" => operator_match(&operand_values),
-                    "length" => Ok(prefix_operator_length(&operand_values)),
-                    "index" => Ok(prefix_operator_index(&operand_values)),
-                    "substr" => Ok(prefix_operator_substr(&operand_values)),
-
-                    _ => Err(format!("operation not implemented: {}", op_type)),
-                },
-            },
-        }
-    }
-    pub fn operand_values(&self) -> Result<Vec<String>, String> {
-        if let AstNode::Node { operands, .. } = self {
-            let mut out = Vec::with_capacity(operands.len());
-            for operand in operands {
-                let value = operand.evaluate()?;
-                out.push(value);
-            }
-            Ok(out)
-        } else {
-            panic!("Invoked .operand_values(&self) not with ASTNode::Node")
-        }
-    }
-}
-
-pub fn tokens_to_ast(
-    maybe_tokens: Result<Vec<(usize, Token)>, String>,
-) -> Result<Box<AstNode>, String> {
-    maybe_tokens.and_then(|tokens| {
-        let mut out_stack: TokenStack = Vec::new();
-        let mut op_stack: TokenStack = Vec::new();
-
-        for (token_idx, token) in tokens {
-            push_token_to_either_stack(token_idx, &token, &mut out_stack, &mut op_stack)?;
-        }
-        move_rest_of_ops_to_out(&mut out_stack, &mut op_stack)?;
-        assert!(op_stack.is_empty());
-
-        maybe_dump_rpn(&out_stack);
-        let result = ast_from_rpn(&mut out_stack);
-        if !out_stack.is_empty() {
-            Err(
-                "syntax error (first RPN token does not represent the root of the expression AST)"
-                    .to_owned(),
-            )
-        } else {
-            maybe_dump_ast(&result);
-            result
-        }
-    })
-}
-
-fn maybe_dump_ast(result: &Result<Box<AstNode>, String>) {
-    use std::env;
-    if let Ok(debug_var) = env::var("EXPR_DEBUG_AST") {
-        if debug_var == "1" {
-            println!("EXPR_DEBUG_AST");
-            match result {
-                Ok(ast) => ast.debug_dump(),
-                Err(reason) => println!("\terr: {:?}", reason),
-            }
-        }
-    }
-}
-
-#[allow(clippy::ptr_arg)]
-fn maybe_dump_rpn(rpn: &TokenStack) {
-    use std::env;
-    if let Ok(debug_var) = env::var("EXPR_DEBUG_RPN") {
-        if debug_var == "1" {
-            println!("EXPR_DEBUG_RPN");
-            for token in rpn {
-                println!("\t{:?}", token);
-            }
-        }
-    }
-}
-
-fn ast_from_rpn(rpn: &mut TokenStack) -> Result<Box<AstNode>, String> {
-    match rpn.pop() {
-        None => Err("syntax error (premature end of expression)".to_owned()),
-
-        Some((token_idx, Token::Value { value })) => Ok(AstNode::new_leaf(token_idx, &value)),
-
-        Some((token_idx, Token::InfixOp { value, .. })) => {
-            maybe_ast_node(token_idx, &value, 2, rpn)
-        }
-
-        Some((token_idx, Token::PrefixOp { value, arity })) => {
-            maybe_ast_node(token_idx, &value, arity, rpn)
-        }
-
-        Some((token_idx, unexpected_token)) => {
-            panic!("unexpected token at #{} {:?}", token_idx, unexpected_token)
-        }
-    }
-}
-fn maybe_ast_node(
-    token_idx: usize,
-    op_type: &str,
-    arity: usize,
-    rpn: &mut TokenStack,
-) -> Result<Box<AstNode>, String> {
-    let mut operands = Vec::with_capacity(arity);
-    for _ in 0..arity {
-        let operand = ast_from_rpn(rpn)?;
-        operands.push(operand);
-    }
-    operands.reverse();
-    Ok(AstNode::new_node(token_idx, op_type, operands))
-}
-
-fn move_rest_of_ops_to_out(
-    out_stack: &mut TokenStack,
-    op_stack: &mut TokenStack,
-) -> Result<(), String> {
-    loop {
-        match op_stack.pop() {
-            None => return Ok(()),
-            Some((token_idx, Token::ParOpen)) => {
-                return Err(format!(
-                    "syntax error (Mismatched open-parenthesis at #{})",
-                    token_idx
-                ))
-            }
-            Some((token_idx, Token::ParClose)) => {
-                return Err(format!(
-                    "syntax error (Mismatched close-parenthesis at #{})",
-                    token_idx
-                ))
-            }
-            Some(other) => out_stack.push(other),
-        }
-    }
-}
-
-fn push_token_to_either_stack(
-    token_idx: usize,
-    token: &Token,
-    out_stack: &mut TokenStack,
-    op_stack: &mut TokenStack,
-) -> Result<(), String> {
-    let result = match token {
-        Token::Value { .. } => {
-            out_stack.push((token_idx, token.clone()));
-            Ok(())
-        }
-
-        Token::InfixOp { .. } => {
-            if op_stack.is_empty() {
-                op_stack.push((token_idx, token.clone()));
-                Ok(())
-            } else {
-                push_op_to_stack(token_idx, token, out_stack, op_stack)
-            }
-        }
-
-        Token::PrefixOp { .. } => {
-            op_stack.push((token_idx, token.clone()));
-            Ok(())
-        }
-
-        Token::ParOpen => {
-            op_stack.push((token_idx, token.clone()));
-            Ok(())
-        }
-
-        Token::ParClose => move_till_match_paren(out_stack, op_stack),
-    };
-    maybe_dump_shunting_yard_step(token_idx, token, out_stack, op_stack, &result);
-    result
-}
-
-#[allow(clippy::ptr_arg)]
-fn maybe_dump_shunting_yard_step(
-    token_idx: usize,
-    token: &Token,
-    out_stack: &TokenStack,
-    op_stack: &TokenStack,
-    result: &Result<(), String>,
-) {
-    use std::env;
-    if let Ok(debug_var) = env::var("EXPR_DEBUG_SYA_STEP") {
-        if debug_var == "1" {
-            println!("EXPR_DEBUG_SYA_STEP");
-            println!("\t{} => {:?}", token_idx, token);
-            println!("\t\tout: {:?}", out_stack);
-            println!("\t\top : {:?}", op_stack);
-            println!("\t\tresult: {:?}", result);
-        }
-    }
-}
-
-fn push_op_to_stack(
-    token_idx: usize,
-    token: &Token,
-    out_stack: &mut TokenStack,
-    op_stack: &mut TokenStack,
-) -> Result<(), String> {
-    if let Token::InfixOp {
-        precedence: prec,
-        left_assoc: la,
-        ..
-    } = *token
-    {
-        loop {
-            match op_stack.last() {
-                None => {
-                    op_stack.push((token_idx, token.clone()));
-                    return Ok(());
-                }
-
-                Some(&(_, Token::ParOpen)) => {
-                    op_stack.push((token_idx, token.clone()));
-                    return Ok(());
-                }
-
-                Some(&(
-                    _,
-                    Token::InfixOp {
-                        precedence: prev_prec,
-                        ..
-                    },
-                )) => {
-                    if la && prev_prec >= prec || !la && prev_prec > prec {
-                        out_stack.push(op_stack.pop().unwrap())
-                    } else {
-                        op_stack.push((token_idx, token.clone()));
-                        return Ok(());
-                    }
-                }
-
-                Some(&(_, Token::PrefixOp { .. })) => {
-                    op_stack.push((token_idx, token.clone()));
-                    return Ok(());
-                }
-
-                Some(_) => panic!("Non-operator on op_stack"),
-            }
-        }
-    } else {
-        panic!("Expected infix-op")
-    }
-}
-
-fn move_till_match_paren(
-    out_stack: &mut TokenStack,
-    op_stack: &mut TokenStack,
-) -> Result<(), String> {
-    loop {
-        let op = op_stack
-            .pop()
-            .ok_or_else(|| "syntax error (Mismatched close-parenthesis)".to_string())?;
-        match op {
-            (_, Token::ParOpen) => return Ok(()),
-            other => out_stack.push(other),
-        }
-    }
-}
-
-fn infix_operator_two_ints<F>(f: F, values: &[String]) -> Result<String, String>
-where
-    F: Fn(BigInt, BigInt) -> Result<BigInt, String>,
-{
-    assert!(values.len() == 2);
-    if let Ok(left) = values[0].parse::<BigInt>() {
-        if let Ok(right) = values[1].parse::<BigInt>() {
-            return f(left, right).map(|big_int| big_int.to_string());
-        }
-    }
-    Err("Expected an integer operand".to_string())
-}
-
-fn infix_operator_two_ints_or_two_strings<FI, FS>(
-    fi: FI,
-    fs: FS,
-    values: &[String],
-) -> Result<String, String>
-where
-    FI: Fn(BigInt, BigInt) -> Result<u8, String>,
-    FS: Fn(&String, &String) -> Result<String, String>,
-{
-    assert!(values.len() == 2);
-    if let (Some(a_int), Some(b_int)) = (
-        values[0].parse::<BigInt>().ok(),
-        values[1].parse::<BigInt>().ok(),
-    ) {
-        match fi(a_int, b_int) {
-            Ok(result) => Ok(result.to_string()),
-            Err(reason) => Err(reason),
-        }
-    } else {
-        fs(&values[0], &values[1])
-    }
-}
-
-fn infix_operator_or(values: &[String]) -> String {
-    assert!(values.len() == 2);
-    if value_as_bool(&values[0]) {
-        values[0].clone()
-    } else {
-        values[1].clone()
-    }
-}
-
-fn infix_operator_and(values: &[String]) -> String {
-    if value_as_bool(&values[0]) && value_as_bool(&values[1]) {
-        values[0].clone()
-    } else {
-        0.to_string()
-    }
-}
-
-fn operator_match(values: &[String]) -> Result<String, String> {
-    assert!(values.len() == 2);
-    let re = Regex::with_options(&values[1], RegexOptions::REGEX_OPTION_NONE, Syntax::grep())
-        .map_err(|err| err.description().to_string())?;
-    Ok(if re.captures_len() > 0 {
-        re.captures(&values[0])
-            .map(|captures| captures.at(1).unwrap())
-            .unwrap_or("")
-            .to_string()
-    } else {
-        re.find(&values[0])
-            .map_or("0".to_string(), |(start, end)| (end - start).to_string())
-    })
-}
-
-fn prefix_operator_length(values: &[String]) -> String {
-    assert!(values.len() == 1);
-    values[0].len().to_string()
-}
-
-fn prefix_operator_index(values: &[String]) -> String {
-    assert!(values.len() == 2);
-    let haystack = &values[0];
-    let needles = &values[1];
-
-    for (current_idx, ch_h) in haystack.chars().enumerate() {
-        for ch_n in needles.chars() {
-            if ch_n == ch_h {
-                return current_idx.to_string();
-            }
-        }
-    }
-    "0".to_string()
-}
-
-fn prefix_operator_substr(values: &[String]) -> String {
-    assert!(values.len() == 3);
-    let subj = &values[0];
-    let idx = match values[1]
-        .parse::<usize>()
-        .ok()
-        .and_then(|v| v.checked_sub(1))
-    {
-        Some(i) => i,
-        None => return String::new(),
-    };
-    let len = match values[2].parse::<usize>() {
-        Ok(i) => i,
-        Err(_) => return String::new(),
-    };
-
-    subj.chars().skip(idx).take(len).collect()
-}
-
-fn bool_as_int(b: bool) -> u8 {
-    if b {
-        1
-    } else {
-        0
-    }
-}
-fn bool_as_string(b: bool) -> String {
-    if b {
-        "1".to_string()
-    } else {
-        "0".to_string()
-    }
-}
-fn value_as_bool(s: &str) -> bool {
-    if s.is_empty() {
-        return false;
-    }
-    match s.parse::<BigInt>() {
-        Ok(n) => n.is_one(),
-        Err(_) => true,
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_expr/tokens.rs.html b/src/uu_expr/tokens.rs.html deleted file mode 100644 index af637dea4..000000000 --- a/src/uu_expr/tokens.rs.html +++ /dev/null @@ -1,328 +0,0 @@ -tokens.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//* This file is part of the uutils coreutils package.
-//*
-//* (c) Roman Gafiyatullin <r.gafiyatullin@me.com>
-//*
-//* For the full copyright and license information, please view the LICENSE
-//* file that was distributed with this source code.
-
-//!
-//! The following tokens are present in the expr grammar:
-//! * integer literal;
-//! * string literal;
-//! * infix binary operators;
-//! * prefix operators.
-//!
-//! According to the man-page of expr we have expression split into tokens (each token -- separate CLI-argument).
-//! Hence all we need is to map the strings into the Token structures, except for some ugly fiddling with +-escaping.
-//!
-
-// spell-checker:ignore (ToDO) paren
-
-use num_bigint::BigInt;
-
-#[derive(Debug, Clone)]
-pub enum Token {
-    Value {
-        value: String,
-    },
-
-    ParOpen,
-    ParClose,
-
-    InfixOp {
-        precedence: u8,
-        left_assoc: bool,
-        value: String,
-    },
-
-    PrefixOp {
-        arity: usize,
-        value: String,
-    },
-}
-impl Token {
-    fn new_infix_op(v: &str, left_assoc: bool, precedence: u8) -> Self {
-        Token::InfixOp {
-            left_assoc,
-            precedence,
-            value: v.into(),
-        }
-    }
-    fn new_value(v: &str) -> Self {
-        Token::Value { value: v.into() }
-    }
-
-    fn is_infix_plus(&self) -> bool {
-        match self {
-            Token::InfixOp { value, .. } => value == "+",
-            _ => false,
-        }
-    }
-    fn is_a_number(&self) -> bool {
-        match self {
-            Token::Value { value, .. } => value.parse::<BigInt>().is_ok(),
-            _ => false,
-        }
-    }
-    fn is_a_close_paren(&self) -> bool {
-        matches!(*self, Token::ParClose)
-    }
-}
-
-pub fn strings_to_tokens(strings: &[String]) -> Result<Vec<(usize, Token)>, String> {
-    let mut tokens_acc = Vec::with_capacity(strings.len());
-    let mut tok_idx = 1;
-
-    for s in strings {
-        let token_if_not_escaped = match s.as_ref() {
-            "(" => Token::ParOpen,
-            ")" => Token::ParClose,
-
-            "^" => Token::new_infix_op(s, false, 7),
-
-            ":" => Token::new_infix_op(s, true, 6),
-
-            "*" => Token::new_infix_op(s, true, 5),
-            "/" => Token::new_infix_op(s, true, 5),
-            "%" => Token::new_infix_op(s, true, 5),
-
-            "+" => Token::new_infix_op(s, true, 4),
-            "-" => Token::new_infix_op(s, true, 4),
-
-            "=" => Token::new_infix_op(s, true, 3),
-            "!=" => Token::new_infix_op(s, true, 3),
-            "<" => Token::new_infix_op(s, true, 3),
-            ">" => Token::new_infix_op(s, true, 3),
-            "<=" => Token::new_infix_op(s, true, 3),
-            ">=" => Token::new_infix_op(s, true, 3),
-
-            "&" => Token::new_infix_op(s, true, 2),
-
-            "|" => Token::new_infix_op(s, true, 1),
-
-            "match" => Token::PrefixOp {
-                arity: 2,
-                value: s.clone(),
-            },
-            "substr" => Token::PrefixOp {
-                arity: 3,
-                value: s.clone(),
-            },
-            "index" => Token::PrefixOp {
-                arity: 2,
-                value: s.clone(),
-            },
-            "length" => Token::PrefixOp {
-                arity: 1,
-                value: s.clone(),
-            },
-
-            _ => Token::new_value(s),
-        };
-        push_token_if_not_escaped(&mut tokens_acc, tok_idx, token_if_not_escaped, s);
-        tok_idx += 1;
-    }
-    maybe_dump_tokens_acc(&tokens_acc);
-
-    Ok(tokens_acc)
-}
-
-fn maybe_dump_tokens_acc(tokens_acc: &[(usize, Token)]) {
-    use std::env;
-
-    if let Ok(debug_var) = env::var("EXPR_DEBUG_TOKENS") {
-        if debug_var == "1" {
-            println!("EXPR_DEBUG_TOKENS");
-            for token in tokens_acc {
-                println!("\t{:?}", token);
-            }
-        }
-    }
-}
-
-fn push_token_if_not_escaped(acc: &mut Vec<(usize, Token)>, tok_idx: usize, token: Token, s: &str) {
-    // Smells heuristics... :(
-    let prev_is_plus = match acc.last() {
-        None => false,
-        Some(t) => t.1.is_infix_plus(),
-    };
-    let should_use_as_escaped = if prev_is_plus && acc.len() >= 2 {
-        let pre_prev = &acc[acc.len() - 2];
-        !(pre_prev.1.is_a_number() || pre_prev.1.is_a_close_paren())
-    } else {
-        prev_is_plus
-    };
-
-    if should_use_as_escaped {
-        acc.pop();
-        acc.push((tok_idx, Token::new_value(s)))
-    } else {
-        acc.push((tok_idx, token))
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/cli.rs.html b/src/uu_factor/cli.rs.html deleted file mode 100644 index 3efa71301..000000000 --- a/src/uu_factor/cli.rs.html +++ /dev/null @@ -1,174 +0,0 @@ -cli.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2014 T. Jameson Little <t.jameson.little@gmail.com>
-// * (c) 2020 nicoo <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-#[macro_use]
-extern crate uucore;
-
-use std::error::Error;
-use std::fmt::Write as FmtWrite;
-use std::io::{self, stdin, stdout, BufRead, Write};
-
-mod factor;
-use clap::{crate_version, App, Arg};
-pub use factor::*;
-use uucore::display::Quotable;
-use uucore::error::UResult;
-
-mod miller_rabin;
-pub mod numeric;
-mod rho;
-pub mod table;
-
-static SUMMARY: &str = "Print the prime factors of the given NUMBER(s).
-If none are specified, read from standard input.";
-
-mod options {
-    pub static NUMBER: &str = "NUMBER";
-}
-
-fn print_factors_str(
-    num_str: &str,
-    w: &mut io::BufWriter<impl io::Write>,
-    factors_buffer: &mut String,
-) -> Result<(), Box<dyn Error>> {
-    num_str.parse::<u64>().map_err(|e| e.into()).and_then(|x| {
-        factors_buffer.clear();
-        writeln!(factors_buffer, "{}:{}", x, factor(x))?;
-        w.write_all(factors_buffer.as_bytes())?;
-        Ok(())
-    })
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let matches = uu_app().get_matches_from(args);
-    let stdout = stdout();
-    // We use a smaller buffer here to pass a gnu test. 4KiB appears to be the default pipe size for bash.
-    let mut w = io::BufWriter::with_capacity(4 * 1024, stdout.lock());
-    let mut factors_buffer = String::new();
-
-    if let Some(values) = matches.values_of(options::NUMBER) {
-        for number in values {
-            if let Err(e) = print_factors_str(number, &mut w, &mut factors_buffer) {
-                show_warning!("{}: {}", number.maybe_quote(), e);
-            }
-        }
-    } else {
-        let stdin = stdin();
-
-        for line in stdin.lock().lines() {
-            for number in line.unwrap().split_whitespace() {
-                if let Err(e) = print_factors_str(number, &mut w, &mut factors_buffer) {
-                    show_warning!("{}: {}", number.maybe_quote(), e);
-                }
-            }
-        }
-    }
-
-    if let Err(e) = w.flush() {
-        show_error!("{}", e);
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(SUMMARY)
-        .arg(Arg::new(options::NUMBER).multiple_occurrences(true))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/factor.rs.html b/src/uu_factor/factor.rs.html deleted file mode 100644 index 1945e5a4b..000000000 --- a/src/uu_factor/factor.rs.html +++ /dev/null @@ -1,602 +0,0 @@ -factor.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2020 nicoo <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-use smallvec::SmallVec;
-use std::cell::RefCell;
-use std::fmt;
-
-use crate::numeric::{Arithmetic, Montgomery};
-use crate::{miller_rabin, rho, table};
-
-type Exponent = u8;
-
-#[derive(Clone, Debug)]
-struct Decomposition(SmallVec<[(u64, Exponent); NUM_FACTORS_INLINE]>);
-
-// spell-checker:ignore (names) Erdős–Kac * Erdős Kac
-// The number of factors to inline directly into a `Decomposition` object.
-// As a consequence of the Erdős–Kac theorem, the average number of prime factors
-// of integers < 10²⁵ ≃ 2⁸³ is 4, so we can use a slightly higher value.
-const NUM_FACTORS_INLINE: usize = 5;
-
-impl Decomposition {
-    fn one() -> Decomposition {
-        Decomposition(SmallVec::new())
-    }
-
-    fn add(&mut self, factor: u64, exp: Exponent) {
-        debug_assert!(exp > 0);
-
-        if let Some((_, e)) = self.0.iter_mut().find(|(f, _)| *f == factor) {
-            *e += exp;
-        } else {
-            self.0.push((factor, exp))
-        }
-    }
-
-    #[cfg(test)]
-    fn product(&self) -> u64 {
-        self.0
-            .iter()
-            .fold(1, |acc, (p, exp)| acc * p.pow(*exp as u32))
-    }
-
-    fn get(&self, p: u64) -> Option<&(u64, u8)> {
-        self.0.iter().find(|(q, _)| *q == p)
-    }
-}
-
-impl PartialEq for Decomposition {
-    fn eq(&self, other: &Decomposition) -> bool {
-        for p in &self.0 {
-            if other.get(p.0) != Some(p) {
-                return false;
-            }
-        }
-
-        for p in &other.0 {
-            if self.get(p.0) != Some(p) {
-                return false;
-            }
-        }
-
-        true
-    }
-}
-impl Eq for Decomposition {}
-
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub struct Factors(RefCell<Decomposition>);
-
-impl Factors {
-    pub fn one() -> Factors {
-        Factors(RefCell::new(Decomposition::one()))
-    }
-
-    pub fn add(&mut self, prime: u64, exp: Exponent) {
-        debug_assert!(miller_rabin::is_prime(prime));
-        self.0.borrow_mut().add(prime, exp)
-    }
-
-    pub fn push(&mut self, prime: u64) {
-        self.add(prime, 1)
-    }
-
-    #[cfg(test)]
-    fn product(&self) -> u64 {
-        self.0.borrow().product()
-    }
-}
-
-impl fmt::Display for Factors {
-    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-        let v = &mut (self.0).borrow_mut().0;
-        v.sort_unstable();
-
-        for (p, exp) in v.iter() {
-            for _ in 0..*exp {
-                write!(f, " {}", p)?
-            }
-        }
-
-        Ok(())
-    }
-}
-
-fn _factor<A: Arithmetic + miller_rabin::Basis>(num: u64, f: Factors) -> Factors {
-    use miller_rabin::Result::*;
-
-    // Shadow the name, so the recursion automatically goes from “Big” arithmetic to small.
-    let _factor = |n, f| {
-        if n < (1 << 32) {
-            _factor::<Montgomery<u32>>(n, f)
-        } else {
-            _factor::<A>(n, f)
-        }
-    };
-
-    if num == 1 {
-        return f;
-    }
-
-    let n = A::new(num);
-    let divisor = match miller_rabin::test::<A>(n) {
-        Prime => {
-            #[cfg(feature = "coz")]
-            coz::progress!("factor found");
-            let mut r = f;
-            r.push(num);
-            return r;
-        }
-
-        Composite(d) => d,
-        Pseudoprime => rho::find_divisor::<A>(n),
-    };
-
-    let f = _factor(divisor, f);
-    _factor(num / divisor, f)
-}
-
-pub fn factor(mut n: u64) -> Factors {
-    #[cfg(feature = "coz")]
-    coz::begin!("factorization");
-    let mut factors = Factors::one();
-
-    if n < 2 {
-        return factors;
-    }
-
-    let n_zeros = n.trailing_zeros();
-    if n_zeros > 0 {
-        factors.add(2, n_zeros as Exponent);
-        n >>= n_zeros;
-    }
-
-    if n == 1 {
-        #[cfg(feature = "coz")]
-        coz::end!("factorization");
-        return factors;
-    }
-
-    table::factor(&mut n, &mut factors);
-
-    #[allow(clippy::let_and_return)]
-    let r = if n < (1 << 32) {
-        _factor::<Montgomery<u32>>(n, factors)
-    } else {
-        _factor::<Montgomery<u64>>(n, factors)
-    };
-
-    #[cfg(feature = "coz")]
-    coz::end!("factorization");
-
-    r
-}
-
-#[cfg(test)]
-mod tests {
-    use super::{factor, Decomposition, Exponent, Factors};
-    use quickcheck::quickcheck;
-    use smallvec::smallvec;
-    use std::cell::RefCell;
-
-    #[test]
-    fn factor_2044854919485649() {
-        let f = Factors(RefCell::new(Decomposition(smallvec![
-            (503, 1),
-            (2423, 1),
-            (40961, 2)
-        ])));
-        assert_eq!(factor(f.product()), f);
-    }
-
-    #[test]
-    fn factor_recombines_small() {
-        assert!((1..10_000)
-            .map(|i| 2 * i + 1)
-            .all(|i| factor(i).product() == i));
-    }
-
-    #[test]
-    fn factor_recombines_overflowing() {
-        assert!((0..250)
-            .map(|i| 2 * i + 2u64.pow(32) + 1)
-            .all(|i| factor(i).product() == i));
-    }
-
-    #[test]
-    fn factor_recombines_strong_pseudoprime() {
-        // This is a strong pseudoprime (wrt. miller_rabin::BASIS)
-        //  and triggered a bug in rho::factor's code path handling
-        //  miller_rabbin::Result::Composite
-        let pseudoprime = 17179869183;
-        for _ in 0..20 {
-            // Repeat the test 20 times, as it only fails some fraction
-            // of the time.
-            assert!(factor(pseudoprime).product() == pseudoprime);
-        }
-    }
-
-    quickcheck! {
-        fn factor_recombines(i: u64) -> bool {
-            i == 0 || factor(i).product() == i
-        }
-
-        fn recombines_factors(f: Factors) -> () {
-            assert_eq!(factor(f.product()), f);
-        }
-
-        fn exponentiate_factors(f: Factors, e: Exponent) -> () {
-            if e == 0 { return; }
-            if let Some(fe) = f.product().checked_pow(e.into()) {
-                assert_eq!(factor(fe), f ^ e);
-            }
-        }
-    }
-}
-
-#[cfg(test)]
-use rand::{
-    distributions::{Distribution, Standard},
-    Rng,
-};
-#[cfg(test)]
-impl Distribution<Factors> for Standard {
-    fn sample<R: Rng + ?Sized>(&self, rng: &mut R) -> Factors {
-        let mut f = Factors::one();
-        let mut g = 1u64;
-        let mut n = u64::MAX;
-
-        // spell-checker:ignore (names) Adam Kalai * Kalai's
-        // Adam Kalai's algorithm for generating uniformly-distributed
-        // integers and their factorization.
-        //
-        // See Generating Random Factored Numbers, Easily, J. Cryptology (2003)
-        'attempt: loop {
-            while n > 1 {
-                n = rng.gen_range(1..n);
-                if miller_rabin::is_prime(n) {
-                    if let Some(h) = g.checked_mul(n) {
-                        f.push(n);
-                        g = h;
-                    } else {
-                        // We are overflowing u64, retry
-                        continue 'attempt;
-                    }
-                }
-            }
-
-            return f;
-        }
-    }
-}
-
-#[cfg(test)]
-impl quickcheck::Arbitrary for Factors {
-    fn arbitrary(g: &mut quickcheck::Gen) -> Self {
-        factor(u64::arbitrary(g))
-    }
-}
-
-#[cfg(test)]
-impl std::ops::BitXor<Exponent> for Factors {
-    type Output = Self;
-
-    fn bitxor(self, rhs: Exponent) -> Factors {
-        debug_assert_ne!(rhs, 0);
-        let mut r = Factors::one();
-        for (p, e) in self.0.borrow().0.iter() {
-            r.add(*p, rhs * e);
-        }
-
-        debug_assert_eq!(r.product(), self.product().pow(rhs.into()));
-        r
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/uu_factor-8cfc0910b95323cf/out/prime_table.rs.html b/src/uu_factor/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/uu_factor-8cfc0910b95323cf/out/prime_table.rs.html deleted file mode 100644 index 77a680f67..000000000 --- a/src/uu_factor/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/uu_factor-8cfc0910b95323cf/out/prime_table.rs.html +++ /dev/null @@ -1,362 +0,0 @@ -prime_table.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
/*
-* This file is part of the uutils coreutils package.
-*
-* (c) kwantam <kwantam@gmail.com>
-*
-* For the full copyright and license information, please view the LICENSE file
-* that was distributed with this source code.
-*/
-
-// *** NOTE: this file was automatically generated.
-// Please do not edit by hand. Instead, modify and
-// re-run src/factor/gen_tables.rs.
-
-#[allow(clippy::unreadable_literal)]
-pub const PRIME_INVERSIONS_U64: &[(u64, u64, u64)] = &[
-    (3, 12297829382473034411, 6148914691236517205), (5, 14757395258967641293, 3689348814741910323),
-    (7, 7905747460161236407, 2635249153387078802), (11, 3353953467947191203, 1676976733973595601),
-    (13, 5675921253449092805, 1418980313362273201), (17, 17361641481138401521, 1085102592571150095),
-    (19, 9708812670373448219, 970881267037344821), (23, 15238614669586151335, 802032351030850070),
-    (29, 3816567739388183093, 636094623231363848), (31, 17256631552825064415, 595056260442243600),
-    (37, 1495681951922396077, 498560650640798692), (41, 10348173504763894809, 449920587163647600),
-    (43, 9437869060967677571, 428994048225803525), (47, 5887258746928580303, 392483916461905353),
-    (53, 2436362424829563421, 348051774975651917), (59, 14694863923124558067, 312656679215416129),
-    (61, 5745707170499696405, 302405640552615600), (67, 17345445920055250027, 275324538413575397),
-    (71, 1818693077689674103, 259813296812810586), (73, 9097024474706080249, 252695124297391118),
-    (79, 11208148297950107311, 233503089540627235), (83, 11779246215742243803, 222249928598910260),
-    (89, 17617676924329347049, 207266787345051141), (97, 11790702397628785569, 190172619316593315),
-    (101, 4200743699953660269, 182641030432767837), (103, 15760325033848937303, 179094602657374287),
-    (107, 8619973866219416643, 172399477324388332), (109, 12015769075535579493, 169236184162472950),
-    (113, 10447713457676206225, 163245522776190722), (127, 9150747060186627967, 145249953336295682),
-    (131, 281629680514649643, 140814840257324821), (137, 16292379802327414201, 134647766961383588),
-    (139, 4246732448623781667, 132710389019493177), (149, 16094474695182830269, 123803651501406386),
-    (151, 8062815290495565607, 122163868037811600), (157, 6579730370240349621, 117495185182863386),
-    (163, 2263404180823257867, 113170209041162893), (167, 10162278172342986519, 110459545351554201),
-    (173, 9809829218388894501, 106628578460748853), (179, 17107036403551874683, 103054436165975148),
-    (181, 3770881385233444253, 101915713114417412), (191, 2124755861893246783, 96579811904238490),
-    (193, 8124213711219232577, 95578984837873324), (197, 14513935692512591373, 93638294790403815),
-    (199, 2780916192016515319, 92697206400550510), (211, 13900627050804827995, 87425327363552377),
-    (223, 7527595115280579359, 82720825442643729), (227, 1950316554048586955, 81263189752024456),
-    (229, 2094390156840385773, 80553467570784068), (233, 7204522363551799129, 79170575423646144),
-    (239, 7255204782128442895, 77183029597111094), (241, 17298606475760824337, 76542506529915151),
-    (251, 2939720171109091891, 73493004277727297), (257, 18374966859414961921, 71777214294589695),
-    (263, 15430736487513693367, 70139711306880424), (269, 10354863773718001093, 68575256779589411),
-    (271, 15383631589145234927, 68069166323651481), (277, 17181443938689762877, 66594743948409933),
-    (281, 14245350405676059433, 65646776063023315), (283, 5149444458738708755, 65182841249857072),
-    (293, 2707201348701401773, 62958170900032599), (307, 17305088903023944187, 60087114246610917),
-    (311, 9134400602415662215, 59314289626075728), (313, 6365010734698503433, 58935284580541698),
-    (317, 17050145153302519317, 58191621683626345), (331, 3455281367280943203, 55730344633563600),
-    (337, 9196002980365592497, 54738112978366622), (347, 9941040754419844819, 53160645745560667),
-    (349, 15751088062938241781, 52856000211202153), (353, 8779186981255537313, 52257065364616293),
-    (359, 5600822016808749655, 51383688227603207), (367, 9751139919072624015, 50263607830271257),
-    (373, 3511310534137743069, 49455077945602015), (379, 17181268226964305331, 48672147951740241),
-    (383, 14834457375202459263, 48163822646761231), (389, 12661389891209383757, 47420935922132523),
-    (397, 185861401246443845, 46465350311610961), (401, 3220129888178724721, 46001855545410353),
-    (409, 2074694932495450793, 45102063749901104), (419, 1849076971589024267, 44025642180691053),
-    (421, 14897608040525528621, 43816494236839790), (431, 8046375605237577039, 42799870240625409),
-    (433, 7540585914657253201, 42602180308798040), (439, 15379290047785184263, 42019918163347497),
-    (443, 15615189678648040307, 41640505809728107), (449, 205420312624827969, 41084062524965593),
-    (457, 686202733595322489, 40364866682077793), (461, 3041111821262312197, 40014629227135686),
-    (463, 8127723090792113455, 39841779856824085), (467, 15247201739725667931, 39500522641776341),
-    (479, 8010277176057592351, 38510947961815347), (487, 2386334448960373207, 37878324586672590),
-    (491, 1051952818867347139, 37569743530976683), (499, 12494988971771199291, 36967422993405915),
-    (503, 17969989256695189447, 36673447462643243), (509, 5436172123882971989, 36241147492553146),
-    (521, 1805727346946616377, 35406418567580713), (523, 7195288319381928355, 35271021173440825),
-    (541, 13911777416032342069, 34097493666745936), (547, 13219604528142859659, 33723480939139948),
-    (557, 5133295029488295333, 33118032448311582), (563, 18151858289227516155, 32765087164670606),
-    (569, 6386658317259721737, 32419585366800617), (571, 1873749835858413299, 32306031652731263),
-    (577, 8184343991108570561, 31970093715267853), (587, 8107768264083584867, 31425458387920871),
-    (593, 13407330009728190129, 31107494222107169), (599, 16999336775772408167, 30795899956109435),
-    (601, 10926856722530117097, 30693417759916059), (607, 7810235958720518559, 30390023185682951),
-    (613, 10111102787547160429, 30092567820080834), (617, 5112468778937331161, 29897478239399597),
-    (619, 10400506755613301315, 29800878955912038), (631, 14909412801254946631, 29234142747558718),
-    (641, 18417966001831689601, 28778071877862015), (643, 12450835035754191915, 28688559990217032),
-    (647, 16650538700226241335, 28511196404496988), (653, 18023005695293558853, 28249225227732850),
-    (659, 13744083976011213723, 27992024391061535), (661, 3544230707051608253, 27907328401981167),
-    (673, 7016889276180750689, 27409723735081057), (677, 7711120491668837677, 27247775588935822),
-    (683, 18338710433453565955, 27008410063996415), (691, 16604739238563445883, 26695722248494285),
-    (701, 4578792394900801685, 26314898821268975), (709, 17796294705807240205, 26017974716092456),
-    (719, 7799457855921701935, 25656111368163493), (727, 3501582781529460967, 25373788271952615),
-    (733, 8027982755134170485, 25166090141486427), (739, 12755461734324196043, 24961764646426998),
-    (743, 8416482154761154775, 24827380987496031), (751, 73688724661955599, 24562908220651866),
-    (757, 11233750354002778461, 24368222026036395), (761, 8193166224591101769, 24240136759145271),
-    (769, 8635666926574042369, 23987963684927895), (773, 11955781087876436429, 23863834506739394),
-    (787, 1757948926973591323, 23439319026314550), (797, 3332912354597459765, 23145224684704581),
-    (809, 12062209660064712985, 22801908620160137), (811, 2229076349227541379, 22745677032934095),
-    (821, 4044353146489304861, 22468628591607249), (823, 5536264624794968711, 22414026821032261),
-    (827, 9502192231439261171, 22305615566758829), (829, 9813044796750195733, 22251802260204525),
-    (839, 17941052639030982263, 21986584116459537), (853, 13018686907823153661, 21625725760503577),
-    (857, 12247604875076703465, 21524788884141833), (859, 858986918449804499, 21474672961245112),
-    (863, 13637338028999645343, 21375137976488472), (877, 4964004106494246501, 21033915705484095),
-    (881, 14447506709261737361, 20938415520669184), (883, 17047047751015848379, 20890989890950794),
-    (887, 15763959422628906567, 20796780240935232), (907, 11979197639928253475, 20338196332645591),
-    (911, 16462352285319281519, 20248895799900715), (919, 16098246732442938407, 20072626848432591),
-    (929, 13264181960428396641, 19856559821000593), (937, 11792529028977610905, 19687026759561954),
-    (941, 1725094026021722149, 19603341204792297), (947, 18271431828024877947, 19479138409408185),
-    (953, 18137040080866579081, 19356499552685783), (967, 9614435380713147895, 19076260676018150),
-    (971, 10828675717831559651, 18997676697950104), (977, 12064963626510136625, 18881007240234955),
-    (983, 9326583728009813991, 18765762028188760), (991, 13160290676198438943, 18614272526447579),
-    (997, 11785933776281829869, 18502250826188115), (1009, 6965519813759503633, 18282204235589248),
-    (1013, 7775675932353384541, 18210013893099261), (1019, 10372899268140896051, 18102791043875909),
-    (1021, 7497942008412795221, 18067330140753723), (1031, 13544311604071901623, 17892089305246897),
-    (1033, 15464550210873641529, 17857448280454551), (1039, 1881958490676816623, 17754325383743553),
-    (1049, 8370495880920635433, 17585075380085368), (1051, 15691141010367591955, 17551611868420125),
-    (1061, 10466484384894580653, 17386186685871396), (1063, 5917535022704569239, 17353475139896097),
-    (1069, 13511506650808773541, 17256074905247475), (1087, 4836542834413267903, 16970325734783396),
-    (1091, 12613447368457676907, 16908106392034419), (1093, 12235946434985750157, 16877167496532069),
-    (1097, 14007418243755748857, 16815628143764404), (1103, 13546566364192871087, 16724156005176384),
-    (1109, 14687533829653321981, 16633673646266502), (1117, 17043007953507839989, 16514542590608372),
-    (1123, 10923494932339137867, 16426308168931034), (1129, 8610659102608444377, 16339011579902171),
-    (1151, 2852754513571068799, 16026710750399262), (1153, 16894849732729650049, 15998910731751562),
-    (1163, 14877941479913636643, 15861344861315177), (1171, 10554499171123313051, 15752983837497482),
-    (1181, 9918444103984390581, 15619597014148646), (1187, 6884505159775342347, 15540643701524474),
-    (1193, 17503532515875282841, 15462484554660143), (1201, 10275496907003905105, 15359487155461741),
-    (1213, 12439766407497455253, 15207538395473661), (1217, 6745111842892974913, 15157554703130280),
-    (1223, 5399782811437464823, 15083192210719175), (1229, 11572367518982965253, 15009555796346258),
-    (1231, 1168843247562424879, 14985169840543908), (1237, 12988774525627339901, 14912485104049758),
-    (1249, 2171073962238033697, 14769210627469616), (1259, 2754557494723904451, 14651901567680342),
-    (1277, 8710561218830743637, 14445375155606540), (1279, 10802667170608642815, 14422786609624356),
-    (1283, 17756608675784330667, 14377820790108769), (1289, 715544766241642809, 14310895324832856),
-    (1291, 10173572254439349923, 14288725076459761), (1297, 9401154844041645041, 14222624574949538),
-    (1301, 4069343235322552893, 14178896290322483), (1303, 17455744775812645543, 14157132827098658),
-    (1307, 11545093077501463827, 14113805718216948), (1319, 7286393982109686423, 13985401117293064),
-    (1321, 10375420777264342809, 13964227156479600), (1327, 17848997280062595535, 13901088224347815),
-    (1361, 8864195903163884465, 13553816365694012), (1367, 11915490136858474087, 13494326315808011),
-    (1373, 7241656996161287925, 13435356208091443), (1381, 10365440551193781357, 13357526483497140),
-    (1399, 11511084757933122631, 13185664098434275), (1409, 11062809611273648769, 13092082380205501),
-    (1423, 11991031811792927087, 12963277634370731), (1427, 10910337770294927515, 12926940486131430),
-    (1429, 4001742941112638909, 12908848197137544), (1433, 6539390083352723113, 12872815124710084),
-    (1439, 3589359513994909279, 12819141121410390), (1447, 15973580044476895767, 12748268191920906),
-    (1451, 6496406768894266627, 12713124792356686), (1453, 16301183338364118565, 12695625652931556),
-    (1459, 12921571242858918267, 12643416088903051), (1471, 15612641993044453951, 12540274693208396),
-    (1481, 7535638193514030201, 12455600319857901), (1483, 10846635760131307491, 12438802477214802),
-    (1487, 7517637463798243631, 12405342349502052), (1489, 9155234298503263025, 12388679700275051),
-    (1493, 17211195240909179773, 12355488328003718), (1499, 11419998999601376851, 12306033404742862),
-    (1511, 5310611298519956951, 12208301835678061), (1523, 3355054568888736571, 12112110356999048),
-    (1531, 13325995392242171187, 12048820426982071), (1543, 7651274275550300087, 11955116055547343),
-    (1549, 15826806245293734085, 11908808310980988), (1553, 14028077753413380849, 11878135269613362),
-    (1559, 9773579605442007463, 11832420829832938), (1567, 5579934072072959455, 11772012810280505),
-    (1571, 4004035473669609867, 11742039512227594), (1579, 17874299197451307139, 11682548495066213),
-    (1583, 11163601277709254863, 11653028473600474), (1597, 8663154699613126933, 11550872932817502),
-    (1601, 13918592655241185729, 11522013787451312), (1607, 1503748272343466871, 11478994445369976),
-    (1609, 4574425659049167865, 11464725962529242), (1613, 2904818967589724805, 11436295147991042),
-    (1619, 3999263230310100443, 11393912337065813), (1621, 9707015851248764669, 11379854456329149),
-    (1627, 10045368930120874451, 11337888182980670), (1637, 13127951646836669293, 11268628023035767),
-    (1657, 2237655738573095881, 11132615614791521), (1663, 5291098570751326591, 11092449833860223),
-    (1667, 12747839935760889899, 11065833277570216), (1669, 12312566146262696525, 11052572842246585),
-    (1693, 14633182097455361973, 10895891360726256), (1697, 3782832609104846177, 10870208646853006),
-    (1699, 15080946155610692875, 10857412639028576), (1709, 5137887758388383013, 10793881845353745),
-    (1721, 4062356771607158665, 10718619450150814), (1723, 2141235527998787187, 10706177639993935),
-    (1733, 18372233278258907149, 10644399350092066), (1741, 3401151549489239557, 10595487693112895),
-    (1747, 8806287668845887835, 10559097924275644), (1753, 5387754116223211881, 10522957258248460),
-    (1759, 4184338195230307615, 10487063145940620), (1777, 7816768873102584337, 10380835156842741),
-    (1783, 6114428349726497479, 10345902453005917), (1787, 17001559870956704819, 10322744305377477),
-    (1789, 18085851931406681685, 10311204065796283), (1801, 15916846357881534265, 10242500873797641),
-    (1811, 13751024019606788891, 10185943718227251), (1823, 16463440816196072671, 10118894170987137),
-    (1831, 11374316799136037015, 10074682727312698), (1847, 10307005892836089479, 9987408810887683),
-    (1861, 10526836220461872013, 9912275160510237), (1867, 12903828473628641891, 9880419964493600),
-    (1871, 5176130752911552431, 9859296672212480), (1873, 10567728986166763953, 9848768859428484),
-    (1877, 8451891264459357693, 9827780540069020), (1879, 13538084128603231335, 9817319890212640),
-    (1889, 13896091485912489121, 9765348900852065), (1901, 9383483176894863973, 9703705456975040),
-    (1907, 2843913349591299515, 9673174658473807), (1913, 12053544219622027977, 9642835375697622),
-    (1931, 10661090826649331747, 9552948769399042), (1933, 6680145293117788997, 9543064704453984),
-    (1949, 13790100623599187637, 9464722459573910), (1951, 7043989920509285471, 9455020027529242),
-    (1973, 17128451669050125981, 9349591522407274), (1979, 736378363730699635, 9321245110515185),
-    (1987, 11864589293508206827, 9283716192103448), (1993, 11727057070441546361, 9255767222132238),
-    (1997, 13994400236189269253, 9237227878672784), (1999, 2768395808960913199, 9227986029869710),
-    (2003, 16319336244939253851, 9209557700304319), (2011, 15043590393278798931, 9172920971511462),
-    (2017, 493864243916864545, 9145634146608602), (2027, 11384744369122175171, 9100515083231155),
-    (2029, 5309462069515218405, 9091544639580853), (2039, 9698337247188150727, 9046956387302379),
-    (2053, 11797649765601871053, 8985262578523892), (2063, 3818109413220542191, 8941708227682768),
-    (2069, 3798121302755084093, 8915777705997849), (2081, 15698790847928695777, 8864365244454373),
-    (2083, 13345772116697212811, 8855854092035310), (2087, 12993154666196952983, 8838880725304049),
-    (2089, 7205621428505023513, 8830418417285568), (2099, 9913257415504704251, 8788348772610553),
-    (2111, 6859637185154901951, 8738391318668664), (2113, 34920480972474305, 8730120243118576),
-    (2129, 5588609641870672049, 8664511072667708), (2131, 16317274790681607131, 8656379199300587),
-];
-
-#[allow(dead_code)]
-pub const NEXT_PRIME: u64 = 2137;
-
-
- \ No newline at end of file diff --git a/src/uu_factor/miller_rabin.rs.html b/src/uu_factor/miller_rabin.rs.html deleted file mode 100644 index 8aabe04e7..000000000 --- a/src/uu_factor/miller_rabin.rs.html +++ /dev/null @@ -1,424 +0,0 @@ -miller_rabin.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2020 nicoo <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-// spell-checker:ignore (URL) appspot
-
-use crate::numeric::*;
-
-pub(crate) trait Basis {
-    const BASIS: &'static [u64];
-}
-
-impl Basis for Montgomery<u64> {
-    // Small set of bases for the Miller-Rabin prime test, valid for all 64b integers;
-    //  discovered by Jim Sinclair on 2011-04-20, see miller-rabin.appspot.com
-    #[allow(clippy::unreadable_literal)]
-    const BASIS: &'static [u64] = &[2, 325, 9375, 28178, 450775, 9780504, 1795265022];
-}
-
-impl Basis for Montgomery<u32> {
-    // spell-checker:ignore (names) Steve Worley
-    // Small set of bases for the Miller-Rabin prime test, valid for all 32b integers;
-    //  discovered by Steve Worley on 2013-05-27, see miller-rabin.appspot.com
-    #[allow(clippy::unreadable_literal)]
-    const BASIS: &'static [u64] = &[
-        4230279247111683200,
-        14694767155120705706,
-        16641139526367750375,
-    ];
-}
-
-#[derive(Eq, PartialEq)]
-#[must_use = "Ignoring the output of a primality test."]
-pub(crate) enum Result {
-    Prime,
-    Pseudoprime,
-    Composite(u64),
-}
-
-impl Result {
-    pub(crate) fn is_prime(&self) -> bool {
-        *self == Result::Prime
-    }
-}
-
-// Deterministic Miller-Rabin primality-checking algorithm, adapted to extract
-// (some) dividers; it will fail to factor strong pseudoprimes.
-#[allow(clippy::many_single_char_names)]
-pub(crate) fn test<A: Arithmetic + Basis>(m: A) -> Result {
-    use self::Result::*;
-
-    let n = m.modulus();
-    debug_assert!(n > 1);
-    debug_assert!(n % 2 != 0);
-
-    // n-1 = r 2ⁱ
-    let i = (n - 1).trailing_zeros();
-    let r = (n - 1) >> i;
-
-    let one = m.one();
-    let minus_one = m.minus_one();
-
-    'witness: for _a in A::BASIS.iter() {
-        let _a = _a % n;
-        if _a == 0 {
-            continue;
-        }
-
-        let a = m.from_u64(_a);
-
-        // x = a^r mod n
-        let mut x = m.pow(a, r);
-
-        if x == one || x == minus_one {
-            continue;
-        }
-
-        for _ in 1..i {
-            let y = m.mul(x, x);
-            if y == one {
-                return Composite(gcd(m.to_u64(x) - 1, m.modulus()));
-            } else if y == minus_one {
-                // This basis element is not a witness of `n` being composite.
-                // Keep looking.
-                continue 'witness;
-            }
-            x = y;
-        }
-
-        return Pseudoprime;
-    }
-
-    Prime
-}
-
-// Used by build.rs' tests and debug assertions
-#[allow(dead_code)]
-pub(crate) fn is_prime(n: u64) -> bool {
-    if n < 2 {
-        false
-    } else if n % 2 == 0 {
-        n == 2
-    } else {
-        test::<Montgomery<u64>>(Montgomery::new(n)).is_prime()
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::numeric::{traits::DoubleInt, Arithmetic, Montgomery};
-    use crate::parametrized_check;
-    use quickcheck::quickcheck;
-    use std::iter;
-    const LARGEST_U64_PRIME: u64 = 0xFFFFFFFFFFFFFFC5;
-
-    fn primes() -> impl Iterator<Item = u64> {
-        iter::once(2).chain(odd_primes())
-    }
-
-    fn odd_primes() -> impl Iterator<Item = u64> {
-        use crate::table::{NEXT_PRIME, PRIME_INVERSIONS_U64};
-        PRIME_INVERSIONS_U64
-            .iter()
-            .map(|(p, _, _)| *p)
-            .chain(iter::once(NEXT_PRIME))
-    }
-
-    #[test]
-    fn largest_prime() {
-        assert!(is_prime(LARGEST_U64_PRIME));
-    }
-
-    #[test]
-    fn largest_composites() {
-        for i in LARGEST_U64_PRIME + 1..=u64::MAX {
-            assert!(!is_prime(i), "2⁶⁴ - {} reported prime", u64::MAX - i + 1);
-        }
-    }
-
-    #[test]
-    fn two() {
-        assert!(is_prime(2));
-    }
-
-    fn first_primes<A: DoubleInt>()
-    where
-        Montgomery<A>: Basis,
-    {
-        for p in odd_primes() {
-            assert!(
-                test(Montgomery::<A>::new(p)).is_prime(),
-                "{} reported composite",
-                p
-            );
-        }
-    }
-    parametrized_check!(first_primes);
-
-    #[test]
-    fn one() {
-        assert!(!is_prime(1));
-    }
-    #[test]
-    fn zero() {
-        assert!(!is_prime(0));
-    }
-
-    #[test]
-    fn first_composites() {
-        for (p, q) in primes().zip(odd_primes()) {
-            for i in p + 1..q {
-                assert!(!is_prime(i), "{} reported prime", i);
-            }
-        }
-    }
-
-    #[test]
-    fn issue_1556() {
-        // 10 425 511 = 2441 × 4271
-        assert!(!is_prime(10_425_511));
-    }
-
-    fn small_semiprimes<A: DoubleInt>()
-    where
-        Montgomery<A>: Basis,
-    {
-        for p in odd_primes() {
-            for q in odd_primes().take_while(|q| *q <= p) {
-                let n = p * q;
-                let m = Montgomery::<A>::new(n);
-                assert!(!test(m).is_prime(), "{} = {} × {} reported prime", n, p, q);
-            }
-        }
-    }
-    parametrized_check!(small_semiprimes);
-
-    quickcheck! {
-        fn composites(i: u64, j: u64) -> bool {
-            // TODO: #1559 factor n > 2^64 - 1
-            match i.checked_mul(j) {
-                Some(n) => i < 2 || j < 2 || !is_prime(n),
-                _ => true,
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/numeric/gcd.rs.html b/src/uu_factor/numeric/gcd.rs.html deleted file mode 100644 index 0ccc043c0..000000000 --- a/src/uu_factor/numeric/gcd.rs.html +++ /dev/null @@ -1,262 +0,0 @@ -gcd.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2015 Wiktor Kuropatwa <wiktor.kuropatwa@gmail.com>
-// * (c) 2020 nicoo            <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-// spell-checker:ignore (vars) kgcdab gcdac gcdbc
-
-use std::cmp::min;
-use std::mem::swap;
-
-pub fn gcd(mut u: u64, mut v: u64) -> u64 {
-    // Stein's binary GCD algorithm
-    // Base cases: gcd(n, 0) = gcd(0, n) = n
-    if u == 0 {
-        return v;
-    } else if v == 0 {
-        return u;
-    }
-
-    // gcd(2ⁱ u, 2ʲ v) = 2ᵏ gcd(u, v) with u, v odd and k = min(i, j)
-    // 2ᵏ is the greatest power of two that divides both u and v
-    let k = {
-        let i = u.trailing_zeros();
-        let j = v.trailing_zeros();
-        u >>= i;
-        v >>= j;
-        min(i, j)
-    };
-
-    loop {
-        // Loop invariant: u and v are odd
-        debug_assert!(u % 2 == 1, "u = {} is even", u);
-        debug_assert!(v % 2 == 1, "v = {} is even", v);
-
-        // gcd(u, v) = gcd(|u - v|, min(u, v))
-        if u > v {
-            swap(&mut u, &mut v);
-        }
-        v -= u;
-
-        if v == 0 {
-            // Reached the base case; gcd is 2ᵏ u
-            return u << k;
-        }
-
-        // gcd(u, 2ʲ v) = gcd(u, v) as u is odd
-        v >>= v.trailing_zeros();
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use quickcheck::{quickcheck, TestResult};
-
-    quickcheck! {
-        fn euclidean(a: u64, b: u64) -> bool {
-            // Test against the Euclidean algorithm
-            let g = {
-                let (mut a, mut b) = (a, b);
-                while b > 0 {
-                    a %= b;
-                    swap(&mut a, &mut b);
-                }
-                a
-            };
-            gcd(a, b) == g
-        }
-
-        fn one(a: u64) -> bool {
-            gcd(1, a) == 1
-        }
-
-        fn zero(a: u64) -> bool {
-            gcd(0, a) == a
-        }
-
-        fn divisor(a: u64, b: u64) -> TestResult {
-            // Test that gcd(a, b) divides a and b, unless a == b == 0
-            if a == 0 && b == 0 { return TestResult::discard(); } // restrict test domain to !(a == b == 0)
-
-            let g = gcd(a, b);
-            TestResult::from_bool( g != 0 && a % g == 0 && b % g == 0 )
-        }
-
-        fn commutative(a: u64, b: u64) -> bool {
-            gcd(a, b) == gcd(b, a)
-        }
-
-        fn associative(a: u64, b: u64, c: u64) -> bool {
-            gcd(a, gcd(b, c)) == gcd(gcd(a, b), c)
-        }
-
-        fn scalar_multiplication(a: u64, b: u64, k: u64) -> bool {
-            // TODO: #1559 factor n > 2^64 - 1
-            match (k.checked_mul(a), k.checked_mul(b), k.checked_mul(gcd(a, b))) {
-                (Some(ka), Some(kb), Some(kgcdab)) => gcd(ka, kb) == kgcdab,
-                _ => true
-            }
-        }
-
-        fn multiplicative(a: u64, b: u64, c: u64) -> bool {
-            // TODO: #1559 factor n > 2^64 - 1
-            match (a.checked_mul(b), gcd(a, c).checked_mul(gcd(b, c))) {
-                (Some(ab), Some(gcdac_gcdbc)) => {
-                    // gcd(ab, c) = gcd(a, c) gcd(b, c) when a and b coprime
-                    gcd(a, b) != 1 || gcd(ab, c) == gcdac_gcdbc
-                },
-                _ => true,
-            }
-        }
-
-        fn linearity(a: u64, b: u64, k: u64) -> bool {
-            // TODO: #1559 factor n > 2^64 - 1
-            match k.checked_mul(b) {
-                Some(kb) => {
-                    match a.checked_add(kb) {
-                        Some(a_plus_kb) => gcd(a_plus_kb, b) == gcd(a, b),
-                        _ => true,
-                    }
-                }
-                _ => true,
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/numeric/mod.rs.html b/src/uu_factor/numeric/mod.rs.html deleted file mode 100644 index d7a6352a5..000000000 --- a/src/uu_factor/numeric/mod.rs.html +++ /dev/null @@ -1,38 +0,0 @@ -mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2020 nicoo            <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-mod gcd;
-pub use gcd::gcd;
-
-pub(crate) mod traits;
-
-mod modular_inverse;
-pub(crate) use modular_inverse::modular_inverse;
-
-mod montgomery;
-pub(crate) use montgomery::{Arithmetic, Montgomery};
-
-
- \ No newline at end of file diff --git a/src/uu_factor/numeric/modular_inverse.rs.html b/src/uu_factor/numeric/modular_inverse.rs.html deleted file mode 100644 index 6618c594e..000000000 --- a/src/uu_factor/numeric/modular_inverse.rs.html +++ /dev/null @@ -1,162 +0,0 @@ -modular_inverse.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2015 Wiktor Kuropatwa <wiktor.kuropatwa@gmail.com>
-// * (c) 2020 nicoo            <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-use super::traits::Int;
-
-// extended Euclid algorithm
-// precondition: a is odd
-pub(crate) fn modular_inverse<T: Int>(a: T) -> T {
-    let zero = T::zero();
-    let one = T::one();
-    debug_assert!(a % (one + one) == one, "{:?} is not odd", a);
-
-    let mut t = zero;
-    let mut new_t = one;
-    let mut r = zero;
-    let mut new_r = a;
-
-    while new_r != zero {
-        let quot = if r == zero {
-            // special case when we're just starting out
-            // This works because we know that
-            // a does not divide 2^64, so floor(2^64 / a) == floor((2^64-1) / a);
-            T::max_value()
-        } else {
-            r
-        } / new_r;
-
-        let new_tp = t.wrapping_sub(&quot.wrapping_mul(&new_t));
-        t = new_t;
-        new_t = new_tp;
-
-        let new_rp = r.wrapping_sub(&quot.wrapping_mul(&new_r));
-        r = new_r;
-        new_r = new_rp;
-    }
-
-    debug_assert_eq!(r, one);
-    t
-}
-
-#[cfg(test)]
-mod tests {
-    use super::{super::traits::Int, *};
-    use crate::parametrized_check;
-    use quickcheck::quickcheck;
-
-    fn small_values<T: Int>() {
-        // All odd integers from 1 to 20 000
-        let one = T::from(1).unwrap();
-        let two = T::from(2).unwrap();
-        let mut test_values = (0..10_000)
-            .map(|i| T::from(i).unwrap())
-            .map(|i| two * i + one);
-
-        assert!(test_values.all(|x| x.wrapping_mul(&modular_inverse(x)) == one));
-    }
-    parametrized_check!(small_values);
-
-    quickcheck! {
-        fn random_values_u32(n: u32) -> bool {
-            match 2_u32.checked_mul(n) {
-                Some(n) => modular_inverse(n + 1).wrapping_mul(n + 1) == 1,
-                _ => true,
-            }
-        }
-
-        fn random_values_u64(n: u64) -> bool {
-            match 2_u64.checked_mul(n) {
-                Some(n) => modular_inverse(n + 1).wrapping_mul(n + 1) == 1,
-                _ => true,
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/numeric/montgomery.rs.html b/src/uu_factor/numeric/montgomery.rs.html deleted file mode 100644 index 4053dde4a..000000000 --- a/src/uu_factor/numeric/montgomery.rs.html +++ /dev/null @@ -1,462 +0,0 @@ -montgomery.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2020 Alex Lyon  <arcterus@mail.com>
-// * (c) 2020 nicoo      <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-use super::*;
-
-use traits::{DoubleInt, Int, One, OverflowingAdd, Zero};
-
-pub(crate) trait Arithmetic: Copy + Sized {
-    // The type of integers mod m, in some opaque representation
-    type ModInt: Copy + Sized + Eq;
-
-    fn new(m: u64) -> Self;
-    fn modulus(&self) -> u64;
-    fn from_u64(&self, n: u64) -> Self::ModInt;
-    fn to_u64(&self, n: Self::ModInt) -> u64;
-    fn add(&self, a: Self::ModInt, b: Self::ModInt) -> Self::ModInt;
-    fn mul(&self, a: Self::ModInt, b: Self::ModInt) -> Self::ModInt;
-
-    fn pow(&self, mut a: Self::ModInt, mut b: u64) -> Self::ModInt {
-        let (_a, _b) = (a, b);
-        let mut result = self.one();
-        while b > 0 {
-            if b & 1 != 0 {
-                result = self.mul(result, a);
-            }
-            a = self.mul(a, a);
-            b >>= 1;
-        }
-
-        // Check that r (reduced back to the usual representation) equals
-        //  a^b % n, unless the latter computation overflows
-        // Temporarily commented-out, as there u64::checked_pow is not available
-        //  on the minimum supported Rust version, nor is an appropriate method
-        //  for compiling the check conditionally.
-        //debug_assert!(self
-        //    .to_u64(_a)
-        //    .checked_pow(_b as u32)
-        //    .map(|r| r % self.modulus() == self.to_u64(result))
-        //    .unwrap_or(true));
-
-        result
-    }
-
-    fn one(&self) -> Self::ModInt {
-        self.from_u64(1)
-    }
-    fn minus_one(&self) -> Self::ModInt {
-        self.from_u64(self.modulus() - 1)
-    }
-    fn zero(&self) -> Self::ModInt {
-        self.from_u64(0)
-    }
-}
-
-#[derive(Clone, Copy, Debug)]
-pub(crate) struct Montgomery<T: DoubleInt> {
-    a: T,
-    n: T,
-}
-
-impl<T: DoubleInt> Montgomery<T> {
-    /// computes x/R mod n efficiently
-    fn reduce(&self, x: T::DoubleWidth) -> T {
-        let t_bits = T::zero().count_zeros() as usize;
-
-        debug_assert!(x < (self.n.as_double_width()) << t_bits);
-        // TODO: optimize
-        let Montgomery { a, n } = self;
-        let m = T::from_double_width(x).wrapping_mul(a);
-        let nm = (n.as_double_width()) * (m.as_double_width());
-        let (xnm, overflow) = x.overflowing_add(&nm); // x + n*m
-        debug_assert_eq!(
-            xnm % (T::DoubleWidth::one() << T::zero().count_zeros() as usize),
-            T::DoubleWidth::zero()
-        );
-
-        // (x + n*m) / R
-        // in case of overflow, this is (2¹²⁸ + xnm)/2⁶⁴ - n = xnm/2⁶⁴ + (2⁶⁴ - n)
-        let y = T::from_double_width(xnm >> t_bits)
-            + if !overflow {
-                T::zero()
-            } else {
-                n.wrapping_neg()
-            };
-
-        if y >= *n {
-            y - *n
-        } else {
-            y
-        }
-    }
-}
-
-impl<T: DoubleInt> Arithmetic for Montgomery<T> {
-    // Montgomery transform, R=2⁶⁴
-    // Provides fast arithmetic mod n (n odd, u64)
-    type ModInt = T;
-
-    fn new(n: u64) -> Self {
-        debug_assert!(T::zero().count_zeros() >= 64 || n < (1 << T::zero().count_zeros() as usize));
-        let n = T::from_u64(n);
-        let a = modular_inverse(n).wrapping_neg();
-        debug_assert_eq!(n.wrapping_mul(&a), T::one().wrapping_neg());
-        Montgomery { a, n }
-    }
-
-    fn modulus(&self) -> u64 {
-        self.n.as_u64()
-    }
-
-    fn from_u64(&self, x: u64) -> Self::ModInt {
-        // TODO: optimise!
-        debug_assert!(x < self.n.as_u64());
-        let r = T::from_double_width(
-            ((T::DoubleWidth::from_u64(x)) << T::zero().count_zeros() as usize)
-                % self.n.as_double_width(),
-        );
-        debug_assert_eq!(x, self.to_u64(r));
-        r
-    }
-
-    fn to_u64(&self, n: Self::ModInt) -> u64 {
-        self.reduce(n.as_double_width()).as_u64()
-    }
-
-    fn add(&self, a: Self::ModInt, b: Self::ModInt) -> Self::ModInt {
-        let (r, overflow) = a.overflowing_add(&b);
-
-        // In case of overflow, a+b = 2⁶⁴ + r = (2⁶⁴ - n) + r (working mod n)
-        let r = if !overflow {
-            r
-        } else {
-            r + self.n.wrapping_neg()
-        };
-
-        // Normalize to [0; n[
-        let r = if r < self.n { r } else { r - self.n };
-
-        // Check that r (reduced back to the usual representation) equals
-        // a+b % n
-        #[cfg(debug_assertions)]
-        {
-            let a_r = self.to_u64(a) as u128;
-            let b_r = self.to_u64(b) as u128;
-            let r_r = self.to_u64(r);
-            let r_2 = ((a_r + b_r) % self.n.as_u128()) as u64;
-            debug_assert_eq!(
-                r_r, r_2,
-                "[{}] = {} ≠ {} = {} + {} = [{}] + [{}] mod {}; a = {}",
-                r, r_r, r_2, a_r, b_r, a, b, self.n, self.a
-            );
-        }
-        r
-    }
-
-    fn mul(&self, a: Self::ModInt, b: Self::ModInt) -> Self::ModInt {
-        let r = self.reduce(a.as_double_width() * b.as_double_width());
-
-        // Check that r (reduced back to the usual representation) equals
-        // a*b % n
-        #[cfg(debug_assertions)]
-        {
-            let a_r = self.to_u64(a) as u128;
-            let b_r = self.to_u64(b) as u128;
-            let r_r = self.to_u64(r);
-            let r_2: u64 = ((a_r * b_r) % self.n.as_u128()) as u64;
-            debug_assert_eq!(
-                r_r, r_2,
-                "[{}] = {} ≠ {} = {} * {} = [{}] * [{}] mod {}; a = {}",
-                r, r_r, r_2, a_r, b_r, a, b, self.n, self.a
-            );
-        }
-        r
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::parametrized_check;
-
-    fn test_add<A: DoubleInt>() {
-        for n in 0..100 {
-            let n = 2 * n + 1;
-            let m = Montgomery::<A>::new(n);
-            for x in 0..n {
-                let m_x = m.from_u64(x);
-                for y in 0..=x {
-                    let m_y = m.from_u64(y);
-                    println!("{n:?}, {x:?}, {y:?}", n = n, x = x, y = y);
-                    assert_eq!((x + y) % n, m.to_u64(m.add(m_x, m_y)));
-                }
-            }
-        }
-    }
-    parametrized_check!(test_add);
-
-    fn test_multiplication<A: DoubleInt>() {
-        for n in 0..100 {
-            let n = 2 * n + 1;
-            let m = Montgomery::<A>::new(n);
-            for x in 0..n {
-                let m_x = m.from_u64(x);
-                for y in 0..=x {
-                    let m_y = m.from_u64(y);
-                    assert_eq!((x * y) % n, m.to_u64(m.mul(m_x, m_y)));
-                }
-            }
-        }
-    }
-    parametrized_check!(test_multiplication);
-
-    fn test_roundtrip<A: DoubleInt>() {
-        for n in 0..100 {
-            let n = 2 * n + 1;
-            let m = Montgomery::<A>::new(n);
-            for x in 0..n {
-                let x_ = m.from_u64(x);
-                assert_eq!(x, m.to_u64(x_));
-            }
-        }
-    }
-    parametrized_check!(test_roundtrip);
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/numeric/traits.rs.html b/src/uu_factor/numeric/traits.rs.html deleted file mode 100644 index 131e52375..000000000 --- a/src/uu_factor/numeric/traits.rs.html +++ /dev/null @@ -1,184 +0,0 @@ -traits.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2020 Alex Lyon  <arcterus@mail.com>
-// * (c) 2020 nicoo      <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-pub(crate) use num_traits::{
-    identities::{One, Zero},
-    ops::overflowing::OverflowingAdd,
-};
-use num_traits::{
-    int::PrimInt,
-    ops::wrapping::{WrappingMul, WrappingNeg, WrappingSub},
-};
-use std::fmt::{Debug, Display};
-
-pub(crate) trait Int:
-    Display + Debug + PrimInt + OverflowingAdd + WrappingNeg + WrappingSub + WrappingMul
-{
-    fn as_u64(&self) -> u64;
-    fn from_u64(n: u64) -> Self;
-
-    #[cfg(debug_assertions)]
-    fn as_u128(&self) -> u128;
-}
-
-pub(crate) trait DoubleInt: Int {
-    /// An integer type with twice the width of `Self`.
-    /// In particular, multiplications (of `Int` values) can be performed in
-    ///  `Self::DoubleWidth` without possibility of overflow.
-    type DoubleWidth: Int;
-
-    fn as_double_width(self) -> Self::DoubleWidth;
-    fn from_double_width(n: Self::DoubleWidth) -> Self;
-}
-
-macro_rules! int {
-    ( $x:ty ) => {
-        impl Int for $x {
-            fn as_u64(&self) -> u64 {
-                *self as u64
-            }
-            fn from_u64(n: u64) -> Self {
-                n as _
-            }
-            #[cfg(debug_assertions)]
-            fn as_u128(&self) -> u128 {
-                *self as u128
-            }
-        }
-    };
-}
-macro_rules! double_int {
-    ( $x:ty, $y:ty ) => {
-        int!($x);
-        impl DoubleInt for $x {
-            type DoubleWidth = $y;
-
-            fn as_double_width(self) -> $y {
-                self as _
-            }
-            fn from_double_width(n: $y) -> $x {
-                n as _
-            }
-        }
-    };
-}
-double_int!(u32, u64);
-double_int!(u64, u128);
-int!(u128);
-
-/// Helper macro for instantiating tests over u32 and u64
-#[cfg(test)]
-#[macro_export]
-macro_rules! parametrized_check {
-    ( $f:ident ) => {
-        paste::item! {
-            #[test]
-            fn [< $f _ u32 >]() {
-                $f::<u32>()
-            }
-            #[test]
-            fn [< $f _ u64 >]() {
-                $f::<u64>()
-            }
-        }
-    };
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/rho.rs.html b/src/uu_factor/rho.rs.html deleted file mode 100644 index 50426cd71..000000000 --- a/src/uu_factor/rho.rs.html +++ /dev/null @@ -1,98 +0,0 @@ -rho.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2015 Wiktor Kuropatwa <wiktor.kuropatwa@gmail.com>
-// * (c) 2020 nicoo <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-use rand::distributions::{Distribution, Uniform};
-use rand::rngs::SmallRng;
-use rand::{thread_rng, SeedableRng};
-use std::cmp::{max, min};
-
-use crate::numeric::*;
-
-pub(crate) fn find_divisor<A: Arithmetic>(n: A) -> u64 {
-    #![allow(clippy::many_single_char_names)]
-    let mut rand = {
-        let range = Uniform::new(1, n.modulus());
-        let mut rng = SmallRng::from_rng(&mut thread_rng()).unwrap();
-        move || n.from_u64(range.sample(&mut rng))
-    };
-
-    let quadratic = |a, b| move |x| n.add(n.mul(a, n.mul(x, x)), b);
-
-    loop {
-        let f = quadratic(rand(), rand());
-        let mut x = rand();
-        let mut y = x;
-
-        loop {
-            x = f(x);
-            y = f(f(y));
-            let d = {
-                let _x = n.to_u64(x);
-                let _y = n.to_u64(y);
-                gcd(n.modulus(), max(_x, _y) - min(_x, _y))
-            };
-            if d == n.modulus() {
-                // Failure, retry with a different quadratic
-                break;
-            } else if d > 1 {
-                return d;
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_factor/table.rs.html b/src/uu_factor/table.rs.html deleted file mode 100644 index ccc0ddfd2..000000000 --- a/src/uu_factor/table.rs.html +++ /dev/null @@ -1,206 +0,0 @@ -table.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) 2015 kwantam <kwantam@gmail.com>
-// * (c) 2020 nicoo   <nicoo@debian.org>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-// spell-checker: ignore (ToDO) INVS
-
-use crate::Factors;
-
-include!(concat!(env!("OUT_DIR"), "/prime_table.rs"));
-
-pub fn factor(num: &mut u64, factors: &mut Factors) {
-    for &(prime, inv, ceil) in PRIME_INVERSIONS_U64 {
-        if *num == 1 {
-            break;
-        }
-
-        // inv = prime^-1 mod 2^64
-        // ceil = floor((2^64-1) / prime)
-        // if (num * inv) mod 2^64 <= ceil, then prime divides num
-        // See https://math.stackexchange.com/questions/1251327/
-        // for a nice explanation.
-        let mut k = 0;
-        loop {
-            let x = num.wrapping_mul(inv);
-
-            // While prime divides num
-            if x <= ceil {
-                *num = x;
-                k += 1;
-                #[cfg(feature = "coz")]
-                coz::progress!("factor found");
-            } else {
-                if k > 0 {
-                    factors.add(prime, k);
-                }
-                break;
-            }
-        }
-    }
-}
-
-pub const CHUNK_SIZE: usize = 8;
-pub fn factor_chunk(n_s: &mut [u64; CHUNK_SIZE], f_s: &mut [Factors; CHUNK_SIZE]) {
-    for &(prime, inv, ceil) in PRIME_INVERSIONS_U64 {
-        if n_s[0] == 1 && n_s[1] == 1 && n_s[2] == 1 && n_s[3] == 1 {
-            break;
-        }
-
-        for (num, factors) in n_s.iter_mut().zip(f_s.iter_mut()) {
-            if *num == 1 {
-                continue;
-            }
-            let mut k = 0;
-            loop {
-                let x = num.wrapping_mul(inv);
-
-                // While prime divides num
-                if x <= ceil {
-                    *num = x;
-                    k += 1;
-                } else {
-                    if k > 0 {
-                        factors.add(prime, k);
-                    }
-                    break;
-                }
-            }
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::Factors;
-    use quickcheck::quickcheck;
-    use rand::{rngs::SmallRng, Rng, SeedableRng};
-
-    quickcheck! {
-        fn chunk_vs_iter(seed: u64) -> () {
-            let mut rng = SmallRng::seed_from_u64(seed);
-            let mut n_c: [u64; CHUNK_SIZE] = rng.gen();
-            let mut f_c: [Factors; CHUNK_SIZE] = rng.gen();
-
-            let mut n_i = n_c;
-            let mut f_i = f_c.clone();
-            for (n, f) in n_i.iter_mut().zip(f_i.iter_mut()) {
-                factor(n, f);
-            }
-
-            factor_chunk(&mut n_c, &mut f_c);
-
-            assert_eq!(n_i, n_c);
-            assert_eq!(f_i, f_c);
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_false/false.rs.html b/src/uu_false/false.rs.html deleted file mode 100644 index 6265ca6ed..000000000 --- a/src/uu_false/false.rs.html +++ /dev/null @@ -1,42 +0,0 @@ -false.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use clap::App;
-use uucore::error::UResult;
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    uu_app().get_matches_from(args);
-    Err(1.into())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_fmt/fmt.rs.html b/src/uu_fmt/fmt.rs.html deleted file mode 100644 index e99d9e21d..000000000 --- a/src/uu_fmt/fmt.rs.html +++ /dev/null @@ -1,706 +0,0 @@ -fmt.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-
//  * This file is part of `fmt` from the uutils coreutils package.
-//  *
-//  * (c) kwantam <kwantam@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) PSKIP linebreak ostream parasplit tabwidth xanti xprefix
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::cmp;
-use std::fs::File;
-use std::io::{stdin, stdout, Write};
-use std::io::{BufReader, BufWriter, Read};
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-
-use self::linebreak::break_lines;
-use self::parasplit::ParagraphStream;
-
-mod linebreak;
-mod parasplit;
-
-static ABOUT: &str = "Reformat paragraphs from input files (or stdin) to stdout.";
-static MAX_WIDTH: usize = 2500;
-
-static OPT_CROWN_MARGIN: &str = "crown-margin";
-static OPT_TAGGED_PARAGRAPH: &str = "tagged-paragraph";
-static OPT_PRESERVE_HEADERS: &str = "preserve-headers";
-static OPT_SPLIT_ONLY: &str = "split-only";
-static OPT_UNIFORM_SPACING: &str = "uniform-spacing";
-static OPT_PREFIX: &str = "prefix";
-static OPT_SKIP_PREFIX: &str = "skip-prefix";
-static OPT_EXACT_PREFIX: &str = "exact-prefix";
-static OPT_EXACT_SKIP_PREFIX: &str = "exact-skip-prefix";
-static OPT_WIDTH: &str = "width";
-static OPT_GOAL: &str = "goal";
-static OPT_QUICK: &str = "quick";
-static OPT_TAB_WIDTH: &str = "tab-width";
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!("{} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-pub type FileOrStdReader = BufReader<Box<dyn Read + 'static>>;
-pub struct FmtOptions {
-    crown: bool,
-    tagged: bool,
-    mail: bool,
-    split_only: bool,
-    use_prefix: bool,
-    prefix: String,
-    xprefix: bool,
-    use_anti_prefix: bool,
-    anti_prefix: String,
-    xanti_prefix: bool,
-    uniform: bool,
-    quick: bool,
-    width: usize,
-    goal: usize,
-    tabwidth: usize,
-}
-
-#[uucore_procs::gen_uumain]
-#[allow(clippy::cognitive_complexity)]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let mut files: Vec<String> = matches
-        .values_of(ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let mut fmt_opts = FmtOptions {
-        crown: false,
-        tagged: false,
-        mail: false,
-        uniform: false,
-        quick: false,
-        split_only: false,
-        use_prefix: false,
-        prefix: String::new(),
-        xprefix: false,
-        use_anti_prefix: false,
-        anti_prefix: String::new(),
-        xanti_prefix: false,
-        width: 79,
-        goal: 74,
-        tabwidth: 8,
-    };
-
-    fmt_opts.tagged = matches.is_present(OPT_TAGGED_PARAGRAPH);
-    if matches.is_present(OPT_CROWN_MARGIN) {
-        fmt_opts.crown = true;
-        fmt_opts.tagged = false;
-    }
-    fmt_opts.mail = matches.is_present(OPT_PRESERVE_HEADERS);
-    fmt_opts.uniform = matches.is_present(OPT_UNIFORM_SPACING);
-    fmt_opts.quick = matches.is_present(OPT_QUICK);
-    if matches.is_present(OPT_SPLIT_ONLY) {
-        fmt_opts.split_only = true;
-        fmt_opts.crown = false;
-        fmt_opts.tagged = false;
-    }
-    fmt_opts.xprefix = matches.is_present(OPT_EXACT_PREFIX);
-    fmt_opts.xanti_prefix = matches.is_present(OPT_SKIP_PREFIX);
-
-    if let Some(s) = matches.value_of(OPT_PREFIX).map(String::from) {
-        fmt_opts.prefix = s;
-        fmt_opts.use_prefix = true;
-    };
-
-    if let Some(s) = matches.value_of(OPT_SKIP_PREFIX).map(String::from) {
-        fmt_opts.anti_prefix = s;
-        fmt_opts.use_anti_prefix = true;
-    };
-
-    if let Some(s) = matches.value_of(OPT_WIDTH) {
-        fmt_opts.width = match s.parse::<usize>() {
-            Ok(t) => t,
-            Err(e) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("Invalid WIDTH specification: {}: {}", s.quote(), e),
-                ));
-            }
-        };
-        if fmt_opts.width > MAX_WIDTH {
-            return Err(USimpleError::new(
-                1,
-                format!(
-                    "invalid width: '{}': Numerical result out of range",
-                    fmt_opts.width,
-                ),
-            ));
-        }
-        fmt_opts.goal = cmp::min(fmt_opts.width * 94 / 100, fmt_opts.width - 3);
-    };
-
-    if let Some(s) = matches.value_of(OPT_GOAL) {
-        fmt_opts.goal = match s.parse::<usize>() {
-            Ok(t) => t,
-            Err(e) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("Invalid GOAL specification: {}: {}", s.quote(), e),
-                ));
-            }
-        };
-        if !matches.is_present(OPT_WIDTH) {
-            fmt_opts.width = cmp::max(fmt_opts.goal * 100 / 94, fmt_opts.goal + 3);
-        } else if fmt_opts.goal > fmt_opts.width {
-            return Err(USimpleError::new(1, "GOAL cannot be greater than WIDTH."));
-        }
-    };
-
-    if let Some(s) = matches.value_of(OPT_TAB_WIDTH) {
-        fmt_opts.tabwidth = match s.parse::<usize>() {
-            Ok(t) => t,
-            Err(e) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("Invalid TABWIDTH specification: {}: {}", s.quote(), e),
-                ));
-            }
-        };
-    };
-
-    if fmt_opts.tabwidth < 1 {
-        fmt_opts.tabwidth = 1;
-    }
-
-    // immutable now
-    let fmt_opts = fmt_opts;
-
-    if files.is_empty() {
-        files.push("-".to_owned());
-    }
-
-    let mut ostream = BufWriter::new(stdout());
-
-    for i in files.iter().map(|x| &x[..]) {
-        let mut fp = match i {
-            "-" => BufReader::new(Box::new(stdin()) as Box<dyn Read + 'static>),
-            _ => match File::open(i) {
-                Ok(f) => BufReader::new(Box::new(f) as Box<dyn Read + 'static>),
-                Err(e) => {
-                    show_warning!("{}: {}", i.maybe_quote(), e);
-                    continue;
-                }
-            },
-        };
-        let p_stream = ParagraphStream::new(&fmt_opts, &mut fp);
-        for para_result in p_stream {
-            match para_result {
-                Err(s) => {
-                    ostream
-                        .write_all(s.as_bytes())
-                        .map_err_context(|| "failed to write output".to_string())?;
-                    ostream
-                        .write_all(b"\n")
-                        .map_err_context(|| "failed to write output".to_string())?;
-                }
-                Ok(para) => break_lines(&para, &fmt_opts, &mut ostream)
-                    .map_err_context(|| "failed to write output".to_string())?,
-            }
-        }
-
-        // flush the output after each file
-        ostream
-            .flush()
-            .map_err_context(|| "failed to write output".to_string())?;
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_CROWN_MARGIN)
-                .short('c')
-                .long(OPT_CROWN_MARGIN)
-                .help(
-                    "First and second line of paragraph \
-                    may have different indentations, in which \
-                    case the first line's indentation is preserved, \
-                    and each subsequent line's indentation matches the second line.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_TAGGED_PARAGRAPH)
-                .short('t')
-                .long("tagged-paragraph")
-                .help(
-                    "Like -c, except that the first and second line of a paragraph *must* \
-                    have different indentation or they are treated as separate paragraphs.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_PRESERVE_HEADERS)
-                .short('m')
-                .long("preserve-headers")
-                .help(
-                    "Attempt to detect and preserve mail headers in the input. \
-                    Be careful when combining this flag with -p.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_SPLIT_ONLY)
-                .short('s')
-                .long("split-only")
-                .help("Split lines only, do not reflow."),
-        )
-        .arg(
-            Arg::new(OPT_UNIFORM_SPACING)
-                .short('u')
-                .long("uniform-spacing")
-                .help(
-                    "Insert exactly one \
-                    space between words, and two between sentences. \
-                    Sentence breaks in the input are detected as [?!.] \
-                    followed by two spaces or a newline; other punctuation \
-                    is not interpreted as a sentence break.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_PREFIX)
-                .short('p')
-                .long("prefix")
-                .help(
-                    "Reformat only lines \
-                    beginning with PREFIX, reattaching PREFIX to reformatted lines. \
-                    Unless -x is specified, leading whitespace will be ignored \
-                    when matching PREFIX.",
-                )
-                .value_name("PREFIX"),
-        )
-        .arg(
-            Arg::new(OPT_SKIP_PREFIX)
-                .short('P')
-                .long("skip-prefix")
-                .help(
-                    "Do not reformat lines \
-                    beginning with PSKIP. Unless -X is specified, leading whitespace \
-                    will be ignored when matching PSKIP",
-                )
-                .value_name("PSKIP"),
-        )
-        .arg(
-            Arg::new(OPT_EXACT_PREFIX)
-                .short('x')
-                .long("exact-prefix")
-                .help(
-                    "PREFIX must match at the \
-                    beginning of the line with no preceding whitespace.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_EXACT_SKIP_PREFIX)
-                .short('X')
-                .long("exact-skip-prefix")
-                .help(
-                    "PSKIP must match at the \
-                    beginning of the line with no preceding whitespace.",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_WIDTH)
-                .short('w')
-                .long("width")
-                .help("Fill output lines up to a maximum of WIDTH columns, default 79.")
-                .value_name("WIDTH"),
-        )
-        .arg(
-            Arg::new(OPT_GOAL)
-                .short('g')
-                .long("goal")
-                .help("Goal width, default ~0.94*WIDTH. Must be less than WIDTH.")
-                .value_name("GOAL"),
-        )
-        .arg(Arg::new(OPT_QUICK).short('q').long("quick").help(
-            "Break lines more quickly at the \
-            expense of a potentially more ragged appearance.",
-        ))
-        .arg(
-            Arg::new(OPT_TAB_WIDTH)
-                .short('T')
-                .long("tab-width")
-                .help(
-                    "Treat tabs as TABWIDTH spaces for \
-                    determining line length, default 8. Note that this is used only for \
-                    calculating line lengths; tabs are preserved in the output.",
-                )
-                .value_name("TABWIDTH"),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_fmt/linebreak.rs.html b/src/uu_fmt/linebreak.rs.html deleted file mode 100644 index 28728997d..000000000 --- a/src/uu_fmt/linebreak.rs.html +++ /dev/null @@ -1,1046 +0,0 @@ -linebreak.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-
//  * This file is part of `fmt` from the uutils coreutils package.
-//  *
-//  * (c) kwantam <kwantam@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) INFTY MULT accum breakwords linebreak linebreaking linebreaks linelen maxlength minlength nchars ostream overlen parasplit plass posn powf punct signum slen sstart tabwidth tlen underlen winfo wlen wordlen
-
-use std::cmp;
-use std::i64;
-use std::io::{BufWriter, Stdout, Write};
-use std::mem;
-
-use crate::parasplit::{ParaWords, Paragraph, WordInfo};
-use crate::FmtOptions;
-
-struct BreakArgs<'a> {
-    opts: &'a FmtOptions,
-    init_len: usize,
-    indent_str: &'a str,
-    indent_len: usize,
-    uniform: bool,
-    ostream: &'a mut BufWriter<Stdout>,
-}
-
-impl<'a> BreakArgs<'a> {
-    fn compute_width<'b>(&self, winfo: &WordInfo<'b>, posn: usize, fresh: bool) -> usize {
-        if fresh {
-            0
-        } else {
-            let post = winfo.after_tab;
-            match winfo.before_tab {
-                None => post,
-                Some(pre) => {
-                    post + ((pre + posn) / self.opts.tabwidth + 1) * self.opts.tabwidth - posn
-                }
-            }
-        }
-    }
-}
-
-pub fn break_lines(
-    para: &Paragraph,
-    opts: &FmtOptions,
-    ostream: &mut BufWriter<Stdout>,
-) -> std::io::Result<()> {
-    // indent
-    let p_indent = &para.indent_str[..];
-    let p_indent_len = para.indent_len;
-
-    // words
-    let p_words = ParaWords::new(opts, para);
-    let mut p_words_words = p_words.words();
-
-    // the first word will *always* appear on the first line
-    // make sure of this here
-    let (w, w_len) = match p_words_words.next() {
-        Some(winfo) => (winfo.word, winfo.word_nchars),
-        None => {
-            return ostream.write_all(b"\n");
-        }
-    };
-    // print the init, if it exists, and get its length
-    let p_init_len = w_len
-        + if opts.crown || opts.tagged {
-            // handle "init" portion
-            ostream.write_all(para.init_str.as_bytes())?;
-            para.init_len
-        } else if !para.mail_header {
-            // for non-(crown, tagged) that's the same as a normal indent
-            ostream.write_all(p_indent.as_bytes())?;
-            p_indent_len
-        } else {
-            // except that mail headers get no indent at all
-            0
-        };
-    // write first word after writing init
-    ostream.write_all(w.as_bytes())?;
-
-    // does this paragraph require uniform spacing?
-    let uniform = para.mail_header || opts.uniform;
-
-    let mut break_args = BreakArgs {
-        opts,
-        init_len: p_init_len,
-        indent_str: p_indent,
-        indent_len: p_indent_len,
-        uniform,
-        ostream,
-    };
-
-    if opts.quick || para.mail_header {
-        break_simple(p_words_words, &mut break_args)
-    } else {
-        break_knuth_plass(p_words_words, &mut break_args)
-    }
-}
-
-// break_simple implements a "greedy" breaking algorithm: print words until
-// maxlength would be exceeded, then print a linebreak and indent and continue.
-fn break_simple<'a, T: Iterator<Item = &'a WordInfo<'a>>>(
-    mut iter: T,
-    args: &mut BreakArgs<'a>,
-) -> std::io::Result<()> {
-    iter.try_fold((args.init_len, false), |l, winfo| {
-        accum_words_simple(args, l, winfo)
-    })?;
-    args.ostream.write_all(b"\n")
-}
-
-fn accum_words_simple<'a>(
-    args: &mut BreakArgs<'a>,
-    (l, prev_punct): (usize, bool),
-    winfo: &'a WordInfo<'a>,
-) -> std::io::Result<(usize, bool)> {
-    // compute the length of this word, considering how tabs will expand at this position on the line
-    let wlen = winfo.word_nchars + args.compute_width(winfo, l, false);
-
-    let slen = compute_slen(
-        args.uniform,
-        winfo.new_line,
-        winfo.sentence_start,
-        prev_punct,
-    );
-
-    if l + wlen + slen > args.opts.width {
-        write_newline(args.indent_str, args.ostream)?;
-        write_with_spaces(&winfo.word[winfo.word_start..], 0, args.ostream)?;
-        Ok((args.indent_len + winfo.word_nchars, winfo.ends_punct))
-    } else {
-        write_with_spaces(winfo.word, slen, args.ostream)?;
-        Ok((l + wlen + slen, winfo.ends_punct))
-    }
-}
-
-// break_knuth_plass implements an "optimal" breaking algorithm in the style of
-//    Knuth, D.E., and Plass, M.F. "Breaking Paragraphs into Lines." in Software,
-//    Practice and Experience. Vol. 11, No. 11, November 1981.
-//    http://onlinelibrary.wiley.com/doi/10.1002/spe.4380111102/pdf
-fn break_knuth_plass<'a, T: Clone + Iterator<Item = &'a WordInfo<'a>>>(
-    mut iter: T,
-    args: &mut BreakArgs<'a>,
-) -> std::io::Result<()> {
-    // run the algorithm to get the breakpoints
-    let breakpoints = find_kp_breakpoints(iter.clone(), args);
-
-    // iterate through the breakpoints (note that breakpoints is in reverse break order, so we .rev() it
-    let result: std::io::Result<(bool, bool)> = breakpoints.iter().rev().try_fold(
-        (false, false),
-        |(mut prev_punct, mut fresh), &(next_break, break_before)| {
-            if fresh {
-                write_newline(args.indent_str, args.ostream)?;
-            }
-            // at each breakpoint, keep emitting words until we find the word matching this breakpoint
-            for winfo in &mut iter {
-                let (slen, word) = slice_if_fresh(
-                    fresh,
-                    winfo.word,
-                    winfo.word_start,
-                    args.uniform,
-                    winfo.new_line,
-                    winfo.sentence_start,
-                    prev_punct,
-                );
-                fresh = false;
-                prev_punct = winfo.ends_punct;
-
-                // We find identical breakpoints here by comparing addresses of the references.
-                // This is OK because the backing vector is not mutating once we are linebreaking.
-                let winfo_ptr = winfo as *const _;
-                let next_break_ptr = next_break as *const _;
-                if winfo_ptr == next_break_ptr {
-                    // OK, we found the matching word
-                    if break_before {
-                        write_newline(args.indent_str, args.ostream)?;
-                        write_with_spaces(&winfo.word[winfo.word_start..], 0, args.ostream)?;
-                    } else {
-                        // breaking after this word, so that means "fresh" is true for the next iteration
-                        write_with_spaces(word, slen, args.ostream)?;
-                        fresh = true;
-                    }
-                    break;
-                } else {
-                    write_with_spaces(word, slen, args.ostream)?;
-                }
-            }
-            Ok((prev_punct, fresh))
-        },
-    );
-    let (mut prev_punct, mut fresh) = result?;
-
-    // after the last linebreak, write out the rest of the final line.
-    for winfo in iter {
-        if fresh {
-            write_newline(args.indent_str, args.ostream)?;
-        }
-        let (slen, word) = slice_if_fresh(
-            fresh,
-            winfo.word,
-            winfo.word_start,
-            args.uniform,
-            winfo.new_line,
-            winfo.sentence_start,
-            prev_punct,
-        );
-        prev_punct = winfo.ends_punct;
-        fresh = false;
-        write_with_spaces(word, slen, args.ostream)?;
-    }
-    args.ostream.write_all(b"\n")
-}
-
-struct LineBreak<'a> {
-    prev: usize,
-    linebreak: Option<&'a WordInfo<'a>>,
-    break_before: bool,
-    demerits: i64,
-    prev_rat: f32,
-    length: usize,
-    fresh: bool,
-}
-
-fn find_kp_breakpoints<'a, T: Iterator<Item = &'a WordInfo<'a>>>(
-    iter: T,
-    args: &BreakArgs<'a>,
-) -> Vec<(&'a WordInfo<'a>, bool)> {
-    let mut iter = iter.peekable();
-    // set up the initial null linebreak
-    let mut linebreaks = vec![LineBreak {
-        prev: 0,
-        linebreak: None,
-        break_before: false,
-        demerits: 0,
-        prev_rat: 0.0f32,
-        length: args.init_len,
-        fresh: false,
-    }];
-    // this vec holds the current active linebreaks; next_ holds the breaks that will be active for
-    // the next word
-    let active_breaks = &mut vec![0];
-    let next_active_breaks = &mut vec![];
-
-    let stretch = (args.opts.width - args.opts.goal) as isize;
-    let minlength = args.opts.goal - stretch as usize;
-    let mut new_linebreaks = vec![];
-    let mut is_sentence_start = false;
-    let mut least_demerits = 0;
-    loop {
-        let w = match iter.next() {
-            None => break,
-            Some(w) => w,
-        };
-
-        // if this is the last word, we don't add additional demerits for this break
-        let (is_last_word, is_sentence_end) = match iter.peek() {
-            None => (true, true),
-            Some(&&WordInfo {
-                sentence_start: st,
-                new_line: nl,
-                ..
-            }) => (false, st || (nl && w.ends_punct)),
-        };
-
-        // should we be adding extra space at the beginning of the next sentence?
-        let slen = compute_slen(args.uniform, w.new_line, is_sentence_start, false);
-
-        let mut ld_new = i64::MAX;
-        let mut ld_next = i64::MAX;
-        let mut ld_idx = 0;
-        new_linebreaks.clear();
-        next_active_breaks.clear();
-        // go through each active break, extending it and possibly adding a new active
-        // break if we are above the minimum required length
-        for &i in active_breaks.iter() {
-            let active = &mut linebreaks[i];
-            // normalize demerits to avoid overflow, and record if this is the least
-            active.demerits -= least_demerits;
-            if active.demerits < ld_next {
-                ld_next = active.demerits;
-                ld_idx = i;
-            }
-
-            // get the new length
-            let tlen = w.word_nchars
-                + args.compute_width(w, active.length, active.fresh)
-                + slen
-                + active.length;
-
-            // if tlen is longer than args.opts.width, we drop this break from the active list
-            // otherwise, we extend the break, and possibly add a new break at this point
-            if tlen <= args.opts.width {
-                // this break will still be active next time
-                next_active_breaks.push(i);
-                // we can put this word on this line
-                active.fresh = false;
-                active.length = tlen;
-
-                // if we're above the minlength, we can also consider breaking here
-                if tlen >= minlength {
-                    let (new_demerits, new_ratio) = if is_last_word {
-                        // there is no penalty for the final line's length
-                        (0, 0.0)
-                    } else {
-                        compute_demerits(
-                            args.opts.goal as isize - tlen as isize,
-                            stretch,
-                            w.word_nchars as isize,
-                            active.prev_rat,
-                        )
-                    };
-
-                    // do not even consider adding a line that has too many demerits
-                    // also, try to detect overflow by checking signum
-                    let total_demerits = new_demerits + active.demerits;
-                    if new_demerits < BAD_INFTY_SQ
-                        && total_demerits < ld_new
-                        && active.demerits.signum() <= new_demerits.signum()
-                    {
-                        ld_new = total_demerits;
-                        new_linebreaks.push(LineBreak {
-                            prev: i,
-                            linebreak: Some(w),
-                            break_before: false,
-                            demerits: total_demerits,
-                            prev_rat: new_ratio,
-                            length: args.indent_len,
-                            fresh: true,
-                        });
-                    }
-                }
-            }
-        }
-
-        // if we generated any new linebreaks, add the last one to the list
-        // the last one is always the best because we don't add to new_linebreaks unless
-        // it's better than the best one so far
-        match new_linebreaks.pop() {
-            None => (),
-            Some(lb) => {
-                next_active_breaks.push(linebreaks.len());
-                linebreaks.push(lb);
-            }
-        }
-
-        if next_active_breaks.is_empty() {
-            // every potential linebreak is too long! choose the linebreak with the least demerits, ld_idx
-            let new_break =
-                restart_active_breaks(args, &linebreaks[ld_idx], ld_idx, w, slen, minlength);
-            next_active_breaks.push(linebreaks.len());
-            linebreaks.push(new_break);
-            least_demerits = 0;
-        } else {
-            // next time around, normalize out the demerits fields
-            // on active linebreaks to make overflow less likely
-            least_demerits = cmp::max(ld_next, 0);
-        }
-        // swap in new list of active breaks
-        mem::swap(active_breaks, next_active_breaks);
-        // If this was the last word in a sentence, the next one must be the first in the next.
-        is_sentence_start = is_sentence_end;
-    }
-
-    // return the best path
-    build_best_path(&linebreaks, active_breaks)
-}
-
-fn build_best_path<'a>(paths: &[LineBreak<'a>], active: &[usize]) -> Vec<(&'a WordInfo<'a>, bool)> {
-    let mut breakwords = vec![];
-    // of the active paths, we select the one with the fewest demerits
-    let mut best_idx = match active.iter().min_by_key(|&&a| paths[a].demerits) {
-        None => crash!(
-            1,
-            "Failed to find a k-p linebreak solution. This should never happen."
-        ),
-        Some(&s) => s,
-    };
-
-    // now, chase the pointers back through the break list, recording
-    // the words at which we should break
-    loop {
-        let next_best = &paths[best_idx];
-        match next_best.linebreak {
-            None => return breakwords,
-            Some(prev) => {
-                breakwords.push((prev, next_best.break_before));
-                best_idx = next_best.prev
-            }
-        }
-    }
-}
-
-// "infinite" badness is more like (1+BAD_INFTY)^2 because of how demerits are computed
-const BAD_INFTY: i64 = 10_000_000;
-const BAD_INFTY_SQ: i64 = BAD_INFTY * BAD_INFTY;
-// badness = BAD_MULT * abs(r) ^ 3
-const BAD_MULT: f32 = 100.0;
-// DR_MULT is multiplier for delta-R between lines
-const DR_MULT: f32 = 600.0;
-// DL_MULT is penalty multiplier for short words at end of line
-const DL_MULT: f32 = 300.0;
-
-fn compute_demerits(delta_len: isize, stretch: isize, wlen: isize, prev_rat: f32) -> (i64, f32) {
-    // how much stretch are we using?
-    let ratio = if delta_len == 0 {
-        0.0f32
-    } else {
-        delta_len as f32 / stretch as f32
-    };
-
-    // compute badness given the stretch ratio
-    let bad_linelen = if ratio.abs() > 1.0f32 {
-        BAD_INFTY
-    } else {
-        (BAD_MULT * ratio.powf(3f32).abs()) as i64
-    };
-
-    // we penalize lines ending in really short words
-    let bad_wordlen = if wlen >= stretch {
-        0
-    } else {
-        (DL_MULT
-            * ((stretch - wlen) as f32 / (stretch - 1) as f32)
-                .powf(3f32)
-                .abs()) as i64
-    };
-
-    // we penalize lines that have very different ratios from previous lines
-    let bad_delta_r = (DR_MULT * (((ratio - prev_rat) / 2.0).powf(3f32)).abs()) as i64;
-
-    let demerits = i64::pow(1 + bad_linelen + bad_wordlen + bad_delta_r, 2);
-
-    (demerits, ratio)
-}
-
-fn restart_active_breaks<'a>(
-    args: &BreakArgs<'a>,
-    active: &LineBreak<'a>,
-    act_idx: usize,
-    w: &'a WordInfo<'a>,
-    slen: usize,
-    min: usize,
-) -> LineBreak<'a> {
-    let (break_before, line_length) = if active.fresh {
-        // never break before a word if that word would be the first on a line
-        (false, args.indent_len)
-    } else {
-        // choose the lesser evil: breaking too early, or breaking too late
-        let wlen = w.word_nchars + args.compute_width(w, active.length, active.fresh);
-        let underlen = (min - active.length) as isize;
-        let overlen = ((wlen + slen + active.length) - args.opts.width) as isize;
-        if overlen > underlen {
-            // break early, put this word on the next line
-            (true, args.indent_len + w.word_nchars)
-        } else {
-            (false, args.indent_len)
-        }
-    };
-
-    // restart the linebreak. This will be our only active path.
-    LineBreak {
-        prev: act_idx,
-        linebreak: Some(w),
-        break_before,
-        demerits: 0, // this is the only active break, so we can reset the demerit count
-        prev_rat: if break_before { 1.0 } else { -1.0 },
-        length: line_length,
-        fresh: !break_before,
-    }
-}
-
-// Number of spaces to add before a word, based on mode, newline, sentence start.
-fn compute_slen(uniform: bool, newline: bool, start: bool, punct: bool) -> usize {
-    if uniform || newline {
-        if start || (newline && punct) {
-            2
-        } else {
-            1
-        }
-    } else {
-        0
-    }
-}
-
-// If we're on a fresh line, slen=0 and we slice off leading whitespace.
-// Otherwise, compute slen and leave whitespace alone.
-fn slice_if_fresh(
-    fresh: bool,
-    word: &str,
-    start: usize,
-    uniform: bool,
-    newline: bool,
-    sstart: bool,
-    punct: bool,
-) -> (usize, &str) {
-    if fresh {
-        (0, &word[start..])
-    } else {
-        (compute_slen(uniform, newline, sstart, punct), word)
-    }
-}
-
-// Write a newline and add the indent.
-fn write_newline(indent: &str, ostream: &mut BufWriter<Stdout>) -> std::io::Result<()> {
-    ostream.write_all(b"\n")?;
-    ostream.write_all(indent.as_bytes())
-}
-
-// Write the word, along with slen spaces.
-fn write_with_spaces(
-    word: &str,
-    slen: usize,
-    ostream: &mut BufWriter<Stdout>,
-) -> std::io::Result<()> {
-    if slen == 2 {
-        ostream.write_all(b"  ")?;
-    } else if slen == 1 {
-        ostream.write_all(b" ")?;
-    }
-    ostream.write_all(word.as_bytes())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_fmt/parasplit.rs.html b/src/uu_fmt/parasplit.rs.html deleted file mode 100644 index 769fdad10..000000000 --- a/src/uu_fmt/parasplit.rs.html +++ /dev/null @@ -1,1258 +0,0 @@ -parasplit.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-
//  * This file is part of `fmt` from the uutils coreutils package.
-//  *
-//  * (c) kwantam <kwantam@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) INFTY MULT PSKIP accum aftertab beforetab breakwords fmt's formatline linebreak linebreaking linebreaks linelen maxlength minlength nchars noformat noformatline ostream overlen parasplit pfxind plass pmatch poffset posn powf prefixindent punct signum slen sstart tabwidth tlen underlen winfo wlen wordlen wordsplits xanti xprefix
-
-use std::io::{BufRead, Lines};
-use std::iter::Peekable;
-use std::slice::Iter;
-use unicode_width::UnicodeWidthChar;
-
-use crate::FileOrStdReader;
-use crate::FmtOptions;
-
-fn char_width(c: char) -> usize {
-    if (c as usize) < 0xA0 {
-        // if it is ASCII, call it exactly 1 wide (including control chars)
-        // calling control chars' widths 1 is consistent with OpenBSD fmt
-        1
-    } else {
-        // otherwise, get the unicode width
-        // note that we shouldn't actually get None here because only c < 0xA0
-        // can return None, but for safety and future-proofing we do it this way
-        UnicodeWidthChar::width(c).unwrap_or(1)
-    }
-}
-
-// lines with PSKIP, lacking PREFIX, or which are entirely blank are
-// NoFormatLines; otherwise, they are FormatLines
-#[derive(Debug)]
-pub enum Line {
-    FormatLine(FileLine),
-    NoFormatLine(String, bool),
-}
-
-impl Line {
-    // when we know that it's a FormatLine, as in the ParagraphStream iterator
-    fn get_formatline(self) -> FileLine {
-        match self {
-            Line::FormatLine(fl) => fl,
-            Line::NoFormatLine(..) => panic!("Found NoFormatLine when expecting FormatLine"),
-        }
-    }
-
-    // when we know that it's a NoFormatLine, as in the ParagraphStream iterator
-    fn get_noformatline(self) -> (String, bool) {
-        match self {
-            Line::NoFormatLine(s, b) => (s, b),
-            Line::FormatLine(..) => panic!("Found FormatLine when expecting NoFormatLine"),
-        }
-    }
-}
-
-// each line's prefix has to be considered to know whether to merge it with
-// the next line or not
-#[derive(Debug)]
-pub struct FileLine {
-    line: String,
-    indent_end: usize, // the end of the indent, always the start of the text
-    pfxind_end: usize, // the end of the PREFIX's indent, that is, the spaces before the prefix
-    indent_len: usize, // display length of indent taking into account tabs
-    prefix_len: usize, // PREFIX indent length taking into account tabs
-}
-
-// iterator that produces a stream of Lines from a file
-pub struct FileLines<'a> {
-    opts: &'a FmtOptions,
-    lines: Lines<&'a mut FileOrStdReader>,
-}
-
-impl<'a> FileLines<'a> {
-    fn new<'b>(opts: &'b FmtOptions, lines: Lines<&'b mut FileOrStdReader>) -> FileLines<'b> {
-        FileLines { opts, lines }
-    }
-
-    // returns true if this line should be formatted
-    fn match_prefix(&self, line: &str) -> (bool, usize) {
-        if !self.opts.use_prefix {
-            return (true, 0);
-        }
-
-        FileLines::match_prefix_generic(&self.opts.prefix[..], line, self.opts.xprefix)
-    }
-
-    // returns true if this line should be formatted
-    fn match_anti_prefix(&self, line: &str) -> bool {
-        if !self.opts.use_anti_prefix {
-            return true;
-        }
-
-        match FileLines::match_prefix_generic(
-            &self.opts.anti_prefix[..],
-            line,
-            self.opts.xanti_prefix,
-        ) {
-            (true, _) => false,
-            (_, _) => true,
-        }
-    }
-
-    fn match_prefix_generic(pfx: &str, line: &str, exact: bool) -> (bool, usize) {
-        if line.starts_with(pfx) {
-            return (true, 0);
-        }
-
-        if !exact {
-            // we do it this way rather than byte indexing to support unicode whitespace chars
-            for (i, char) in line.char_indices() {
-                if line[i..].starts_with(pfx) {
-                    return (true, i);
-                } else if !char.is_whitespace() {
-                    break;
-                }
-            }
-        }
-
-        (false, 0)
-    }
-
-    fn compute_indent(&self, string: &str, prefix_end: usize) -> (usize, usize, usize) {
-        let mut prefix_len = 0;
-        let mut indent_len = 0;
-        let mut indent_end = 0;
-        for (os, c) in string.char_indices() {
-            if os == prefix_end {
-                // we found the end of the prefix, so this is the printed length of the prefix here
-                prefix_len = indent_len;
-            }
-
-            if (os >= prefix_end) && !c.is_whitespace() {
-                // found first non-whitespace after prefix, this is indent_end
-                indent_end = os;
-                break;
-            } else if c == '\t' {
-                // compute tab length
-                indent_len = (indent_len / self.opts.tabwidth + 1) * self.opts.tabwidth;
-            } else {
-                // non-tab character
-                indent_len += char_width(c);
-            }
-        }
-        (indent_end, prefix_len, indent_len)
-    }
-}
-
-impl<'a> Iterator for FileLines<'a> {
-    type Item = Line;
-
-    fn next(&mut self) -> Option<Line> {
-        let n = match self.lines.next() {
-            Some(t) => match t {
-                Ok(tt) => tt,
-                Err(_) => return None,
-            },
-            None => return None,
-        };
-
-        // if this line is entirely whitespace,
-        // emit a blank line
-        // Err(true) indicates that this was a linebreak,
-        // which is important to know when detecting mail headers
-        if n.chars().all(char::is_whitespace) {
-            return Some(Line::NoFormatLine("".to_owned(), true));
-        }
-
-        let (pmatch, poffset) = self.match_prefix(&n[..]);
-
-        // if this line does not match the prefix,
-        // emit the line unprocessed and iterate again
-        if !pmatch {
-            return Some(Line::NoFormatLine(n, false));
-        }
-
-        // if the line matches the prefix, but is blank after,
-        // don't allow lines to be combined through it (that is,
-        // treat it like a blank line, except that since it's
-        // not truly blank we will not allow mail headers on the
-        // following line)
-        if pmatch
-            && n[poffset + self.opts.prefix.len()..]
-                .chars()
-                .all(char::is_whitespace)
-        {
-            return Some(Line::NoFormatLine(n, false));
-        }
-
-        // skip if this line matches the anti_prefix
-        // (NOTE definition of match_anti_prefix is TRUE if we should process)
-        if !self.match_anti_prefix(&n[..]) {
-            return Some(Line::NoFormatLine(n, false));
-        }
-
-        // figure out the indent, prefix, and prefixindent ending points
-        let prefix_end = poffset + self.opts.prefix.len();
-        let (indent_end, prefix_len, indent_len) = self.compute_indent(&n[..], prefix_end);
-
-        Some(Line::FormatLine(FileLine {
-            line: n,
-            indent_end,
-            pfxind_end: poffset,
-            indent_len,
-            prefix_len,
-        }))
-    }
-}
-
-// a paragraph : a collection of FileLines that are to be formatted
-// plus info about the paragraph's indentation
-// (but we only retain the String from the FileLine; the other info
-// is only there to help us in deciding how to merge lines into Paragraphs
-#[derive(Debug)]
-pub struct Paragraph {
-    lines: Vec<String>,     // the lines of the file
-    pub init_str: String,   // string representing the init, that is, the first line's indent
-    pub init_len: usize,    // printable length of the init string considering TABWIDTH
-    init_end: usize,        // byte location of end of init in first line String
-    pub indent_str: String, // string representing indent
-    pub indent_len: usize,  // length of above
-    indent_end: usize, // byte location of end of indent (in crown and tagged mode, only applies to 2nd line and onward)
-    pub mail_header: bool, // we need to know if this is a mail header because we do word splitting differently in that case
-}
-
-// an iterator producing a stream of paragraphs from a stream of lines
-// given a set of options.
-pub struct ParagraphStream<'a> {
-    lines: Peekable<FileLines<'a>>,
-    next_mail: bool,
-    opts: &'a FmtOptions,
-}
-
-impl<'a> ParagraphStream<'a> {
-    pub fn new<'b>(opts: &'b FmtOptions, reader: &'b mut FileOrStdReader) -> ParagraphStream<'b> {
-        let lines = FileLines::new(opts, reader.lines()).peekable();
-        // at the beginning of the file, we might find mail headers
-        ParagraphStream {
-            lines,
-            next_mail: true,
-            opts,
-        }
-    }
-
-    // detect RFC822 mail header
-    fn is_mail_header(line: &FileLine) -> bool {
-        // a mail header begins with either "From " (envelope sender line)
-        // or with a sequence of printable ASCII chars (33 to 126, inclusive,
-        // except colon) followed by a colon.
-        if line.indent_end > 0 {
-            false
-        } else {
-            let l_slice = &line.line[..];
-            if l_slice.starts_with("From ") {
-                true
-            } else {
-                let colon_posn = match l_slice.find(':') {
-                    Some(n) => n,
-                    None => return false,
-                };
-
-                // header field must be nonzero length
-                if colon_posn == 0 {
-                    return false;
-                }
-
-                l_slice[..colon_posn]
-                    .chars()
-                    .all(|x| !matches!(x as usize, y if !(33..=126).contains(&y)))
-            }
-        }
-    }
-}
-
-impl<'a> Iterator for ParagraphStream<'a> {
-    type Item = Result<Paragraph, String>;
-
-    fn next(&mut self) -> Option<Result<Paragraph, String>> {
-        // return a NoFormatLine in an Err; it should immediately be output
-        let noformat = match self.lines.peek() {
-            None => return None,
-            Some(l) => match *l {
-                Line::FormatLine(_) => false,
-                Line::NoFormatLine(_, _) => true,
-            },
-        };
-
-        // found a NoFormatLine, immediately dump it out
-        if noformat {
-            let (s, nm) = self.lines.next().unwrap().get_noformatline();
-            self.next_mail = nm;
-            return Some(Err(s));
-        }
-
-        // found a FormatLine, now build a paragraph
-        let mut init_str = String::new();
-        let mut init_end = 0;
-        let mut init_len = 0;
-        let mut indent_str = String::new();
-        let mut indent_end = 0;
-        let mut indent_len = 0;
-        let mut prefix_len = 0;
-        let mut pfxind_end = 0;
-        let mut p_lines = Vec::new();
-
-        let mut in_mail = false;
-        let mut second_done = false; // for when we use crown or tagged mode
-        loop {
-            {
-                // peek ahead
-                // need to explicitly force fl out of scope before we can call self.lines.next()
-                let fl = match self.lines.peek() {
-                    None => break,
-                    Some(l) => match *l {
-                        Line::FormatLine(ref x) => x,
-                        Line::NoFormatLine(..) => break,
-                    },
-                };
-
-                if p_lines.is_empty() {
-                    // first time through the loop, get things set up
-                    // detect mail header
-                    if self.opts.mail && self.next_mail && ParagraphStream::is_mail_header(fl) {
-                        in_mail = true;
-                        // there can't be any indent or pfxind because otherwise is_mail_header
-                        // would fail since there cannot be any whitespace before the colon in a
-                        // valid header field
-                        indent_str.push_str("  ");
-                        indent_len = 2;
-                    } else {
-                        if self.opts.crown || self.opts.tagged {
-                            init_str.push_str(&fl.line[..fl.indent_end]);
-                            init_len = fl.indent_len;
-                            init_end = fl.indent_end;
-                        } else {
-                            second_done = true;
-                        }
-
-                        // these will be overwritten in the 2nd line of crown or tagged mode, but
-                        // we are not guaranteed to get to the 2nd line, e.g., if the next line
-                        // is a NoFormatLine or None. Thus, we set sane defaults the 1st time around
-                        indent_str.push_str(&fl.line[..fl.indent_end]);
-                        indent_len = fl.indent_len;
-                        indent_end = fl.indent_end;
-
-                        // save these to check for matching lines
-                        prefix_len = fl.prefix_len;
-                        pfxind_end = fl.pfxind_end;
-
-                        // in tagged mode, add 4 spaces of additional indenting by default
-                        // (gnu fmt's behavior is different: it seems to find the closest column to
-                        // indent_end that is divisible by 3. But honestly that behavior seems
-                        // pretty arbitrary.
-                        // Perhaps a better default would be 1 TABWIDTH? But ugh that's so big.
-                        if self.opts.tagged {
-                            indent_str.push_str("    ");
-                            indent_len += 4;
-                        }
-                    }
-                } else if in_mail {
-                    // lines following mail headers must begin with spaces
-                    if fl.indent_end == 0 || (self.opts.use_prefix && fl.pfxind_end == 0) {
-                        break; // this line does not begin with spaces
-                    }
-                } else if !second_done {
-                    // now we have enough info to handle crown margin and tagged mode
-
-                    // in both crown and tagged modes we require that prefix_len is the same
-                    if prefix_len != fl.prefix_len || pfxind_end != fl.pfxind_end {
-                        break;
-                    }
-
-                    // in tagged mode, indent has to be *different* on following lines
-                    if self.opts.tagged
-                        && indent_len - 4 == fl.indent_len
-                        && indent_end == fl.indent_end
-                    {
-                        break;
-                    }
-
-                    // this is part of the same paragraph, get the indent info from this line
-                    indent_str.clear();
-                    indent_str.push_str(&fl.line[..fl.indent_end]);
-                    indent_len = fl.indent_len;
-                    indent_end = fl.indent_end;
-
-                    second_done = true;
-                } else {
-                    // detect mismatch
-                    if indent_end != fl.indent_end
-                        || pfxind_end != fl.pfxind_end
-                        || indent_len != fl.indent_len
-                        || prefix_len != fl.prefix_len
-                    {
-                        break;
-                    }
-                }
-            }
-
-            p_lines.push(self.lines.next().unwrap().get_formatline().line);
-
-            // when we're in split-only mode, we never join lines, so stop here
-            if self.opts.split_only {
-                break;
-            }
-        }
-
-        // if this was a mail header, then the next line can be detected as one. Otherwise, it cannot.
-        // NOTE next_mail is true at ParagraphStream instantiation, and is set to true after a blank
-        // NoFormatLine.
-        self.next_mail = in_mail;
-
-        Some(Ok(Paragraph {
-            lines: p_lines,
-            init_str,
-            init_len,
-            init_end,
-            indent_str,
-            indent_len,
-            indent_end,
-            mail_header: in_mail,
-        }))
-    }
-}
-
-pub struct ParaWords<'a> {
-    opts: &'a FmtOptions,
-    para: &'a Paragraph,
-    words: Vec<WordInfo<'a>>,
-}
-
-impl<'a> ParaWords<'a> {
-    pub fn new<'b>(opts: &'b FmtOptions, para: &'b Paragraph) -> ParaWords<'b> {
-        let mut pw = ParaWords {
-            opts,
-            para,
-            words: Vec::new(),
-        };
-        pw.create_words();
-        pw
-    }
-
-    fn create_words(&mut self) {
-        if self.para.mail_header {
-            // no extra spacing for mail headers; always exactly 1 space
-            // safe to trim_start on every line of a mail header, since the
-            // first line is guaranteed not to have any spaces
-            self.words.extend(
-                self.para
-                    .lines
-                    .iter()
-                    .flat_map(|x| x.split_whitespace())
-                    .map(|x| WordInfo {
-                        word: x,
-                        word_start: 0,
-                        word_nchars: x.len(), // OK for mail headers; only ASCII allowed (unicode is escaped)
-                        before_tab: None,
-                        after_tab: 0,
-                        sentence_start: false,
-                        ends_punct: false,
-                        new_line: false,
-                    }),
-            );
-        } else {
-            // first line
-            self.words.extend(if self.opts.crown || self.opts.tagged {
-                // crown and tagged mode has the "init" in the first line, so slice from there
-                WordSplit::new(self.opts, &self.para.lines[0][self.para.init_end..])
-            } else {
-                // otherwise we slice from the indent
-                WordSplit::new(self.opts, &self.para.lines[0][self.para.indent_end..])
-            });
-
-            if self.para.lines.len() > 1 {
-                let indent_end = self.para.indent_end;
-                let opts = self.opts;
-                self.words.extend(
-                    self.para
-                        .lines
-                        .iter()
-                        .skip(1)
-                        .flat_map(|x| WordSplit::new(opts, &x[indent_end..])),
-                );
-            }
-        }
-    }
-
-    pub fn words(&'a self) -> Iter<'a, WordInfo<'a>> {
-        self.words.iter()
-    }
-}
-
-struct WordSplit<'a> {
-    opts: &'a FmtOptions,
-    string: &'a str,
-    length: usize,
-    position: usize,
-    prev_punct: bool,
-}
-
-impl<'a> WordSplit<'a> {
-    fn analyze_tabs(&self, string: &str) -> (Option<usize>, usize, Option<usize>) {
-        // given a string, determine (length before tab) and (printed length after first tab)
-        // if there are no tabs, beforetab = -1 and aftertab is the printed length
-        let mut beforetab = None;
-        let mut aftertab = 0;
-        let mut word_start = None;
-        for (os, c) in string.char_indices() {
-            if !c.is_whitespace() {
-                word_start = Some(os);
-                break;
-            } else if c == '\t' {
-                if beforetab == None {
-                    beforetab = Some(aftertab);
-                    aftertab = 0;
-                } else {
-                    aftertab = (aftertab / self.opts.tabwidth + 1) * self.opts.tabwidth;
-                }
-            } else {
-                aftertab += 1;
-            }
-        }
-        (beforetab, aftertab, word_start)
-    }
-}
-
-impl<'a> WordSplit<'a> {
-    fn new<'b>(opts: &'b FmtOptions, string: &'b str) -> WordSplit<'b> {
-        // wordsplits *must* start at a non-whitespace character
-        let trim_string = string.trim_start();
-        WordSplit {
-            opts,
-            string: trim_string,
-            length: string.len(),
-            position: 0,
-            prev_punct: false,
-        }
-    }
-
-    fn is_punctuation(c: char) -> bool {
-        matches!(c, '!' | '.' | '?')
-    }
-}
-
-pub struct WordInfo<'a> {
-    pub word: &'a str,
-    pub word_start: usize,
-    pub word_nchars: usize,
-    pub before_tab: Option<usize>,
-    pub after_tab: usize,
-    pub sentence_start: bool,
-    pub ends_punct: bool,
-    pub new_line: bool,
-}
-
-// returns (&str, is_start_of_sentence)
-impl<'a> Iterator for WordSplit<'a> {
-    type Item = WordInfo<'a>;
-
-    fn next(&mut self) -> Option<WordInfo<'a>> {
-        if self.position >= self.length {
-            return None;
-        }
-
-        let old_position = self.position;
-        let new_line = old_position == 0;
-
-        // find the start of the next word, and record if we find a tab character
-        let (before_tab, after_tab, word_start) =
-            match self.analyze_tabs(&self.string[old_position..]) {
-                (b, a, Some(s)) => (b, a, s + old_position),
-                (_, _, None) => {
-                    self.position = self.length;
-                    return None;
-                }
-            };
-
-        // find the beginning of the next whitespace
-        // note that this preserves the invariant that self.position
-        // points to whitespace character OR end of string
-        let mut word_nchars = 0;
-        self.position = match self.string[word_start..].find(|x: char| {
-            if !x.is_whitespace() {
-                word_nchars += char_width(x);
-                false
-            } else {
-                true
-            }
-        }) {
-            None => self.length,
-            Some(s) => s + word_start,
-        };
-
-        let word_start_relative = word_start - old_position;
-        // if the previous sentence was punctuation and this sentence has >2 whitespace or one tab, is a new sentence.
-        let is_start_of_sentence =
-            self.prev_punct && (before_tab.is_some() || word_start_relative > 1);
-
-        // now record whether this word ends in punctuation
-        self.prev_punct = match self.string[..self.position].chars().rev().next() {
-            Some(ch) => WordSplit::is_punctuation(ch),
-            _ => panic!("fatal: expected word not to be empty"),
-        };
-
-        let (word, word_start_relative, before_tab, after_tab) = if self.opts.uniform {
-            (&self.string[word_start..self.position], 0, None, 0)
-        } else {
-            (
-                &self.string[old_position..self.position],
-                word_start_relative,
-                before_tab,
-                after_tab,
-            )
-        };
-
-        Some(WordInfo {
-            word,
-            word_start: word_start_relative,
-            word_nchars,
-            before_tab,
-            after_tab,
-            sentence_start: is_start_of_sentence,
-            ends_punct: self.prev_punct,
-            new_line,
-        })
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_fold/fold.rs.html b/src/uu_fold/fold.rs.html deleted file mode 100644 index 3da1096e0..000000000 --- a/src/uu_fold/fold.rs.html +++ /dev/null @@ -1,606 +0,0 @@ -fold.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDOs) ncount routput
-
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{stdin, BufRead, BufReader, Read};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-const TAB_WIDTH: usize = 8;
-
-static NAME: &str = "fold";
-static SYNTAX: &str = "[OPTION]... [FILE]...";
-static SUMMARY: &str = "Writes each file (or standard input if no files are given)
- to standard output whilst breaking long lines";
-
-mod options {
-    pub const BYTES: &str = "bytes";
-    pub const SPACES: &str = "spaces";
-    pub const WIDTH: &str = "width";
-    pub const FILE: &str = "file";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let (args, obs_width) = handle_obsolete(&args[..]);
-    let matches = uu_app().get_matches_from(args);
-
-    let bytes = matches.is_present(options::BYTES);
-    let spaces = matches.is_present(options::SPACES);
-    let poss_width = match matches.value_of(options::WIDTH) {
-        Some(v) => Some(v.to_owned()),
-        None => obs_width,
-    };
-
-    let width = match poss_width {
-        Some(inp_width) => inp_width.parse::<usize>().map_err(|e| {
-            USimpleError::new(
-                1,
-                format!("illegal width value ({}): {}", inp_width.quote(), e),
-            )
-        })?,
-        None => 80,
-    };
-
-    let files = match matches.values_of(options::FILE) {
-        Some(v) => v.map(|v| v.to_owned()).collect(),
-        None => vec!["-".to_owned()],
-    };
-
-    fold(files, bytes, spaces, width)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(SYNTAX)
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::BYTES)
-                .long(options::BYTES)
-                .short('b')
-                .help(
-                    "count using bytes rather than columns (meaning control characters \
-                     such as newline are not treated specially)",
-                )
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::SPACES)
-                .long(options::SPACES)
-                .short('s')
-                .help("break lines at word boundaries rather than a hard cut-off")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::WIDTH)
-                .long(options::WIDTH)
-                .short('w')
-                .help("set WIDTH as the maximum line width rather than 80")
-                .value_name("WIDTH")
-                .allow_hyphen_values(true)
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-fn handle_obsolete(args: &[String]) -> (Vec<String>, Option<String>) {
-    for (i, arg) in args.iter().enumerate() {
-        let slice = &arg;
-        if slice.starts_with('-') && slice.chars().nth(1).map_or(false, |c| c.is_digit(10)) {
-            let mut v = args.to_vec();
-            v.remove(i);
-            return (v, Some(slice[1..].to_owned()));
-        }
-    }
-    (args.to_vec(), None)
-}
-
-fn fold(filenames: Vec<String>, bytes: bool, spaces: bool, width: usize) -> UResult<()> {
-    for filename in &filenames {
-        let filename: &str = filename;
-        let mut stdin_buf;
-        let mut file_buf;
-        let buffer = BufReader::new(if filename == "-" {
-            stdin_buf = stdin();
-            &mut stdin_buf as &mut dyn Read
-        } else {
-            file_buf = File::open(Path::new(filename)).map_err_context(|| filename.to_string())?;
-            &mut file_buf as &mut dyn Read
-        });
-
-        if bytes {
-            fold_file_bytewise(buffer, spaces, width)?;
-        } else {
-            fold_file(buffer, spaces, width)?;
-        }
-    }
-    Ok(())
-}
-
-/// Fold `file` to fit `width` (number of columns), counting all characters as
-/// one column.
-///
-/// This function handles folding for the `-b`/`--bytes` option, counting
-/// tab, backspace, and carriage return as occupying one column, identically
-/// to all other characters in the stream.
-///
-///  If `spaces` is `true`, attempt to break lines at whitespace boundaries.
-fn fold_file_bytewise<T: Read>(mut file: BufReader<T>, spaces: bool, width: usize) -> UResult<()> {
-    let mut line = String::new();
-
-    loop {
-        if file
-            .read_line(&mut line)
-            .map_err_context(|| "failed to read line".to_string())?
-            == 0
-        {
-            break;
-        }
-
-        if line == "\n" {
-            println!();
-            line.truncate(0);
-            continue;
-        }
-
-        let len = line.len();
-        let mut i = 0;
-
-        while i < len {
-            let width = if len - i >= width { width } else { len - i };
-            let slice = {
-                let slice = &line[i..i + width];
-                if spaces && i + width < len {
-                    match slice.rfind(|c: char| c.is_whitespace() && c != '\r') {
-                        Some(m) => &slice[..=m],
-                        None => slice,
-                    }
-                } else {
-                    slice
-                }
-            };
-
-            // Don't duplicate trailing newlines: if the slice is "\n", the
-            // previous iteration folded just before the end of the line and
-            // has already printed this newline.
-            if slice == "\n" {
-                break;
-            }
-
-            i += slice.len();
-
-            let at_eol = i >= len;
-
-            if at_eol {
-                print!("{}", slice);
-            } else {
-                println!("{}", slice);
-            }
-        }
-
-        line.truncate(0);
-    }
-
-    Ok(())
-}
-
-/// Fold `file` to fit `width` (number of columns).
-///
-/// By default `fold` treats tab, backspace, and carriage return specially:
-/// tab characters count as 8 columns, backspace decreases the
-/// column count, and carriage return resets the column count to 0.
-///
-/// If `spaces` is `true`, attempt to break lines at whitespace boundaries.
-#[allow(unused_assignments)]
-fn fold_file<T: Read>(mut file: BufReader<T>, spaces: bool, width: usize) -> UResult<()> {
-    let mut line = String::new();
-    let mut output = String::new();
-    let mut col_count = 0;
-    let mut last_space = None;
-
-    /// Print the output line, resetting the column and character counts.
-    ///
-    /// If `spaces` is `true`, print the output line up to the last
-    /// encountered whitespace character (inclusive) and set the remaining
-    /// characters as the start of the next line.
-    macro_rules! emit_output {
-        () => {
-            let consume = match last_space {
-                Some(i) => i + 1,
-                None => output.len(),
-            };
-
-            println!("{}", &output[..consume]);
-            output.replace_range(..consume, "");
-
-            // we know there are no tabs left in output, so each char counts
-            // as 1 column
-            col_count = output.len();
-
-            last_space = None;
-        };
-    }
-
-    loop {
-        if file
-            .read_line(&mut line)
-            .map_err_context(|| "failed to read line".to_string())?
-            == 0
-        {
-            break;
-        }
-
-        for ch in line.chars() {
-            if ch == '\n' {
-                // make sure to _not_ split output at whitespace, since we
-                // know the entire output will fit
-                last_space = None;
-                emit_output!();
-                break;
-            }
-
-            if col_count >= width {
-                emit_output!();
-            }
-
-            match ch {
-                '\r' => col_count = 0,
-                '\t' => {
-                    let next_tab_stop = col_count + TAB_WIDTH - col_count % TAB_WIDTH;
-
-                    if next_tab_stop > width && !output.is_empty() {
-                        emit_output!();
-                    }
-
-                    col_count = next_tab_stop;
-                    last_space = if spaces { Some(output.len()) } else { None };
-                }
-                '\x08' => {
-                    if col_count > 0 {
-                        col_count -= 1;
-                    }
-                }
-                _ if spaces && ch.is_whitespace() => {
-                    last_space = Some(output.len());
-                    col_count += 1;
-                }
-                _ => col_count += 1,
-            };
-
-            output.push(ch);
-        }
-
-        if !output.is_empty() {
-            print!("{}", output);
-            output.truncate(0);
-        }
-
-        line.truncate(0);
-    }
-
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_groups/groups.rs.html b/src/uu_groups/groups.rs.html deleted file mode 100644 index 44521d002..000000000 --- a/src/uu_groups/groups.rs.html +++ /dev/null @@ -1,240 +0,0 @@ -groups.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-
// This file is part of the uutils coreutils package.
-//
-// (c) Alan Andrade <alan.andradec@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-//
-// ============================================================================
-// Test suite summary for GNU coreutils 8.32.162-4eda
-// ============================================================================
-// PASS: tests/misc/groups-dash.sh
-// PASS: tests/misc/groups-process-all.sh
-// PASS: tests/misc/groups-version.sh
-
-// spell-checker:ignore (ToDO) passwd
-
-#[macro_use]
-extern crate uucore;
-use std::error::Error;
-use std::fmt::Display;
-use uucore::{
-    display::Quotable,
-    entries::{get_groups_gnu, gid2grp, Locate, Passwd},
-    error::{UError, UResult},
-};
-
-use clap::{crate_version, App, Arg};
-
-mod options {
-    pub const USERS: &str = "USERNAME";
-}
-static ABOUT: &str = "Print group memberships for each USERNAME or, \
-                      if no USERNAME is specified, for\nthe current process \
-                      (which may differ if the groups data‐base has changed).";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [USERNAME]...", uucore::execution_phrase())
-}
-
-#[derive(Debug)]
-enum GroupsError {
-    GetGroupsFailed,
-    GroupNotFound(u32),
-    UserNotFound(String),
-}
-
-impl Error for GroupsError {}
-impl UError for GroupsError {}
-
-impl Display for GroupsError {
-    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
-        match self {
-            GroupsError::GetGroupsFailed => write!(f, "failed to fetch groups"),
-            GroupsError::GroupNotFound(gid) => write!(f, "cannot find name for group ID {}", gid),
-            GroupsError::UserNotFound(user) => write!(f, "{}: no such user", user.quote()),
-        }
-    }
-}
-
-fn infallible_gid2grp(gid: &u32) -> String {
-    match gid2grp(*gid) {
-        Ok(grp) => grp,
-        Err(_) => {
-            // The `show!()` macro sets the global exit code for the program.
-            show!(GroupsError::GroupNotFound(*gid));
-            gid.to_string()
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let users: Vec<String> = matches
-        .values_of(options::USERS)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    if users.is_empty() {
-        let gids = match get_groups_gnu(None) {
-            Ok(v) => v,
-            Err(_) => return Err(GroupsError::GetGroupsFailed.into()),
-        };
-        let groups: Vec<String> = gids.iter().map(infallible_gid2grp).collect();
-        println!("{}", groups.join(" "));
-        return Ok(());
-    }
-
-    for user in users {
-        match Passwd::locate(user.as_str()) {
-            Ok(p) => {
-                let groups: Vec<String> = p.belongs_to().iter().map(infallible_gid2grp).collect();
-                println!("{} : {}", user, groups.join(" "));
-            }
-            Err(_) => {
-                // The `show!()` macro sets the global exit code for the program.
-                show!(GroupsError::UserNotFound(user));
-            }
-        }
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::USERS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .value_name(options::USERS),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_hashsum/digest.rs.html b/src/uu_hashsum/digest.rs.html deleted file mode 100644 index 1112734c2..000000000 --- a/src/uu_hashsum/digest.rs.html +++ /dev/null @@ -1,632 +0,0 @@ -digest.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-
// spell-checker:ignore memmem
-//! Implementations of digest functions, like md5 and sha1.
-//!
-//! The [`Digest`] trait represents the interface for providing inputs
-//! to these digest functions and accessing the resulting hash. The
-//! [`DigestWriter`] struct provides a wrapper around [`Digest`] that
-//! implements the [`Write`] trait, for use in situations where calling
-//! [`write`] would be useful.
-extern crate digest;
-extern crate md5;
-extern crate sha1;
-extern crate sha2;
-extern crate sha3;
-
-use std::io::Write;
-
-use hex::ToHex;
-#[cfg(windows)]
-use memchr::memmem;
-
-use crate::digest::digest::{ExtendableOutput, Input, XofReader};
-
-pub trait Digest {
-    fn new() -> Self
-    where
-        Self: Sized;
-    fn input(&mut self, input: &[u8]);
-    fn result(&mut self, out: &mut [u8]);
-    fn reset(&mut self);
-    fn output_bits(&self) -> usize;
-    fn output_bytes(&self) -> usize {
-        (self.output_bits() + 7) / 8
-    }
-    fn result_str(&mut self) -> String {
-        let mut buf: Vec<u8> = vec![0; self.output_bytes()];
-        self.result(&mut buf);
-        buf.to_hex()
-    }
-}
-
-impl Digest for md5::Context {
-    fn new() -> Self {
-        md5::Context::new()
-    }
-
-    fn input(&mut self, input: &[u8]) {
-        self.consume(input)
-    }
-
-    fn result(&mut self, out: &mut [u8]) {
-        out.copy_from_slice(&*self.compute());
-    }
-
-    fn reset(&mut self) {
-        *self = md5::Context::new();
-    }
-
-    fn output_bits(&self) -> usize {
-        128
-    }
-}
-
-impl Digest for blake2b_simd::State {
-    fn new() -> Self {
-        Self::new()
-    }
-
-    fn input(&mut self, input: &[u8]) {
-        self.update(input);
-    }
-
-    fn result(&mut self, out: &mut [u8]) {
-        let hash_result = &self.finalize();
-        out.copy_from_slice(hash_result.as_bytes());
-    }
-
-    fn reset(&mut self) {
-        *self = Self::new();
-    }
-
-    fn output_bits(&self) -> usize {
-        512
-    }
-}
-
-impl Digest for sha1::Sha1 {
-    fn new() -> Self {
-        sha1::Sha1::new()
-    }
-
-    fn input(&mut self, input: &[u8]) {
-        self.update(input);
-    }
-
-    fn result(&mut self, out: &mut [u8]) {
-        out.copy_from_slice(&self.digest().bytes());
-    }
-
-    fn reset(&mut self) {
-        self.reset();
-    }
-
-    fn output_bits(&self) -> usize {
-        160
-    }
-}
-
-// Implements the Digest trait for sha2 / sha3 algorithms with fixed output
-macro_rules! impl_digest_sha {
-    ($type: ty, $size: expr) => {
-        impl Digest for $type {
-            fn new() -> Self {
-                Self::default()
-            }
-
-            fn input(&mut self, input: &[u8]) {
-                digest::Digest::input(self, input);
-            }
-
-            fn result(&mut self, out: &mut [u8]) {
-                out.copy_from_slice(digest::Digest::result(*self).as_slice());
-            }
-
-            fn reset(&mut self) {
-                *self = Self::new();
-            }
-
-            fn output_bits(&self) -> usize {
-                $size
-            }
-        }
-    };
-}
-
-// Implements the Digest trait for sha2 / sha3 algorithms with variable output
-macro_rules! impl_digest_shake {
-    ($type: ty) => {
-        impl Digest for $type {
-            fn new() -> Self {
-                Self::default()
-            }
-
-            fn input(&mut self, input: &[u8]) {
-                self.process(input);
-            }
-
-            fn result(&mut self, out: &mut [u8]) {
-                self.xof_result().read(out);
-            }
-
-            fn reset(&mut self) {
-                *self = Self::new();
-            }
-
-            fn output_bits(&self) -> usize {
-                0
-            }
-        }
-    };
-}
-
-impl_digest_sha!(sha2::Sha224, 224);
-impl_digest_sha!(sha2::Sha256, 256);
-impl_digest_sha!(sha2::Sha384, 384);
-impl_digest_sha!(sha2::Sha512, 512);
-
-impl_digest_sha!(sha3::Sha3_224, 224);
-impl_digest_sha!(sha3::Sha3_256, 256);
-impl_digest_sha!(sha3::Sha3_384, 384);
-impl_digest_sha!(sha3::Sha3_512, 512);
-impl_digest_shake!(sha3::Shake128);
-impl_digest_shake!(sha3::Shake256);
-
-/// A struct that writes to a digest.
-///
-/// This struct wraps a [`Digest`] and provides a [`Write`]
-/// implementation that passes input bytes directly to the
-/// [`Digest::input`].
-///
-/// On Windows, if `binary` is `false`, then the [`write`]
-/// implementation replaces instances of "\r\n" with "\n" before passing
-/// the input bytes to the [`digest`].
-pub struct DigestWriter<'a> {
-    digest: &'a mut Box<dyn Digest>,
-
-    /// Whether to write to the digest in binary mode or text mode on Windows.
-    ///
-    /// If this is `false`, then instances of "\r\n" are replaced with
-    /// "\n" before passing input bytes to the [`digest`].
-    #[allow(dead_code)]
-    binary: bool,
-
-    /// Whether the previous
-    #[allow(dead_code)]
-    was_last_character_carriage_return: bool,
-    // TODO These are dead code only on non-Windows operating systems.
-    // It might be better to use a `#[cfg(windows)]` guard here.
-}
-
-impl<'a> DigestWriter<'a> {
-    pub fn new(digest: &'a mut Box<dyn Digest>, binary: bool) -> DigestWriter {
-        let was_last_character_carriage_return = false;
-        DigestWriter {
-            digest,
-            binary,
-            was_last_character_carriage_return,
-        }
-    }
-
-    pub fn finalize(&mut self) -> bool {
-        if self.was_last_character_carriage_return {
-            self.digest.input(&[b'\r']);
-            true
-        } else {
-            false
-        }
-    }
-}
-
-impl<'a> Write for DigestWriter<'a> {
-    #[cfg(not(windows))]
-    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
-        self.digest.input(buf);
-        Ok(buf.len())
-    }
-
-    #[cfg(windows)]
-    fn write(&mut self, buf: &[u8]) -> std::io::Result<usize> {
-        if self.binary {
-            self.digest.input(buf);
-            return Ok(buf.len());
-        }
-
-        // The remaining code handles Windows text mode, where we must
-        // replace each occurrence of "\r\n" with "\n".
-        //
-        // First, if the last character written was "\r" and the first
-        // character in the current buffer to write is not "\n", then we
-        // need to write the "\r" that we buffered from the previous
-        // call to `write()`.
-        let n = buf.len();
-        if self.was_last_character_carriage_return && n > 0 && buf[0] != b'\n' {
-            self.digest.input(&[b'\r']);
-        }
-
-        // Next, find all occurrences of "\r\n", inputting the slice
-        // just before the "\n" in the previous instance of "\r\n" and
-        // the beginning of this "\r\n".
-        let mut i_prev = 0;
-        for i in memmem::find_iter(buf, b"\r\n") {
-            self.digest.input(&buf[i_prev..i]);
-            i_prev = i + 1;
-        }
-
-        // Finally, check whether the last character is "\r". If so,
-        // buffer it until we know that the next character is not "\n",
-        // which can only be known on the next call to `write()`.
-        //
-        // This all assumes that `write()` will be called on adjacent
-        // blocks of the input.
-        if n > 0 && buf[n - 1] == b'\r' {
-            self.was_last_character_carriage_return = true;
-            self.digest.input(&buf[i_prev..n - 1]);
-        } else {
-            self.was_last_character_carriage_return = false;
-            self.digest.input(&buf[i_prev..n]);
-        }
-
-        // Even though we dropped a "\r" for each "\r\n" we found, we
-        // still report the number of bytes written as `n`. This is
-        // because the meaning of the returned number is supposed to be
-        // the number of bytes consumed by the writer, so that if the
-        // calling code were calling `write()` in a loop, it would know
-        // where the next contiguous slice of the buffer starts.
-        Ok(n)
-    }
-
-    fn flush(&mut self) -> std::io::Result<()> {
-        Ok(())
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    /// Test for replacing a "\r\n" sequence with "\n" when the "\r" is
-    /// at the end of one block and the "\n" is at the beginning of the
-    /// next block, when reading in blocks.
-    #[cfg(windows)]
-    #[test]
-    fn test_crlf_across_blocks() {
-        use std::io::Write;
-
-        use crate::digest::Digest;
-        use crate::digest::DigestWriter;
-
-        // Writing "\r" in one call to `write()`, and then "\n" in another.
-        let mut digest = Box::new(md5::Context::new()) as Box<dyn Digest>;
-        let mut writer_crlf = DigestWriter::new(&mut digest, false);
-        writer_crlf.write_all(&[b'\r']).unwrap();
-        writer_crlf.write_all(&[b'\n']).unwrap();
-        writer_crlf.finalize();
-        let result_crlf = digest.result_str();
-
-        // We expect "\r\n" to be replaced with "\n" in text mode on Windows.
-        let mut digest = Box::new(md5::Context::new()) as Box<dyn Digest>;
-        let mut writer_lf = DigestWriter::new(&mut digest, false);
-        writer_lf.write_all(&[b'\n']).unwrap();
-        writer_lf.finalize();
-        let result_lf = digest.result_str();
-
-        assert_eq!(result_crlf, result_lf);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_hashsum/hashsum.rs.html b/src/uu_hashsum/hashsum.rs.html deleted file mode 100644 index 23d05186f..000000000 --- a/src/uu_hashsum/hashsum.rs.html +++ /dev/null @@ -1,1296 +0,0 @@ -hashsum.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  * (c) Vsevolod Velichko <torkvemada@sorokdva.net>
-//  * (c) Gil Cottle <gcottle@redtown.org>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) algo, algoname, regexes, nread
-
-#[macro_use]
-extern crate clap;
-
-#[macro_use]
-extern crate uucore;
-
-mod digest;
-
-use self::digest::Digest;
-use self::digest::DigestWriter;
-
-use clap::{App, Arg, ArgMatches};
-use hex::ToHex;
-use md5::Context as Md5;
-use regex::Regex;
-use sha1::Sha1;
-use sha2::{Sha224, Sha256, Sha384, Sha512};
-use sha3::{Sha3_224, Sha3_256, Sha3_384, Sha3_512, Shake128, Shake256};
-use std::cmp::Ordering;
-use std::error::Error;
-use std::ffi::{OsStr, OsString};
-use std::fs::File;
-use std::io::{self, stdin, BufRead, BufReader, Read};
-use std::iter;
-use std::num::ParseIntError;
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UError, UResult};
-
-const NAME: &str = "hashsum";
-
-struct Options {
-    algoname: &'static str,
-    digest: Box<dyn Digest + 'static>,
-    binary: bool,
-    check: bool,
-    tag: bool,
-    status: bool,
-    quiet: bool,
-    strict: bool,
-    warn: bool,
-    output_bits: usize,
-}
-
-fn is_custom_binary(program: &str) -> bool {
-    matches!(
-        program,
-        "md5sum"
-            | "sha1sum"
-            | "sha224sum"
-            | "sha256sum"
-            | "sha384sum"
-            | "sha512sum"
-            | "sha3sum"
-            | "sha3-224sum"
-            | "sha3-256sum"
-            | "sha3-384sum"
-            | "sha3-512sum"
-            | "shake128sum"
-            | "shake256sum"
-            | "b2sum"
-    )
-}
-
-#[allow(clippy::cognitive_complexity)]
-fn detect_algo(
-    program: &str,
-    matches: &ArgMatches,
-) -> (&'static str, Box<dyn Digest + 'static>, usize) {
-    let mut alg: Option<Box<dyn Digest>> = None;
-    let mut name: &'static str = "";
-    let mut output_bits = 0;
-    match program {
-        "md5sum" => ("MD5", Box::new(Md5::new()) as Box<dyn Digest>, 128),
-        "sha1sum" => ("SHA1", Box::new(Sha1::new()) as Box<dyn Digest>, 160),
-        "sha224sum" => ("SHA224", Box::new(Sha224::new()) as Box<dyn Digest>, 224),
-        "sha256sum" => ("SHA256", Box::new(Sha256::new()) as Box<dyn Digest>, 256),
-        "sha384sum" => ("SHA384", Box::new(Sha384::new()) as Box<dyn Digest>, 384),
-        "sha512sum" => ("SHA512", Box::new(Sha512::new()) as Box<dyn Digest>, 512),
-        "b2sum" => (
-            "BLAKE2",
-            Box::new(blake2b_simd::State::new()) as Box<dyn Digest>,
-            512,
-        ),
-        "sha3sum" => match matches.value_of("bits") {
-            Some(bits_str) => match (bits_str).parse::<usize>() {
-                Ok(224) => (
-                    "SHA3-224",
-                    Box::new(Sha3_224::new()) as Box<dyn Digest>,
-                    224,
-                ),
-                Ok(256) => (
-                    "SHA3-256",
-                    Box::new(Sha3_256::new()) as Box<dyn Digest>,
-                    256,
-                ),
-                Ok(384) => (
-                    "SHA3-384",
-                    Box::new(Sha3_384::new()) as Box<dyn Digest>,
-                    384,
-                ),
-                Ok(512) => (
-                    "SHA3-512",
-                    Box::new(Sha3_512::new()) as Box<dyn Digest>,
-                    512,
-                ),
-                Ok(_) => crash!(
-                    1,
-                    "Invalid output size for SHA3 (expected 224, 256, 384, or 512)"
-                ),
-                Err(err) => crash!(1, "{}", err),
-            },
-            None => crash!(1, "--bits required for SHA3"),
-        },
-        "sha3-224sum" => (
-            "SHA3-224",
-            Box::new(Sha3_224::new()) as Box<dyn Digest>,
-            224,
-        ),
-        "sha3-256sum" => (
-            "SHA3-256",
-            Box::new(Sha3_256::new()) as Box<dyn Digest>,
-            256,
-        ),
-        "sha3-384sum" => (
-            "SHA3-384",
-            Box::new(Sha3_384::new()) as Box<dyn Digest>,
-            384,
-        ),
-        "sha3-512sum" => (
-            "SHA3-512",
-            Box::new(Sha3_512::new()) as Box<dyn Digest>,
-            512,
-        ),
-        "shake128sum" => match matches.value_of("bits") {
-            Some(bits_str) => match (bits_str).parse::<usize>() {
-                Ok(bits) => (
-                    "SHAKE128",
-                    Box::new(Shake128::new()) as Box<dyn Digest>,
-                    bits,
-                ),
-                Err(err) => crash!(1, "{}", err),
-            },
-            None => crash!(1, "--bits required for SHAKE-128"),
-        },
-        "shake256sum" => match matches.value_of("bits") {
-            Some(bits_str) => match (bits_str).parse::<usize>() {
-                Ok(bits) => (
-                    "SHAKE256",
-                    Box::new(Shake256::new()) as Box<dyn Digest>,
-                    bits,
-                ),
-                Err(err) => crash!(1, "{}", err),
-            },
-            None => crash!(1, "--bits required for SHAKE-256"),
-        },
-        _ => {
-            {
-                let mut set_or_crash = |n, val, bits| {
-                    if alg.is_some() {
-                        crash!(1, "You cannot combine multiple hash algorithms!")
-                    };
-                    name = n;
-                    alg = Some(val);
-                    output_bits = bits
-                };
-                if matches.is_present("md5") {
-                    set_or_crash("MD5", Box::new(Md5::new()), 128)
-                }
-                if matches.is_present("sha1") {
-                    set_or_crash("SHA1", Box::new(Sha1::new()), 160)
-                }
-                if matches.is_present("sha224") {
-                    set_or_crash("SHA224", Box::new(Sha224::new()), 224)
-                }
-                if matches.is_present("sha256") {
-                    set_or_crash("SHA256", Box::new(Sha256::new()), 256)
-                }
-                if matches.is_present("sha384") {
-                    set_or_crash("SHA384", Box::new(Sha384::new()), 384)
-                }
-                if matches.is_present("sha512") {
-                    set_or_crash("SHA512", Box::new(Sha512::new()), 512)
-                }
-                if matches.is_present("b2sum") {
-                    set_or_crash("BLAKE2", Box::new(blake2b_simd::State::new()), 512)
-                }
-                if matches.is_present("sha3") {
-                    match matches.value_of("bits") {
-                        Some(bits_str) => match (bits_str).parse::<usize>() {
-                            Ok(224) => set_or_crash(
-                                "SHA3-224",
-                                Box::new(Sha3_224::new()) as Box<dyn Digest>,
-                                224,
-                            ),
-                            Ok(256) => set_or_crash(
-                                "SHA3-256",
-                                Box::new(Sha3_256::new()) as Box<dyn Digest>,
-                                256,
-                            ),
-                            Ok(384) => set_or_crash(
-                                "SHA3-384",
-                                Box::new(Sha3_384::new()) as Box<dyn Digest>,
-                                384,
-                            ),
-                            Ok(512) => set_or_crash(
-                                "SHA3-512",
-                                Box::new(Sha3_512::new()) as Box<dyn Digest>,
-                                512,
-                            ),
-                            Ok(_) => crash!(
-                                1,
-                                "Invalid output size for SHA3 (expected 224, 256, 384, or 512)"
-                            ),
-                            Err(err) => crash!(1, "{}", err),
-                        },
-                        None => crash!(1, "--bits required for SHA3"),
-                    }
-                }
-                if matches.is_present("sha3-224") {
-                    set_or_crash("SHA3-224", Box::new(Sha3_224::new()), 224)
-                }
-                if matches.is_present("sha3-256") {
-                    set_or_crash("SHA3-256", Box::new(Sha3_256::new()), 256)
-                }
-                if matches.is_present("sha3-384") {
-                    set_or_crash("SHA3-384", Box::new(Sha3_384::new()), 384)
-                }
-                if matches.is_present("sha3-512") {
-                    set_or_crash("SHA3-512", Box::new(Sha3_512::new()), 512)
-                }
-                if matches.is_present("shake128") {
-                    match matches.value_of("bits") {
-                        Some(bits_str) => match (bits_str).parse::<usize>() {
-                            Ok(bits) => set_or_crash("SHAKE128", Box::new(Shake128::new()), bits),
-                            Err(err) => crash!(1, "{}", err),
-                        },
-                        None => crash!(1, "--bits required for SHAKE-128"),
-                    }
-                }
-                if matches.is_present("shake256") {
-                    match matches.value_of("bits") {
-                        Some(bits_str) => match (bits_str).parse::<usize>() {
-                            Ok(bits) => set_or_crash("SHAKE256", Box::new(Shake256::new()), bits),
-                            Err(err) => crash!(1, "{}", err),
-                        },
-                        None => crash!(1, "--bits required for SHAKE-256"),
-                    }
-                }
-            }
-            let alg = alg.unwrap_or_else(|| crash!(1, "You must specify hash algorithm!"));
-            (name, alg, output_bits)
-        }
-    }
-}
-
-// TODO: return custom error type
-fn parse_bit_num(arg: &str) -> Result<usize, ParseIntError> {
-    arg.parse()
-}
-
-fn is_valid_bit_num(arg: &str) -> Result<(), String> {
-    parse_bit_num(arg).map(|_| ()).map_err(|e| format!("{}", e))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(mut args: impl uucore::Args) -> UResult<()> {
-    // if there is no program name for some reason, default to "hashsum"
-    let program = args.next().unwrap_or_else(|| OsString::from(NAME));
-    let binary_name = Path::new(&program)
-        .file_name()
-        .unwrap_or_else(|| OsStr::new(NAME))
-        .to_string_lossy();
-
-    let args = iter::once(program.clone()).chain(args);
-
-    // Default binary in Windows, text mode otherwise
-    let binary_flag_default = cfg!(windows);
-
-    let app = uu_app(&binary_name);
-
-    // FIXME: this should use try_get_matches_from() and crash!(), but at the moment that just
-    //        causes "error: " to be printed twice (once from crash!() and once from clap).  With
-    //        the current setup, the name of the utility is not printed, but I think this is at
-    //        least somewhat better from a user's perspective.
-    let matches = app.get_matches_from(args);
-
-    let (name, algo, bits) = detect_algo(&binary_name, &matches);
-
-    let binary = if matches.is_present("binary") {
-        true
-    } else if matches.is_present("text") {
-        false
-    } else {
-        binary_flag_default
-    };
-    let check = matches.is_present("check");
-    let tag = matches.is_present("tag");
-    let status = matches.is_present("status");
-    let quiet = matches.is_present("quiet") || status;
-    let strict = matches.is_present("strict");
-    let warn = matches.is_present("warn") && !status;
-
-    let opts = Options {
-        algoname: name,
-        digest: algo,
-        output_bits: bits,
-        binary,
-        check,
-        tag,
-        status,
-        quiet,
-        strict,
-        warn,
-    };
-
-    match matches.values_of_os("FILE") {
-        Some(files) => hashsum(opts, files),
-        None => hashsum(opts, iter::once(OsStr::new("-"))),
-    }
-}
-
-pub fn uu_app_common<'a>() -> App<'a> {
-    #[cfg(windows)]
-    const BINARY_HELP: &str = "read in binary mode (default)";
-    #[cfg(not(windows))]
-    const BINARY_HELP: &str = "read in binary mode";
-    #[cfg(windows)]
-    const TEXT_HELP: &str = "read in text mode";
-    #[cfg(not(windows))]
-    const TEXT_HELP: &str = "read in text mode (default)";
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about("Compute and check message digests.")
-        .arg(
-            Arg::new("binary")
-                .short('b')
-                .long("binary")
-                .help(BINARY_HELP),
-        )
-        .arg(
-            Arg::new("check")
-                .short('c')
-                .long("check")
-                .help("read hashsums from the FILEs and check them"),
-        )
-        .arg(
-            Arg::new("tag")
-                .long("tag")
-                .help("create a BSD-style checksum"),
-        )
-        .arg(
-            Arg::new("text")
-                .short('t')
-                .long("text")
-                .help(TEXT_HELP)
-                .conflicts_with("binary"),
-        )
-        .arg(
-            Arg::new("quiet")
-                .short('q')
-                .long("quiet")
-                .help("don't print OK for each successfully verified file"),
-        )
-        .arg(
-            Arg::new("status")
-                .short('s')
-                .long("status")
-                .help("don't output anything, status code shows success"),
-        )
-        .arg(
-            Arg::new("strict")
-                .long("strict")
-                .help("exit non-zero for improperly formatted checksum lines"),
-        )
-        .arg(
-            Arg::new("warn")
-                .short('w')
-                .long("warn")
-                .help("warn about improperly formatted checksum lines"),
-        )
-        // Needed for variable-length output sums (e.g. SHAKE)
-        .arg(
-            Arg::new("bits")
-                .long("bits")
-                .help("set the size of the output (only for SHAKE)")
-                .takes_value(true)
-                .value_name("BITS")
-                // XXX: should we actually use validators?  they're not particularly efficient
-                .validator(is_valid_bit_num),
-        )
-        .arg(
-            Arg::new("FILE")
-                .index(1)
-                .multiple_occurrences(true)
-                .value_name("FILE")
-                .allow_invalid_utf8(true),
-        )
-}
-
-pub fn uu_app_custom<'a>() -> App<'a> {
-    let mut app = uu_app_common();
-    let algorithms = &[
-        ("md5", "work with MD5"),
-        ("sha1", "work with SHA1"),
-        ("sha224", "work with SHA224"),
-        ("sha256", "work with SHA256"),
-        ("sha384", "work with SHA384"),
-        ("sha512", "work with SHA512"),
-        ("sha3", "work with SHA3"),
-        ("sha3-224", "work with SHA3-224"),
-        ("sha3-256", "work with SHA3-256"),
-        ("sha3-384", "work with SHA3-384"),
-        ("sha3-512", "work with SHA3-512"),
-        (
-            "shake128",
-            "work with SHAKE128 using BITS for the output size",
-        ),
-        (
-            "shake256",
-            "work with SHAKE256 using BITS for the output size",
-        ),
-        ("b2sum", "work with BLAKE2"),
-    ];
-
-    for (name, desc) in algorithms {
-        app = app.arg(Arg::new(*name).long(name).help(*desc));
-    }
-    app
-}
-
-// hashsum is handled differently in build.rs, therefore this is not the same
-// as in other utilities.
-fn uu_app<'a>(binary_name: &str) -> App<'a> {
-    if !is_custom_binary(binary_name) {
-        uu_app_custom()
-    } else {
-        uu_app_common()
-    }
-}
-
-#[derive(Debug)]
-enum HashsumError {
-    InvalidRegex,
-    InvalidFormat,
-}
-
-impl Error for HashsumError {}
-impl UError for HashsumError {}
-
-impl std::fmt::Display for HashsumError {
-    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
-        match self {
-            HashsumError::InvalidRegex => write!(f, "invalid regular expression"),
-            HashsumError::InvalidFormat => Ok(()),
-        }
-    }
-}
-
-#[allow(clippy::cognitive_complexity)]
-fn hashsum<'a, I>(mut options: Options, files: I) -> UResult<()>
-where
-    I: Iterator<Item = &'a OsStr>,
-{
-    let mut bad_format = 0;
-    let mut failed = 0;
-    let binary_marker = if options.binary { "*" } else { " " };
-    for filename in files {
-        let filename = Path::new(filename);
-
-        let stdin_buf;
-        let file_buf;
-        let mut file = BufReader::new(if filename == OsStr::new("-") {
-            stdin_buf = stdin();
-            Box::new(stdin_buf) as Box<dyn Read>
-        } else {
-            file_buf =
-                File::open(filename).map_err_context(|| "failed to open file".to_string())?;
-            Box::new(file_buf) as Box<dyn Read>
-        });
-        if options.check {
-            // Set up Regexes for line validation and parsing
-            //
-            // First, we compute the number of bytes we expect to be in
-            // the digest string. If the algorithm has a variable number
-            // of output bits, then we use the `+` modifier in the
-            // regular expression, otherwise we use the `{n}` modifier,
-            // where `n` is the number of bytes.
-            let bytes = options.digest.output_bits() / 4;
-            let modifier = if bytes > 0 {
-                format!("{{{}}}", bytes)
-            } else {
-                "+".to_string()
-            };
-            let gnu_re = Regex::new(&format!(
-                r"^(?P<digest>[a-fA-F0-9]{}) (?P<binary>[ \*])(?P<fileName>.*)",
-                modifier,
-            ))
-            .map_err(|_| HashsumError::InvalidRegex)?;
-            let bsd_re = Regex::new(&format!(
-                r"^{algorithm} \((?P<fileName>.*)\) = (?P<digest>[a-fA-F0-9]{digest_size})",
-                algorithm = options.algoname,
-                digest_size = modifier,
-            ))
-            .map_err(|_| HashsumError::InvalidRegex)?;
-
-            let buffer = file;
-            for (i, maybe_line) in buffer.lines().enumerate() {
-                let line = match maybe_line {
-                    Ok(l) => l,
-                    Err(e) => return Err(e.map_err_context(|| "failed to read file".to_string())),
-                };
-                let (ck_filename, sum, binary_check) = match gnu_re.captures(&line) {
-                    Some(caps) => (
-                        caps.name("fileName").unwrap().as_str(),
-                        caps.name("digest").unwrap().as_str().to_ascii_lowercase(),
-                        caps.name("binary").unwrap().as_str() == "*",
-                    ),
-                    None => match bsd_re.captures(&line) {
-                        Some(caps) => (
-                            caps.name("fileName").unwrap().as_str(),
-                            caps.name("digest").unwrap().as_str().to_ascii_lowercase(),
-                            true,
-                        ),
-                        None => {
-                            bad_format += 1;
-                            if options.strict {
-                                return Err(HashsumError::InvalidFormat.into());
-                            }
-                            if options.warn {
-                                show_warning!(
-                                    "{}: {}: improperly formatted {} checksum line",
-                                    filename.maybe_quote(),
-                                    i + 1,
-                                    options.algoname
-                                );
-                            }
-                            continue;
-                        }
-                    },
-                };
-                let f = File::open(ck_filename)
-                    .map_err_context(|| "failed to open file".to_string())?;
-                let mut ckf = BufReader::new(Box::new(f) as Box<dyn Read>);
-                let real_sum = digest_reader(
-                    &mut options.digest,
-                    &mut ckf,
-                    binary_check,
-                    options.output_bits,
-                )
-                .map_err_context(|| "failed to read input".to_string())?
-                .to_ascii_lowercase();
-                // FIXME: Filenames with newlines should be treated specially.
-                // GNU appears to replace newlines by \n and backslashes by
-                // \\ and prepend a backslash (to the hash or filename) if it did
-                // this escaping.
-                // Different sorts of output (checking vs outputting hashes) may
-                // handle this differently. Compare carefully to GNU.
-                // If you can, try to preserve invalid unicode using OsStr(ing)Ext
-                // and display it using uucore::display::print_verbatim(). This is
-                // easier (and more important) on Unix than on Windows.
-                if sum == real_sum {
-                    if !options.quiet {
-                        println!("{}: OK", ck_filename);
-                    }
-                } else {
-                    if !options.status {
-                        println!("{}: FAILED", ck_filename);
-                    }
-                    failed += 1;
-                }
-            }
-        } else {
-            let sum = digest_reader(
-                &mut options.digest,
-                &mut file,
-                options.binary,
-                options.output_bits,
-            )
-            .map_err_context(|| "failed to read input".to_string())?;
-            if options.tag {
-                println!("{} ({}) = {}", options.algoname, filename.display(), sum);
-            } else {
-                println!("{} {}{}", sum, binary_marker, filename.display());
-            }
-        }
-    }
-    if !options.status {
-        match bad_format.cmp(&1) {
-            Ordering::Equal => show_warning!("{} line is improperly formatted", bad_format),
-            Ordering::Greater => show_warning!("{} lines are improperly formatted", bad_format),
-            _ => {}
-        };
-        if failed > 0 {
-            show_warning!("{} computed checksum did NOT match", failed);
-        }
-    }
-
-    Ok(())
-}
-
-fn digest_reader<T: Read>(
-    digest: &mut Box<dyn Digest>,
-    reader: &mut BufReader<T>,
-    binary: bool,
-    output_bits: usize,
-) -> io::Result<String> {
-    digest.reset();
-
-    // Read bytes from `reader` and write those bytes to `digest`.
-    //
-    // If `binary` is `false` and the operating system is Windows, then
-    // `DigestWriter` replaces "\r\n" with "\n" before it writes the
-    // bytes into `digest`. Otherwise, it just inserts the bytes as-is.
-    //
-    // In order to support replacing "\r\n", we must call `finalize()`
-    // in order to support the possibility that the last character read
-    // from the reader was "\r". (This character gets buffered by
-    // `DigestWriter` and only written if the following character is
-    // "\n". But when "\r" is the last character read, we need to force
-    // it to be written.)
-    let mut digest_writer = DigestWriter::new(digest, binary);
-    std::io::copy(reader, &mut digest_writer)?;
-    digest_writer.finalize();
-
-    if digest.output_bits() > 0 {
-        Ok(digest.result_str())
-    } else {
-        // Assume it's SHAKE.  result_str() doesn't work with shake (as of 8/30/2016)
-        let mut bytes = Vec::new();
-        bytes.resize((output_bits + 7) / 8, 0);
-        digest.result(&mut bytes);
-        Ok(bytes.to_hex())
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_head/head.rs.html b/src/uu_head/head.rs.html deleted file mode 100644 index da235d585..000000000 --- a/src/uu_head/head.rs.html +++ /dev/null @@ -1,1290 +0,0 @@ -head.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (vars) zlines BUFWRITER seekable
-
-use clap::{crate_version, App, Arg};
-use std::convert::{TryFrom, TryInto};
-use std::ffi::OsString;
-use std::io::{self, BufWriter, ErrorKind, Read, Seek, SeekFrom, Write};
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-use uucore::show_error_custom_description;
-
-const BUF_SIZE: usize = 65536;
-
-/// The capacity in bytes for buffered writers.
-const BUFWRITER_CAPACITY: usize = 16_384; // 16 kilobytes
-
-const ABOUT: &str = "\
-                     Print the first 10 lines of each FILE to standard output.\n\
-                     With more than one FILE, precede each with a header giving the file name.\n\
-                     With no FILE, or when FILE is -, read standard input.\n\
-                     \n\
-                     Mandatory arguments to long flags are mandatory for short flags too.\
-                     ";
-const USAGE: &str = "head [FLAG]... [FILE]...";
-
-mod options {
-    pub const BYTES_NAME: &str = "BYTES";
-    pub const LINES_NAME: &str = "LINES";
-    pub const QUIET_NAME: &str = "QUIET";
-    pub const VERBOSE_NAME: &str = "VERBOSE";
-    pub const ZERO_NAME: &str = "ZERO";
-    pub const FILES_NAME: &str = "FILE";
-}
-mod lines;
-mod parse;
-mod take;
-use lines::zlines;
-use take::take_all_but;
-use take::take_lines;
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .override_usage(USAGE)
-        .arg(
-            Arg::new(options::BYTES_NAME)
-                .short('c')
-                .long("bytes")
-                .value_name("[-]NUM")
-                .takes_value(true)
-                .help(
-                    "\
-                     print the first NUM bytes of each file;\n\
-                     with the leading '-', print all but the last\n\
-                     NUM bytes of each file\
-                     ",
-                )
-                .overrides_with_all(&[options::BYTES_NAME, options::LINES_NAME])
-                .allow_hyphen_values(true),
-        )
-        .arg(
-            Arg::new(options::LINES_NAME)
-                .short('n')
-                .long("lines")
-                .value_name("[-]NUM")
-                .takes_value(true)
-                .help(
-                    "\
-                     print the first NUM lines instead of the first 10;\n\
-                     with the leading '-', print all but the last\n\
-                     NUM lines of each file\
-                     ",
-                )
-                .overrides_with_all(&[options::LINES_NAME, options::BYTES_NAME])
-                .allow_hyphen_values(true),
-        )
-        .arg(
-            Arg::new(options::QUIET_NAME)
-                .short('q')
-                .long("quiet")
-                .visible_alias("silent")
-                .help("never print headers giving file names")
-                .overrides_with_all(&[options::VERBOSE_NAME, options::QUIET_NAME]),
-        )
-        .arg(
-            Arg::new(options::VERBOSE_NAME)
-                .short('v')
-                .long("verbose")
-                .help("always print headers giving file names")
-                .overrides_with_all(&[options::QUIET_NAME, options::VERBOSE_NAME]),
-        )
-        .arg(
-            Arg::new(options::ZERO_NAME)
-                .short('z')
-                .long("zero-terminated")
-                .help("line delimiter is NUL, not newline")
-                .overrides_with(options::ZERO_NAME),
-        )
-        .arg(Arg::new(options::FILES_NAME).multiple_occurrences(true))
-}
-#[derive(PartialEq, Debug, Clone, Copy)]
-enum Modes {
-    Lines(usize),
-    Bytes(usize),
-}
-
-impl Default for Modes {
-    fn default() -> Self {
-        Modes::Lines(10)
-    }
-}
-
-fn parse_mode<F>(src: &str, closure: F) -> Result<(Modes, bool), String>
-where
-    F: FnOnce(usize) -> Modes,
-{
-    match parse::parse_num(src) {
-        Ok((n, last)) => Ok((closure(n), last)),
-        Err(e) => Err(e.to_string()),
-    }
-}
-
-fn arg_iterate<'a>(
-    mut args: impl uucore::Args + 'a,
-) -> Result<Box<dyn Iterator<Item = OsString> + 'a>, String> {
-    // argv[0] is always present
-    let first = args.next().unwrap();
-    if let Some(second) = args.next() {
-        if let Some(s) = second.to_str() {
-            match parse::parse_obsolete(s) {
-                Some(Ok(iter)) => Ok(Box::new(vec![first].into_iter().chain(iter).chain(args))),
-                Some(Err(e)) => match e {
-                    parse::ParseError::Syntax => Err(format!("bad argument format: {}", s.quote())),
-                    parse::ParseError::Overflow => Err(format!(
-                        "invalid argument: {} Value too large for defined datatype",
-                        s.quote()
-                    )),
-                },
-                None => Ok(Box::new(vec![first, second].into_iter().chain(args))),
-            }
-        } else {
-            Err("bad argument encoding".to_owned())
-        }
-    } else {
-        Ok(Box::new(vec![first].into_iter()))
-    }
-}
-
-#[derive(Debug, PartialEq, Default)]
-struct HeadOptions {
-    pub quiet: bool,
-    pub verbose: bool,
-    pub zeroed: bool,
-    pub all_but_last: bool,
-    pub mode: Modes,
-    pub files: Vec<String>,
-}
-
-impl HeadOptions {
-    ///Construct options from matches
-    pub fn get_from(args: impl uucore::Args) -> Result<Self, String> {
-        let matches = uu_app().get_matches_from(arg_iterate(args)?);
-
-        let mut options: HeadOptions = Default::default();
-
-        options.quiet = matches.is_present(options::QUIET_NAME);
-        options.verbose = matches.is_present(options::VERBOSE_NAME);
-        options.zeroed = matches.is_present(options::ZERO_NAME);
-
-        let mode_and_from_end = if let Some(v) = matches.value_of(options::BYTES_NAME) {
-            parse_mode(v, Modes::Bytes)
-                .map_err(|err| format!("invalid number of bytes: {}", err))?
-        } else if let Some(v) = matches.value_of(options::LINES_NAME) {
-            parse_mode(v, Modes::Lines)
-                .map_err(|err| format!("invalid number of lines: {}", err))?
-        } else {
-            (Modes::Lines(10), false)
-        };
-
-        options.mode = mode_and_from_end.0;
-        options.all_but_last = mode_and_from_end.1;
-
-        options.files = match matches.values_of(options::FILES_NAME) {
-            Some(v) => v.map(|s| s.to_owned()).collect(),
-            None => vec!["-".to_owned()],
-        };
-        //println!("{:#?}", options);
-        Ok(options)
-    }
-}
-
-fn read_n_bytes<R>(input: R, n: usize) -> std::io::Result<()>
-where
-    R: Read,
-{
-    // Read the first `n` bytes from the `input` reader.
-    let mut reader = input.take(n as u64);
-
-    // Write those bytes to `stdout`.
-    let stdout = std::io::stdout();
-    let mut stdout = stdout.lock();
-
-    io::copy(&mut reader, &mut stdout)?;
-
-    Ok(())
-}
-
-fn read_n_lines(input: &mut impl std::io::BufRead, n: usize, zero: bool) -> std::io::Result<()> {
-    // Read the first `n` lines from the `input` reader.
-    let separator = if zero { b'\0' } else { b'\n' };
-    let mut reader = take_lines(input, n, separator);
-
-    // Write those bytes to `stdout`.
-    let stdout = std::io::stdout();
-    let stdout = stdout.lock();
-    let mut writer = BufWriter::with_capacity(BUFWRITER_CAPACITY, stdout);
-
-    io::copy(&mut reader, &mut writer)?;
-
-    Ok(())
-}
-
-fn read_but_last_n_bytes(input: &mut impl std::io::BufRead, n: usize) -> std::io::Result<()> {
-    if n == 0 {
-        //prints everything
-        return read_n_bytes(input, std::usize::MAX);
-    }
-    let stdout = std::io::stdout();
-    let mut stdout = stdout.lock();
-
-    let mut ring_buffer = vec![0u8; n];
-
-    // first we fill the ring buffer
-    if let Err(e) = input.read_exact(&mut ring_buffer) {
-        if e.kind() == ErrorKind::UnexpectedEof {
-            return Ok(());
-        } else {
-            return Err(e);
-        }
-    }
-    let mut buffer = [0u8; BUF_SIZE];
-    loop {
-        let read = loop {
-            match input.read(&mut buffer) {
-                Ok(n) => break n,
-                Err(e) => match e.kind() {
-                    ErrorKind::Interrupted => {}
-                    _ => return Err(e),
-                },
-            }
-        };
-        if read == 0 {
-            return Ok(());
-        } else if read >= n {
-            stdout.write_all(&ring_buffer)?;
-            stdout.write_all(&buffer[..read - n])?;
-            for i in 0..n {
-                ring_buffer[i] = buffer[read - n + i];
-            }
-        } else {
-            stdout.write_all(&ring_buffer[..read])?;
-            for i in 0..n - read {
-                ring_buffer[i] = ring_buffer[read + i];
-            }
-            ring_buffer[n - read..].copy_from_slice(&buffer[..read]);
-        }
-    }
-}
-
-fn read_but_last_n_lines(
-    input: impl std::io::BufRead,
-    n: usize,
-    zero: bool,
-) -> std::io::Result<()> {
-    if zero {
-        let stdout = std::io::stdout();
-        let mut stdout = stdout.lock();
-        for bytes in take_all_but(zlines(input), n) {
-            stdout.write_all(&bytes?)?;
-        }
-    } else {
-        for line in take_all_but(input.lines(), n) {
-            println!("{}", line?);
-        }
-    }
-    Ok(())
-}
-
-/// Return the index in `input` just after the `n`th line from the end.
-///
-/// If `n` exceeds the number of lines in this file, then return 0.
-///
-/// The cursor must be at the start of the seekable input before
-/// calling this function. This function rewinds the cursor to the
-/// beginning of the input just before returning unless there is an
-/// I/O error.
-///
-/// If `zeroed` is `false`, interpret the newline character `b'\n'` as
-/// a line ending. If `zeroed` is `true`, interpret the null character
-/// `b'\0'` as a line ending instead.
-///
-/// # Errors
-///
-/// This function returns an error if there is a problem seeking
-/// through or reading the input.
-///
-/// # Examples
-///
-/// The function returns the index of the byte immediately following
-/// the line ending character of the `n`th line from the end of the
-/// input:
-///
-/// ```rust,ignore
-/// let mut input = Cursor::new("x\ny\nz\n");
-/// assert_eq!(find_nth_line_from_end(&mut input, 0, false).unwrap(), 6);
-/// assert_eq!(find_nth_line_from_end(&mut input, 1, false).unwrap(), 4);
-/// assert_eq!(find_nth_line_from_end(&mut input, 2, false).unwrap(), 2);
-/// ```
-///
-/// If `n` exceeds the number of lines in the file, always return 0:
-///
-/// ```rust,ignore
-/// let mut input = Cursor::new("x\ny\nz\n");
-/// assert_eq!(find_nth_line_from_end(&mut input, 3, false).unwrap(), 0);
-/// assert_eq!(find_nth_line_from_end(&mut input, 4, false).unwrap(), 0);
-/// assert_eq!(find_nth_line_from_end(&mut input, 1000, false).unwrap(), 0);
-/// ```
-fn find_nth_line_from_end<R>(input: &mut R, n: usize, zeroed: bool) -> std::io::Result<usize>
-where
-    R: Read + Seek,
-{
-    let size = input.seek(SeekFrom::End(0))?;
-    let size = usize::try_from(size).unwrap();
-
-    let mut buffer = [0u8; BUF_SIZE];
-    let buffer = &mut buffer[..BUF_SIZE.min(size)];
-    let mut i = 0usize;
-    let mut lines = 0usize;
-
-    loop {
-        // the casts here are ok, `buffer.len()` should never be above a few k
-        input.seek(SeekFrom::Current(
-            -((buffer.len() as i64).min((size - i) as i64)),
-        ))?;
-        input.read_exact(buffer)?;
-        for byte in buffer.iter().rev() {
-            match byte {
-                b'\n' if !zeroed => {
-                    lines += 1;
-                }
-                0u8 if zeroed => {
-                    lines += 1;
-                }
-                _ => {}
-            }
-            // if it were just `n`,
-            if lines == n + 1 {
-                input.seek(SeekFrom::Start(0))?;
-                return Ok(size - i);
-            }
-            i += 1;
-        }
-        if size - i == 0 {
-            input.seek(SeekFrom::Start(0))?;
-            return Ok(0);
-        }
-    }
-}
-
-fn head_backwards_file(input: &mut std::fs::File, options: &HeadOptions) -> std::io::Result<()> {
-    assert!(options.all_but_last);
-    match options.mode {
-        Modes::Bytes(n) => {
-            let size = input.metadata()?.len().try_into().unwrap();
-            if n >= size {
-                return Ok(());
-            } else {
-                read_n_bytes(
-                    &mut std::io::BufReader::with_capacity(BUF_SIZE, input),
-                    size - n,
-                )?;
-            }
-        }
-        Modes::Lines(n) => {
-            let found = find_nth_line_from_end(input, n, options.zeroed)?;
-            read_n_bytes(
-                &mut std::io::BufReader::with_capacity(BUF_SIZE, input),
-                found,
-            )?;
-        }
-    }
-    Ok(())
-}
-
-fn head_file(input: &mut std::fs::File, options: &HeadOptions) -> std::io::Result<()> {
-    if options.all_but_last {
-        head_backwards_file(input, options)
-    } else {
-        match options.mode {
-            Modes::Bytes(n) => {
-                read_n_bytes(&mut std::io::BufReader::with_capacity(BUF_SIZE, input), n)
-            }
-            Modes::Lines(n) => read_n_lines(
-                &mut std::io::BufReader::with_capacity(BUF_SIZE, input),
-                n,
-                options.zeroed,
-            ),
-        }
-    }
-}
-
-fn uu_head(options: &HeadOptions) -> UResult<()> {
-    let mut error_count = 0;
-    let mut first = true;
-    for file in &options.files {
-        let res = match file.as_str() {
-            "-" => {
-                if (options.files.len() > 1 && !options.quiet) || options.verbose {
-                    if !first {
-                        println!();
-                    }
-                    println!("==> standard input <==")
-                }
-                let stdin = std::io::stdin();
-                let mut stdin = stdin.lock();
-                match options.mode {
-                    Modes::Bytes(n) => {
-                        if options.all_but_last {
-                            read_but_last_n_bytes(&mut stdin, n)
-                        } else {
-                            read_n_bytes(&mut stdin, n)
-                        }
-                    }
-                    Modes::Lines(n) => {
-                        if options.all_but_last {
-                            read_but_last_n_lines(&mut stdin, n, options.zeroed)
-                        } else {
-                            read_n_lines(&mut stdin, n, options.zeroed)
-                        }
-                    }
-                }
-            }
-            name => {
-                let mut file = match std::fs::File::open(name) {
-                    Ok(f) => f,
-                    Err(err) => {
-                        let prefix = format!("cannot open {} for reading", name.quote());
-                        match err.kind() {
-                            ErrorKind::NotFound => {
-                                show_error_custom_description!(prefix, "No such file or directory");
-                            }
-                            ErrorKind::PermissionDenied => {
-                                show_error_custom_description!(prefix, "Permission denied");
-                            }
-                            _ => {
-                                show_error_custom_description!(prefix, "{}", err);
-                            }
-                        }
-                        error_count += 1;
-                        continue;
-                    }
-                };
-                if (options.files.len() > 1 && !options.quiet) || options.verbose {
-                    if !first {
-                        println!();
-                    }
-                    println!("==> {} <==", name)
-                }
-                head_file(&mut file, options)
-            }
-        };
-        if res.is_err() {
-            let name = if file.as_str() == "-" {
-                "standard input"
-            } else {
-                file
-            };
-            let prefix = format!("error reading {}", name);
-            show_error_custom_description!(prefix, "Input/output error");
-            error_count += 1;
-        }
-        first = false;
-    }
-    if error_count > 0 {
-        Err(USimpleError::new(1, ""))
-    } else {
-        Ok(())
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = match HeadOptions::get_from(args) {
-        Ok(o) => o,
-        Err(s) => {
-            return Err(USimpleError::new(1, s));
-        }
-    };
-    uu_head(&args)
-}
-
-#[cfg(test)]
-mod tests {
-    use std::ffi::OsString;
-    use std::io::Cursor;
-
-    use super::*;
-    fn options(args: &str) -> Result<HeadOptions, String> {
-        let combined = "head ".to_owned() + args;
-        let args = combined.split_whitespace();
-        HeadOptions::get_from(args.map(OsString::from))
-    }
-    #[test]
-    fn test_args_modes() {
-        let args = options("-n -10M -vz").unwrap();
-        assert!(args.zeroed);
-        assert!(args.verbose);
-        assert!(args.all_but_last);
-        assert_eq!(args.mode, Modes::Lines(10 * 1024 * 1024));
-    }
-    #[test]
-    fn test_gnu_compatibility() {
-        let args = options("-n 1 -c 1 -n 5 -c kiB -vqvqv").unwrap(); // spell-checker:disable-line
-        assert!(args.mode == Modes::Bytes(1024));
-        assert!(args.verbose);
-        assert_eq!(options("-5").unwrap().mode, Modes::Lines(5));
-        assert_eq!(options("-2b").unwrap().mode, Modes::Bytes(1024));
-        assert_eq!(options("-5 -c 1").unwrap().mode, Modes::Bytes(1));
-    }
-    #[test]
-    fn all_args_test() {
-        assert!(options("--silent").unwrap().quiet);
-        assert!(options("--quiet").unwrap().quiet);
-        assert!(options("-q").unwrap().quiet);
-        assert!(options("--verbose").unwrap().verbose);
-        assert!(options("-v").unwrap().verbose);
-        assert!(options("--zero-terminated").unwrap().zeroed);
-        assert!(options("-z").unwrap().zeroed);
-        assert_eq!(options("--lines 15").unwrap().mode, Modes::Lines(15));
-        assert_eq!(options("-n 15").unwrap().mode, Modes::Lines(15));
-        assert_eq!(options("--bytes 15").unwrap().mode, Modes::Bytes(15));
-        assert_eq!(options("-c 15").unwrap().mode, Modes::Bytes(15));
-    }
-    #[test]
-    fn test_options_errors() {
-        assert!(options("-n IsThisTheRealLife?").is_err());
-        assert!(options("-c IsThisJustFantasy").is_err());
-    }
-    #[test]
-    fn test_options_correct_defaults() {
-        let opts: HeadOptions = Default::default();
-
-        assert!(!opts.verbose);
-        assert!(!opts.quiet);
-        assert!(!opts.zeroed);
-        assert!(!opts.all_but_last);
-        assert_eq!(opts.mode, Modes::Lines(10));
-        assert!(opts.files.is_empty());
-    }
-    #[test]
-    fn test_parse_mode() {
-        assert_eq!(
-            parse_mode("123", Modes::Lines),
-            Ok((Modes::Lines(123), false))
-        );
-        assert_eq!(
-            parse_mode("-456", Modes::Bytes),
-            Ok((Modes::Bytes(456), true))
-        );
-        assert!(parse_mode("Nonsensical Nonsense", Modes::Bytes).is_err());
-        #[cfg(target_pointer_width = "64")]
-        assert!(parse_mode("1Y", Modes::Lines).is_err());
-        #[cfg(target_pointer_width = "32")]
-        assert!(parse_mode("1T", Modes::Bytes).is_err());
-    }
-    fn arg_outputs(src: &str) -> Result<String, String> {
-        let split = src.split_whitespace().map(OsString::from);
-        match arg_iterate(split) {
-            Ok(args) => {
-                let vec = args
-                    .map(|s| s.to_str().unwrap().to_owned())
-                    .collect::<Vec<_>>();
-                Ok(vec.join(" "))
-            }
-            Err(e) => Err(e),
-        }
-    }
-    #[test]
-    fn test_arg_iterate() {
-        // test that normal args remain unchanged
-        assert_eq!(
-            arg_outputs("head -n -5 -zv"),
-            Ok("head -n -5 -zv".to_owned())
-        );
-        // tests that nonsensical args are unchanged
-        assert_eq!(
-            arg_outputs("head -to_be_or_not_to_be,..."),
-            Ok("head -to_be_or_not_to_be,...".to_owned())
-        );
-        //test that the obsolete syntax is unrolled
-        assert_eq!(
-            arg_outputs("head -123qvqvqzc"), // spell-checker:disable-line
-            Ok("head -q -z -c 123".to_owned())
-        );
-        //test that bad obsoletes are an error
-        assert!(arg_outputs("head -123FooBar").is_err());
-        //test overflow
-        assert!(arg_outputs("head -100000000000000000000000000000000000000000").is_err());
-        //test that empty args remain unchanged
-        assert_eq!(arg_outputs("head"), Ok("head".to_owned()));
-    }
-    #[test]
-    #[cfg(target_os = "linux")]
-    fn test_arg_iterate_bad_encoding() {
-        let invalid = unsafe { std::str::from_utf8_unchecked(b"\x80\x81") };
-        // this arises from a conversion from OsString to &str
-        assert!(
-            arg_iterate(vec![OsString::from("head"), OsString::from(invalid)].into_iter()).is_err()
-        );
-    }
-    #[test]
-    fn read_early_exit() {
-        let mut empty = std::io::BufReader::new(std::io::Cursor::new(Vec::new()));
-        assert!(read_n_bytes(&mut empty, 0).is_ok());
-        assert!(read_n_lines(&mut empty, 0, false).is_ok());
-    }
-
-    #[test]
-    fn test_find_nth_line_from_end() {
-        let mut input = Cursor::new("x\ny\nz\n");
-        assert_eq!(find_nth_line_from_end(&mut input, 0, false).unwrap(), 6);
-        assert_eq!(find_nth_line_from_end(&mut input, 1, false).unwrap(), 4);
-        assert_eq!(find_nth_line_from_end(&mut input, 2, false).unwrap(), 2);
-        assert_eq!(find_nth_line_from_end(&mut input, 3, false).unwrap(), 0);
-        assert_eq!(find_nth_line_from_end(&mut input, 4, false).unwrap(), 0);
-        assert_eq!(find_nth_line_from_end(&mut input, 1000, false).unwrap(), 0);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_head/lines.rs.html b/src/uu_head/lines.rs.html deleted file mode 100644 index 20745c162..000000000 --- a/src/uu_head/lines.rs.html +++ /dev/null @@ -1,154 +0,0 @@ -lines.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-
// spell-checker:ignore (vars) zline zlines
-
-//! Iterate over zero-terminated lines.
-use std::io::BufRead;
-
-/// The zero byte, representing the null character.
-const ZERO: u8 = 0;
-
-/// Returns an iterator over the lines of the given reader.
-///
-/// The iterator returned from this function will yield instances of
-/// [`io::Result`]<[`Vec`]<[`u8`]>>, representing the bytes of the line
-/// *including* the null character (with the possible exception of the
-/// last line, which may not have one).
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use std::io::Cursor;
-///
-/// let cursor = Cursor::new(b"x\0y\0z\0");
-/// let mut iter = zlines(cursor).map(|l| l.unwrap());
-/// assert_eq!(iter.next(), Some(b"x\0".to_vec()));
-/// assert_eq!(iter.next(), Some(b"y\0".to_vec()));
-/// assert_eq!(iter.next(), Some(b"z\0".to_vec()));
-/// assert_eq!(iter.next(), None);
-/// ```
-pub fn zlines<B>(buf: B) -> ZLines<B> {
-    ZLines { buf }
-}
-
-/// An iterator over the zero-terminated lines of an instance of `BufRead`.
-pub struct ZLines<B> {
-    buf: B,
-}
-
-impl<B: BufRead> Iterator for ZLines<B> {
-    type Item = std::io::Result<Vec<u8>>;
-
-    fn next(&mut self) -> Option<std::io::Result<Vec<u8>>> {
-        let mut buf = Vec::new();
-        match self.buf.read_until(ZERO, &mut buf) {
-            Ok(0) => None,
-            Ok(_) => Some(Ok(buf)),
-            Err(e) => Some(Err(e)),
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use crate::lines::zlines;
-    use std::io::Cursor;
-
-    #[test]
-    fn test_null_terminated() {
-        let cursor = Cursor::new(b"x\0y\0z\0");
-        let mut iter = zlines(cursor).map(|l| l.unwrap());
-        assert_eq!(iter.next(), Some(b"x\0".to_vec()));
-        assert_eq!(iter.next(), Some(b"y\0".to_vec()));
-        assert_eq!(iter.next(), Some(b"z\0".to_vec()));
-        assert_eq!(iter.next(), None);
-    }
-
-    #[test]
-    fn test_not_null_terminated() {
-        let cursor = Cursor::new(b"x\0y\0z");
-        let mut iter = zlines(cursor).map(|l| l.unwrap());
-        assert_eq!(iter.next(), Some(b"x\0".to_vec()));
-        assert_eq!(iter.next(), Some(b"y\0".to_vec()));
-        assert_eq!(iter.next(), Some(b"z".to_vec()));
-        assert_eq!(iter.next(), None);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_head/parse.rs.html b/src/uu_head/parse.rs.html deleted file mode 100644 index 167b2fa85..000000000 --- a/src/uu_head/parse.rs.html +++ /dev/null @@ -1,368 +0,0 @@ -parse.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use std::ffi::OsString;
-use uucore::parse_size::{parse_size, ParseSizeError};
-
-#[derive(PartialEq, Debug)]
-pub enum ParseError {
-    Syntax,
-    Overflow,
-}
-/// Parses obsolete syntax
-/// head -NUM[kmzv] // spell-checker:disable-line
-pub fn parse_obsolete(src: &str) -> Option<Result<impl Iterator<Item = OsString>, ParseError>> {
-    let mut chars = src.char_indices();
-    if let Some((_, '-')) = chars.next() {
-        let mut num_end = 0usize;
-        let mut has_num = false;
-        let mut last_char = 0 as char;
-        for (n, c) in &mut chars {
-            if c.is_numeric() {
-                has_num = true;
-                num_end = n;
-            } else {
-                last_char = c;
-                break;
-            }
-        }
-        if has_num {
-            match src[1..=num_end].parse::<usize>() {
-                Ok(num) => {
-                    let mut quiet = false;
-                    let mut verbose = false;
-                    let mut zero_terminated = false;
-                    let mut multiplier = None;
-                    let mut c = last_char;
-                    loop {
-                        // not that here, we only match lower case 'k', 'c', and 'm'
-                        match c {
-                            // we want to preserve order
-                            // this also saves us 1 heap allocation
-                            'q' => {
-                                quiet = true;
-                                verbose = false
-                            }
-                            'v' => {
-                                verbose = true;
-                                quiet = false
-                            }
-                            'z' => zero_terminated = true,
-                            'c' => multiplier = Some(1),
-                            'b' => multiplier = Some(512),
-                            'k' => multiplier = Some(1024),
-                            'm' => multiplier = Some(1024 * 1024),
-                            '\0' => {}
-                            _ => return Some(Err(ParseError::Syntax)),
-                        }
-                        if let Some((_, next)) = chars.next() {
-                            c = next
-                        } else {
-                            break;
-                        }
-                    }
-                    let mut options = Vec::new();
-                    if quiet {
-                        options.push(OsString::from("-q"))
-                    }
-                    if verbose {
-                        options.push(OsString::from("-v"))
-                    }
-                    if zero_terminated {
-                        options.push(OsString::from("-z"))
-                    }
-                    if let Some(n) = multiplier {
-                        options.push(OsString::from("-c"));
-                        let num = match num.checked_mul(n) {
-                            Some(n) => n,
-                            None => return Some(Err(ParseError::Overflow)),
-                        };
-                        options.push(OsString::from(format!("{}", num)));
-                    } else {
-                        options.push(OsString::from("-n"));
-                        options.push(OsString::from(format!("{}", num)));
-                    }
-                    Some(Ok(options.into_iter()))
-                }
-                Err(_) => Some(Err(ParseError::Overflow)),
-            }
-        } else {
-            None
-        }
-    } else {
-        None
-    }
-}
-/// Parses an -c or -n argument,
-/// the bool specifies whether to read from the end
-pub fn parse_num(src: &str) -> Result<(usize, bool), ParseSizeError> {
-    let mut size_string = src.trim();
-    let mut all_but_last = false;
-
-    if let Some(c) = size_string.chars().next() {
-        if c == '+' || c == '-' {
-            // head: '+' is not documented (8.32 man pages)
-            size_string = &size_string[1..];
-            if c == '-' {
-                all_but_last = true;
-            }
-        }
-    } else {
-        return Err(ParseSizeError::ParseFailure(src.to_string()));
-    }
-
-    parse_size(size_string).map(|n| (n, all_but_last))
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    fn obsolete(src: &str) -> Option<Result<Vec<String>, ParseError>> {
-        let r = parse_obsolete(src);
-        match r {
-            Some(s) => match s {
-                Ok(v) => Some(Ok(v.map(|s| s.to_str().unwrap().to_owned()).collect())),
-                Err(e) => Some(Err(e)),
-            },
-            None => None,
-        }
-    }
-    fn obsolete_result(src: &[&str]) -> Option<Result<Vec<String>, ParseError>> {
-        Some(Ok(src.iter().map(|s| s.to_string()).collect()))
-    }
-    #[test]
-    fn test_parse_numbers_obsolete() {
-        assert_eq!(obsolete("-5"), obsolete_result(&["-n", "5"]));
-        assert_eq!(obsolete("-100"), obsolete_result(&["-n", "100"]));
-        assert_eq!(obsolete("-5m"), obsolete_result(&["-c", "5242880"]));
-        assert_eq!(obsolete("-1k"), obsolete_result(&["-c", "1024"]));
-        assert_eq!(obsolete("-2b"), obsolete_result(&["-c", "1024"]));
-        assert_eq!(obsolete("-1mmk"), obsolete_result(&["-c", "1024"]));
-        assert_eq!(obsolete("-1vz"), obsolete_result(&["-v", "-z", "-n", "1"]));
-        assert_eq!(
-            obsolete("-1vzqvq"), // spell-checker:disable-line
-            obsolete_result(&["-q", "-z", "-n", "1"])
-        );
-        assert_eq!(obsolete("-1vzc"), obsolete_result(&["-v", "-z", "-c", "1"]));
-        assert_eq!(
-            obsolete("-105kzm"),
-            obsolete_result(&["-z", "-c", "110100480"])
-        );
-    }
-    #[test]
-    fn test_parse_errors_obsolete() {
-        assert_eq!(obsolete("-5n"), Some(Err(ParseError::Syntax)));
-        assert_eq!(obsolete("-5c5"), Some(Err(ParseError::Syntax)));
-    }
-    #[test]
-    fn test_parse_obsolete_no_match() {
-        assert_eq!(obsolete("-k"), None);
-        assert_eq!(obsolete("asd"), None);
-    }
-    #[test]
-    #[cfg(target_pointer_width = "64")]
-    fn test_parse_obsolete_overflow_x64() {
-        assert_eq!(
-            obsolete("-1000000000000000m"),
-            Some(Err(ParseError::Overflow))
-        );
-        assert_eq!(
-            obsolete("-10000000000000000000000"),
-            Some(Err(ParseError::Overflow))
-        );
-    }
-    #[test]
-    #[cfg(target_pointer_width = "32")]
-    fn test_parse_obsolete_overflow_x32() {
-        assert_eq!(obsolete("-42949672960"), Some(Err(ParseError::Overflow)));
-        assert_eq!(obsolete("-42949672k"), Some(Err(ParseError::Overflow)));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_head/take.rs.html b/src/uu_head/take.rs.html deleted file mode 100644 index a03310048..000000000 --- a/src/uu_head/take.rs.html +++ /dev/null @@ -1,362 +0,0 @@ -take.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//! Take all but the last elements of an iterator.
-use std::io::Read;
-
-use memchr::memchr_iter;
-
-use uucore::ringbuffer::RingBuffer;
-
-/// Create an iterator over all but the last `n` elements of `iter`.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// let data = [1, 2, 3, 4, 5];
-/// let n = 2;
-/// let mut iter = take_all_but(data.iter(), n);
-/// assert_eq!(Some(4), iter.next());
-/// assert_eq!(Some(5), iter.next());
-/// assert_eq!(None, iter.next());
-/// ```
-pub fn take_all_but<I: Iterator>(iter: I, n: usize) -> TakeAllBut<I> {
-    TakeAllBut::new(iter, n)
-}
-
-/// An iterator that only iterates over the last elements of another iterator.
-pub struct TakeAllBut<I: Iterator> {
-    iter: I,
-    buf: RingBuffer<<I as Iterator>::Item>,
-}
-
-impl<I: Iterator> TakeAllBut<I> {
-    pub fn new(mut iter: I, n: usize) -> TakeAllBut<I> {
-        // Create a new ring buffer and fill it up.
-        //
-        // If there are fewer than `n` elements in `iter`, then we
-        // exhaust the iterator so that whenever `TakeAllBut::next()` is
-        // called, it will return `None`, as expected.
-        let mut buf = RingBuffer::new(n);
-        for _ in 0..n {
-            let value = match iter.next() {
-                None => {
-                    break;
-                }
-                Some(x) => x,
-            };
-            buf.push_back(value);
-        }
-        TakeAllBut { iter, buf }
-    }
-}
-
-impl<I: Iterator> Iterator for TakeAllBut<I>
-where
-    I: Iterator,
-{
-    type Item = <I as Iterator>::Item;
-
-    fn next(&mut self) -> Option<<I as Iterator>::Item> {
-        match self.iter.next() {
-            Some(value) => self.buf.push_back(value),
-            None => None,
-        }
-    }
-}
-
-/// Like `std::io::Take`, but for lines instead of bytes.
-///
-/// This struct is generally created by calling [`take_lines`] on a
-/// reader. Please see the documentation of [`take`] for more
-/// details.
-pub struct TakeLines<T> {
-    inner: T,
-    limit: usize,
-    separator: u8,
-}
-
-impl<T: Read> Read for TakeLines<T> {
-    /// Read bytes from a buffer up to the requested number of lines.
-    fn read(&mut self, buf: &mut [u8]) -> std::io::Result<usize> {
-        if self.limit == 0 {
-            return Ok(0);
-        }
-        match self.inner.read(buf) {
-            Ok(0) => Ok(0),
-            Ok(n) => {
-                for i in memchr_iter(self.separator, &buf[..n]) {
-                    self.limit -= 1;
-                    if self.limit == 0 {
-                        return Ok(i + 1);
-                    }
-                }
-                Ok(n)
-            }
-            Err(e) => Err(e),
-        }
-    }
-}
-
-/// Create an adaptor that will read at most `limit` lines from a given reader.
-///
-/// This function returns a new instance of `Read` that will read at
-/// most `limit` lines, after which it will always return EOF
-/// (`Ok(0)`).
-///
-/// The `separator` defines the character to interpret as the line
-/// ending. For the usual notion of "line", set this to `b'\n'`.
-pub fn take_lines<R>(reader: R, limit: usize, separator: u8) -> TakeLines<R> {
-    TakeLines {
-        inner: reader,
-        limit,
-        separator,
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use std::io::BufRead;
-    use std::io::BufReader;
-
-    use crate::take::take_all_but;
-    use crate::take::take_lines;
-
-    #[test]
-    fn test_fewer_elements() {
-        let mut iter = take_all_but([0, 1, 2].iter(), 2);
-        assert_eq!(Some(&0), iter.next());
-        assert_eq!(None, iter.next());
-    }
-
-    #[test]
-    fn test_same_number_of_elements() {
-        let mut iter = take_all_but([0, 1].iter(), 2);
-        assert_eq!(None, iter.next());
-    }
-
-    #[test]
-    fn test_more_elements() {
-        let mut iter = take_all_but([0].iter(), 2);
-        assert_eq!(None, iter.next());
-    }
-
-    #[test]
-    fn test_zero_elements() {
-        let mut iter = take_all_but([0, 1, 2].iter(), 0);
-        assert_eq!(Some(&0), iter.next());
-        assert_eq!(Some(&1), iter.next());
-        assert_eq!(Some(&2), iter.next());
-        assert_eq!(None, iter.next());
-    }
-
-    #[test]
-    fn test_zero_lines() {
-        let input_reader = std::io::Cursor::new("a\nb\nc\n");
-        let output_reader = BufReader::new(take_lines(input_reader, 0, b'\n'));
-        let mut iter = output_reader.lines().map(|l| l.unwrap());
-        assert_eq!(None, iter.next());
-    }
-
-    #[test]
-    fn test_fewer_lines() {
-        let input_reader = std::io::Cursor::new("a\nb\nc\n");
-        let output_reader = BufReader::new(take_lines(input_reader, 2, b'\n'));
-        let mut iter = output_reader.lines().map(|l| l.unwrap());
-        assert_eq!(Some(String::from("a")), iter.next());
-        assert_eq!(Some(String::from("b")), iter.next());
-        assert_eq!(None, iter.next());
-    }
-
-    #[test]
-    fn test_more_lines() {
-        let input_reader = std::io::Cursor::new("a\nb\nc\n");
-        let output_reader = BufReader::new(take_lines(input_reader, 4, b'\n'));
-        let mut iter = output_reader.lines().map(|l| l.unwrap());
-        assert_eq!(Some(String::from("a")), iter.next());
-        assert_eq!(Some(String::from("b")), iter.next());
-        assert_eq!(Some(String::from("c")), iter.next());
-        assert_eq!(None, iter.next());
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_hostid/hostid.rs.html b/src/uu_hostid/hostid.rs.html deleted file mode 100644 index 5861ac5bb..000000000 --- a/src/uu_hostid/hostid.rs.html +++ /dev/null @@ -1,106 +0,0 @@ -hostid.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Maciej Dziardziel <fiedzia@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE file
-//  * that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) gethostid
-
-use clap::{crate_version, App};
-use libc::c_long;
-use uucore::error::UResult;
-
-static SYNTAX: &str = "[options]";
-
-// currently rust libc interface doesn't include gethostid
-extern "C" {
-    pub fn gethostid() -> c_long;
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    uu_app().get_matches_from(args);
-    hostid();
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .override_usage(SYNTAX)
-}
-
-fn hostid() {
-    /*
-     * POSIX says gethostid returns a "32-bit identifier" but is silent
-     * whether it's sign-extended.  Turn off any sign-extension.  This
-     * is a no-op unless unsigned int is wider than 32 bits.
-     */
-
-    let mut result: c_long;
-    unsafe {
-        result = gethostid();
-    }
-
-    #[allow(overflowing_literals)]
-    let mask = 0xffff_ffff;
-
-    result &= mask;
-    println!("{:0>8x}", result);
-}
-
-
- \ No newline at end of file diff --git a/src/uu_hostname/hostname.rs.html b/src/uu_hostname/hostname.rs.html deleted file mode 100644 index 477db297c..000000000 --- a/src/uu_hostname/hostname.rs.html +++ /dev/null @@ -1,328 +0,0 @@ -hostname.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alan Andrade <alan.andradec@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) MAKEWORD addrs hashset
-
-use std::collections::hash_set::HashSet;
-use std::net::ToSocketAddrs;
-use std::str;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Display or set the system's host name.";
-
-static OPT_DOMAIN: &str = "domain";
-static OPT_IP_ADDRESS: &str = "ip-address";
-static OPT_FQDN: &str = "fqdn";
-static OPT_SHORT: &str = "short";
-static OPT_HOST: &str = "host";
-
-#[cfg(windows)]
-mod wsa {
-    use std::io;
-
-    use winapi::shared::minwindef::MAKEWORD;
-    use winapi::um::winsock2::{WSACleanup, WSAStartup, WSADATA};
-
-    pub(super) struct WsaHandle(());
-
-    pub(super) fn start() -> io::Result<WsaHandle> {
-        let err = unsafe {
-            let mut data = std::mem::MaybeUninit::<WSADATA>::uninit();
-            WSAStartup(MAKEWORD(2, 2), data.as_mut_ptr())
-        };
-        if err != 0 {
-            Err(io::Error::from_raw_os_error(err))
-        } else {
-            Ok(WsaHandle(()))
-        }
-    }
-
-    impl Drop for WsaHandle {
-        fn drop(&mut self) {
-            unsafe {
-                // This possibly returns an error but we can't handle it
-                let _err = WSACleanup();
-            }
-        }
-    }
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [HOSTNAME]", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    #[cfg(windows)]
-    let _handle = wsa::start().map_err_context(|| "failed to start Winsock".to_owned())?;
-
-    match matches.value_of_os(OPT_HOST) {
-        None => display_hostname(&matches),
-        Some(host) => hostname::set(host).map_err_context(|| "failed to set hostname".to_owned()),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_DOMAIN)
-                .short('d')
-                .long("domain")
-                .overrides_with_all(&[OPT_DOMAIN, OPT_IP_ADDRESS, OPT_FQDN, OPT_SHORT])
-                .help("Display the name of the DNS domain if possible"),
-        )
-        .arg(
-            Arg::new(OPT_IP_ADDRESS)
-                .short('i')
-                .long("ip-address")
-                .overrides_with_all(&[OPT_DOMAIN, OPT_IP_ADDRESS, OPT_FQDN, OPT_SHORT])
-                .help("Display the network address(es) of the host"),
-        )
-        .arg(
-            Arg::new(OPT_FQDN)
-                .short('f')
-                .long("fqdn")
-                .overrides_with_all(&[OPT_DOMAIN, OPT_IP_ADDRESS, OPT_FQDN, OPT_SHORT])
-                .help("Display the FQDN (Fully Qualified Domain Name) (default)"),
-        )
-        .arg(
-            Arg::new(OPT_SHORT)
-                .short('s')
-                .long("short")
-                .overrides_with_all(&[OPT_DOMAIN, OPT_IP_ADDRESS, OPT_FQDN, OPT_SHORT])
-                .help("Display the short hostname (the portion before the first dot) if possible"),
-        )
-        .arg(Arg::new(OPT_HOST).allow_invalid_utf8(true))
-}
-
-fn display_hostname(matches: &ArgMatches) -> UResult<()> {
-    let hostname = hostname::get()
-        .map_err_context(|| "failed to get hostname".to_owned())?
-        .to_string_lossy()
-        .into_owned();
-
-    if matches.is_present(OPT_IP_ADDRESS) {
-        // XXX: to_socket_addrs needs hostname:port so append a dummy port and remove it later.
-        // This was originally supposed to use std::net::lookup_host, but that seems to be
-        // deprecated.  Perhaps we should use the dns-lookup crate?
-        let hostname = hostname + ":1";
-        let addresses = hostname
-            .to_socket_addrs()
-            .map_err_context(|| "failed to resolve socket addresses".to_owned())?;
-        let mut hashset = HashSet::new();
-        let mut output = String::new();
-        for addr in addresses {
-            // XXX: not sure why this is necessary...
-            if !hashset.contains(&addr) {
-                let mut ip = addr.to_string();
-                if ip.ends_with(":1") {
-                    let len = ip.len();
-                    ip.truncate(len - 2);
-                }
-                output.push_str(&ip);
-                output.push(' ');
-                hashset.insert(addr);
-            }
-        }
-        let len = output.len();
-        if len > 0 {
-            println!("{}", &output[0..len - 1]);
-        }
-
-        Ok(())
-    } else {
-        if matches.is_present(OPT_SHORT) || matches.is_present(OPT_DOMAIN) {
-            let mut it = hostname.char_indices().filter(|&ci| ci.1 == '.');
-            if let Some(ci) = it.next() {
-                if matches.is_present(OPT_SHORT) {
-                    println!("{}", &hostname[0..ci.0]);
-                } else {
-                    println!("{}", &hostname[ci.0 + 1..]);
-                }
-                return Ok(());
-            }
-        }
-
-        println!("{}", hostname);
-
-        Ok(())
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_id/id.rs.html b/src/uu_id/id.rs.html deleted file mode 100644 index e08960ffc..000000000 --- a/src/uu_id/id.rs.html +++ /dev/null @@ -1,1346 +0,0 @@ -id.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-
// This file is part of the uutils coreutils package.
-//
-// (c) Alan Andrade <alan.andradec@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) asid auditid auditinfo auid cstr egid emod euid getaudit getlogin gflag nflag pline rflag termid uflag gsflag zflag cflag
-
-// README:
-// This was originally based on BSD's `id`
-// (noticeable in functionality, usage text, options text, etc.)
-// and synced with:
-//  http://ftp-archive.freebsd.org/mirror/FreeBSD-Archive/old-releases/i386/1.0-RELEASE/ports/shellutils/src/id.c
-//  http://www.opensource.apple.com/source/shell_cmds/shell_cmds-118/id/id.c
-//
-// * This was partially rewritten in order for stdout/stderr/exit_code
-//   to be conform with GNU coreutils (8.32) test suite for `id`.
-//
-// * This supports multiple users (a feature that was introduced in coreutils 8.31)
-//
-// * This passes GNU's coreutils Test suite (8.32)
-//   for "tests/id/uid.sh" and "tests/id/zero/sh".
-//
-// * Option '--zero' does not exist for BSD's `id`, therefore '--zero' is only
-//   allowed together with other options that are available on GNU's `id`.
-//
-// * Help text based on BSD's `id` manpage and GNU's `id` manpage.
-//
-// * This passes GNU's coreutils Test suite (8.32) for "tests/id/context.sh" if compiled with
-//   `--features feat_selinux`. It should also pass "tests/id/no-context.sh", but that depends on
-//   `uu_ls -Z` being implemented and therefore fails at the moment
-//
-
-#![allow(non_camel_case_types)]
-#![allow(dead_code)]
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::ffi::CStr;
-use uucore::display::Quotable;
-use uucore::entries::{self, Group, Locate, Passwd};
-use uucore::error::UResult;
-use uucore::error::{set_exit_code, USimpleError};
-pub use uucore::libc;
-use uucore::libc::{getlogin, uid_t};
-use uucore::process::{getegid, geteuid, getgid, getuid};
-
-macro_rules! cstr2cow {
-    ($v:expr) => {
-        unsafe { CStr::from_ptr($v).to_string_lossy() }
-    };
-}
-
-static ABOUT: &str = "Print user and group information for each specified USER,
-or (when USER omitted) for the current user.";
-
-#[cfg(not(feature = "selinux"))]
-static CONTEXT_HELP_TEXT: &str = "print only the security context of the process (not enabled)";
-#[cfg(feature = "selinux")]
-static CONTEXT_HELP_TEXT: &str = "print only the security context of the process";
-
-mod options {
-    pub const OPT_AUDIT: &str = "audit"; // GNU's id does not have this
-    pub const OPT_CONTEXT: &str = "context";
-    pub const OPT_EFFECTIVE_USER: &str = "user";
-    pub const OPT_GROUP: &str = "group";
-    pub const OPT_GROUPS: &str = "groups";
-    pub const OPT_HUMAN_READABLE: &str = "human-readable"; // GNU's id does not have this
-    pub const OPT_NAME: &str = "name";
-    pub const OPT_PASSWORD: &str = "password"; // GNU's id does not have this
-    pub const OPT_REAL_ID: &str = "real";
-    pub const OPT_ZERO: &str = "zero"; // BSD's id does not have this
-    pub const ARG_USERS: &str = "USER";
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [USER]...", uucore::execution_phrase())
-}
-
-fn get_description() -> String {
-    String::from(
-        "The id utility displays the user and group names and numeric IDs, of the \
-                      calling process, to the standard output. If the real and effective IDs are \
-                      different, both are displayed, otherwise only the real ID is displayed.\n\n\
-                      If a user (login name or user ID) is specified, the user and group IDs of \
-                      that user are displayed. In this case, the real and effective IDs are \
-                      assumed to be the same.",
-    )
-}
-
-struct Ids {
-    uid: u32,  // user id
-    gid: u32,  // group id
-    euid: u32, // effective uid
-    egid: u32, // effective gid
-}
-
-struct State {
-    nflag: bool,  // --name
-    uflag: bool,  // --user
-    gflag: bool,  // --group
-    gsflag: bool, // --groups
-    rflag: bool,  // --real
-    zflag: bool,  // --zero
-    cflag: bool,  // --context
-    selinux_supported: bool,
-    ids: Option<Ids>,
-    // The behavior for calling GNU's `id` and calling GNU's `id $USER` is similar but different.
-    // * The SELinux context is only displayed without a specified user.
-    // * The `getgroups` system call is only used without a specified user, this causes
-    //   the order of the displayed groups to be different between `id` and `id $USER`.
-    //
-    // Example:
-    // $ strace -e getgroups id -G $USER
-    // 1000 10 975 968
-    // +++ exited with 0 +++
-    // $ strace -e getgroups id -G
-    // getgroups(0, NULL)                      = 4
-    // getgroups(4, [10, 968, 975, 1000])      = 4
-    // 1000 10 968 975
-    // +++ exited with 0 +++
-    user_specified: bool,
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let after_help = get_description();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let users: Vec<String> = matches
-        .values_of(options::ARG_USERS)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let mut state = State {
-        nflag: matches.is_present(options::OPT_NAME),
-        uflag: matches.is_present(options::OPT_EFFECTIVE_USER),
-        gflag: matches.is_present(options::OPT_GROUP),
-        gsflag: matches.is_present(options::OPT_GROUPS),
-        rflag: matches.is_present(options::OPT_REAL_ID),
-        zflag: matches.is_present(options::OPT_ZERO),
-        cflag: matches.is_present(options::OPT_CONTEXT),
-
-        selinux_supported: {
-            #[cfg(feature = "selinux")]
-            {
-                selinux::kernel_support() != selinux::KernelSupport::Unsupported
-            }
-            #[cfg(not(feature = "selinux"))]
-            {
-                false
-            }
-        },
-        user_specified: !users.is_empty(),
-        ids: None,
-    };
-
-    let default_format = {
-        // "default format" is when none of '-ugG' was used
-        !(state.uflag || state.gflag || state.gsflag)
-    };
-
-    if (state.nflag || state.rflag) && default_format && !state.cflag {
-        return Err(USimpleError::new(
-            1,
-            "cannot print only names or real IDs in default format",
-        ));
-    }
-    if state.zflag && default_format && !state.cflag {
-        // NOTE: GNU test suite "id/zero.sh" needs this stderr output:
-        return Err(USimpleError::new(
-            1,
-            "option --zero not permitted in default format",
-        ));
-    }
-    if state.user_specified && state.cflag {
-        return Err(USimpleError::new(
-            1,
-            "cannot print security context when user specified",
-        ));
-    }
-
-    let delimiter = {
-        if state.zflag {
-            "\0".to_string()
-        } else {
-            " ".to_string()
-        }
-    };
-    let line_ending = {
-        if state.zflag {
-            '\0'
-        } else {
-            '\n'
-        }
-    };
-
-    if state.cflag {
-        if state.selinux_supported {
-            // print SElinux context and exit
-            #[cfg(all(target_os = "linux", feature = "selinux"))]
-            if let Ok(context) = selinux::SecurityContext::current(false) {
-                let bytes = context.as_bytes();
-                print!("{}{}", String::from_utf8_lossy(bytes), line_ending);
-            } else {
-                // print error because `cflag` was explicitly requested
-                return Err(USimpleError::new(1, "can't get process context"));
-            }
-            return Ok(());
-        } else {
-            return Err(USimpleError::new(
-                1,
-                "--context (-Z) works only on an SELinux-enabled kernel",
-            ));
-        }
-    }
-
-    for i in 0..=users.len() {
-        let possible_pw = if !state.user_specified {
-            None
-        } else {
-            match Passwd::locate(users[i].as_str()) {
-                Ok(p) => Some(p),
-                Err(_) => {
-                    show_error!("{}: no such user", users[i].quote());
-                    set_exit_code(1);
-                    if i + 1 >= users.len() {
-                        break;
-                    } else {
-                        continue;
-                    }
-                }
-            }
-        };
-
-        // GNU's `id` does not support the flags: -p/-P/-A.
-        if matches.is_present(options::OPT_PASSWORD) {
-            // BSD's `id` ignores all but the first specified user
-            pline(possible_pw.as_ref().map(|v| v.uid));
-            return Ok(());
-        };
-        if matches.is_present(options::OPT_HUMAN_READABLE) {
-            // BSD's `id` ignores all but the first specified user
-            pretty(possible_pw);
-            return Ok(());
-        }
-        if matches.is_present(options::OPT_AUDIT) {
-            // BSD's `id` ignores specified users
-            auditid();
-            return Ok(());
-        }
-
-        let (uid, gid) = possible_pw.as_ref().map(|p| (p.uid, p.gid)).unwrap_or((
-            if state.rflag { getuid() } else { geteuid() },
-            if state.rflag { getgid() } else { getegid() },
-        ));
-        state.ids = Some(Ids {
-            uid,
-            gid,
-            euid: geteuid(),
-            egid: getegid(),
-        });
-
-        if state.gflag {
-            print!(
-                "{}",
-                if state.nflag {
-                    entries::gid2grp(gid).unwrap_or_else(|_| {
-                        show_error!("cannot find name for group ID {}", gid);
-                        set_exit_code(1);
-                        gid.to_string()
-                    })
-                } else {
-                    gid.to_string()
-                }
-            );
-        }
-
-        if state.uflag {
-            print!(
-                "{}",
-                if state.nflag {
-                    entries::uid2usr(uid).unwrap_or_else(|_| {
-                        show_error!("cannot find name for user ID {}", uid);
-                        set_exit_code(1);
-                        uid.to_string()
-                    })
-                } else {
-                    uid.to_string()
-                }
-            );
-        }
-
-        let groups = entries::get_groups_gnu(Some(gid)).unwrap();
-        let groups = if state.user_specified {
-            possible_pw.as_ref().map(|p| p.belongs_to()).unwrap()
-        } else {
-            groups.clone()
-        };
-
-        if state.gsflag {
-            print!(
-                "{}{}",
-                groups
-                    .iter()
-                    .map(|&id| {
-                        if state.nflag {
-                            entries::gid2grp(id).unwrap_or_else(|_| {
-                                show_error!("cannot find name for group ID {}", id);
-                                set_exit_code(1);
-                                id.to_string()
-                            })
-                        } else {
-                            id.to_string()
-                        }
-                    })
-                    .collect::<Vec<_>>()
-                    .join(&delimiter),
-                // NOTE: this is necessary to pass GNU's "tests/id/zero.sh":
-                if state.zflag && state.user_specified && users.len() > 1 {
-                    "\0"
-                } else {
-                    ""
-                }
-            );
-        }
-
-        if default_format {
-            id_print(&mut state, groups);
-        }
-        print!("{}", line_ending);
-
-        if i + 1 >= users.len() {
-            break;
-        }
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::OPT_AUDIT)
-                .short('A')
-                .conflicts_with_all(&[
-                    options::OPT_GROUP,
-                    options::OPT_EFFECTIVE_USER,
-                    options::OPT_HUMAN_READABLE,
-                    options::OPT_PASSWORD,
-                    options::OPT_GROUPS,
-                    options::OPT_ZERO,
-                ])
-                .help(
-                    "Display the process audit user ID and other process audit properties,\n\
-                      which requires privilege (not available on Linux).",
-                ),
-        )
-        .arg(
-            Arg::new(options::OPT_EFFECTIVE_USER)
-                .short('u')
-                .long(options::OPT_EFFECTIVE_USER)
-                .conflicts_with(options::OPT_GROUP)
-                .help("Display only the effective user ID as a number."),
-        )
-        .arg(
-            Arg::new(options::OPT_GROUP)
-                .short('g')
-                .long(options::OPT_GROUP)
-                .conflicts_with(options::OPT_EFFECTIVE_USER)
-                .help("Display only the effective group ID as a number"),
-        )
-        .arg(
-            Arg::new(options::OPT_GROUPS)
-                .short('G')
-                .long(options::OPT_GROUPS)
-                .conflicts_with_all(&[
-                    options::OPT_GROUP,
-                    options::OPT_EFFECTIVE_USER,
-                    options::OPT_CONTEXT,
-                    options::OPT_HUMAN_READABLE,
-                    options::OPT_PASSWORD,
-                    options::OPT_AUDIT,
-                ])
-                .help(
-                    "Display only the different group IDs as white-space separated numbers, \
-                      in no particular order.",
-                ),
-        )
-        .arg(
-            Arg::new(options::OPT_HUMAN_READABLE)
-                .short('p')
-                .help("Make the output human-readable. Each display is on a separate line."),
-        )
-        .arg(
-            Arg::new(options::OPT_NAME)
-                .short('n')
-                .long(options::OPT_NAME)
-                .help(
-                    "Display the name of the user or group ID for the -G, -g and -u options \
-                      instead of the number.\nIf any of the ID numbers cannot be mapped into \
-                      names, the number will be displayed as usual.",
-                ),
-        )
-        .arg(
-            Arg::new(options::OPT_PASSWORD)
-                .short('P')
-                .help("Display the id as a password file entry."),
-        )
-        .arg(
-            Arg::new(options::OPT_REAL_ID)
-                .short('r')
-                .long(options::OPT_REAL_ID)
-                .help(
-                    "Display the real ID for the -G, -g and -u options instead of \
-                      the effective ID.",
-                ),
-        )
-        .arg(
-            Arg::new(options::OPT_ZERO)
-                .short('z')
-                .long(options::OPT_ZERO)
-                .help(
-                    "delimit entries with NUL characters, not whitespace;\n\
-                      not permitted in default format",
-                ),
-        )
-        .arg(
-            Arg::new(options::OPT_CONTEXT)
-                .short('Z')
-                .long(options::OPT_CONTEXT)
-                .conflicts_with_all(&[options::OPT_GROUP, options::OPT_EFFECTIVE_USER])
-                .help(CONTEXT_HELP_TEXT),
-        )
-        .arg(
-            Arg::new(options::ARG_USERS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .value_name(options::ARG_USERS),
-        )
-}
-
-fn pretty(possible_pw: Option<Passwd>) {
-    if let Some(p) = possible_pw {
-        print!("uid\t{}\ngroups\t", p.name);
-        println!(
-            "{}",
-            p.belongs_to()
-                .iter()
-                .map(|&gr| entries::gid2grp(gr).unwrap())
-                .collect::<Vec<_>>()
-                .join(" ")
-        );
-    } else {
-        let login = cstr2cow!(getlogin() as *const _);
-        let rid = getuid();
-        if let Ok(p) = Passwd::locate(rid) {
-            if login == p.name {
-                println!("login\t{}", login);
-            }
-            println!("uid\t{}", p.name);
-        } else {
-            println!("uid\t{}", rid);
-        }
-
-        let eid = getegid();
-        if eid == rid {
-            if let Ok(p) = Passwd::locate(eid) {
-                println!("euid\t{}", p.name);
-            } else {
-                println!("euid\t{}", eid);
-            }
-        }
-
-        let rid = getgid();
-        if rid != eid {
-            if let Ok(g) = Group::locate(rid) {
-                println!("euid\t{}", g.name);
-            } else {
-                println!("euid\t{}", rid);
-            }
-        }
-
-        println!(
-            "groups\t{}",
-            entries::get_groups_gnu(None)
-                .unwrap()
-                .iter()
-                .map(|&gr| entries::gid2grp(gr).unwrap())
-                .collect::<Vec<_>>()
-                .join(" ")
-        );
-    }
-}
-
-#[cfg(any(target_vendor = "apple", target_os = "freebsd"))]
-fn pline(possible_uid: Option<uid_t>) {
-    let uid = possible_uid.unwrap_or_else(getuid);
-    let pw = Passwd::locate(uid).unwrap();
-
-    println!(
-        "{}:{}:{}:{}:{}:{}:{}:{}:{}:{}",
-        pw.name,
-        pw.user_passwd,
-        pw.uid,
-        pw.gid,
-        pw.user_access_class,
-        pw.passwd_change_time,
-        pw.expiration,
-        pw.user_info,
-        pw.user_dir,
-        pw.user_shell
-    );
-}
-
-#[cfg(target_os = "linux")]
-fn pline(possible_uid: Option<uid_t>) {
-    let uid = possible_uid.unwrap_or_else(getuid);
-    let pw = Passwd::locate(uid).unwrap();
-
-    println!(
-        "{}:{}:{}:{}:{}:{}:{}",
-        pw.name, pw.user_passwd, pw.uid, pw.gid, pw.user_info, pw.user_dir, pw.user_shell
-    );
-}
-
-#[cfg(target_os = "linux")]
-fn auditid() {}
-
-#[cfg(not(target_os = "linux"))]
-fn auditid() {
-    #[allow(deprecated)]
-    let mut auditinfo: audit::c_auditinfo_addr_t = unsafe { std::mem::uninitialized() };
-    let address = &mut auditinfo as *mut audit::c_auditinfo_addr_t;
-    if unsafe { audit::getaudit(address) } < 0 {
-        println!("couldn't retrieve information");
-        return;
-    }
-
-    println!("auid={}", auditinfo.ai_auid);
-    println!("mask.success=0x{:x}", auditinfo.ai_mask.am_success);
-    println!("mask.failure=0x{:x}", auditinfo.ai_mask.am_failure);
-    println!("termid.port=0x{:x}", auditinfo.ai_termid.port);
-    println!("asid={}", auditinfo.ai_asid);
-}
-
-fn id_print(state: &mut State, groups: Vec<u32>) {
-    let uid = state.ids.as_ref().unwrap().uid;
-    let gid = state.ids.as_ref().unwrap().gid;
-    let euid = state.ids.as_ref().unwrap().euid;
-    let egid = state.ids.as_ref().unwrap().egid;
-
-    print!(
-        "uid={}({})",
-        uid,
-        entries::uid2usr(uid).unwrap_or_else(|_| {
-            show_error!("cannot find name for user ID {}", uid);
-            set_exit_code(1);
-            uid.to_string()
-        })
-    );
-    print!(
-        " gid={}({})",
-        gid,
-        entries::gid2grp(gid).unwrap_or_else(|_| {
-            show_error!("cannot find name for group ID {}", gid);
-            set_exit_code(1);
-            gid.to_string()
-        })
-    );
-    if !state.user_specified && (euid != uid) {
-        print!(
-            " euid={}({})",
-            euid,
-            entries::uid2usr(euid).unwrap_or_else(|_| {
-                show_error!("cannot find name for user ID {}", euid);
-                set_exit_code(1);
-                euid.to_string()
-            })
-        );
-    }
-    if !state.user_specified && (egid != gid) {
-        print!(
-            " egid={}({})",
-            euid,
-            entries::gid2grp(egid).unwrap_or_else(|_| {
-                show_error!("cannot find name for group ID {}", egid);
-                set_exit_code(1);
-                egid.to_string()
-            })
-        );
-    }
-    print!(
-        " groups={}",
-        groups
-            .iter()
-            .map(|&gr| format!(
-                "{}({})",
-                gr,
-                entries::gid2grp(gr).unwrap_or_else(|_| {
-                    show_error!("cannot find name for group ID {}", gr);
-                    set_exit_code(1);
-                    gr.to_string()
-                })
-            ))
-            .collect::<Vec<_>>()
-            .join(",")
-    );
-
-    #[cfg(all(target_os = "linux", feature = "selinux"))]
-    if state.selinux_supported
-        && !state.user_specified
-        && std::env::var_os("POSIXLY_CORRECT").is_none()
-    {
-        // print SElinux context (does not depend on "-Z")
-        if let Ok(context) = selinux::SecurityContext::current(false) {
-            let bytes = context.as_bytes();
-            print!(" context={}", String::from_utf8_lossy(bytes));
-        }
-    }
-}
-
-#[cfg(not(target_os = "linux"))]
-mod audit {
-    use super::libc::{c_int, c_uint, dev_t, pid_t, uid_t};
-
-    pub type au_id_t = uid_t;
-    pub type au_asid_t = pid_t;
-    pub type au_event_t = c_uint;
-    pub type au_emod_t = c_uint;
-    pub type au_class_t = c_int;
-    pub type au_flag_t = u64;
-
-    #[repr(C)]
-    pub struct au_mask {
-        pub am_success: c_uint,
-        pub am_failure: c_uint,
-    }
-    pub type au_mask_t = au_mask;
-
-    #[repr(C)]
-    pub struct au_tid_addr {
-        pub port: dev_t,
-    }
-    pub type au_tid_addr_t = au_tid_addr;
-
-    #[repr(C)]
-    pub struct c_auditinfo_addr {
-        pub ai_auid: au_id_t,         // Audit user ID
-        pub ai_mask: au_mask_t,       // Audit masks.
-        pub ai_termid: au_tid_addr_t, // Terminal ID.
-        pub ai_asid: au_asid_t,       // Audit session ID.
-        pub ai_flags: au_flag_t,      // Audit session flags
-    }
-    pub type c_auditinfo_addr_t = c_auditinfo_addr;
-
-    extern "C" {
-        pub fn getaudit(auditinfo_addr: *mut c_auditinfo_addr_t) -> c_int;
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_install/install.rs.html b/src/uu_install/install.rs.html deleted file mode 100644 index 97367f483..000000000 --- a/src/uu_install/install.rs.html +++ /dev/null @@ -1,1520 +0,0 @@ -install.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Ben Eills <ben@beneills.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE file
-//  * that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) rwxr sourcepath targetpath Isnt uioerror
-
-mod mode;
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use file_diff::diff;
-use filetime::{set_file_times, FileTime};
-use uucore::backup_control::{self, BackupMode};
-use uucore::display::Quotable;
-use uucore::entries::{grp2gid, usr2uid};
-use uucore::error::{FromIo, UError, UIoError, UResult};
-use uucore::mode::get_umask;
-use uucore::perms::{wrap_chown, Verbosity, VerbosityLevel};
-
-use libc::{getegid, geteuid};
-use std::error::Error;
-use std::fmt::{Debug, Display};
-use std::fs;
-use std::fs::File;
-use std::os::unix::fs::MetadataExt;
-use std::path::{Path, PathBuf};
-use std::process::Command;
-
-const DEFAULT_MODE: u32 = 0o755;
-const DEFAULT_STRIP_PROGRAM: &str = "strip";
-
-#[allow(dead_code)]
-pub struct Behavior {
-    main_function: MainFunction,
-    specified_mode: Option<u32>,
-    backup_mode: BackupMode,
-    suffix: String,
-    owner: String,
-    group: String,
-    verbose: bool,
-    preserve_timestamps: bool,
-    compare: bool,
-    strip: bool,
-    strip_program: String,
-    create_leading: bool,
-    target_dir: Option<String>,
-}
-
-#[derive(Debug)]
-enum InstallError {
-    Unimplemented(String),
-    DirNeedsArg(),
-    CreateDirFailed(PathBuf, std::io::Error),
-    ChmodFailed(PathBuf),
-    InvalidTarget(PathBuf),
-    TargetDirIsntDir(PathBuf),
-    BackupFailed(PathBuf, PathBuf, std::io::Error),
-    InstallFailed(PathBuf, PathBuf, std::io::Error),
-    StripProgramFailed(String),
-    MetadataFailed(std::io::Error),
-    NoSuchUser(String),
-    NoSuchGroup(String),
-    OmittingDirectory(PathBuf),
-}
-
-impl UError for InstallError {
-    fn code(&self) -> i32 {
-        match self {
-            InstallError::Unimplemented(_) => 2,
-            _ => 1,
-        }
-    }
-
-    fn usage(&self) -> bool {
-        false
-    }
-}
-
-impl Error for InstallError {}
-
-impl Display for InstallError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        use InstallError as IE;
-        match self {
-            IE::Unimplemented(opt) => write!(f, "Unimplemented feature: {}", opt),
-            IE::DirNeedsArg() => {
-                write!(
-                    f,
-                    "{} with -d requires at least one argument.",
-                    uucore::util_name()
-                )
-            }
-            IE::CreateDirFailed(dir, e) => {
-                Display::fmt(&uio_error!(e, "failed to create {}", dir.quote()), f)
-            }
-            IE::ChmodFailed(file) => write!(f, "failed to chmod {}", file.quote()),
-            IE::InvalidTarget(target) => write!(
-                f,
-                "invalid target {}: No such file or directory",
-                target.quote()
-            ),
-            IE::TargetDirIsntDir(target) => {
-                write!(f, "target {} is not a directory", target.quote())
-            }
-            IE::BackupFailed(from, to, e) => Display::fmt(
-                &uio_error!(e, "cannot backup {} to {}", from.quote(), to.quote()),
-                f,
-            ),
-            IE::InstallFailed(from, to, e) => Display::fmt(
-                &uio_error!(e, "cannot install {} to {}", from.quote(), to.quote()),
-                f,
-            ),
-            IE::StripProgramFailed(msg) => write!(f, "strip program failed: {}", msg),
-            IE::MetadataFailed(e) => Display::fmt(&uio_error!(e, ""), f),
-            IE::NoSuchUser(user) => write!(f, "no such user: {}", user.maybe_quote()),
-            IE::NoSuchGroup(group) => write!(f, "no such group: {}", group.maybe_quote()),
-            IE::OmittingDirectory(dir) => write!(f, "omitting directory {}", dir.quote()),
-        }
-    }
-}
-
-#[derive(Clone, Eq, PartialEq)]
-pub enum MainFunction {
-    /// Create directories
-    Directory,
-    /// Install files to locations (primary functionality)
-    Standard,
-}
-
-impl Behavior {
-    /// Determine the mode for chmod after copy.
-    pub fn mode(&self) -> u32 {
-        match self.specified_mode {
-            Some(x) => x,
-            None => DEFAULT_MODE,
-        }
-    }
-}
-
-static ABOUT: &str = "Copy SOURCE to DEST or multiple SOURCE(s) to the existing
- DIRECTORY, while setting permission modes and owner/group";
-
-static OPT_COMPARE: &str = "compare";
-static OPT_DIRECTORY: &str = "directory";
-static OPT_IGNORED: &str = "ignored";
-static OPT_CREATE_LEADING: &str = "create-leading";
-static OPT_GROUP: &str = "group";
-static OPT_MODE: &str = "mode";
-static OPT_OWNER: &str = "owner";
-static OPT_PRESERVE_TIMESTAMPS: &str = "preserve-timestamps";
-static OPT_STRIP: &str = "strip";
-static OPT_STRIP_PROGRAM: &str = "strip-program";
-static OPT_TARGET_DIRECTORY: &str = "target-directory";
-static OPT_NO_TARGET_DIRECTORY: &str = "no-target-directory";
-static OPT_VERBOSE: &str = "verbose";
-static OPT_PRESERVE_CONTEXT: &str = "preserve-context";
-static OPT_CONTEXT: &str = "context";
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-/// Main install utility function, called from main.rs.
-///
-/// Returns a program return code.
-///
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let paths: Vec<String> = matches
-        .values_of(ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    check_unimplemented(&matches)?;
-
-    let behavior = behavior(&matches)?;
-
-    match behavior.main_function {
-        MainFunction::Directory => directory(paths, behavior),
-        MainFunction::Standard => standard(paths, behavior),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            backup_control::arguments::backup()
-        )
-        .arg(
-            backup_control::arguments::backup_no_args()
-        )
-        .arg(
-            Arg::new(OPT_IGNORED)
-            .short('c')
-            .help("ignored")
-        )
-        .arg(
-            Arg::new(OPT_COMPARE)
-            .short('C')
-            .long(OPT_COMPARE)
-            .help("compare each pair of source and destination files, and in some cases, do not modify the destination at all")
-        )
-        .arg(
-            Arg::new(OPT_DIRECTORY)
-                .short('d')
-                .long(OPT_DIRECTORY)
-                .help("treat all arguments as directory names. create all components of the specified directories")
-        )
-
-        .arg(
-            // TODO implement flag
-            Arg::new(OPT_CREATE_LEADING)
-                .short('D')
-                .help("create all leading components of DEST except the last, then copy SOURCE to DEST")
-        )
-        .arg(
-            Arg::new(OPT_GROUP)
-                .short('g')
-                .long(OPT_GROUP)
-                .help("set group ownership, instead of process's current group")
-                .value_name("GROUP")
-                .takes_value(true)
-        )
-        .arg(
-            Arg::new(OPT_MODE)
-                .short('m')
-                .long(OPT_MODE)
-                .help("set permission mode (as in chmod), instead of rwxr-xr-x")
-                .value_name("MODE")
-                .takes_value(true)
-        )
-        .arg(
-            Arg::new(OPT_OWNER)
-                .short('o')
-                .long(OPT_OWNER)
-                .help("set ownership (super-user only)")
-                .value_name("OWNER")
-                .takes_value(true)
-        )
-        .arg(
-            Arg::new(OPT_PRESERVE_TIMESTAMPS)
-                .short('p')
-                .long(OPT_PRESERVE_TIMESTAMPS)
-                .help("apply access/modification times of SOURCE files to corresponding destination files")
-        )
-        .arg(
-            Arg::new(OPT_STRIP)
-                .short('s')
-                .long(OPT_STRIP)
-                .help("strip symbol tables (no action Windows)")
-        )
-        .arg(
-            Arg::new(OPT_STRIP_PROGRAM)
-                .long(OPT_STRIP_PROGRAM)
-                .help("program used to strip binaries (no action Windows)")
-                .value_name("PROGRAM")
-        )
-        .arg(
-            backup_control::arguments::suffix()
-        )
-        .arg(
-            // TODO implement flag
-            Arg::new(OPT_TARGET_DIRECTORY)
-                .short('t')
-                .long(OPT_TARGET_DIRECTORY)
-                .help("move all SOURCE arguments into DIRECTORY")
-                .value_name("DIRECTORY")
-        )
-        .arg(
-            // TODO implement flag
-            Arg::new(OPT_NO_TARGET_DIRECTORY)
-                .short('T')
-                .long(OPT_NO_TARGET_DIRECTORY)
-                .help("(unimplemented) treat DEST as a normal file")
-
-        )
-        .arg(
-            Arg::new(OPT_VERBOSE)
-            .short('v')
-            .long(OPT_VERBOSE)
-            .help("explain what is being done")
-        )
-        .arg(
-            // TODO implement flag
-            Arg::new(OPT_PRESERVE_CONTEXT)
-                .short('P')
-                .long(OPT_PRESERVE_CONTEXT)
-                .help("(unimplemented) preserve security context")
-        )
-        .arg(
-            // TODO implement flag
-            Arg::new(OPT_CONTEXT)
-                .short('Z')
-                .long(OPT_CONTEXT)
-                .help("(unimplemented) set security context of files and directories")
-                .value_name("CONTEXT")
-        )
-        .arg(Arg::new(ARG_FILES).multiple_occurrences(true).takes_value(true).min_values(1))
-}
-
-/// Check for unimplemented command line arguments.
-///
-/// Either return the degenerate Ok value, or an Err with string.
-///
-/// # Errors
-///
-/// Error datum is a string of the unimplemented argument.
-///
-///
-fn check_unimplemented(matches: &ArgMatches) -> UResult<()> {
-    if matches.is_present(OPT_NO_TARGET_DIRECTORY) {
-        Err(InstallError::Unimplemented(String::from("--no-target-directory, -T")).into())
-    } else if matches.is_present(OPT_PRESERVE_CONTEXT) {
-        Err(InstallError::Unimplemented(String::from("--preserve-context, -P")).into())
-    } else if matches.is_present(OPT_CONTEXT) {
-        Err(InstallError::Unimplemented(String::from("--context, -Z")).into())
-    } else {
-        Ok(())
-    }
-}
-
-/// Determine behavior, given command line arguments.
-///
-/// If successful, returns a filled-out Behavior struct.
-///
-/// # Errors
-///
-/// In event of failure, returns an integer intended as a program return code.
-///
-fn behavior(matches: &ArgMatches) -> UResult<Behavior> {
-    let main_function = if matches.is_present(OPT_DIRECTORY) {
-        MainFunction::Directory
-    } else {
-        MainFunction::Standard
-    };
-
-    let considering_dir: bool = MainFunction::Directory == main_function;
-
-    let specified_mode: Option<u32> = if matches.is_present(OPT_MODE) {
-        let x = matches.value_of(OPT_MODE).ok_or(1)?;
-        Some(mode::parse(x, considering_dir, get_umask()).map_err(|err| {
-            show_error!("Invalid mode string: {}", err);
-            1
-        })?)
-    } else {
-        None
-    };
-
-    let backup_mode = backup_control::determine_backup_mode(matches)?;
-    let target_dir = matches.value_of(OPT_TARGET_DIRECTORY).map(|d| d.to_owned());
-
-    Ok(Behavior {
-        main_function,
-        specified_mode,
-        backup_mode,
-        suffix: backup_control::determine_backup_suffix(matches),
-        owner: matches.value_of(OPT_OWNER).unwrap_or("").to_string(),
-        group: matches.value_of(OPT_GROUP).unwrap_or("").to_string(),
-        verbose: matches.is_present(OPT_VERBOSE),
-        preserve_timestamps: matches.is_present(OPT_PRESERVE_TIMESTAMPS),
-        compare: matches.is_present(OPT_COMPARE),
-        strip: matches.is_present(OPT_STRIP),
-        strip_program: String::from(
-            matches
-                .value_of(OPT_STRIP_PROGRAM)
-                .unwrap_or(DEFAULT_STRIP_PROGRAM),
-        ),
-        create_leading: matches.is_present(OPT_CREATE_LEADING),
-        target_dir,
-    })
-}
-
-/// Creates directories.
-///
-/// GNU man pages describe this functionality as creating 'all components of
-/// the specified directories'.
-///
-/// Returns a Result type with the Err variant containing the error message.
-///
-fn directory(paths: Vec<String>, b: Behavior) -> UResult<()> {
-    if paths.is_empty() {
-        Err(InstallError::DirNeedsArg().into())
-    } else {
-        for path in paths.iter().map(Path::new) {
-            // if the path already exist, don't try to create it again
-            if !path.exists() {
-                // Differently than the primary functionality
-                // (MainFunction::Standard), the directory functionality should
-                // create all ancestors (or components) of a directory
-                // regardless of the presence of the "-D" flag.
-                //
-                // NOTE: the GNU "install" sets the expected mode only for the
-                // target directory. All created ancestor directories will have
-                // the default mode. Hence it is safe to use fs::create_dir_all
-                // and then only modify the target's dir mode.
-                if let Err(e) =
-                    fs::create_dir_all(path).map_err_context(|| path.maybe_quote().to_string())
-                {
-                    show!(e);
-                    continue;
-                }
-
-                if b.verbose {
-                    println!("creating directory {}", path.quote());
-                }
-            }
-
-            if mode::chmod(path, b.mode()).is_err() {
-                // Error messages are printed by the mode::chmod function!
-                uucore::error::set_exit_code(1);
-                continue;
-            }
-        }
-        // If the exit code was set, or show! has been called at least once
-        // (which sets the exit code as well), function execution will end after
-        // this return.
-        Ok(())
-    }
-}
-
-/// Test if the path is a new file path that can be
-/// created immediately
-fn is_new_file_path(path: &Path) -> bool {
-    !path.exists()
-        && (path.parent().map(Path::is_dir).unwrap_or(true)
-            || path.parent().unwrap().as_os_str().is_empty()) // In case of a simple file
-}
-
-/// Perform an install, given a list of paths and behavior.
-///
-/// Returns a Result type with the Err variant containing the error message.
-///
-fn standard(mut paths: Vec<String>, b: Behavior) -> UResult<()> {
-    let target: PathBuf = b
-        .target_dir
-        .clone()
-        .unwrap_or_else(|| paths.pop().unwrap())
-        .into();
-
-    let sources = &paths.iter().map(PathBuf::from).collect::<Vec<_>>();
-
-    if sources.len() > 1 || (target.exists() && target.is_dir()) {
-        copy_files_into_dir(sources, &target, &b)
-    } else {
-        if let Some(parent) = target.parent() {
-            if !parent.exists() && b.create_leading {
-                if let Err(e) = fs::create_dir_all(parent) {
-                    return Err(InstallError::CreateDirFailed(parent.to_path_buf(), e).into());
-                }
-
-                // Silent the warning as we want to the error message
-                #[allow(clippy::question_mark)]
-                if mode::chmod(parent, b.mode()).is_err() {
-                    return Err(InstallError::ChmodFailed(parent.to_path_buf()).into());
-                }
-            }
-        }
-
-        if target.is_file() || is_new_file_path(&target) {
-            copy(&sources[0], &target, &b)
-        } else {
-            Err(InstallError::InvalidTarget(target).into())
-        }
-    }
-}
-
-/// Copy some files into a directory.
-///
-/// Prints verbose information and error messages.
-/// Returns a Result type with the Err variant containing the error message.
-///
-/// # Parameters
-///
-/// _files_ must all exist as non-directories.
-/// _target_dir_ must be a directory.
-///
-fn copy_files_into_dir(files: &[PathBuf], target_dir: &Path, b: &Behavior) -> UResult<()> {
-    if !target_dir.is_dir() {
-        return Err(InstallError::TargetDirIsntDir(target_dir.to_path_buf()).into());
-    }
-    for sourcepath in files.iter() {
-        if let Err(err) = sourcepath
-            .metadata()
-            .map_err_context(|| format!("cannot stat {}", sourcepath.quote()))
-        {
-            show!(err);
-            continue;
-        }
-
-        if sourcepath.is_dir() {
-            let err = InstallError::OmittingDirectory(sourcepath.to_path_buf());
-            show!(err);
-            continue;
-        }
-
-        let mut targetpath = target_dir.to_path_buf();
-        let filename = sourcepath.components().last().unwrap();
-        targetpath.push(filename);
-
-        show_if_err!(copy(sourcepath, &targetpath, b));
-    }
-    // If the exit code was set, or show! has been called at least once
-    // (which sets the exit code as well), function execution will end after
-    // this return.
-    Ok(())
-}
-
-/// Copy one file to a new location, changing metadata.
-///
-/// Returns a Result type with the Err variant containing the error message.
-///
-/// # Parameters
-///
-/// _from_ must exist as a non-directory.
-/// _to_ must be a non-existent file, whose parent directory exists.
-///
-/// # Errors
-///
-/// If the copy system call fails, we print a verbose error and return an empty error value.
-///
-#[allow(clippy::cognitive_complexity)]
-fn copy(from: &Path, to: &Path, b: &Behavior) -> UResult<()> {
-    if b.compare && !need_copy(from, to, b)? {
-        return Ok(());
-    }
-    // Declare the path here as we may need it for the verbose output below.
-    let mut backup_path = None;
-
-    // Perform backup, if any, before overwriting 'to'
-    //
-    // The codes actually making use of the backup process don't seem to agree
-    // on how best to approach the issue. (mv and ln, for example)
-    if to.exists() {
-        backup_path = backup_control::get_backup_path(b.backup_mode, to, &b.suffix);
-        if let Some(ref backup_path) = backup_path {
-            // TODO!!
-            if let Err(err) = fs::rename(to, backup_path) {
-                return Err(InstallError::BackupFailed(
-                    to.to_path_buf(),
-                    backup_path.to_path_buf(),
-                    err,
-                )
-                .into());
-            }
-        }
-    }
-
-    if from.as_os_str() == "/dev/null" {
-        /* workaround a limitation of fs::copy
-         * https://github.com/rust-lang/rust/issues/79390
-         */
-        if let Err(err) = File::create(to) {
-            return Err(
-                InstallError::InstallFailed(from.to_path_buf(), to.to_path_buf(), err).into(),
-            );
-        }
-    } else if let Err(err) = fs::copy(from, to) {
-        return Err(InstallError::InstallFailed(from.to_path_buf(), to.to_path_buf(), err).into());
-    }
-
-    if b.strip && cfg!(not(windows)) {
-        match Command::new(&b.strip_program).arg(to).output() {
-            Ok(o) => {
-                if !o.status.success() {
-                    return Err(InstallError::StripProgramFailed(
-                        String::from_utf8(o.stderr).unwrap_or_default(),
-                    )
-                    .into());
-                }
-            }
-            Err(e) => return Err(InstallError::StripProgramFailed(e.to_string()).into()),
-        }
-    }
-
-    // Silent the warning as we want to the error message
-    #[allow(clippy::question_mark)]
-    if mode::chmod(to, b.mode()).is_err() {
-        return Err(InstallError::ChmodFailed(to.to_path_buf()).into());
-    }
-
-    if !b.owner.is_empty() {
-        let meta = match fs::metadata(to) {
-            Ok(meta) => meta,
-            Err(e) => return Err(InstallError::MetadataFailed(e).into()),
-        };
-
-        let owner_id = match usr2uid(&b.owner) {
-            Ok(g) => g,
-            _ => return Err(InstallError::NoSuchUser(b.owner.clone()).into()),
-        };
-        let gid = meta.gid();
-        match wrap_chown(
-            to,
-            &meta,
-            Some(owner_id),
-            Some(gid),
-            false,
-            Verbosity {
-                groups_only: false,
-                level: VerbosityLevel::Normal,
-            },
-        ) {
-            Ok(n) => {
-                if !n.is_empty() {
-                    show_error!("{}", n);
-                }
-            }
-            Err(e) => show_error!("{}", e),
-        }
-    }
-
-    if !b.group.is_empty() {
-        let meta = match fs::metadata(to) {
-            Ok(meta) => meta,
-            Err(e) => return Err(InstallError::MetadataFailed(e).into()),
-        };
-
-        let group_id = match grp2gid(&b.group) {
-            Ok(g) => g,
-            _ => return Err(InstallError::NoSuchGroup(b.group.clone()).into()),
-        };
-        match wrap_chown(
-            to,
-            &meta,
-            Some(group_id),
-            None,
-            false,
-            Verbosity {
-                groups_only: true,
-                level: VerbosityLevel::Normal,
-            },
-        ) {
-            Ok(n) => {
-                if !n.is_empty() {
-                    show_error!("{}", n);
-                }
-            }
-            Err(e) => show_error!("{}", e),
-        }
-    }
-
-    if b.preserve_timestamps {
-        let meta = match fs::metadata(from) {
-            Ok(meta) => meta,
-            Err(e) => return Err(InstallError::MetadataFailed(e).into()),
-        };
-
-        let modified_time = FileTime::from_last_modification_time(&meta);
-        let accessed_time = FileTime::from_last_access_time(&meta);
-
-        match set_file_times(to, accessed_time, modified_time) {
-            Ok(_) => {}
-            Err(e) => show_error!("{}", e),
-        }
-    }
-
-    if b.verbose {
-        print!("{} -> {}", from.quote(), to.quote());
-        match backup_path {
-            Some(path) => println!(" (backup: {})", path.quote()),
-            None => println!(),
-        }
-    }
-
-    Ok(())
-}
-
-/// Return true if a file is necessary to copy. This is the case when:
-///
-/// - _from_ or _to_ is nonexistent;
-/// - either file has a sticky bit or set[ug]id bit, or the user specified one;
-/// - either file isn't a regular file;
-/// - the sizes of _from_ and _to_ differ;
-/// - _to_'s owner differs from intended; or
-/// - the contents of _from_ and _to_ differ.
-///
-/// # Parameters
-///
-/// _from_ and _to_, if existent, must be non-directories.
-///
-/// # Errors
-///
-/// Crashes the program if a nonexistent owner or group is specified in _b_.
-///
-fn need_copy(from: &Path, to: &Path, b: &Behavior) -> UResult<bool> {
-    let from_meta = match fs::metadata(from) {
-        Ok(meta) => meta,
-        Err(_) => return Ok(true),
-    };
-    let to_meta = match fs::metadata(to) {
-        Ok(meta) => meta,
-        Err(_) => return Ok(true),
-    };
-
-    // setuid || setgid || sticky
-    let extra_mode: u32 = 0o7000;
-
-    if b.specified_mode.unwrap_or(0) & extra_mode != 0
-        || from_meta.mode() & extra_mode != 0
-        || to_meta.mode() & extra_mode != 0
-    {
-        return Ok(true);
-    }
-
-    if !from_meta.is_file() || !to_meta.is_file() {
-        return Ok(true);
-    }
-
-    if from_meta.len() != to_meta.len() {
-        return Ok(true);
-    }
-
-    // TODO: if -P (#1809) and from/to contexts mismatch, return true.
-
-    if !b.owner.is_empty() {
-        let owner_id = match usr2uid(&b.owner) {
-            Ok(id) => id,
-            _ => return Err(InstallError::NoSuchUser(b.owner.clone()).into()),
-        };
-        if owner_id != to_meta.uid() {
-            return Ok(true);
-        }
-    } else if !b.group.is_empty() {
-        let group_id = match grp2gid(&b.group) {
-            Ok(id) => id,
-            _ => return Err(InstallError::NoSuchGroup(b.group.clone()).into()),
-        };
-        if group_id != to_meta.gid() {
-            return Ok(true);
-        }
-    } else {
-        #[cfg(not(target_os = "windows"))]
-        unsafe {
-            if to_meta.uid() != geteuid() || to_meta.gid() != getegid() {
-                return Ok(true);
-            }
-        }
-    }
-
-    if !diff(from.to_str().unwrap(), to.to_str().unwrap()) {
-        return Ok(true);
-    }
-
-    Ok(false)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_install/mode.rs.html b/src/uu_install/mode.rs.html deleted file mode 100644 index 043a062d6..000000000 --- a/src/uu_install/mode.rs.html +++ /dev/null @@ -1,82 +0,0 @@ -mode.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-
use std::fs;
-use std::path::Path;
-#[cfg(not(windows))]
-use uucore::mode;
-
-/// Takes a user-supplied string and tries to parse to u16 mode bitmask.
-pub fn parse(mode_string: &str, considering_dir: bool, umask: u32) -> Result<u32, String> {
-    let numbers: &[char] = &['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
-
-    // Passing 000 as the existing permissions seems to mirror GNU behavior.
-    if mode_string.contains(numbers) {
-        mode::parse_numeric(0, mode_string, considering_dir)
-    } else {
-        mode::parse_symbolic(0, mode_string, umask, considering_dir)
-    }
-}
-
-/// chmod a file or directory on UNIX.
-///
-/// Adapted from mkdir.rs.  Handles own error printing.
-///
-#[cfg(any(unix, target_os = "redox"))]
-pub fn chmod(path: &Path, mode: u32) -> Result<(), ()> {
-    use std::os::unix::fs::PermissionsExt;
-    use uucore::display::Quotable;
-    fs::set_permissions(path, fs::Permissions::from_mode(mode)).map_err(|err| {
-        show_error!("{}: chmod failed with error {}", path.maybe_quote(), err);
-    })
-}
-
-/// chmod a file or directory on Windows.
-///
-/// Adapted from mkdir.rs.
-///
-#[cfg(windows)]
-pub fn chmod(path: &Path, mode: u32) -> Result<(), ()> {
-    // chmod on Windows only sets the readonly flag, which isn't even honored on directories
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_join/join.rs.html b/src/uu_join/join.rs.html deleted file mode 100644 index 0dfce1496..000000000 --- a/src/uu_join/join.rs.html +++ /dev/null @@ -1,1716 +0,0 @@ -join.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-812
-813
-814
-815
-816
-817
-818
-819
-820
-821
-822
-823
-824
-825
-826
-827
-828
-829
-830
-831
-832
-833
-834
-835
-836
-837
-838
-839
-840
-841
-842
-843
-844
-845
-846
-847
-848
-849
-850
-851
-852
-853
-854
-855
-856
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Konstantin Pospelov <kupospelov@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) autoformat FILENUM whitespaces pairable unpairable nocheck
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::cmp::Ordering;
-use std::fs::File;
-use std::io::{stdin, stdout, BufRead, BufReader, Split, Stdin, Write};
-use uucore::display::Quotable;
-use uucore::error::{set_exit_code, UResult, USimpleError};
-
-static NAME: &str = "join";
-
-#[derive(Copy, Clone, PartialEq)]
-enum FileNum {
-    File1,
-    File2,
-}
-
-#[repr(u8)]
-#[derive(Copy, Clone)]
-enum LineEnding {
-    Nul = 0,
-    Newline = b'\n',
-}
-
-#[derive(Copy, Clone)]
-enum Sep {
-    Char(u8),
-    Line,
-    Whitespaces,
-}
-
-#[derive(Copy, Clone, PartialEq)]
-enum CheckOrder {
-    Default,
-    Disabled,
-    Enabled,
-}
-
-struct Settings {
-    key1: usize,
-    key2: usize,
-    print_unpaired1: bool,
-    print_unpaired2: bool,
-    print_joined: bool,
-    ignore_case: bool,
-    line_ending: LineEnding,
-    separator: Sep,
-    autoformat: bool,
-    format: Vec<Spec>,
-    empty: Vec<u8>,
-    check_order: CheckOrder,
-    headers: bool,
-}
-
-impl Default for Settings {
-    fn default() -> Settings {
-        Settings {
-            key1: 0,
-            key2: 0,
-            print_unpaired1: false,
-            print_unpaired2: false,
-            print_joined: true,
-            ignore_case: false,
-            line_ending: LineEnding::Newline,
-            separator: Sep::Whitespaces,
-            autoformat: false,
-            format: vec![],
-            empty: vec![],
-            check_order: CheckOrder::Default,
-            headers: false,
-        }
-    }
-}
-
-/// Output representation.
-struct Repr<'a> {
-    line_ending: LineEnding,
-    separator: u8,
-    format: &'a [Spec],
-    empty: &'a [u8],
-}
-
-impl<'a> Repr<'a> {
-    fn new(
-        line_ending: LineEnding,
-        separator: u8,
-        format: &'a [Spec],
-        empty: &'a [u8],
-    ) -> Repr<'a> {
-        Repr {
-            line_ending,
-            separator,
-            format,
-            empty,
-        }
-    }
-
-    fn uses_format(&self) -> bool {
-        !self.format.is_empty()
-    }
-
-    /// Print the field or empty filler if the field is not set.
-    fn print_field(&self, field: Option<&Vec<u8>>) -> Result<(), std::io::Error> {
-        let value = match field {
-            Some(field) => field,
-            None => self.empty,
-        };
-
-        stdout().write_all(value)
-    }
-
-    /// Print each field except the one at the index.
-    fn print_fields(&self, line: &Line, index: usize) -> Result<(), std::io::Error> {
-        for i in 0..line.fields.len() {
-            if i != index {
-                stdout().write_all(&[self.separator])?;
-                stdout().write_all(&line.fields[i])?;
-            }
-        }
-        Ok(())
-    }
-
-    /// Print each field or the empty filler if the field is not set.
-    fn print_format<F>(&self, f: F) -> Result<(), std::io::Error>
-    where
-        F: Fn(&Spec) -> Option<&'a Vec<u8>>,
-    {
-        for i in 0..self.format.len() {
-            if i > 0 {
-                stdout().write_all(&[self.separator])?;
-            }
-
-            let field = match f(&self.format[i]) {
-                Some(value) => value,
-                None => self.empty,
-            };
-
-            stdout().write_all(field)?;
-        }
-        Ok(())
-    }
-
-    fn print_line_ending(&self) -> Result<(), std::io::Error> {
-        stdout().write_all(&[self.line_ending as u8])
-    }
-}
-
-/// Input processing parameters.
-struct Input {
-    separator: Sep,
-    ignore_case: bool,
-    check_order: CheckOrder,
-}
-
-impl Input {
-    fn new(separator: Sep, ignore_case: bool, check_order: CheckOrder) -> Input {
-        Input {
-            separator,
-            ignore_case,
-            check_order,
-        }
-    }
-
-    fn compare(&self, field1: Option<&Vec<u8>>, field2: Option<&Vec<u8>>) -> Ordering {
-        if let (Some(field1), Some(field2)) = (field1, field2) {
-            if self.ignore_case {
-                field1
-                    .to_ascii_lowercase()
-                    .cmp(&field2.to_ascii_lowercase())
-            } else {
-                field1.cmp(field2)
-            }
-        } else {
-            match field1 {
-                Some(_) => Ordering::Greater,
-                None => match field2 {
-                    Some(_) => Ordering::Less,
-                    None => Ordering::Equal,
-                },
-            }
-        }
-    }
-}
-
-enum Spec {
-    Key,
-    Field(FileNum, usize),
-}
-
-impl Spec {
-    fn parse(format: &str) -> UResult<Spec> {
-        let mut chars = format.chars();
-
-        let file_num = match chars.next() {
-            Some('0') => {
-                // Must be all alone without a field specifier.
-                if chars.next().is_none() {
-                    return Ok(Spec::Key);
-                }
-                return Err(USimpleError::new(
-                    1,
-                    format!("invalid field specifier: {}", format.quote()),
-                ));
-            }
-            Some('1') => FileNum::File1,
-            Some('2') => FileNum::File2,
-            _ => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("invalid file number in field spec: {}", format.quote()),
-                ));
-            }
-        };
-
-        if let Some('.') = chars.next() {
-            return Ok(Spec::Field(file_num, parse_field_number(chars.as_str())?));
-        }
-
-        Err(USimpleError::new(
-            1,
-            format!("invalid field specifier: {}", format.quote()),
-        ))
-    }
-}
-
-struct Line {
-    fields: Vec<Vec<u8>>,
-    string: Vec<u8>,
-}
-
-impl Line {
-    fn new(string: Vec<u8>, separator: Sep) -> Line {
-        let fields = match separator {
-            Sep::Whitespaces => string
-                // GNU join uses Bourne shell field splitters by default
-                .split(|c| matches!(*c, b' ' | b'\t' | b'\n'))
-                .filter(|f| !f.is_empty())
-                .map(Vec::from)
-                .collect(),
-            Sep::Char(sep) => string.split(|c| *c == sep).map(Vec::from).collect(),
-            Sep::Line => vec![string.clone()],
-        };
-
-        Line { fields, string }
-    }
-
-    /// Get field at index.
-    fn get_field(&self, index: usize) -> Option<&Vec<u8>> {
-        if index < self.fields.len() {
-            Some(&self.fields[index])
-        } else {
-            None
-        }
-    }
-}
-
-struct State<'a> {
-    key: usize,
-    file_name: &'a str,
-    file_num: FileNum,
-    print_unpaired: bool,
-    lines: Split<Box<dyn BufRead + 'a>>,
-    seq: Vec<Line>,
-    line_num: usize,
-    has_failed: bool,
-    has_unpaired: bool,
-}
-
-impl<'a> State<'a> {
-    fn new(
-        file_num: FileNum,
-        name: &'a str,
-        stdin: &'a Stdin,
-        key: usize,
-        line_ending: LineEnding,
-        print_unpaired: bool,
-    ) -> State<'a> {
-        let f = if name == "-" {
-            Box::new(stdin.lock()) as Box<dyn BufRead>
-        } else {
-            match File::open(name) {
-                Ok(file) => Box::new(BufReader::new(file)) as Box<dyn BufRead>,
-                Err(err) => crash!(1, "{}: {}", name.maybe_quote(), err),
-            }
-        };
-
-        State {
-            key,
-            file_name: name,
-            file_num,
-            print_unpaired,
-            lines: f.split(line_ending as u8),
-            seq: Vec::new(),
-            line_num: 0,
-            has_failed: false,
-            has_unpaired: false,
-        }
-    }
-
-    /// Skip the current unpaired line.
-    fn skip_line(&mut self, input: &Input, repr: &Repr) -> Result<(), std::io::Error> {
-        if self.print_unpaired {
-            self.print_first_line(repr)?;
-        }
-
-        self.reset_next_line(input);
-        Ok(())
-    }
-
-    /// Keep reading line sequence until the key does not change, return
-    /// the first line whose key differs.
-    fn extend(&mut self, input: &Input) -> Option<Line> {
-        while let Some(line) = self.next_line(input) {
-            let diff = input.compare(self.get_current_key(), line.get_field(self.key));
-
-            if diff == Ordering::Equal {
-                self.seq.push(line);
-            } else {
-                return Some(line);
-            }
-        }
-
-        None
-    }
-
-    /// Print lines in the buffers as headers.
-    fn print_headers(&self, other: &State, repr: &Repr) -> Result<(), std::io::Error> {
-        if self.has_line() {
-            if other.has_line() {
-                self.combine(other, repr)?;
-            } else {
-                self.print_first_line(repr)?;
-            }
-        } else if other.has_line() {
-            other.print_first_line(repr)?;
-        }
-
-        Ok(())
-    }
-
-    /// Combine two line sequences.
-    fn combine(&self, other: &State, repr: &Repr) -> Result<(), std::io::Error> {
-        let key = self.get_current_key();
-
-        for line1 in &self.seq {
-            for line2 in &other.seq {
-                if repr.uses_format() {
-                    repr.print_format(|spec| match *spec {
-                        Spec::Key => key,
-                        Spec::Field(file_num, field_num) => {
-                            if file_num == self.file_num {
-                                return line1.get_field(field_num);
-                            }
-
-                            if file_num == other.file_num {
-                                return line2.get_field(field_num);
-                            }
-
-                            None
-                        }
-                    })?;
-                } else {
-                    repr.print_field(key)?;
-                    repr.print_fields(line1, self.key)?;
-                    repr.print_fields(line2, other.key)?;
-                }
-
-                repr.print_line_ending()?;
-            }
-        }
-
-        Ok(())
-    }
-
-    /// Reset with the next line.
-    fn reset(&mut self, next_line: Option<Line>) {
-        self.seq.clear();
-
-        if let Some(line) = next_line {
-            self.seq.push(line);
-        }
-    }
-
-    fn reset_read_line(&mut self, input: &Input) {
-        let line = self.read_line(input.separator);
-        self.reset(line);
-    }
-
-    fn reset_next_line(&mut self, input: &Input) {
-        let line = self.next_line(input);
-        self.reset(line);
-    }
-
-    fn has_line(&self) -> bool {
-        !self.seq.is_empty()
-    }
-
-    fn initialize(&mut self, read_sep: Sep, autoformat: bool) -> usize {
-        if let Some(line) = self.read_line(read_sep) {
-            self.seq.push(line);
-
-            if autoformat {
-                return self.seq[0].fields.len();
-            }
-        }
-        0
-    }
-
-    fn finalize(&mut self, input: &Input, repr: &Repr) -> Result<(), std::io::Error> {
-        if self.has_line() {
-            if self.print_unpaired {
-                self.print_first_line(repr)?;
-            }
-
-            let mut next_line = self.next_line(input);
-            while let Some(line) = &next_line {
-                if self.print_unpaired {
-                    self.print_line(line, repr)?;
-                }
-                self.reset(next_line);
-                next_line = self.next_line(input);
-            }
-        }
-
-        Ok(())
-    }
-
-    /// Get the next line without the order check.
-    fn read_line(&mut self, sep: Sep) -> Option<Line> {
-        let value = self.lines.next()?;
-        self.line_num += 1;
-        Some(Line::new(crash_if_err!(1, value), sep))
-    }
-
-    /// Get the next line with the order check.
-    fn next_line(&mut self, input: &Input) -> Option<Line> {
-        let line = self.read_line(input.separator)?;
-
-        if input.check_order == CheckOrder::Disabled {
-            return Some(line);
-        }
-
-        let diff = input.compare(self.get_current_key(), line.get_field(self.key));
-
-        if diff == Ordering::Greater {
-            if input.check_order == CheckOrder::Enabled || (self.has_unpaired && !self.has_failed) {
-                eprintln!(
-                    "{}: {}:{}: is not sorted: {}",
-                    uucore::execution_phrase(),
-                    self.file_name.maybe_quote(),
-                    self.line_num,
-                    String::from_utf8_lossy(&line.string)
-                );
-
-                self.has_failed = true;
-            }
-            // This is fatal if the check is enabled.
-            if input.check_order == CheckOrder::Enabled {
-                std::process::exit(1);
-            }
-        }
-
-        Some(line)
-    }
-
-    /// Gets the key value of the lines stored in seq.
-    fn get_current_key(&self) -> Option<&Vec<u8>> {
-        self.seq[0].get_field(self.key)
-    }
-
-    fn print_line(&self, line: &Line, repr: &Repr) -> Result<(), std::io::Error> {
-        if repr.uses_format() {
-            repr.print_format(|spec| match *spec {
-                Spec::Key => line.get_field(self.key),
-                Spec::Field(file_num, field_num) => {
-                    if file_num == self.file_num {
-                        line.get_field(field_num)
-                    } else {
-                        None
-                    }
-                }
-            })?;
-        } else {
-            repr.print_field(line.get_field(self.key))?;
-            repr.print_fields(line, self.key)?;
-        }
-
-        repr.print_line_ending()
-    }
-
-    fn print_first_line(&self, repr: &Repr) -> Result<(), std::io::Error> {
-        self.print_line(&self.seq[0], repr)
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let matches = uu_app().get_matches_from(args);
-
-    let keys = parse_field_number_option(matches.value_of("j"))?;
-    let key1 = parse_field_number_option(matches.value_of("1"))?;
-    let key2 = parse_field_number_option(matches.value_of("2"))?;
-
-    let mut settings: Settings = Default::default();
-
-    let v_values = matches.values_of("v");
-    if v_values.is_some() {
-        settings.print_joined = false;
-    }
-
-    let unpaired = v_values
-        .unwrap_or_default()
-        .chain(matches.values_of("a").unwrap_or_default());
-    for file_num in unpaired {
-        match parse_file_number(file_num)? {
-            FileNum::File1 => settings.print_unpaired1 = true,
-            FileNum::File2 => settings.print_unpaired2 = true,
-        }
-    }
-
-    settings.ignore_case = matches.is_present("i");
-    settings.key1 = get_field_number(keys, key1)?;
-    settings.key2 = get_field_number(keys, key2)?;
-
-    if let Some(value_str) = matches.value_of("t") {
-        let value = value_str.as_bytes();
-        settings.separator = match value.len() {
-            0 => Sep::Line,
-            1 => Sep::Char(value[0]),
-            _ => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("multi-character tab {}", value_str),
-                ))
-            }
-        };
-    }
-
-    if let Some(format) = matches.value_of("o") {
-        if format == "auto" {
-            settings.autoformat = true;
-        } else {
-            let mut specs = vec![];
-            for part in format.split(|c| c == ' ' || c == ',' || c == '\t') {
-                specs.push(Spec::parse(part)?);
-            }
-            settings.format = specs;
-        }
-    }
-
-    if let Some(empty) = matches.value_of("e") {
-        settings.empty = empty.as_bytes().to_vec();
-    }
-
-    if matches.is_present("nocheck-order") {
-        settings.check_order = CheckOrder::Disabled;
-    }
-
-    if matches.is_present("check-order") {
-        settings.check_order = CheckOrder::Enabled;
-    }
-
-    if matches.is_present("header") {
-        settings.headers = true;
-    }
-
-    if matches.is_present("z") {
-        settings.line_ending = LineEnding::Nul;
-    }
-
-    let file1 = matches.value_of("file1").unwrap();
-    let file2 = matches.value_of("file2").unwrap();
-
-    if file1 == "-" && file2 == "-" {
-        return Err(USimpleError::new(1, "both files cannot be standard input"));
-    }
-
-    match exec(file1, file2, settings) {
-        Ok(_) => Ok(()),
-        Err(e) => Err(USimpleError::new(1, format!("{}", e))),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(NAME)
-        .version(crate_version!())
-        .about(
-            "For each pair of input lines with identical join fields, write a line to
-standard output. The default join field is the first, delimited by blanks.
-
-When FILE1 or FILE2 (not both) is -, read standard input.",
-        )
-        .arg(
-            Arg::new("a")
-                .short('a')
-                .multiple_occurrences(true)
-                .number_of_values(1)
-                .possible_values(&["1", "2"])
-                .value_name("FILENUM")
-                .help(
-                    "also print unpairable lines from file FILENUM, where
-FILENUM is 1 or 2, corresponding to FILE1 or FILE2",
-                ),
-        )
-        .arg(
-            Arg::new("v")
-                .short('v')
-                .multiple_occurrences(true)
-                .number_of_values(1)
-                .possible_values(&["1", "2"])
-                .value_name("FILENUM")
-                .help("like -a FILENUM, but suppress joined output lines"),
-        )
-        .arg(
-            Arg::new("e")
-                .short('e')
-                .takes_value(true)
-                .value_name("EMPTY")
-                .help("replace missing input fields with EMPTY"),
-        )
-        .arg(
-            Arg::new("i")
-                .short('i')
-                .long("ignore-case")
-                .help("ignore differences in case when comparing fields"),
-        )
-        .arg(
-            Arg::new("j")
-                .short('j')
-                .takes_value(true)
-                .value_name("FIELD")
-                .help("equivalent to '-1 FIELD -2 FIELD'"),
-        )
-        .arg(
-            Arg::new("o")
-                .short('o')
-                .takes_value(true)
-                .value_name("FORMAT")
-                .help("obey FORMAT while constructing output line"),
-        )
-        .arg(
-            Arg::new("t")
-                .short('t')
-                .takes_value(true)
-                .value_name("CHAR")
-                .help("use CHAR as input and output field separator"),
-        )
-        .arg(
-            Arg::new("1")
-                .short('1')
-                .takes_value(true)
-                .value_name("FIELD")
-                .help("join on this FIELD of file 1"),
-        )
-        .arg(
-            Arg::new("2")
-                .short('2')
-                .takes_value(true)
-                .value_name("FIELD")
-                .help("join on this FIELD of file 2"),
-        )
-        .arg(Arg::new("check-order").long("check-order").help(
-            "check that the input is correctly sorted, \
-             even if all input lines are pairable",
-        ))
-        .arg(
-            Arg::new("nocheck-order")
-                .long("nocheck-order")
-                .help("do not check that the input is correctly sorted"),
-        )
-        .arg(Arg::new("header").long("header").help(
-            "treat the first line in each file as field headers, \
-             print them without trying to pair them",
-        ))
-        .arg(
-            Arg::new("z")
-                .short('z')
-                .long("zero-terminated")
-                .help("line delimiter is NUL, not newline"),
-        )
-        .arg(
-            Arg::new("file1")
-                .required(true)
-                .value_name("FILE1")
-                .hide(true),
-        )
-        .arg(
-            Arg::new("file2")
-                .required(true)
-                .value_name("FILE2")
-                .hide(true),
-        )
-}
-
-fn exec(file1: &str, file2: &str, settings: Settings) -> Result<(), std::io::Error> {
-    let stdin = stdin();
-
-    let mut state1 = State::new(
-        FileNum::File1,
-        file1,
-        &stdin,
-        settings.key1,
-        settings.line_ending,
-        settings.print_unpaired1,
-    );
-
-    let mut state2 = State::new(
-        FileNum::File2,
-        file2,
-        &stdin,
-        settings.key2,
-        settings.line_ending,
-        settings.print_unpaired2,
-    );
-
-    let input = Input::new(
-        settings.separator,
-        settings.ignore_case,
-        settings.check_order,
-    );
-
-    let format = if settings.autoformat {
-        let mut format = vec![Spec::Key];
-        let mut initialize = |state: &mut State| {
-            let max_fields = state.initialize(settings.separator, settings.autoformat);
-            for i in 0..max_fields {
-                if i != state.key {
-                    format.push(Spec::Field(state.file_num, i));
-                }
-            }
-        };
-        initialize(&mut state1);
-        initialize(&mut state2);
-        format
-    } else {
-        state1.initialize(settings.separator, settings.autoformat);
-        state2.initialize(settings.separator, settings.autoformat);
-        settings.format
-    };
-
-    let repr = Repr::new(
-        settings.line_ending,
-        match settings.separator {
-            Sep::Char(sep) => sep,
-            _ => b' ',
-        },
-        &format,
-        &settings.empty,
-    );
-
-    if settings.headers {
-        state1.print_headers(&state2, &repr)?;
-        state1.reset_read_line(&input);
-        state2.reset_read_line(&input);
-    }
-
-    while state1.has_line() && state2.has_line() {
-        let diff = input.compare(state1.get_current_key(), state2.get_current_key());
-
-        match diff {
-            Ordering::Less => {
-                state1.skip_line(&input, &repr)?;
-                state1.has_unpaired = true;
-                state2.has_unpaired = true;
-            }
-            Ordering::Greater => {
-                state2.skip_line(&input, &repr)?;
-                state1.has_unpaired = true;
-                state2.has_unpaired = true;
-            }
-            Ordering::Equal => {
-                let next_line1 = state1.extend(&input);
-                let next_line2 = state2.extend(&input);
-
-                if settings.print_joined {
-                    state1.combine(&state2, &repr)?;
-                }
-
-                state1.reset(next_line1);
-                state2.reset(next_line2);
-            }
-        }
-    }
-
-    state1.finalize(&input, &repr)?;
-    state2.finalize(&input, &repr)?;
-
-    if state1.has_failed || state2.has_failed {
-        eprintln!(
-            "{}: input is not in sorted order",
-            uucore::execution_phrase()
-        );
-        set_exit_code(1);
-    }
-    Ok(())
-}
-
-/// Check that keys for both files and for a particular file are not
-/// contradictory and return the key index.
-fn get_field_number(keys: Option<usize>, key: Option<usize>) -> UResult<usize> {
-    if let Some(keys) = keys {
-        if let Some(key) = key {
-            if keys != key {
-                // Show zero-based field numbers as one-based.
-                return Err(USimpleError::new(
-                    1,
-                    format!("incompatible join fields {}, {}", keys + 1, key + 1),
-                ));
-            }
-        }
-
-        return Ok(keys);
-    }
-
-    Ok(key.unwrap_or(0))
-}
-
-/// Parse the specified field string as a natural number and return
-/// the zero-based field number.
-fn parse_field_number(value: &str) -> UResult<usize> {
-    match value.parse::<usize>() {
-        Ok(result) if result > 0 => Ok(result - 1),
-        _ => Err(USimpleError::new(
-            1,
-            format!("invalid field number: {}", value.quote()),
-        )),
-    }
-}
-
-fn parse_file_number(value: &str) -> UResult<FileNum> {
-    match value {
-        "1" => Ok(FileNum::File1),
-        "2" => Ok(FileNum::File2),
-        value => Err(USimpleError::new(
-            1,
-            format!("invalid file number: {}", value.quote()),
-        )),
-    }
-}
-
-fn parse_field_number_option(value: Option<&str>) -> UResult<Option<usize>> {
-    match value {
-        None => Ok(None),
-        Some(val) => Ok(Some(parse_field_number(val)?)),
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_kill/kill.rs.html b/src/uu_kill/kill.rs.html deleted file mode 100644 index 4b3c15339..000000000 --- a/src/uu_kill/kill.rs.html +++ /dev/null @@ -1,420 +0,0 @@ -kill.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Maciej Dziardziel <fiedzia@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE file
-//  * that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) signalname pids
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use libc::{c_int, pid_t};
-use std::io::Error;
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-use uucore::signals::{signal_by_name_or_value, ALL_SIGNALS};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "Send signal to processes or list information about signals.";
-
-pub mod options {
-    pub static PIDS_OR_SIGNALS: &str = "pids_of_signals";
-    pub static LIST: &str = "list";
-    pub static TABLE: &str = "table";
-    pub static TABLE_OLD: &str = "table_old";
-    pub static SIGNAL: &str = "signal";
-}
-
-#[derive(Clone, Copy)]
-pub enum Mode {
-    Kill,
-    Table,
-    List,
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let mut args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-    let obs_signal = handle_obsolete(&mut args);
-
-    let usage = format!("{} [OPTIONS]... PID...", uucore::execution_phrase());
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let mode = if matches.is_present(options::TABLE) || matches.is_present(options::TABLE_OLD) {
-        Mode::Table
-    } else if matches.is_present(options::LIST) {
-        Mode::List
-    } else {
-        Mode::Kill
-    };
-
-    let pids_or_signals: Vec<String> = matches
-        .values_of(options::PIDS_OR_SIGNALS)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    match mode {
-        Mode::Kill => {
-            let sig = if let Some(signal) = obs_signal {
-                signal
-            } else if let Some(signal) = matches.value_of(options::SIGNAL) {
-                parse_signal_value(signal)?
-            } else {
-                15_usize //SIGTERM
-            };
-            let pids = parse_pids(&pids_or_signals)?;
-            kill(sig, &pids)
-        }
-        Mode::Table => {
-            table();
-            Ok(())
-        }
-        Mode::List => list(pids_or_signals.get(0).cloned()),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::LIST)
-                .short('l')
-                .long(options::LIST)
-                .help("Lists signals")
-                .conflicts_with(options::TABLE)
-                .conflicts_with(options::TABLE_OLD),
-        )
-        .arg(
-            Arg::new(options::TABLE)
-                .short('t')
-                .long(options::TABLE)
-                .help("Lists table of signals"),
-        )
-        .arg(Arg::new(options::TABLE_OLD).short('L').hide(true))
-        .arg(
-            Arg::new(options::SIGNAL)
-                .short('s')
-                .long(options::SIGNAL)
-                .help("Sends given signal")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::PIDS_OR_SIGNALS)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-fn handle_obsolete(args: &mut Vec<String>) -> Option<usize> {
-    // Sanity check
-    if args.len() > 2 {
-        // Old signal can only be in the first argument position
-        let slice = args[1].as_str();
-        if let Some(signal) = slice.strip_prefix('-') {
-            // Check if it is a valid signal
-            let opt_signal = signal_by_name_or_value(signal);
-            if opt_signal.is_some() {
-                // remove the signal before return
-                args.remove(1);
-                return opt_signal;
-            }
-        }
-    }
-    None
-}
-
-fn table() {
-    let name_width = ALL_SIGNALS.iter().map(|n| n.len()).max().unwrap();
-
-    for (idx, signal) in ALL_SIGNALS.iter().enumerate() {
-        print!("{0: >#2} {1: <#2$}", idx, signal, name_width + 2);
-        if (idx + 1) % 7 == 0 {
-            println!();
-        }
-    }
-    println!();
-}
-
-fn print_signal(signal_name_or_value: &str) -> UResult<()> {
-    for (value, &signal) in ALL_SIGNALS.iter().enumerate() {
-        if signal == signal_name_or_value || (format!("SIG{}", signal)) == signal_name_or_value {
-            println!("{}", value);
-            return Ok(());
-        } else if signal_name_or_value == value.to_string() {
-            println!("{}", signal);
-            return Ok(());
-        }
-    }
-    Err(USimpleError::new(
-        1,
-        format!("unknown signal name {}", signal_name_or_value.quote()),
-    ))
-}
-
-fn print_signals() {
-    for (idx, signal) in ALL_SIGNALS.iter().enumerate() {
-        if idx > 0 {
-            print!(" ");
-        }
-        print!("{}", signal);
-    }
-    println!();
-}
-
-fn list(arg: Option<String>) -> UResult<()> {
-    match arg {
-        Some(ref x) => print_signal(x),
-        None => {
-            print_signals();
-            Ok(())
-        }
-    }
-}
-
-fn parse_signal_value(signal_name: &str) -> UResult<usize> {
-    let optional_signal_value = signal_by_name_or_value(signal_name);
-    match optional_signal_value {
-        Some(x) => Ok(x),
-        None => Err(USimpleError::new(
-            1,
-            format!("unknown signal name {}", signal_name.quote()),
-        )),
-    }
-}
-
-fn parse_pids(pids: &[String]) -> UResult<Vec<usize>> {
-    pids.iter()
-        .map(|x| {
-            x.parse::<usize>().map_err(|e| {
-                USimpleError::new(1, format!("failed to parse argument {}: {}", x.quote(), e))
-            })
-        })
-        .collect()
-}
-
-fn kill(signal_value: usize, pids: &[usize]) -> UResult<()> {
-    for &pid in pids {
-        if unsafe { libc::kill(pid as pid_t, signal_value as c_int) } != 0 {
-            show!(USimpleError::new(1, format!("{}", Error::last_os_error())));
-        }
-    }
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_link/link.rs.html b/src/uu_link/link.rs.html deleted file mode 100644 index eabd90448..000000000 --- a/src/uu_link/link.rs.html +++ /dev/null @@ -1,108 +0,0 @@ -link.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Gehring <mg@ebfe.org>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-use clap::{crate_version, App, Arg};
-use std::fs::hard_link;
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Call the link function to create a link named FILE2 to an existing FILE1.";
-
-pub mod options {
-    pub static FILES: &str = "FILES";
-}
-
-fn usage() -> String {
-    format!("{0} FILE1 FILE2", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let files: Vec<_> = matches
-        .values_of_os(options::FILES)
-        .unwrap_or_default()
-        .collect();
-    let old = Path::new(files[0]);
-    let new = Path::new(files[1]);
-
-    hard_link(old, new)
-        .map_err_context(|| format!("cannot create link {} to {}", new.quote(), old.quote()))
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::FILES)
-                .hide(true)
-                .required(true)
-                .min_values(2)
-                .max_values(2)
-                .takes_value(true)
-                .allow_invalid_utf8(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_ln/ln.rs.html b/src/uu_ln/ln.rs.html deleted file mode 100644 index 45f3d3ea0..000000000 --- a/src/uu_ln/ln.rs.html +++ /dev/null @@ -1,976 +0,0 @@ -ln.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Joseph Crail <jbcrail@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) srcpath targetpath EEXIST
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use uucore::display::Quotable;
-use uucore::error::{UError, UResult};
-
-use std::borrow::Cow;
-use std::error::Error;
-use std::ffi::{OsStr, OsString};
-use std::fmt::Display;
-use std::fs;
-
-use std::io::{stdin, Result};
-#[cfg(any(unix, target_os = "redox"))]
-use std::os::unix::fs::symlink;
-#[cfg(windows)]
-use std::os::windows::fs::{symlink_dir, symlink_file};
-use std::path::{Path, PathBuf};
-use uucore::backup_control::{self, BackupMode};
-use uucore::fs::{canonicalize, MissingHandling, ResolveMode};
-
-pub struct Settings {
-    overwrite: OverwriteMode,
-    backup: BackupMode,
-    suffix: String,
-    symbolic: bool,
-    relative: bool,
-    target_dir: Option<String>,
-    no_target_dir: bool,
-    no_dereference: bool,
-    verbose: bool,
-}
-
-#[derive(Clone, Debug, Eq, PartialEq)]
-pub enum OverwriteMode {
-    NoClobber,
-    Interactive,
-    Force,
-}
-
-#[derive(Debug)]
-enum LnError {
-    TargetIsDirectory(PathBuf),
-    SomeLinksFailed,
-    FailedToLink(String),
-    MissingDestination(PathBuf),
-    ExtraOperand(OsString),
-}
-
-impl Display for LnError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            Self::TargetIsDirectory(s) => write!(f, "target {} is not a directory", s.quote()),
-            Self::FailedToLink(e) => write!(f, "failed to link: {}", e),
-            Self::SomeLinksFailed => write!(f, "some links failed to create"),
-            Self::MissingDestination(s) => {
-                write!(f, "missing destination file operand after {}", s.quote())
-            }
-            Self::ExtraOperand(s) => write!(
-                f,
-                "extra operand {}\nTry '{} --help' for more information.",
-                s.quote(),
-                uucore::execution_phrase()
-            ),
-        }
-    }
-}
-
-impl Error for LnError {}
-
-impl UError for LnError {
-    fn code(&self) -> i32 {
-        match self {
-            Self::TargetIsDirectory(_) => 1,
-            Self::SomeLinksFailed => 1,
-            Self::FailedToLink(_) => 1,
-            Self::MissingDestination(_) => 1,
-            Self::ExtraOperand(_) => 1,
-        }
-    }
-}
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [-T] TARGET LINK_NAME   (1st form)
-       {0} [OPTION]... TARGET                  (2nd form)
-       {0} [OPTION]... TARGET... DIRECTORY     (3rd form)
-       {0} [OPTION]... -t DIRECTORY TARGET...  (4th form)",
-        uucore::execution_phrase()
-    )
-}
-
-fn long_usage() -> String {
-    String::from(
-        " In the 1st form, create a link to TARGET with the name LINK_NAME.
-        In the 2nd form, create a link to TARGET in the current directory.
-        In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.
-        Create hard links by default, symbolic links with --symbolic.
-        By default, each destination (name of new link) should not already exist.
-        When creating hard links, each TARGET must exist.  Symbolic links
-        can hold arbitrary text; if later resolved, a relative link is
-        interpreted in relation to its parent directory.
-        ",
-    )
-}
-
-static ABOUT: &str = "change file owner and group";
-
-mod options {
-    pub const FORCE: &str = "force";
-    pub const INTERACTIVE: &str = "interactive";
-    pub const NO_DEREFERENCE: &str = "no-dereference";
-    pub const SYMBOLIC: &str = "symbolic";
-    pub const TARGET_DIRECTORY: &str = "target-directory";
-    pub const NO_TARGET_DIRECTORY: &str = "no-target-directory";
-    pub const RELATIVE: &str = "relative";
-    pub const VERBOSE: &str = "verbose";
-}
-
-static ARG_FILES: &str = "files";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let long_usage = long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&*format!(
-            "{}\n{}",
-            long_usage,
-            backup_control::BACKUP_CONTROL_LONG_HELP
-        ))
-        .get_matches_from(args);
-
-    /* the list of files */
-
-    let paths: Vec<PathBuf> = matches
-        .values_of(ARG_FILES)
-        .unwrap()
-        .map(PathBuf::from)
-        .collect();
-
-    let overwrite_mode = if matches.is_present(options::FORCE) {
-        OverwriteMode::Force
-    } else if matches.is_present(options::INTERACTIVE) {
-        OverwriteMode::Interactive
-    } else {
-        OverwriteMode::NoClobber
-    };
-
-    let backup_mode = backup_control::determine_backup_mode(&matches)?;
-    let backup_suffix = backup_control::determine_backup_suffix(&matches);
-
-    let settings = Settings {
-        overwrite: overwrite_mode,
-        backup: backup_mode,
-        suffix: backup_suffix,
-        symbolic: matches.is_present(options::SYMBOLIC),
-        relative: matches.is_present(options::RELATIVE),
-        target_dir: matches
-            .value_of(options::TARGET_DIRECTORY)
-            .map(String::from),
-        no_target_dir: matches.is_present(options::NO_TARGET_DIRECTORY),
-        no_dereference: matches.is_present(options::NO_DEREFERENCE),
-        verbose: matches.is_present(options::VERBOSE),
-    };
-
-    exec(&paths[..], &settings)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(backup_control::arguments::backup())
-        .arg(backup_control::arguments::backup_no_args())
-        // TODO: opts.arg(
-        //    Arg::new(("d", "directory", "allow users with appropriate privileges to attempt \
-        //                                       to make hard links to directories");
-        .arg(
-            Arg::new(options::FORCE)
-                .short('f')
-                .long(options::FORCE)
-                .help("remove existing destination files"),
-        )
-        .arg(
-            Arg::new(options::INTERACTIVE)
-                .short('i')
-                .long(options::INTERACTIVE)
-                .help("prompt whether to remove existing destination files"),
-        )
-        .arg(
-            Arg::new(options::NO_DEREFERENCE)
-                .short('n')
-                .long(options::NO_DEREFERENCE)
-                .help(
-                    "treat LINK_NAME as a normal file if it is a \
-                     symbolic link to a directory",
-                ),
-        )
-        // TODO: opts.arg(
-        //    Arg::new(("L", "logical", "dereference TARGETs that are symbolic links");
-        //
-        // TODO: opts.arg(
-        //    Arg::new(("P", "physical", "make hard links directly to symbolic links");
-        .arg(
-            Arg::new(options::SYMBOLIC)
-                .short('s')
-                .long("symbolic")
-                .help("make symbolic links instead of hard links")
-                // override added for https://github.com/uutils/coreutils/issues/2359
-                .overrides_with(options::SYMBOLIC),
-        )
-        .arg(backup_control::arguments::suffix())
-        .arg(
-            Arg::new(options::TARGET_DIRECTORY)
-                .short('t')
-                .long(options::TARGET_DIRECTORY)
-                .help("specify the DIRECTORY in which to create the links")
-                .value_name("DIRECTORY")
-                .conflicts_with(options::NO_TARGET_DIRECTORY),
-        )
-        .arg(
-            Arg::new(options::NO_TARGET_DIRECTORY)
-                .short('T')
-                .long(options::NO_TARGET_DIRECTORY)
-                .help("treat LINK_NAME as a normal file always"),
-        )
-        .arg(
-            Arg::new(options::RELATIVE)
-                .short('r')
-                .long(options::RELATIVE)
-                .help("create symbolic links relative to link location")
-                .requires(options::SYMBOLIC),
-        )
-        .arg(
-            Arg::new(options::VERBOSE)
-                .short('v')
-                .long(options::VERBOSE)
-                .help("print name of each linked file"),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .required(true)
-                .min_values(1),
-        )
-}
-
-fn exec(files: &[PathBuf], settings: &Settings) -> UResult<()> {
-    // Handle cases where we create links in a directory first.
-    if let Some(ref name) = settings.target_dir {
-        // 4th form: a directory is specified by -t.
-        return link_files_in_dir(files, &PathBuf::from(name), settings);
-    }
-    if !settings.no_target_dir {
-        if files.len() == 1 {
-            // 2nd form: the target directory is the current directory.
-            return link_files_in_dir(files, &PathBuf::from("."), settings);
-        }
-        let last_file = &PathBuf::from(files.last().unwrap());
-        if files.len() > 2 || last_file.is_dir() {
-            // 3rd form: create links in the last argument.
-            return link_files_in_dir(&files[0..files.len() - 1], last_file, settings);
-        }
-    }
-
-    // 1st form. Now there should be only two operands, but if -T is
-    // specified we may have a wrong number of operands.
-    if files.len() == 1 {
-        return Err(LnError::MissingDestination(files[0].clone()).into());
-    }
-    if files.len() > 2 {
-        return Err(LnError::ExtraOperand(files[2].clone().into()).into());
-    }
-    assert!(!files.is_empty());
-
-    match link(&files[0], &files[1], settings) {
-        Ok(_) => Ok(()),
-        Err(e) => Err(LnError::FailedToLink(e.to_string()).into()),
-    }
-}
-
-fn link_files_in_dir(files: &[PathBuf], target_dir: &Path, settings: &Settings) -> UResult<()> {
-    if !target_dir.is_dir() {
-        return Err(LnError::TargetIsDirectory(target_dir.to_owned()).into());
-    }
-
-    let mut all_successful = true;
-    for srcpath in files.iter() {
-        let targetpath =
-            if settings.no_dereference && matches!(settings.overwrite, OverwriteMode::Force) {
-                // In that case, we don't want to do link resolution
-                // We need to clean the target
-                if is_symlink(target_dir) {
-                    if target_dir.is_file() {
-                        if let Err(e) = fs::remove_file(target_dir) {
-                            show_error!("Could not update {}: {}", target_dir.quote(), e)
-                        };
-                    }
-                    if target_dir.is_dir() {
-                        // Not sure why but on Windows, the symlink can be
-                        // considered as a dir
-                        // See test_ln::test_symlink_no_deref_dir
-                        if let Err(e) = fs::remove_dir(target_dir) {
-                            show_error!("Could not update {}: {}", target_dir.quote(), e)
-                        };
-                    }
-                }
-                target_dir.to_path_buf()
-            } else {
-                match srcpath.as_os_str().to_str() {
-                    Some(name) => {
-                        match Path::new(name).file_name() {
-                            Some(basename) => target_dir.join(basename),
-                            // This can be None only for "." or "..". Trying
-                            // to create a link with such name will fail with
-                            // EEXIST, which agrees with the behavior of GNU
-                            // coreutils.
-                            None => target_dir.join(name),
-                        }
-                    }
-                    None => {
-                        show_error!("cannot stat {}: No such file or directory", srcpath.quote());
-                        all_successful = false;
-                        continue;
-                    }
-                }
-            };
-
-        if let Err(e) = link(srcpath, &targetpath, settings) {
-            show_error!(
-                "cannot link {} to {}: {}",
-                targetpath.quote(),
-                srcpath.quote(),
-                e
-            );
-            all_successful = false;
-        }
-    }
-    if all_successful {
-        Ok(())
-    } else {
-        Err(LnError::SomeLinksFailed.into())
-    }
-}
-
-fn relative_path<'a>(src: &Path, dst: &Path) -> Result<Cow<'a, Path>> {
-    let src_abs = canonicalize(src, MissingHandling::Normal, ResolveMode::Logical)?;
-    let mut dst_abs = canonicalize(
-        dst.parent().unwrap(),
-        MissingHandling::Normal,
-        ResolveMode::Logical,
-    )?;
-    dst_abs.push(dst.components().last().unwrap());
-    let suffix_pos = src_abs
-        .components()
-        .zip(dst_abs.components())
-        .take_while(|(s, d)| s == d)
-        .count();
-
-    let src_iter = src_abs.components().skip(suffix_pos).map(|x| x.as_os_str());
-
-    let mut result: PathBuf = dst_abs
-        .components()
-        .skip(suffix_pos + 1)
-        .map(|_| OsStr::new(".."))
-        .chain(src_iter)
-        .collect();
-    if result.as_os_str().is_empty() {
-        result.push(".");
-    }
-    Ok(result.into())
-}
-
-fn link(src: &Path, dst: &Path, settings: &Settings) -> Result<()> {
-    let mut backup_path = None;
-    let source: Cow<'_, Path> = if settings.relative {
-        relative_path(src, dst)?
-    } else {
-        src.into()
-    };
-
-    if is_symlink(dst) || dst.exists() {
-        match settings.overwrite {
-            OverwriteMode::NoClobber => {}
-            OverwriteMode::Interactive => {
-                print!("{}: overwrite {}? ", uucore::util_name(), dst.quote());
-                if !read_yes() {
-                    return Ok(());
-                }
-                fs::remove_file(dst)?
-            }
-            OverwriteMode::Force => fs::remove_file(dst)?,
-        };
-
-        backup_path = match settings.backup {
-            BackupMode::NoBackup => None,
-            BackupMode::SimpleBackup => Some(simple_backup_path(dst, &settings.suffix)),
-            BackupMode::NumberedBackup => Some(numbered_backup_path(dst)),
-            BackupMode::ExistingBackup => Some(existing_backup_path(dst, &settings.suffix)),
-        };
-        if let Some(ref p) = backup_path {
-            fs::rename(dst, p)?;
-        }
-    }
-
-    if settings.symbolic {
-        symlink(&source, dst)?;
-    } else {
-        fs::hard_link(&source, dst)?;
-    }
-
-    if settings.verbose {
-        print!("{} -> {}", dst.quote(), source.quote());
-        match backup_path {
-            Some(path) => println!(" (backup: {})", path.quote()),
-            None => println!(),
-        }
-    }
-    Ok(())
-}
-
-fn read_yes() -> bool {
-    let mut s = String::new();
-    match stdin().read_line(&mut s) {
-        Ok(_) => match s.char_indices().next() {
-            Some((_, x)) => x == 'y' || x == 'Y',
-            _ => false,
-        },
-        _ => false,
-    }
-}
-
-fn simple_backup_path(path: &Path, suffix: &str) -> PathBuf {
-    let mut p = path.as_os_str().to_str().unwrap().to_owned();
-    p.push_str(suffix);
-    PathBuf::from(p)
-}
-
-fn numbered_backup_path(path: &Path) -> PathBuf {
-    let mut i: u64 = 1;
-    loop {
-        let new_path = simple_backup_path(path, &format!(".~{}~", i));
-        if !new_path.exists() {
-            return new_path;
-        }
-        i += 1;
-    }
-}
-
-fn existing_backup_path(path: &Path, suffix: &str) -> PathBuf {
-    let test_path = simple_backup_path(path, ".~1~");
-    if test_path.exists() {
-        return numbered_backup_path(path);
-    }
-    simple_backup_path(path, suffix)
-}
-
-#[cfg(windows)]
-pub fn symlink<P1: AsRef<Path>, P2: AsRef<Path>>(src: P1, dst: P2) -> Result<()> {
-    if src.as_ref().is_dir() {
-        symlink_dir(src, dst)
-    } else {
-        symlink_file(src, dst)
-    }
-}
-
-pub fn is_symlink<P: AsRef<Path>>(path: P) -> bool {
-    match fs::symlink_metadata(path) {
-        Ok(m) => m.file_type().is_symlink(),
-        Err(_) => false,
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_logname/logname.rs.html b/src/uu_logname/logname.rs.html deleted file mode 100644 index b54f2f4d2..000000000 --- a/src/uu_logname/logname.rs.html +++ /dev/null @@ -1,128 +0,0 @@ -logname.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Benoit Benedetti <benoit.benedetti@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-/* last synced with: logname (GNU coreutils) 8.22 */
-
-// spell-checker:ignore (ToDO) getlogin userlogin
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App};
-use std::ffi::CStr;
-use uucore::error::UResult;
-use uucore::InvalidEncodingHandling;
-
-extern "C" {
-    // POSIX requires using getlogin (or equivalent code)
-    pub fn getlogin() -> *const libc::c_char;
-}
-
-fn get_userlogin() -> Option<String> {
-    unsafe {
-        let login: *const libc::c_char = getlogin();
-        if login.is_null() {
-            None
-        } else {
-            Some(String::from_utf8_lossy(CStr::from_ptr(login).to_bytes()).to_string())
-        }
-    }
-}
-
-static SUMMARY: &str = "Print user's login name";
-
-fn usage() -> &'static str {
-    uucore::execution_phrase()
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let _ = uu_app().override_usage(usage()).get_matches_from(args);
-
-    match get_userlogin() {
-        Some(userlogin) => println!("{}", userlogin),
-        None => show_error!("no login name"),
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(SUMMARY)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_ls/ls.rs.html b/src/uu_ls/ls.rs.html deleted file mode 100644 index 55f505aa1..000000000 --- a/src/uu_ls/ls.rs.html +++ /dev/null @@ -1,4946 +0,0 @@ -ls.rs - source -
   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-  11
-  12
-  13
-  14
-  15
-  16
-  17
-  18
-  19
-  20
-  21
-  22
-  23
-  24
-  25
-  26
-  27
-  28
-  29
-  30
-  31
-  32
-  33
-  34
-  35
-  36
-  37
-  38
-  39
-  40
-  41
-  42
-  43
-  44
-  45
-  46
-  47
-  48
-  49
-  50
-  51
-  52
-  53
-  54
-  55
-  56
-  57
-  58
-  59
-  60
-  61
-  62
-  63
-  64
-  65
-  66
-  67
-  68
-  69
-  70
-  71
-  72
-  73
-  74
-  75
-  76
-  77
-  78
-  79
-  80
-  81
-  82
-  83
-  84
-  85
-  86
-  87
-  88
-  89
-  90
-  91
-  92
-  93
-  94
-  95
-  96
-  97
-  98
-  99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 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
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-1129
-1130
-1131
-1132
-1133
-1134
-1135
-1136
-1137
-1138
-1139
-1140
-1141
-1142
-1143
-1144
-1145
-1146
-1147
-1148
-1149
-1150
-1151
-1152
-1153
-1154
-1155
-1156
-1157
-1158
-1159
-1160
-1161
-1162
-1163
-1164
-1165
-1166
-1167
-1168
-1169
-1170
-1171
-1172
-1173
-1174
-1175
-1176
-1177
-1178
-1179
-1180
-1181
-1182
-1183
-1184
-1185
-1186
-1187
-1188
-1189
-1190
-1191
-1192
-1193
-1194
-1195
-1196
-1197
-1198
-1199
-1200
-1201
-1202
-1203
-1204
-1205
-1206
-1207
-1208
-1209
-1210
-1211
-1212
-1213
-1214
-1215
-1216
-1217
-1218
-1219
-1220
-1221
-1222
-1223
-1224
-1225
-1226
-1227
-1228
-1229
-1230
-1231
-1232
-1233
-1234
-1235
-1236
-1237
-1238
-1239
-1240
-1241
-1242
-1243
-1244
-1245
-1246
-1247
-1248
-1249
-1250
-1251
-1252
-1253
-1254
-1255
-1256
-1257
-1258
-1259
-1260
-1261
-1262
-1263
-1264
-1265
-1266
-1267
-1268
-1269
-1270
-1271
-1272
-1273
-1274
-1275
-1276
-1277
-1278
-1279
-1280
-1281
-1282
-1283
-1284
-1285
-1286
-1287
-1288
-1289
-1290
-1291
-1292
-1293
-1294
-1295
-1296
-1297
-1298
-1299
-1300
-1301
-1302
-1303
-1304
-1305
-1306
-1307
-1308
-1309
-1310
-1311
-1312
-1313
-1314
-1315
-1316
-1317
-1318
-1319
-1320
-1321
-1322
-1323
-1324
-1325
-1326
-1327
-1328
-1329
-1330
-1331
-1332
-1333
-1334
-1335
-1336
-1337
-1338
-1339
-1340
-1341
-1342
-1343
-1344
-1345
-1346
-1347
-1348
-1349
-1350
-1351
-1352
-1353
-1354
-1355
-1356
-1357
-1358
-1359
-1360
-1361
-1362
-1363
-1364
-1365
-1366
-1367
-1368
-1369
-1370
-1371
-1372
-1373
-1374
-1375
-1376
-1377
-1378
-1379
-1380
-1381
-1382
-1383
-1384
-1385
-1386
-1387
-1388
-1389
-1390
-1391
-1392
-1393
-1394
-1395
-1396
-1397
-1398
-1399
-1400
-1401
-1402
-1403
-1404
-1405
-1406
-1407
-1408
-1409
-1410
-1411
-1412
-1413
-1414
-1415
-1416
-1417
-1418
-1419
-1420
-1421
-1422
-1423
-1424
-1425
-1426
-1427
-1428
-1429
-1430
-1431
-1432
-1433
-1434
-1435
-1436
-1437
-1438
-1439
-1440
-1441
-1442
-1443
-1444
-1445
-1446
-1447
-1448
-1449
-1450
-1451
-1452
-1453
-1454
-1455
-1456
-1457
-1458
-1459
-1460
-1461
-1462
-1463
-1464
-1465
-1466
-1467
-1468
-1469
-1470
-1471
-1472
-1473
-1474
-1475
-1476
-1477
-1478
-1479
-1480
-1481
-1482
-1483
-1484
-1485
-1486
-1487
-1488
-1489
-1490
-1491
-1492
-1493
-1494
-1495
-1496
-1497
-1498
-1499
-1500
-1501
-1502
-1503
-1504
-1505
-1506
-1507
-1508
-1509
-1510
-1511
-1512
-1513
-1514
-1515
-1516
-1517
-1518
-1519
-1520
-1521
-1522
-1523
-1524
-1525
-1526
-1527
-1528
-1529
-1530
-1531
-1532
-1533
-1534
-1535
-1536
-1537
-1538
-1539
-1540
-1541
-1542
-1543
-1544
-1545
-1546
-1547
-1548
-1549
-1550
-1551
-1552
-1553
-1554
-1555
-1556
-1557
-1558
-1559
-1560
-1561
-1562
-1563
-1564
-1565
-1566
-1567
-1568
-1569
-1570
-1571
-1572
-1573
-1574
-1575
-1576
-1577
-1578
-1579
-1580
-1581
-1582
-1583
-1584
-1585
-1586
-1587
-1588
-1589
-1590
-1591
-1592
-1593
-1594
-1595
-1596
-1597
-1598
-1599
-1600
-1601
-1602
-1603
-1604
-1605
-1606
-1607
-1608
-1609
-1610
-1611
-1612
-1613
-1614
-1615
-1616
-1617
-1618
-1619
-1620
-1621
-1622
-1623
-1624
-1625
-1626
-1627
-1628
-1629
-1630
-1631
-1632
-1633
-1634
-1635
-1636
-1637
-1638
-1639
-1640
-1641
-1642
-1643
-1644
-1645
-1646
-1647
-1648
-1649
-1650
-1651
-1652
-1653
-1654
-1655
-1656
-1657
-1658
-1659
-1660
-1661
-1662
-1663
-1664
-1665
-1666
-1667
-1668
-1669
-1670
-1671
-1672
-1673
-1674
-1675
-1676
-1677
-1678
-1679
-1680
-1681
-1682
-1683
-1684
-1685
-1686
-1687
-1688
-1689
-1690
-1691
-1692
-1693
-1694
-1695
-1696
-1697
-1698
-1699
-1700
-1701
-1702
-1703
-1704
-1705
-1706
-1707
-1708
-1709
-1710
-1711
-1712
-1713
-1714
-1715
-1716
-1717
-1718
-1719
-1720
-1721
-1722
-1723
-1724
-1725
-1726
-1727
-1728
-1729
-1730
-1731
-1732
-1733
-1734
-1735
-1736
-1737
-1738
-1739
-1740
-1741
-1742
-1743
-1744
-1745
-1746
-1747
-1748
-1749
-1750
-1751
-1752
-1753
-1754
-1755
-1756
-1757
-1758
-1759
-1760
-1761
-1762
-1763
-1764
-1765
-1766
-1767
-1768
-1769
-1770
-1771
-1772
-1773
-1774
-1775
-1776
-1777
-1778
-1779
-1780
-1781
-1782
-1783
-1784
-1785
-1786
-1787
-1788
-1789
-1790
-1791
-1792
-1793
-1794
-1795
-1796
-1797
-1798
-1799
-1800
-1801
-1802
-1803
-1804
-1805
-1806
-1807
-1808
-1809
-1810
-1811
-1812
-1813
-1814
-1815
-1816
-1817
-1818
-1819
-1820
-1821
-1822
-1823
-1824
-1825
-1826
-1827
-1828
-1829
-1830
-1831
-1832
-1833
-1834
-1835
-1836
-1837
-1838
-1839
-1840
-1841
-1842
-1843
-1844
-1845
-1846
-1847
-1848
-1849
-1850
-1851
-1852
-1853
-1854
-1855
-1856
-1857
-1858
-1859
-1860
-1861
-1862
-1863
-1864
-1865
-1866
-1867
-1868
-1869
-1870
-1871
-1872
-1873
-1874
-1875
-1876
-1877
-1878
-1879
-1880
-1881
-1882
-1883
-1884
-1885
-1886
-1887
-1888
-1889
-1890
-1891
-1892
-1893
-1894
-1895
-1896
-1897
-1898
-1899
-1900
-1901
-1902
-1903
-1904
-1905
-1906
-1907
-1908
-1909
-1910
-1911
-1912
-1913
-1914
-1915
-1916
-1917
-1918
-1919
-1920
-1921
-1922
-1923
-1924
-1925
-1926
-1927
-1928
-1929
-1930
-1931
-1932
-1933
-1934
-1935
-1936
-1937
-1938
-1939
-1940
-1941
-1942
-1943
-1944
-1945
-1946
-1947
-1948
-1949
-1950
-1951
-1952
-1953
-1954
-1955
-1956
-1957
-1958
-1959
-1960
-1961
-1962
-1963
-1964
-1965
-1966
-1967
-1968
-1969
-1970
-1971
-1972
-1973
-1974
-1975
-1976
-1977
-1978
-1979
-1980
-1981
-1982
-1983
-1984
-1985
-1986
-1987
-1988
-1989
-1990
-1991
-1992
-1993
-1994
-1995
-1996
-1997
-1998
-1999
-2000
-2001
-2002
-2003
-2004
-2005
-2006
-2007
-2008
-2009
-2010
-2011
-2012
-2013
-2014
-2015
-2016
-2017
-2018
-2019
-2020
-2021
-2022
-2023
-2024
-2025
-2026
-2027
-2028
-2029
-2030
-2031
-2032
-2033
-2034
-2035
-2036
-2037
-2038
-2039
-2040
-2041
-2042
-2043
-2044
-2045
-2046
-2047
-2048
-2049
-2050
-2051
-2052
-2053
-2054
-2055
-2056
-2057
-2058
-2059
-2060
-2061
-2062
-2063
-2064
-2065
-2066
-2067
-2068
-2069
-2070
-2071
-2072
-2073
-2074
-2075
-2076
-2077
-2078
-2079
-2080
-2081
-2082
-2083
-2084
-2085
-2086
-2087
-2088
-2089
-2090
-2091
-2092
-2093
-2094
-2095
-2096
-2097
-2098
-2099
-2100
-2101
-2102
-2103
-2104
-2105
-2106
-2107
-2108
-2109
-2110
-2111
-2112
-2113
-2114
-2115
-2116
-2117
-2118
-2119
-2120
-2121
-2122
-2123
-2124
-2125
-2126
-2127
-2128
-2129
-2130
-2131
-2132
-2133
-2134
-2135
-2136
-2137
-2138
-2139
-2140
-2141
-2142
-2143
-2144
-2145
-2146
-2147
-2148
-2149
-2150
-2151
-2152
-2153
-2154
-2155
-2156
-2157
-2158
-2159
-2160
-2161
-2162
-2163
-2164
-2165
-2166
-2167
-2168
-2169
-2170
-2171
-2172
-2173
-2174
-2175
-2176
-2177
-2178
-2179
-2180
-2181
-2182
-2183
-2184
-2185
-2186
-2187
-2188
-2189
-2190
-2191
-2192
-2193
-2194
-2195
-2196
-2197
-2198
-2199
-2200
-2201
-2202
-2203
-2204
-2205
-2206
-2207
-2208
-2209
-2210
-2211
-2212
-2213
-2214
-2215
-2216
-2217
-2218
-2219
-2220
-2221
-2222
-2223
-2224
-2225
-2226
-2227
-2228
-2229
-2230
-2231
-2232
-2233
-2234
-2235
-2236
-2237
-2238
-2239
-2240
-2241
-2242
-2243
-2244
-2245
-2246
-2247
-2248
-2249
-2250
-2251
-2252
-2253
-2254
-2255
-2256
-2257
-2258
-2259
-2260
-2261
-2262
-2263
-2264
-2265
-2266
-2267
-2268
-2269
-2270
-2271
-2272
-2273
-2274
-2275
-2276
-2277
-2278
-2279
-2280
-2281
-2282
-2283
-2284
-2285
-2286
-2287
-2288
-2289
-2290
-2291
-2292
-2293
-2294
-2295
-2296
-2297
-2298
-2299
-2300
-2301
-2302
-2303
-2304
-2305
-2306
-2307
-2308
-2309
-2310
-2311
-2312
-2313
-2314
-2315
-2316
-2317
-2318
-2319
-2320
-2321
-2322
-2323
-2324
-2325
-2326
-2327
-2328
-2329
-2330
-2331
-2332
-2333
-2334
-2335
-2336
-2337
-2338
-2339
-2340
-2341
-2342
-2343
-2344
-2345
-2346
-2347
-2348
-2349
-2350
-2351
-2352
-2353
-2354
-2355
-2356
-2357
-2358
-2359
-2360
-2361
-2362
-2363
-2364
-2365
-2366
-2367
-2368
-2369
-2370
-2371
-2372
-2373
-2374
-2375
-2376
-2377
-2378
-2379
-2380
-2381
-2382
-2383
-2384
-2385
-2386
-2387
-2388
-2389
-2390
-2391
-2392
-2393
-2394
-2395
-2396
-2397
-2398
-2399
-2400
-2401
-2402
-2403
-2404
-2405
-2406
-2407
-2408
-2409
-2410
-2411
-2412
-2413
-2414
-2415
-2416
-2417
-2418
-2419
-2420
-2421
-2422
-2423
-2424
-2425
-2426
-2427
-2428
-2429
-2430
-2431
-2432
-2433
-2434
-2435
-2436
-2437
-2438
-2439
-2440
-2441
-2442
-2443
-2444
-2445
-2446
-2447
-2448
-2449
-2450
-2451
-2452
-2453
-2454
-2455
-2456
-2457
-2458
-2459
-2460
-2461
-2462
-2463
-2464
-2465
-2466
-2467
-2468
-2469
-2470
-2471
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jeremiah Peschka <jeremiah.peschka@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) cpio svgz webm somegroup nlink rmvb xspf
-
-#[macro_use]
-extern crate uucore;
-#[cfg(unix)]
-#[macro_use]
-extern crate lazy_static;
-
-mod quoting_style;
-
-use clap::{crate_version, App, Arg};
-use glob::Pattern;
-use lscolors::LsColors;
-use number_prefix::NumberPrefix;
-use once_cell::unsync::OnceCell;
-use quoting_style::{escape_name, QuotingStyle};
-use std::ffi::OsString;
-#[cfg(windows)]
-use std::os::windows::fs::MetadataExt;
-use std::{
-    cmp::Reverse,
-    error::Error,
-    fmt::Display,
-    fs::{self, DirEntry, FileType, Metadata},
-    io::{stdout, BufWriter, ErrorKind, Stdout, Write},
-    path::{Path, PathBuf},
-    time::{SystemTime, UNIX_EPOCH},
-};
-#[cfg(unix)]
-use std::{
-    collections::HashMap,
-    os::unix::fs::{FileTypeExt, MetadataExt},
-    time::Duration,
-};
-use term_grid::{Cell, Direction, Filling, Grid, GridOptions};
-use uucore::{
-    display::Quotable,
-    error::{set_exit_code, UError, UResult},
-};
-
-use unicode_width::UnicodeWidthStr;
-#[cfg(unix)]
-use uucore::libc::{S_IXGRP, S_IXOTH, S_IXUSR};
-use uucore::{fs::display_permissions, version_cmp::version_cmp};
-
-#[cfg(not(feature = "selinux"))]
-static CONTEXT_HELP_TEXT: &str = "print any security context of each file (not enabled)";
-#[cfg(feature = "selinux")]
-static CONTEXT_HELP_TEXT: &str = "print any security context of each file";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-pub mod options {
-
-    pub mod format {
-        pub static ONE_LINE: &str = "1";
-        pub static LONG: &str = "long";
-        pub static COLUMNS: &str = "C";
-        pub static ACROSS: &str = "x";
-        pub static COMMAS: &str = "m";
-        pub static LONG_NO_OWNER: &str = "g";
-        pub static LONG_NO_GROUP: &str = "o";
-        pub static LONG_NUMERIC_UID_GID: &str = "numeric-uid-gid";
-    }
-
-    pub mod files {
-        pub static ALL: &str = "all";
-        pub static ALMOST_ALL: &str = "almost-all";
-    }
-
-    pub mod sort {
-        pub static SIZE: &str = "S";
-        pub static TIME: &str = "t";
-        pub static NONE: &str = "U";
-        pub static VERSION: &str = "v";
-        pub static EXTENSION: &str = "X";
-    }
-
-    pub mod time {
-        pub static ACCESS: &str = "u";
-        pub static CHANGE: &str = "c";
-    }
-
-    pub mod size {
-        pub static HUMAN_READABLE: &str = "human-readable";
-        pub static SI: &str = "si";
-    }
-
-    pub mod quoting {
-        pub static ESCAPE: &str = "escape";
-        pub static LITERAL: &str = "literal";
-        pub static C: &str = "quote-name";
-    }
-
-    pub mod indicator_style {
-        pub static SLASH: &str = "p";
-        pub static FILE_TYPE: &str = "file-type";
-        pub static CLASSIFY: &str = "classify";
-    }
-
-    pub mod dereference {
-        pub static ALL: &str = "dereference";
-        pub static ARGS: &str = "dereference-command-line";
-        pub static DIR_ARGS: &str = "dereference-command-line-symlink-to-dir";
-    }
-
-    pub static QUOTING_STYLE: &str = "quoting-style";
-    pub static HIDE_CONTROL_CHARS: &str = "hide-control-chars";
-    pub static SHOW_CONTROL_CHARS: &str = "show-control-chars";
-    pub static WIDTH: &str = "width";
-    pub static AUTHOR: &str = "author";
-    pub static NO_GROUP: &str = "no-group";
-    pub static FORMAT: &str = "format";
-    pub static SORT: &str = "sort";
-    pub static TIME: &str = "time";
-    pub static IGNORE_BACKUPS: &str = "ignore-backups";
-    pub static DIRECTORY: &str = "directory";
-    pub static INODE: &str = "inode";
-    pub static REVERSE: &str = "reverse";
-    pub static RECURSIVE: &str = "recursive";
-    pub static COLOR: &str = "color";
-    pub static PATHS: &str = "paths";
-    pub static INDICATOR_STYLE: &str = "indicator-style";
-    pub static TIME_STYLE: &str = "time-style";
-    pub static FULL_TIME: &str = "full-time";
-    pub static HIDE: &str = "hide";
-    pub static IGNORE: &str = "ignore";
-    pub static CONTEXT: &str = "context";
-}
-
-const DEFAULT_TERM_WIDTH: u16 = 80;
-
-#[derive(Debug)]
-enum LsError {
-    InvalidLineWidth(String),
-    IOError(std::io::Error),
-    IOErrorContext(std::io::Error, PathBuf),
-}
-
-impl UError for LsError {
-    fn code(&self) -> i32 {
-        match self {
-            LsError::InvalidLineWidth(_) => 2,
-            LsError::IOError(_) => 1,
-            LsError::IOErrorContext(_, _) => 1,
-        }
-    }
-}
-
-impl Error for LsError {}
-
-impl Display for LsError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            LsError::InvalidLineWidth(s) => write!(f, "invalid line width: {}", s.quote()),
-            LsError::IOError(e) => write!(f, "general io error: {}", e),
-            LsError::IOErrorContext(e, p) => {
-                let error_kind = e.kind();
-                let raw_os_error = e.raw_os_error().unwrap_or(13i32);
-
-                match error_kind {
-                    // No such file or directory
-                    ErrorKind::NotFound => {
-                        write!(
-                            f,
-                            "cannot access '{}': No such file or directory",
-                            p.to_string_lossy(),
-                        )
-                    }
-                    // Permission denied and Operation not permitted
-                    ErrorKind::PermissionDenied =>
-                    {
-                        #[allow(clippy::wildcard_in_or_patterns)]
-                        match raw_os_error {
-                            1i32 => {
-                                write!(
-                                    f,
-                                    "cannot access '{}': Operation not permitted",
-                                    p.to_string_lossy(),
-                                )
-                            }
-                            13i32 | _ => {
-                                if p.is_dir() {
-                                    write!(
-                                        f,
-                                        "cannot open directory '{}': Permission denied",
-                                        p.to_string_lossy(),
-                                    )
-                                } else {
-                                    write!(
-                                        f,
-                                        "cannot open file '{}': Permission denied",
-                                        p.to_string_lossy(),
-                                    )
-                                }
-                            }
-                        }
-                    }
-                    _ => write!(
-                        f,
-                        "unknown io error: '{:?}', '{:?}'",
-                        p.to_string_lossy(),
-                        e
-                    ),
-                }
-            }
-        }
-    }
-}
-
-#[derive(PartialEq, Eq)]
-enum Format {
-    Columns,
-    Long,
-    OneLine,
-    Across,
-    Commas,
-}
-
-#[derive(PartialEq, Eq)]
-enum Sort {
-    None,
-    Name,
-    Size,
-    Time,
-    Version,
-    Extension,
-}
-
-enum SizeFormat {
-    Bytes,
-    Binary,  // Powers of 1024, --human-readable, -h
-    Decimal, // Powers of 1000, --si
-}
-
-#[derive(PartialEq, Eq)]
-enum Files {
-    All,
-    AlmostAll,
-    Normal,
-}
-
-enum Time {
-    Modification,
-    Access,
-    Change,
-    Birth,
-}
-
-#[derive(Debug)]
-enum TimeStyle {
-    FullIso,
-    LongIso,
-    Iso,
-    Locale,
-}
-
-enum Dereference {
-    None,
-    DirArgs,
-    Args,
-    All,
-}
-
-#[derive(PartialEq, Eq)]
-enum IndicatorStyle {
-    None,
-    Slash,
-    FileType,
-    Classify,
-}
-
-struct Config {
-    format: Format,
-    files: Files,
-    sort: Sort,
-    recursive: bool,
-    reverse: bool,
-    dereference: Dereference,
-    ignore_patterns: Vec<Pattern>,
-    size_format: SizeFormat,
-    directory: bool,
-    time: Time,
-    #[cfg(unix)]
-    inode: bool,
-    color: Option<LsColors>,
-    long: LongFormat,
-    width: u16,
-    quoting_style: QuotingStyle,
-    indicator_style: IndicatorStyle,
-    time_style: TimeStyle,
-    context: bool,
-    selinux_supported: bool,
-}
-
-// Fields that can be removed or added to the long format
-struct LongFormat {
-    author: bool,
-    group: bool,
-    owner: bool,
-    #[cfg(unix)]
-    numeric_uid_gid: bool,
-}
-
-struct PaddingCollection {
-    #[cfg(unix)]
-    longest_inode_len: usize,
-    longest_link_count_len: usize,
-    longest_uname_len: usize,
-    longest_group_len: usize,
-    longest_context_len: usize,
-    longest_size_len: usize,
-    #[cfg(unix)]
-    longest_major_len: usize,
-    #[cfg(unix)]
-    longest_minor_len: usize,
-}
-
-impl Config {
-    #[allow(clippy::cognitive_complexity)]
-    fn from(options: &clap::ArgMatches) -> UResult<Config> {
-        let context = options.is_present(options::CONTEXT);
-        let (mut format, opt) = if let Some(format_) = options.value_of(options::FORMAT) {
-            (
-                match format_ {
-                    "long" | "verbose" => Format::Long,
-                    "single-column" => Format::OneLine,
-                    "columns" | "vertical" => Format::Columns,
-                    "across" | "horizontal" => Format::Across,
-                    "commas" => Format::Commas,
-                    // below should never happen as clap already restricts the values.
-                    _ => unreachable!("Invalid field for --format"),
-                },
-                Some(options::FORMAT),
-            )
-        } else if options.is_present(options::format::LONG) {
-            (Format::Long, Some(options::format::LONG))
-        } else if options.is_present(options::format::ACROSS) {
-            (Format::Across, Some(options::format::ACROSS))
-        } else if options.is_present(options::format::COMMAS) {
-            (Format::Commas, Some(options::format::COMMAS))
-        } else if options.is_present(options::format::COLUMNS) {
-            (Format::Columns, Some(options::format::COLUMNS))
-        } else if atty::is(atty::Stream::Stdout) {
-            (Format::Columns, None)
-        } else {
-            (Format::OneLine, None)
-        };
-
-        // The -o, -n and -g options are tricky. They cannot override with each
-        // other because it's possible to combine them. For example, the option
-        // -og should hide both owner and group. Furthermore, they are not
-        // reset if -l or --format=long is used. So these should just show the
-        // group: -gl or "-g --format=long". Finally, they are also not reset
-        // when switching to a different format option in-between like this:
-        // -ogCl or "-og --format=vertical --format=long".
-        //
-        // -1 has a similar issue: it does nothing if the format is long. This
-        // actually makes it distinct from the --format=singe-column option,
-        // which always applies.
-        //
-        // The idea here is to not let these options override with the other
-        // options, but manually whether they have an index that's greater than
-        // the other format options. If so, we set the appropriate format.
-        if format != Format::Long {
-            let idx = opt
-                .and_then(|opt| options.indices_of(opt).map(|x| x.max().unwrap()))
-                .unwrap_or(0);
-            if [
-                options::format::LONG_NO_OWNER,
-                options::format::LONG_NO_GROUP,
-                options::format::LONG_NUMERIC_UID_GID,
-                options::FULL_TIME,
-            ]
-            .iter()
-            .flat_map(|opt| options.indices_of(opt))
-            .flatten()
-            .any(|i| i >= idx)
-            {
-                format = Format::Long;
-            } else if let Some(mut indices) = options.indices_of(options::format::ONE_LINE) {
-                if indices.any(|i| i > idx) {
-                    format = Format::OneLine;
-                }
-            }
-        }
-
-        let files = if options.is_present(options::files::ALL) {
-            Files::All
-        } else if options.is_present(options::files::ALMOST_ALL) {
-            Files::AlmostAll
-        } else {
-            Files::Normal
-        };
-
-        let sort = if let Some(field) = options.value_of(options::SORT) {
-            match field {
-                "none" => Sort::None,
-                "name" => Sort::Name,
-                "time" => Sort::Time,
-                "size" => Sort::Size,
-                "version" => Sort::Version,
-                "extension" => Sort::Extension,
-                // below should never happen as clap already restricts the values.
-                _ => unreachable!("Invalid field for --sort"),
-            }
-        } else if options.is_present(options::sort::TIME) {
-            Sort::Time
-        } else if options.is_present(options::sort::SIZE) {
-            Sort::Size
-        } else if options.is_present(options::sort::NONE) {
-            Sort::None
-        } else if options.is_present(options::sort::VERSION) {
-            Sort::Version
-        } else if options.is_present(options::sort::EXTENSION) {
-            Sort::Extension
-        } else {
-            Sort::Name
-        };
-
-        let time = if let Some(field) = options.value_of(options::TIME) {
-            match field {
-                "ctime" | "status" => Time::Change,
-                "access" | "atime" | "use" => Time::Access,
-                "birth" | "creation" => Time::Birth,
-                // below should never happen as clap already restricts the values.
-                _ => unreachable!("Invalid field for --time"),
-            }
-        } else if options.is_present(options::time::ACCESS) {
-            Time::Access
-        } else if options.is_present(options::time::CHANGE) {
-            Time::Change
-        } else {
-            Time::Modification
-        };
-
-        let needs_color = match options.value_of(options::COLOR) {
-            None => options.is_present(options::COLOR),
-            Some(val) => match val {
-                "" | "always" | "yes" | "force" => true,
-                "auto" | "tty" | "if-tty" => atty::is(atty::Stream::Stdout),
-                /* "never" | "no" | "none" | */ _ => false,
-            },
-        };
-
-        let color = if needs_color {
-            Some(LsColors::from_env().unwrap_or_default())
-        } else {
-            None
-        };
-
-        let size_format = if options.is_present(options::size::HUMAN_READABLE) {
-            SizeFormat::Binary
-        } else if options.is_present(options::size::SI) {
-            SizeFormat::Decimal
-        } else {
-            SizeFormat::Bytes
-        };
-
-        let long = {
-            let author = options.is_present(options::AUTHOR);
-            let group = !options.is_present(options::NO_GROUP)
-                && !options.is_present(options::format::LONG_NO_GROUP);
-            let owner = !options.is_present(options::format::LONG_NO_OWNER);
-            #[cfg(unix)]
-            let numeric_uid_gid = options.is_present(options::format::LONG_NUMERIC_UID_GID);
-            LongFormat {
-                author,
-                group,
-                owner,
-                #[cfg(unix)]
-                numeric_uid_gid,
-            }
-        };
-
-        let width = match options.value_of(options::WIDTH) {
-            Some(x) => match x.parse::<u16>() {
-                Ok(u) => u,
-                Err(_) => return Err(LsError::InvalidLineWidth(x.into()).into()),
-            },
-            None => match termsize::get() {
-                Some(size) => size.cols,
-                None => match std::env::var_os("COLUMNS") {
-                    Some(columns) => match columns.to_str().and_then(|s| s.parse().ok()) {
-                        Some(columns) => columns,
-                        None => {
-                            show_error!(
-                                "ignoring invalid width in environment variable COLUMNS: {}",
-                                columns.quote()
-                            );
-                            DEFAULT_TERM_WIDTH
-                        }
-                    },
-                    None => DEFAULT_TERM_WIDTH,
-                },
-            },
-        };
-
-        #[allow(clippy::needless_bool)]
-        let show_control = if options.is_present(options::HIDE_CONTROL_CHARS) {
-            false
-        } else if options.is_present(options::SHOW_CONTROL_CHARS) {
-            true
-        } else {
-            !atty::is(atty::Stream::Stdout)
-        };
-
-        let quoting_style = if let Some(style) = options.value_of(options::QUOTING_STYLE) {
-            match style {
-                "literal" => QuotingStyle::Literal { show_control },
-                "shell" => QuotingStyle::Shell {
-                    escape: false,
-                    always_quote: false,
-                    show_control,
-                },
-                "shell-always" => QuotingStyle::Shell {
-                    escape: false,
-                    always_quote: true,
-                    show_control,
-                },
-                "shell-escape" => QuotingStyle::Shell {
-                    escape: true,
-                    always_quote: false,
-                    show_control,
-                },
-                "shell-escape-always" => QuotingStyle::Shell {
-                    escape: true,
-                    always_quote: true,
-                    show_control,
-                },
-                "c" => QuotingStyle::C {
-                    quotes: quoting_style::Quotes::Double,
-                },
-                "escape" => QuotingStyle::C {
-                    quotes: quoting_style::Quotes::None,
-                },
-                _ => unreachable!("Should have been caught by Clap"),
-            }
-        } else if options.is_present(options::quoting::LITERAL) {
-            QuotingStyle::Literal { show_control }
-        } else if options.is_present(options::quoting::ESCAPE) {
-            QuotingStyle::C {
-                quotes: quoting_style::Quotes::None,
-            }
-        } else if options.is_present(options::quoting::C) {
-            QuotingStyle::C {
-                quotes: quoting_style::Quotes::Double,
-            }
-        } else {
-            // TODO: use environment variable if available
-            QuotingStyle::Shell {
-                escape: true,
-                always_quote: false,
-                show_control,
-            }
-        };
-
-        let indicator_style = if let Some(field) = options.value_of(options::INDICATOR_STYLE) {
-            match field {
-                "none" => IndicatorStyle::None,
-                "file-type" => IndicatorStyle::FileType,
-                "classify" => IndicatorStyle::Classify,
-                "slash" => IndicatorStyle::Slash,
-                &_ => IndicatorStyle::None,
-            }
-        } else if options.is_present(options::indicator_style::CLASSIFY) {
-            IndicatorStyle::Classify
-        } else if options.is_present(options::indicator_style::SLASH) {
-            IndicatorStyle::Slash
-        } else if options.is_present(options::indicator_style::FILE_TYPE) {
-            IndicatorStyle::FileType
-        } else {
-            IndicatorStyle::None
-        };
-
-        let time_style = if let Some(field) = options.value_of(options::TIME_STYLE) {
-            //If both FULL_TIME and TIME_STYLE are present
-            //The one added last is dominant
-            if options.is_present(options::FULL_TIME)
-                && options.indices_of(options::FULL_TIME).unwrap().last()
-                    > options.indices_of(options::TIME_STYLE).unwrap().last()
-            {
-                TimeStyle::FullIso
-            } else {
-                //Clap handles the env variable "TIME_STYLE"
-                match field {
-                    "full-iso" => TimeStyle::FullIso,
-                    "long-iso" => TimeStyle::LongIso,
-                    "iso" => TimeStyle::Iso,
-                    "locale" => TimeStyle::Locale,
-                    // below should never happen as clap already restricts the values.
-                    _ => unreachable!("Invalid field for --time-style"),
-                }
-            }
-        } else if options.is_present(options::FULL_TIME) {
-            TimeStyle::FullIso
-        } else {
-            TimeStyle::Locale
-        };
-
-        let mut ignore_patterns: Vec<Pattern> = Vec::new();
-
-        if options.is_present(options::IGNORE_BACKUPS) {
-            ignore_patterns.push(Pattern::new("*~").unwrap());
-            ignore_patterns.push(Pattern::new(".*~").unwrap());
-        }
-
-        for pattern in options.values_of(options::IGNORE).into_iter().flatten() {
-            match Pattern::new(pattern) {
-                Ok(p) => {
-                    ignore_patterns.push(p);
-                }
-                Err(_) => show_warning!("Invalid pattern for ignore: {}", pattern.quote()),
-            }
-        }
-
-        if files == Files::Normal {
-            for pattern in options.values_of(options::HIDE).into_iter().flatten() {
-                match Pattern::new(pattern) {
-                    Ok(p) => {
-                        ignore_patterns.push(p);
-                    }
-                    Err(_) => show_warning!("Invalid pattern for hide: {}", pattern.quote()),
-                }
-            }
-        }
-
-        let dereference = if options.is_present(options::dereference::ALL) {
-            Dereference::All
-        } else if options.is_present(options::dereference::ARGS) {
-            Dereference::Args
-        } else if options.is_present(options::dereference::DIR_ARGS) {
-            Dereference::DirArgs
-        } else if options.is_present(options::DIRECTORY)
-            || indicator_style == IndicatorStyle::Classify
-            || format == Format::Long
-        {
-            Dereference::None
-        } else {
-            Dereference::DirArgs
-        };
-
-        Ok(Config {
-            format,
-            files,
-            sort,
-            recursive: options.is_present(options::RECURSIVE),
-            reverse: options.is_present(options::REVERSE),
-            dereference,
-            ignore_patterns,
-            size_format,
-            directory: options.is_present(options::DIRECTORY),
-            time,
-            color,
-            #[cfg(unix)]
-            inode: options.is_present(options::INODE),
-            long,
-            width,
-            quoting_style,
-            indicator_style,
-            time_style,
-            context,
-            selinux_supported: {
-                #[cfg(feature = "selinux")]
-                {
-                    selinux::kernel_support() != selinux::KernelSupport::Unsupported
-                }
-                #[cfg(not(feature = "selinux"))]
-                {
-                    false
-                }
-            },
-        })
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let app = uu_app().override_usage(&usage[..]);
-
-    let matches = app.get_matches_from(args);
-
-    let config = Config::from(&matches)?;
-
-    let locs = matches
-        .values_of_os(options::PATHS)
-        .map(|v| v.map(Path::new).collect())
-        .unwrap_or_else(|| vec![Path::new(".")]);
-
-    list(locs, config)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(
-            "By default, ls will list the files and contents of any directories on \
-            the command line, expect that it will ignore files and directories \
-            whose names start with '.'.",
-        )
-        // Format arguments
-        .arg(
-            Arg::new(options::FORMAT)
-                .long(options::FORMAT)
-                .help("Set the display format.")
-                .takes_value(true)
-                .possible_values(&[
-                    "long",
-                    "verbose",
-                    "single-column",
-                    "columns",
-                    "vertical",
-                    "across",
-                    "horizontal",
-                    "commas",
-                ])
-                .hide_possible_values(true)
-                .require_equals(true)
-                .overrides_with_all(&[
-                    options::FORMAT,
-                    options::format::COLUMNS,
-                    options::format::LONG,
-                    options::format::ACROSS,
-                    options::format::COLUMNS,
-                ]),
-        )
-        .arg(
-            Arg::new(options::format::COLUMNS)
-                .short('C')
-                .help("Display the files in columns.")
-                .overrides_with_all(&[
-                    options::FORMAT,
-                    options::format::COLUMNS,
-                    options::format::LONG,
-                    options::format::ACROSS,
-                    options::format::COLUMNS,
-                ]),
-        )
-        .arg(
-            Arg::new(options::format::LONG)
-                .short('l')
-                .long(options::format::LONG)
-                .help("Display detailed information.")
-                .overrides_with_all(&[
-                    options::FORMAT,
-                    options::format::COLUMNS,
-                    options::format::LONG,
-                    options::format::ACROSS,
-                    options::format::COLUMNS,
-                ]),
-        )
-        .arg(
-            Arg::new(options::format::ACROSS)
-                .short('x')
-                .help("List entries in rows instead of in columns.")
-                .overrides_with_all(&[
-                    options::FORMAT,
-                    options::format::COLUMNS,
-                    options::format::LONG,
-                    options::format::ACROSS,
-                    options::format::COLUMNS,
-                ]),
-        )
-        .arg(
-            Arg::new(options::format::COMMAS)
-                .short('m')
-                .help("List entries separated by commas.")
-                .overrides_with_all(&[
-                    options::FORMAT,
-                    options::format::COLUMNS,
-                    options::format::LONG,
-                    options::format::ACROSS,
-                    options::format::COLUMNS,
-                ]),
-        )
-        // The next four arguments do not override with the other format
-        // options, see the comment in Config::from for the reason.
-        // Ideally, they would use Arg::override_with, with their own name
-        // but that doesn't seem to work in all cases. Example:
-        // ls -1g1
-        // even though `ls -11` and `ls -1 -g -1` work.
-        .arg(
-            Arg::new(options::format::ONE_LINE)
-                .short('1')
-                .help("List one file per line.")
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::new(options::format::LONG_NO_GROUP)
-                .short('o')
-                .help(
-                    "Long format without group information. \
-                    Identical to --format=long with --no-group.",
-                )
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::new(options::format::LONG_NO_OWNER)
-                .short('g')
-                .help("Long format without owner information.")
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::new(options::format::LONG_NUMERIC_UID_GID)
-                .short('n')
-                .long(options::format::LONG_NUMERIC_UID_GID)
-                .help("-l with numeric UIDs and GIDs.")
-                .multiple_occurrences(true),
-        )
-        // Quoting style
-        .arg(
-            Arg::new(options::QUOTING_STYLE)
-                .long(options::QUOTING_STYLE)
-                .takes_value(true)
-                .help("Set quoting style.")
-                .possible_values(&[
-                    "literal",
-                    "shell",
-                    "shell-always",
-                    "shell-escape",
-                    "shell-escape-always",
-                    "c",
-                    "escape",
-                ])
-                .overrides_with_all(&[
-                    options::QUOTING_STYLE,
-                    options::quoting::LITERAL,
-                    options::quoting::ESCAPE,
-                    options::quoting::C,
-                ]),
-        )
-        .arg(
-            Arg::new(options::quoting::LITERAL)
-                .short('N')
-                .long(options::quoting::LITERAL)
-                .help("Use literal quoting style. Equivalent to `--quoting-style=literal`")
-                .overrides_with_all(&[
-                    options::QUOTING_STYLE,
-                    options::quoting::LITERAL,
-                    options::quoting::ESCAPE,
-                    options::quoting::C,
-                ]),
-        )
-        .arg(
-            Arg::new(options::quoting::ESCAPE)
-                .short('b')
-                .long(options::quoting::ESCAPE)
-                .help("Use escape quoting style. Equivalent to `--quoting-style=escape`")
-                .overrides_with_all(&[
-                    options::QUOTING_STYLE,
-                    options::quoting::LITERAL,
-                    options::quoting::ESCAPE,
-                    options::quoting::C,
-                ]),
-        )
-        .arg(
-            Arg::new(options::quoting::C)
-                .short('Q')
-                .long(options::quoting::C)
-                .help("Use C quoting style. Equivalent to `--quoting-style=c`")
-                .overrides_with_all(&[
-                    options::QUOTING_STYLE,
-                    options::quoting::LITERAL,
-                    options::quoting::ESCAPE,
-                    options::quoting::C,
-                ]),
-        )
-        // Control characters
-        .arg(
-            Arg::new(options::HIDE_CONTROL_CHARS)
-                .short('q')
-                .long(options::HIDE_CONTROL_CHARS)
-                .help("Replace control characters with '?' if they are not escaped.")
-                .overrides_with_all(&[options::HIDE_CONTROL_CHARS, options::SHOW_CONTROL_CHARS]),
-        )
-        .arg(
-            Arg::new(options::SHOW_CONTROL_CHARS)
-                .long(options::SHOW_CONTROL_CHARS)
-                .help("Show control characters 'as is' if they are not escaped.")
-                .overrides_with_all(&[options::HIDE_CONTROL_CHARS, options::SHOW_CONTROL_CHARS]),
-        )
-        // Time arguments
-        .arg(
-            Arg::new(options::TIME)
-                .long(options::TIME)
-                .help(
-                    "Show time in <field>:\n\
-                    \taccess time (-u): atime, access, use;\n\
-                    \tchange time (-t): ctime, status.\n\
-                    \tbirth time: birth, creation;",
-                )
-                .value_name("field")
-                .takes_value(true)
-                .possible_values(&[
-                    "atime", "access", "use", "ctime", "status", "birth", "creation",
-                ])
-                .hide_possible_values(true)
-                .require_equals(true)
-                .overrides_with_all(&[options::TIME, options::time::ACCESS, options::time::CHANGE]),
-        )
-        .arg(
-            Arg::new(options::time::CHANGE)
-                .short('c')
-                .help(
-                    "If the long listing format (e.g., -l, -o) is being used, print the status \
-                change time (the 'ctime' in the inode) instead of the modification time. When \
-                explicitly sorting by time (--sort=time or -t) or when not using a long listing \
-                format, sort according to the status change time.",
-                )
-                .overrides_with_all(&[options::TIME, options::time::ACCESS, options::time::CHANGE]),
-        )
-        .arg(
-            Arg::new(options::time::ACCESS)
-                .short('u')
-                .help(
-                    "If the long listing format (e.g., -l, -o) is being used, print the status \
-                access time instead of the modification time. When explicitly sorting by time \
-                (--sort=time or -t) or when not using a long listing format, sort according to the \
-                access time.",
-                )
-                .overrides_with_all(&[options::TIME, options::time::ACCESS, options::time::CHANGE]),
-        )
-        // Hide and ignore
-        .arg(
-            Arg::new(options::HIDE)
-                .long(options::HIDE)
-                .takes_value(true)
-                .multiple_occurrences(true)
-                .value_name("PATTERN")
-                .help(
-                    "do not list implied entries matching shell PATTERN (overridden by -a or -A)",
-                ),
-        )
-        .arg(
-            Arg::new(options::IGNORE)
-                .short('I')
-                .long(options::IGNORE)
-                .takes_value(true)
-                .multiple_occurrences(true)
-                .value_name("PATTERN")
-                .help("do not list implied entries matching shell PATTERN"),
-        )
-        .arg(
-            Arg::new(options::IGNORE_BACKUPS)
-                .short('B')
-                .long(options::IGNORE_BACKUPS)
-                .help("Ignore entries which end with ~."),
-        )
-        // Sort arguments
-        .arg(
-            Arg::new(options::SORT)
-                .long(options::SORT)
-                .help("Sort by <field>: name, none (-U), time (-t), size (-S) or extension (-X)")
-                .value_name("field")
-                .takes_value(true)
-                .possible_values(&["name", "none", "time", "size", "version", "extension"])
-                .require_equals(true)
-                .overrides_with_all(&[
-                    options::SORT,
-                    options::sort::SIZE,
-                    options::sort::TIME,
-                    options::sort::NONE,
-                    options::sort::VERSION,
-                    options::sort::EXTENSION,
-                ]),
-        )
-        .arg(
-            Arg::new(options::sort::SIZE)
-                .short('S')
-                .help("Sort by file size, largest first.")
-                .overrides_with_all(&[
-                    options::SORT,
-                    options::sort::SIZE,
-                    options::sort::TIME,
-                    options::sort::NONE,
-                    options::sort::VERSION,
-                    options::sort::EXTENSION,
-                ]),
-        )
-        .arg(
-            Arg::new(options::sort::TIME)
-                .short('t')
-                .help("Sort by modification time (the 'mtime' in the inode), newest first.")
-                .overrides_with_all(&[
-                    options::SORT,
-                    options::sort::SIZE,
-                    options::sort::TIME,
-                    options::sort::NONE,
-                    options::sort::VERSION,
-                    options::sort::EXTENSION,
-                ]),
-        )
-        .arg(
-            Arg::new(options::sort::VERSION)
-                .short('v')
-                .help("Natural sort of (version) numbers in the filenames.")
-                .overrides_with_all(&[
-                    options::SORT,
-                    options::sort::SIZE,
-                    options::sort::TIME,
-                    options::sort::NONE,
-                    options::sort::VERSION,
-                    options::sort::EXTENSION,
-                ]),
-        )
-        .arg(
-            Arg::new(options::sort::EXTENSION)
-                .short('X')
-                .help("Sort alphabetically by entry extension.")
-                .overrides_with_all(&[
-                    options::SORT,
-                    options::sort::SIZE,
-                    options::sort::TIME,
-                    options::sort::NONE,
-                    options::sort::VERSION,
-                    options::sort::EXTENSION,
-                ]),
-        )
-        .arg(
-            Arg::new(options::sort::NONE)
-                .short('U')
-                .help(
-                    "Do not sort; list the files in whatever order they are stored in the \
-    directory.  This is especially useful when listing very large directories, \
-    since not doing any sorting can be noticeably faster.",
-                )
-                .overrides_with_all(&[
-                    options::SORT,
-                    options::sort::SIZE,
-                    options::sort::TIME,
-                    options::sort::NONE,
-                    options::sort::VERSION,
-                    options::sort::EXTENSION,
-                ]),
-        )
-        // Dereferencing
-        .arg(
-            Arg::new(options::dereference::ALL)
-                .short('L')
-                .long(options::dereference::ALL)
-                .help(
-                    "When showing file information for a symbolic link, show information for the \
-                file the link references rather than the link itself.",
-                )
-                .overrides_with_all(&[
-                    options::dereference::ALL,
-                    options::dereference::DIR_ARGS,
-                    options::dereference::ARGS,
-                ]),
-        )
-        .arg(
-            Arg::new(options::dereference::DIR_ARGS)
-                .long(options::dereference::DIR_ARGS)
-                .help(
-                    "Do not dereference symlinks except when they link to directories and are \
-                given as command line arguments.",
-                )
-                .overrides_with_all(&[
-                    options::dereference::ALL,
-                    options::dereference::DIR_ARGS,
-                    options::dereference::ARGS,
-                ]),
-        )
-        .arg(
-            Arg::new(options::dereference::ARGS)
-                .short('H')
-                .long(options::dereference::ARGS)
-                .help("Do not dereference symlinks except when given as command line arguments.")
-                .overrides_with_all(&[
-                    options::dereference::ALL,
-                    options::dereference::DIR_ARGS,
-                    options::dereference::ARGS,
-                ]),
-        )
-        // Long format options
-        .arg(
-            Arg::new(options::NO_GROUP)
-                .long(options::NO_GROUP)
-                .short('G')
-                .help("Do not show group in long format."),
-        )
-        .arg(Arg::new(options::AUTHOR).long(options::AUTHOR).help(
-            "Show author in long format. \
-            On the supported platforms, the author always matches the file owner.",
-        ))
-        // Other Flags
-        .arg(
-            Arg::new(options::files::ALL)
-                .short('a')
-                .long(options::files::ALL)
-                .help("Do not ignore hidden files (files with names that start with '.')."),
-        )
-        .arg(
-            Arg::new(options::files::ALMOST_ALL)
-                .short('A')
-                .long(options::files::ALMOST_ALL)
-                .help(
-                    "In a directory, do not ignore all file names that start with '.', \
-only ignore '.' and '..'.",
-                ),
-        )
-        .arg(
-            Arg::new(options::DIRECTORY)
-                .short('d')
-                .long(options::DIRECTORY)
-                .help(
-                    "Only list the names of directories, rather than listing directory contents. \
-                This will not follow symbolic links unless one of `--dereference-command-line \
-                (-H)`, `--dereference (-L)`, or `--dereference-command-line-symlink-to-dir` is \
-                specified.",
-                ),
-        )
-        .arg(
-            Arg::new(options::size::HUMAN_READABLE)
-                .short('h')
-                .long(options::size::HUMAN_READABLE)
-                .help("Print human readable file sizes (e.g. 1K 234M 56G).")
-                .overrides_with(options::size::SI),
-        )
-        .arg(
-            Arg::new(options::size::SI)
-                .long(options::size::SI)
-                .help("Print human readable file sizes using powers of 1000 instead of 1024."),
-        )
-        .arg(
-            Arg::new(options::INODE)
-                .short('i')
-                .long(options::INODE)
-                .help("print the index number of each file"),
-        )
-        .arg(
-            Arg::new(options::REVERSE)
-                .short('r')
-                .long(options::REVERSE)
-                .help(
-                    "Reverse whatever the sorting method is e.g., list files in reverse \
-                alphabetical order, youngest first, smallest first, or whatever.",
-                ),
-        )
-        .arg(
-            Arg::new(options::RECURSIVE)
-                .short('R')
-                .long(options::RECURSIVE)
-                .help("List the contents of all directories recursively."),
-        )
-        .arg(
-            Arg::new(options::WIDTH)
-                .long(options::WIDTH)
-                .short('w')
-                .help("Assume that the terminal is COLS columns wide.")
-                .value_name("COLS")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::COLOR)
-                .long(options::COLOR)
-                .help("Color output based on file type.")
-                .takes_value(true)
-                .possible_values(&[
-                    "always", "yes", "force", "auto", "tty", "if-tty", "never", "no", "none",
-                ])
-                .require_equals(true)
-                .min_values(0),
-        )
-        .arg(
-            Arg::new(options::INDICATOR_STYLE)
-                .long(options::INDICATOR_STYLE)
-                .help(
-                    "Append indicator with style WORD to entry names: \
-                    none (default),  slash (-p), file-type (--file-type), classify (-F)",
-                )
-                .takes_value(true)
-                .possible_values(&["none", "slash", "file-type", "classify"])
-                .overrides_with_all(&[
-                    options::indicator_style::FILE_TYPE,
-                    options::indicator_style::SLASH,
-                    options::indicator_style::CLASSIFY,
-                    options::INDICATOR_STYLE,
-                ]),
-        )
-        .arg(
-            Arg::new(options::indicator_style::CLASSIFY)
-                .short('F')
-                .long(options::indicator_style::CLASSIFY)
-                .help(
-                    "Append a character to each file name indicating the file type. Also, for \
-                regular files that are executable, append '*'. The file type indicators are \
-                '/' for directories, '@' for symbolic links, '|' for FIFOs, '=' for sockets, \
-                '>' for doors, and nothing for regular files.",
-                )
-                .overrides_with_all(&[
-                    options::indicator_style::FILE_TYPE,
-                    options::indicator_style::SLASH,
-                    options::indicator_style::CLASSIFY,
-                    options::INDICATOR_STYLE,
-                ]),
-        )
-        .arg(
-            Arg::new(options::indicator_style::FILE_TYPE)
-                .long(options::indicator_style::FILE_TYPE)
-                .help("Same as --classify, but do not append '*'")
-                .overrides_with_all(&[
-                    options::indicator_style::FILE_TYPE,
-                    options::indicator_style::SLASH,
-                    options::indicator_style::CLASSIFY,
-                    options::INDICATOR_STYLE,
-                ]),
-        )
-        .arg(
-            Arg::new(options::indicator_style::SLASH)
-                .short('p')
-                .help("Append / indicator to directories.")
-                .overrides_with_all(&[
-                    options::indicator_style::FILE_TYPE,
-                    options::indicator_style::SLASH,
-                    options::indicator_style::CLASSIFY,
-                    options::INDICATOR_STYLE,
-                ]),
-        )
-        .arg(
-            //This still needs support for posix-*, +FORMAT
-            Arg::new(options::TIME_STYLE)
-                .long(options::TIME_STYLE)
-                .help("time/date format with -l; see TIME_STYLE below")
-                .value_name("TIME_STYLE")
-                .env("TIME_STYLE")
-                .possible_values(&["full-iso", "long-iso", "iso", "locale"])
-                .overrides_with_all(&[options::TIME_STYLE]),
-        )
-        .arg(
-            Arg::new(options::FULL_TIME)
-                .long(options::FULL_TIME)
-                .overrides_with(options::FULL_TIME)
-                .help("like -l --time-style=full-iso"),
-        )
-        .arg(
-            Arg::new(options::CONTEXT)
-                .short('Z')
-                .long(options::CONTEXT)
-                .help(CONTEXT_HELP_TEXT),
-        )
-        // Positional arguments
-        .arg(
-            Arg::new(options::PATHS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .allow_invalid_utf8(true),
-        )
-        .after_help(
-            "The TIME_STYLE argument can be full-iso, long-iso, iso. \
-            Also the TIME_STYLE environment variable sets the default style to use.",
-        )
-}
-
-/// Represents a Path along with it's associated data
-/// Any data that will be reused several times makes sense to be added to this structure
-/// Caching data here helps eliminate redundant syscalls to fetch same information
-#[derive(Debug)]
-struct PathData {
-    // Result<MetaData> got from symlink_metadata() or metadata() based on config
-    md: OnceCell<Option<Metadata>>,
-    ft: OnceCell<Option<FileType>>,
-    // Name of the file - will be empty for . or ..
-    display_name: OsString,
-    // PathBuf that all above data corresponds to
-    p_buf: PathBuf,
-    must_dereference: bool,
-    security_context: String,
-}
-
-impl PathData {
-    fn new(
-        p_buf: PathBuf,
-        file_type: Option<std::io::Result<FileType>>,
-        file_name: Option<OsString>,
-        config: &Config,
-        command_line: bool,
-    ) -> Self {
-        // We cannot use `Path::ends_with` or `Path::Components`, because they remove occurrences of '.'
-        // For '..', the filename is None
-        let display_name = if let Some(name) = file_name {
-            name
-        } else if command_line {
-            p_buf.clone().into()
-        } else {
-            p_buf
-                .file_name()
-                .unwrap_or_else(|| p_buf.iter().next_back().unwrap())
-                .to_owned()
-        };
-        let must_dereference = match &config.dereference {
-            Dereference::All => true,
-            Dereference::Args => command_line,
-            Dereference::DirArgs => {
-                if command_line {
-                    if let Ok(md) = p_buf.metadata() {
-                        md.is_dir()
-                    } else {
-                        false
-                    }
-                } else {
-                    false
-                }
-            }
-            Dereference::None => false,
-        };
-
-        let ft = match file_type {
-            Some(ft) => OnceCell::from(ft.ok()),
-            None => OnceCell::new(),
-        };
-
-        let security_context = if config.context {
-            get_security_context(config, &p_buf, must_dereference)
-        } else {
-            String::new()
-        };
-
-        Self {
-            md: OnceCell::new(),
-            ft,
-            display_name,
-            p_buf,
-            must_dereference,
-            security_context,
-        }
-    }
-
-    fn md(&self, out: &mut BufWriter<Stdout>) -> Option<&Metadata> {
-        self.md
-            .get_or_init(
-                || match get_metadata(self.p_buf.as_path(), self.must_dereference) {
-                    Err(err) => {
-                        let _ = out.flush();
-                        show!(LsError::IOErrorContext(err, self.p_buf.clone(),));
-                        None
-                    }
-                    Ok(md) => Some(md),
-                },
-            )
-            .as_ref()
-    }
-
-    fn file_type(&self, out: &mut BufWriter<Stdout>) -> Option<&FileType> {
-        self.ft
-            .get_or_init(|| self.md(out).map(|md| md.file_type()))
-            .as_ref()
-    }
-}
-
-fn list(locs: Vec<&Path>, config: Config) -> UResult<()> {
-    let mut files = Vec::<PathData>::new();
-    let mut dirs = Vec::<PathData>::new();
-    let mut out = BufWriter::new(stdout());
-    let initial_locs_len = locs.len();
-
-    for loc in locs {
-        let path_data = PathData::new(PathBuf::from(loc), None, None, &config, true);
-
-        // Getting metadata here is no big deal as it's just the CWD
-        // and we really just want to know if the strings exist as files/dirs
-        //
-        // Proper GNU handling is don't show if dereferenced symlink DNE
-        // but only for the base dir, for a child dir show, and print ?s
-        // in long format
-        if path_data.md(&mut out).is_none() {
-            continue;
-        }
-
-        let show_dir_contents = match path_data.file_type(&mut out) {
-            Some(ft) => !config.directory && ft.is_dir(),
-            None => {
-                set_exit_code(1);
-                false
-            }
-        };
-
-        if show_dir_contents {
-            dirs.push(path_data);
-        } else {
-            files.push(path_data);
-        }
-    }
-
-    sort_entries(&mut files, &config, &mut out);
-    sort_entries(&mut dirs, &config, &mut out);
-
-    display_items(&files, &config, &mut out);
-
-    for (pos, dir) in dirs.iter().enumerate() {
-        // Print dir heading - name... 'total' comes after error display
-        if initial_locs_len > 1 || config.recursive {
-            if pos.eq(&0usize) && files.is_empty() {
-                let _ = writeln!(out, "{}:", dir.p_buf.display());
-            } else {
-                let _ = writeln!(out, "\n{}:", dir.p_buf.display());
-            }
-        }
-        enter_directory(dir, &config, &mut out);
-    }
-
-    Ok(())
-}
-
-fn sort_entries(entries: &mut Vec<PathData>, config: &Config, out: &mut BufWriter<Stdout>) {
-    match config.sort {
-        Sort::Time => entries.sort_by_key(|k| {
-            Reverse(
-                k.md(out)
-                    .and_then(|md| get_system_time(md, config))
-                    .unwrap_or(UNIX_EPOCH),
-            )
-        }),
-        Sort::Size => entries.sort_by_key(|k| Reverse(k.md(out).map(|md| md.len()).unwrap_or(0))),
-        // The default sort in GNU ls is case insensitive
-        Sort::Name => entries.sort_by(|a, b| a.display_name.cmp(&b.display_name)),
-        Sort::Version => entries
-            .sort_by(|a, b| version_cmp(&a.p_buf.to_string_lossy(), &b.p_buf.to_string_lossy())),
-        Sort::Extension => entries.sort_by(|a, b| {
-            a.p_buf
-                .extension()
-                .cmp(&b.p_buf.extension())
-                .then(a.p_buf.file_stem().cmp(&b.p_buf.file_stem()))
-        }),
-        Sort::None => {}
-    }
-
-    if config.reverse {
-        entries.reverse();
-    }
-}
-
-fn is_hidden(file_path: &DirEntry) -> bool {
-    #[cfg(windows)]
-    {
-        let metadata = file_path.metadata().unwrap();
-        let attr = metadata.file_attributes();
-        (attr & 0x2) > 0
-    }
-    #[cfg(not(windows))]
-    {
-        file_path
-            .file_name()
-            .to_str()
-            .map(|res| res.starts_with('.'))
-            .unwrap_or(false)
-    }
-}
-
-fn should_display(entry: &DirEntry, config: &Config) -> bool {
-    // check if hidden
-    if config.files == Files::Normal && is_hidden(entry) {
-        return false;
-    }
-
-    // check if explicitly ignored
-    for pattern in &config.ignore_patterns {
-        if pattern.matches(entry.file_name().to_str().unwrap()) {
-            return false;
-        };
-        continue;
-    }
-
-    // else default to display
-    true
-}
-
-fn enter_directory(dir: &PathData, config: &Config, out: &mut BufWriter<Stdout>) {
-    // Create vec of entries with initial dot files
-    let mut entries: Vec<PathData> = if config.files == Files::All {
-        vec![
-            PathData::new(dir.p_buf.clone(), None, Some(".".into()), config, false),
-            PathData::new(dir.p_buf.join(".."), None, Some("..".into()), config, false),
-        ]
-    } else {
-        vec![]
-    };
-
-    // Convert those entries to the PathData struct
-    let mut vec_path_data = Vec::new();
-
-    // check for errors early, and ignore entries with errors
-    let read_dir = match fs::read_dir(&dir.p_buf) {
-        Err(err) => {
-            // flush buffer because the error may get printed in the wrong order
-            let _ = out.flush();
-            show!(LsError::IOErrorContext(err, dir.p_buf.clone()));
-            return;
-        }
-        Ok(res) => res,
-    };
-
-    for entry in read_dir {
-        let unwrapped = match entry {
-            Ok(path) => path,
-            Err(err) => {
-                let _ = out.flush();
-                show!(LsError::IOError(err));
-                continue;
-            }
-        };
-
-        if should_display(&unwrapped, config) {
-            // why check the DirEntry file_type()?  B/c the call is
-            // nearly free compared to a metadata() or file_type() call on a dir/file
-            let path_data = match unwrapped.file_type() {
-                Err(err) => {
-                    let _ = out.flush();
-                    show!(LsError::IOErrorContext(err, unwrapped.path()));
-                    continue;
-                }
-                Ok(dir_ft) => {
-                    PathData::new(unwrapped.path(), Some(Ok(dir_ft)), None, config, false)
-                }
-            };
-            vec_path_data.push(path_data);
-        };
-    }
-
-    sort_entries(&mut vec_path_data, config, out);
-    entries.append(&mut vec_path_data);
-
-    // ...and total
-    if config.format == Format::Long {
-        display_total(&entries, config, out);
-    }
-
-    display_items(&entries, config, out);
-
-    if config.recursive {
-        for e in entries
-            .iter()
-            .skip(if config.files == Files::All { 2 } else { 0 })
-            // Already requested file_type for the dir_entries above. So we know the OnceCell is set.
-            // And can unwrap again because we tested whether path has is_some here
-            .filter(|p| p.ft.get().unwrap().is_some())
-            .filter(|p| p.ft.get().unwrap().unwrap().is_dir())
-        {
-            let _ = writeln!(out, "\n{}:", e.p_buf.display());
-            enter_directory(e, config, out);
-        }
-    }
-}
-
-fn get_metadata(p_buf: &Path, dereference: bool) -> std::io::Result<Metadata> {
-    if dereference {
-        p_buf.metadata()
-    } else {
-        p_buf.symlink_metadata()
-    }
-}
-
-fn display_dir_entry_size(
-    entry: &PathData,
-    config: &Config,
-    out: &mut BufWriter<std::io::Stdout>,
-) -> (usize, usize, usize, usize, usize, usize, usize) {
-    // TODO: Cache/memorize the display_* results so we don't have to recalculate them.
-    if let Some(md) = entry.md(out) {
-        let (size_len, major_len, minor_len) = match display_size_or_rdev(md, config) {
-            SizeOrDeviceId::Device(major, minor) => (
-                (major.len() + minor.len() + 2usize),
-                major.len(),
-                minor.len(),
-            ),
-            SizeOrDeviceId::Size(size) => (size.len(), 0usize, 0usize),
-        };
-        (
-            display_symlink_count(md).len(),
-            display_uname(md, config).len(),
-            display_group(md, config).len(),
-            size_len,
-            major_len,
-            minor_len,
-            display_inode(md).len(),
-        )
-    } else {
-        (0, 0, 0, 0, 0, 0, 0)
-    }
-}
-
-fn pad_left(string: &str, count: usize) -> String {
-    format!("{:>width$}", string, width = count)
-}
-
-fn pad_right(string: &str, count: usize) -> String {
-    format!("{:<width$}", string, width = count)
-}
-
-fn display_total(items: &[PathData], config: &Config, out: &mut BufWriter<Stdout>) {
-    let mut total_size = 0;
-    for item in items {
-        total_size += item
-            .md(out)
-            .as_ref()
-            .map_or(0, |md| get_block_size(md, config));
-    }
-    let _ = writeln!(out, "total {}", display_size(total_size, config));
-}
-
-fn display_items(items: &[PathData], config: &Config, out: &mut BufWriter<Stdout>) {
-    // `-Z`, `--context`:
-    // Display the SELinux security context or '?' if none is found. When used with the `-l`
-    // option, print the security context to the left of the size column.
-
-    if config.format == Format::Long {
-        #[cfg(unix)]
-        let (
-            mut longest_inode_len,
-            mut longest_link_count_len,
-            mut longest_uname_len,
-            mut longest_group_len,
-            mut longest_context_len,
-            mut longest_size_len,
-            mut longest_major_len,
-            mut longest_minor_len,
-        ) = (1, 1, 1, 1, 1, 1, 1, 1);
-
-        #[cfg(not(unix))]
-        let (
-            mut longest_link_count_len,
-            mut longest_uname_len,
-            mut longest_group_len,
-            mut longest_context_len,
-            mut longest_size_len,
-        ) = (1, 1, 1, 1, 1);
-
-        #[cfg(unix)]
-        for item in items {
-            let context_len = item.security_context.len();
-            let (link_count_len, uname_len, group_len, size_len, major_len, minor_len, inode_len) =
-                display_dir_entry_size(item, config, out);
-            longest_inode_len = inode_len.max(longest_inode_len);
-            longest_link_count_len = link_count_len.max(longest_link_count_len);
-            longest_uname_len = uname_len.max(longest_uname_len);
-            longest_group_len = group_len.max(longest_group_len);
-            if config.context {
-                longest_context_len = context_len.max(longest_context_len);
-            }
-            if items.len() == 1usize {
-                longest_size_len = 0usize;
-                longest_major_len = 0usize;
-                longest_minor_len = 0usize;
-            } else {
-                longest_major_len = major_len.max(longest_major_len);
-                longest_minor_len = minor_len.max(longest_minor_len);
-                longest_size_len = size_len
-                    .max(longest_size_len)
-                    .max(longest_major_len + longest_minor_len + 2usize);
-            }
-        }
-
-        #[cfg(not(unix))]
-        for item in items {
-            let context_len = item.security_context.len();
-            let (
-                link_count_len,
-                uname_len,
-                group_len,
-                size_len,
-                _major_len,
-                _minor_len,
-                _inode_len,
-            ) = display_dir_entry_size(item, config, out);
-            longest_link_count_len = link_count_len.max(longest_link_count_len);
-            longest_uname_len = uname_len.max(longest_uname_len);
-            longest_group_len = group_len.max(longest_group_len);
-            if config.context {
-                longest_context_len = context_len.max(longest_context_len);
-            }
-            longest_size_len = size_len.max(longest_size_len);
-        }
-
-        for item in items {
-            display_item_long(
-                item,
-                PaddingCollection {
-                    #[cfg(unix)]
-                    longest_inode_len,
-                    longest_link_count_len,
-                    longest_uname_len,
-                    longest_group_len,
-                    longest_context_len,
-                    longest_size_len,
-                    #[cfg(unix)]
-                    longest_major_len,
-                    #[cfg(unix)]
-                    longest_minor_len,
-                },
-                config,
-                out,
-            );
-        }
-    } else {
-        let mut longest_context_len = 1;
-        let prefix_context = if config.context {
-            for item in items {
-                let context_len = item.security_context.len();
-                longest_context_len = context_len.max(longest_context_len);
-            }
-            Some(longest_context_len)
-        } else {
-            None
-        };
-
-        #[cfg(not(unix))]
-        let longest_inode_len = 1;
-        #[cfg(unix)]
-        let mut longest_inode_len = 1;
-        #[cfg(unix)]
-        if config.inode {
-            for item in items {
-                let inode_len = if let Some(md) = item.md(out) {
-                    display_inode(md).len()
-                } else {
-                    continue;
-                };
-                longest_inode_len = inode_len.max(longest_inode_len);
-            }
-        }
-
-        let names: std::vec::IntoIter<Cell> = items
-            .iter()
-            .map(|i| display_file_name(i, config, prefix_context, longest_inode_len, out))
-            .collect::<Vec<Cell>>()
-            .into_iter();
-
-        match config.format {
-            Format::Columns => display_grid(names, config.width, Direction::TopToBottom, out),
-            Format::Across => display_grid(names, config.width, Direction::LeftToRight, out),
-            Format::Commas => {
-                let mut current_col = 0;
-                let mut names = names;
-                if let Some(name) = names.next() {
-                    let _ = write!(out, "{}", name.contents);
-                    current_col = name.width as u16 + 2;
-                }
-                for name in names {
-                    let name_width = name.width as u16;
-                    // If the width is 0 we print one single line
-                    if config.width != 0 && current_col + name_width + 1 > config.width {
-                        current_col = name_width + 2;
-                        let _ = write!(out, ",\n{}", name.contents);
-                    } else {
-                        current_col += name_width + 2;
-                        let _ = write!(out, ", {}", name.contents);
-                    }
-                }
-                // Current col is never zero again if names have been printed.
-                // So we print a newline.
-                if current_col > 0 {
-                    let _ = writeln!(out,);
-                }
-            }
-            _ => {
-                for name in names {
-                    let _ = writeln!(out, "{}", name.contents);
-                }
-            }
-        }
-    }
-}
-
-fn get_block_size(md: &Metadata, config: &Config) -> u64 {
-    /* GNU ls will display sizes in terms of block size
-       md.len() will differ from this value when the file has some holes
-    */
-    #[cfg(unix)]
-    {
-        // hard-coded for now - enabling setting this remains a TODO
-        let ls_block_size = 1024;
-        match config.size_format {
-            SizeFormat::Binary => md.blocks() * 512,
-            SizeFormat::Decimal => md.blocks() * 512,
-            SizeFormat::Bytes => md.blocks() * 512 / ls_block_size,
-        }
-    }
-
-    #[cfg(not(unix))]
-    {
-        let _ = config;
-        // no way to get block size for windows, fall-back to file size
-        md.len()
-    }
-}
-
-fn display_grid(
-    names: impl Iterator<Item = Cell>,
-    width: u16,
-    direction: Direction,
-    out: &mut BufWriter<Stdout>,
-) {
-    if width == 0 {
-        // If the width is 0 we print one single line
-        let mut printed_something = false;
-        for name in names {
-            if printed_something {
-                let _ = write!(out, "  ");
-            }
-            printed_something = true;
-            let _ = write!(out, "{}", name.contents);
-        }
-        if printed_something {
-            let _ = writeln!(out);
-        }
-    } else {
-        let mut grid = Grid::new(GridOptions {
-            filling: Filling::Spaces(2),
-            direction,
-        });
-
-        for name in names {
-            grid.add(name);
-        }
-
-        match grid.fit_into_width(width as usize) {
-            Some(output) => {
-                let _ = write!(out, "{}", output);
-            }
-            // Width is too small for the grid, so we fit it in one column
-            None => {
-                let _ = write!(out, "{}", grid.fit_into_columns(1));
-            }
-        }
-    }
-}
-
-/// This writes to the BufWriter out a single string of the output of `ls -l`.
-///
-/// It writes the following keys, in order:
-/// * `inode` ([`get_inode`], config-optional)
-/// * `permissions` ([`display_permissions`])
-/// * `symlink_count` ([`display_symlink_count`])
-/// * `owner` ([`display_uname`], config-optional)
-/// * `group` ([`display_group`], config-optional)
-/// * `author` ([`display_uname`], config-optional)
-/// * `size / rdev` ([`display_size_or_rdev`])
-/// * `system_time` ([`get_system_time`])
-/// * `file_name` ([`display_file_name`])
-///
-/// This function needs to display information in columns:
-/// * permissions and system_time are already guaranteed to be pre-formatted in fixed length.
-/// * file_name is the last column and is left-aligned.
-/// * Everything else needs to be padded using [`pad_left`].
-///
-/// That's why we have the parameters:
-/// ```txt
-///    longest_link_count_len: usize,
-///    longest_uname_len: usize,
-///    longest_group_len: usize,
-///    longest_context_len: usize,
-///    longest_size_len: usize,
-/// ```
-/// that decide the maximum possible character count of each field.
-#[allow(clippy::write_literal)]
-fn display_item_long(
-    item: &PathData,
-    padding: PaddingCollection,
-    config: &Config,
-    out: &mut BufWriter<Stdout>,
-) {
-    if let Some(md) = item.md(out) {
-        #[cfg(unix)]
-        {
-            if config.inode {
-                let _ = write!(
-                    out,
-                    "{} ",
-                    pad_left(&get_inode(md), padding.longest_inode_len),
-                );
-            }
-        }
-
-        let _ = write!(
-            out,
-            "{}{} {}",
-            display_permissions(md, true),
-            if item.security_context.len() > 1 {
-                // GNU `ls` uses a "." character to indicate a file with a security context,
-                // but not other alternate access method.
-                "."
-            } else {
-                ""
-            },
-            pad_left(&display_symlink_count(md), padding.longest_link_count_len),
-        );
-
-        if config.long.owner {
-            let _ = write!(
-                out,
-                " {}",
-                pad_right(&display_uname(md, config), padding.longest_uname_len),
-            );
-        }
-
-        if config.long.group {
-            let _ = write!(
-                out,
-                " {}",
-                pad_right(&display_group(md, config), padding.longest_group_len),
-            );
-        }
-
-        if config.context {
-            let _ = write!(
-                out,
-                " {}",
-                pad_right(&item.security_context, padding.longest_context_len),
-            );
-        }
-
-        // Author is only different from owner on GNU/Hurd, so we reuse
-        // the owner, since GNU/Hurd is not currently supported by Rust.
-        if config.long.author {
-            let _ = write!(
-                out,
-                " {}",
-                pad_right(&display_uname(md, config), padding.longest_uname_len),
-            );
-        }
-
-        match display_size_or_rdev(md, config) {
-            SizeOrDeviceId::Size(size) => {
-                let _ = write!(out, " {}", pad_left(&size, padding.longest_size_len),);
-            }
-            SizeOrDeviceId::Device(major, minor) => {
-                let _ = write!(
-                    out,
-                    " {}, {}",
-                    pad_left(
-                        &major,
-                        #[cfg(not(unix))]
-                        0usize,
-                        #[cfg(unix)]
-                        padding.longest_major_len.max(
-                            padding
-                                .longest_size_len
-                                .saturating_sub(padding.longest_minor_len.saturating_add(2usize))
-                        )
-                    ),
-                    pad_left(
-                        &minor,
-                        #[cfg(not(unix))]
-                        0usize,
-                        #[cfg(unix)]
-                        padding.longest_minor_len,
-                    ),
-                );
-            }
-        };
-
-        let dfn = display_file_name(item, config, None, 0, out).contents;
-
-        let _ = writeln!(out, " {} {}", display_date(md, config), dfn);
-    } else {
-        // this 'else' is expressly for the case of a dangling symlink/restricted file
-        #[cfg(unix)]
-        {
-            if config.inode {
-                let _ = write!(out, "{} ", pad_left("?", padding.longest_inode_len),);
-            }
-        }
-
-        let _ = write!(
-            out,
-            "{}{} {}",
-            "l?????????",
-            if item.security_context.len() > 1 {
-                // GNU `ls` uses a "." character to indicate a file with a security context,
-                // but not other alternate access method.
-                "."
-            } else {
-                ""
-            },
-            pad_left("?", padding.longest_link_count_len),
-        );
-
-        if config.long.owner {
-            let _ = write!(out, " {}", pad_right("?", padding.longest_uname_len));
-        }
-
-        if config.long.group {
-            let _ = write!(out, " {}", pad_right("?", padding.longest_group_len));
-        }
-
-        if config.context {
-            let _ = write!(
-                out,
-                " {}",
-                pad_right(&item.security_context, padding.longest_context_len)
-            );
-        }
-
-        // Author is only different from owner on GNU/Hurd, so we reuse
-        // the owner, since GNU/Hurd is not currently supported by Rust.
-        if config.long.author {
-            let _ = write!(out, " {}", pad_right("?", padding.longest_uname_len));
-        }
-
-        let dfn = display_file_name(item, config, None, 0, out).contents;
-        let date_len = 12;
-
-        let _ = writeln!(
-            out,
-            " {} {} {}",
-            pad_left("?", padding.longest_size_len),
-            pad_left("?", date_len),
-            dfn,
-        );
-    }
-}
-
-#[cfg(unix)]
-fn get_inode(metadata: &Metadata) -> String {
-    format!("{:8}", metadata.ino())
-}
-
-// Currently getpwuid is `linux` target only. If it's broken out into
-// a posix-compliant attribute this can be updated...
-#[cfg(unix)]
-use std::sync::Mutex;
-#[cfg(unix)]
-use uucore::entries;
-
-#[cfg(unix)]
-fn cached_uid2usr(uid: u32) -> String {
-    lazy_static! {
-        static ref UID_CACHE: Mutex<HashMap<u32, String>> = Mutex::new(HashMap::new());
-    }
-
-    let mut uid_cache = UID_CACHE.lock().unwrap();
-    uid_cache
-        .entry(uid)
-        .or_insert_with(|| entries::uid2usr(uid).unwrap_or_else(|_| uid.to_string()))
-        .clone()
-}
-
-#[cfg(unix)]
-fn display_uname(metadata: &Metadata, config: &Config) -> String {
-    if config.long.numeric_uid_gid {
-        metadata.uid().to_string()
-    } else {
-        cached_uid2usr(metadata.uid())
-    }
-}
-
-#[cfg(all(unix, not(target_os = "redox")))]
-fn cached_gid2grp(gid: u32) -> String {
-    lazy_static! {
-        static ref GID_CACHE: Mutex<HashMap<u32, String>> = Mutex::new(HashMap::new());
-    }
-
-    let mut gid_cache = GID_CACHE.lock().unwrap();
-    gid_cache
-        .entry(gid)
-        .or_insert_with(|| entries::gid2grp(gid).unwrap_or_else(|_| gid.to_string()))
-        .clone()
-}
-
-#[cfg(all(unix, not(target_os = "redox")))]
-fn display_group(metadata: &Metadata, config: &Config) -> String {
-    if config.long.numeric_uid_gid {
-        metadata.gid().to_string()
-    } else {
-        cached_gid2grp(metadata.gid())
-    }
-}
-
-#[cfg(target_os = "redox")]
-fn display_group(metadata: &Metadata, config: &Config) -> String {
-    metadata.gid().to_string()
-}
-
-#[cfg(not(unix))]
-fn display_uname(_metadata: &Metadata, _config: &Config) -> String {
-    "somebody".to_string()
-}
-
-#[cfg(not(unix))]
-fn display_group(_metadata: &Metadata, _config: &Config) -> String {
-    "somegroup".to_string()
-}
-
-// The implementations for get_time are separated because some options, such
-// as ctime will not be available
-#[cfg(unix)]
-fn get_system_time(md: &Metadata, config: &Config) -> Option<SystemTime> {
-    match config.time {
-        Time::Change => Some(UNIX_EPOCH + Duration::new(md.ctime() as u64, md.ctime_nsec() as u32)),
-        Time::Modification => md.modified().ok(),
-        Time::Access => md.accessed().ok(),
-        Time::Birth => md.created().ok(),
-    }
-}
-
-#[cfg(not(unix))]
-fn get_system_time(md: &Metadata, config: &Config) -> Option<SystemTime> {
-    match config.time {
-        Time::Modification => md.modified().ok(),
-        Time::Access => md.accessed().ok(),
-        Time::Birth => md.created().ok(),
-        _ => None,
-    }
-}
-
-fn get_time(md: &Metadata, config: &Config) -> Option<chrono::DateTime<chrono::Local>> {
-    let time = get_system_time(md, config)?;
-    Some(time.into())
-}
-
-fn display_date(metadata: &Metadata, config: &Config) -> String {
-    match get_time(metadata, config) {
-        Some(time) => {
-            //Date is recent if from past 6 months
-            //According to GNU a Gregorian year has 365.2425 * 24 * 60 * 60 == 31556952 seconds on the average.
-            let recent = time + chrono::Duration::seconds(31_556_952 / 2) > chrono::Local::now();
-
-            match config.time_style {
-                TimeStyle::FullIso => time.format("%Y-%m-%d %H:%M:%S.%f %z"),
-                TimeStyle::LongIso => time.format("%Y-%m-%d %H:%M"),
-                TimeStyle::Iso => time.format(if recent { "%m-%d %H:%M" } else { "%Y-%m-%d " }),
-                TimeStyle::Locale => {
-                    let fmt = if recent { "%b %e %H:%M" } else { "%b %e  %Y" };
-
-                    // spell-checker:ignore (word) datetime
-                    //In this version of chrono translating can be done
-                    //The function is chrono::datetime::DateTime::format_localized
-                    //However it's currently still hard to get the current pure-rust-locale
-                    //So it's not yet implemented
-
-                    time.format(fmt)
-                }
-            }
-            .to_string()
-        }
-        None => "???".into(),
-    }
-}
-
-// There are a few peculiarities to how GNU formats the sizes:
-// 1. One decimal place is given if and only if the size is smaller than 10
-// 2. It rounds sizes up.
-// 3. The human-readable format uses powers for 1024, but does not display the "i"
-//    that is commonly used to denote Kibi, Mebi, etc.
-// 4. Kibi and Kilo are denoted differently ("k" and "K", respectively)
-fn format_prefixed(prefixed: NumberPrefix<f64>) -> String {
-    match prefixed {
-        NumberPrefix::Standalone(bytes) => bytes.to_string(),
-        NumberPrefix::Prefixed(prefix, bytes) => {
-            // Remove the "i" from "Ki", "Mi", etc. if present
-            let prefix_str = prefix.symbol().trim_end_matches('i');
-
-            // Check whether we get more than 10 if we round up to the first decimal
-            // because we want do display 9.81 as "9.9", not as "10".
-            if (10.0 * bytes).ceil() >= 100.0 {
-                format!("{:.0}{}", bytes.ceil(), prefix_str)
-            } else {
-                format!("{:.1}{}", (10.0 * bytes).ceil() / 10.0, prefix_str)
-            }
-        }
-    }
-}
-
-#[allow(dead_code)]
-enum SizeOrDeviceId {
-    Size(String),
-    Device(String, String),
-}
-
-fn display_size_or_rdev(metadata: &Metadata, config: &Config) -> SizeOrDeviceId {
-    #[cfg(any(target_os = "macos", target_os = "ios"))]
-    {
-        let ft = metadata.file_type();
-        if ft.is_char_device() || ft.is_block_device() {
-            let dev: u64 = metadata.rdev();
-            let major = (dev >> 24) as u8;
-            let minor = (dev & 0xff) as u8;
-            return SizeOrDeviceId::Device(major.to_string(), minor.to_string());
-        }
-    }
-    #[cfg(target_os = "linux")]
-    {
-        let ft = metadata.file_type();
-        if ft.is_char_device() || ft.is_block_device() {
-            let dev: u64 = metadata.rdev();
-            let major = (dev >> 8) as u8;
-            let minor = (dev & 0xff) as u8;
-            return SizeOrDeviceId::Device(major.to_string(), minor.to_string());
-        }
-    }
-
-    SizeOrDeviceId::Size(display_size(metadata.len(), config))
-}
-
-fn display_size(size: u64, config: &Config) -> String {
-    // NOTE: The human-readable behavior deviates from the GNU ls.
-    // The GNU ls uses binary prefixes by default.
-    match config.size_format {
-        SizeFormat::Binary => format_prefixed(NumberPrefix::binary(size as f64)),
-        SizeFormat::Decimal => format_prefixed(NumberPrefix::decimal(size as f64)),
-        SizeFormat::Bytes => size.to_string(),
-    }
-}
-
-#[cfg(unix)]
-fn file_is_executable(md: &Metadata) -> bool {
-    // Mode always returns u32, but the flags might not be, based on the platform
-    // e.g. linux has u32, mac has u16.
-    // S_IXUSR -> user has execute permission
-    // S_IXGRP -> group has execute permission
-    // S_IXOTH -> other users have execute permission
-    md.mode() & ((S_IXUSR | S_IXGRP | S_IXOTH) as u32) != 0
-}
-
-fn classify_file(path: &PathData, out: &mut BufWriter<Stdout>) -> Option<char> {
-    let file_type = path.file_type(out)?;
-
-    if file_type.is_dir() {
-        Some('/')
-    } else if file_type.is_symlink() {
-        Some('@')
-    } else {
-        #[cfg(unix)]
-        {
-            if file_type.is_socket() {
-                Some('=')
-            } else if file_type.is_fifo() {
-                Some('|')
-            } else if file_type.is_file() && file_is_executable(path.md(out).as_ref().unwrap()) {
-                Some('*')
-            } else {
-                None
-            }
-        }
-        #[cfg(not(unix))]
-        None
-    }
-}
-
-/// Takes a [`PathData`] struct and returns a cell with a name ready for displaying.
-///
-/// This function relies on the following parameters in the provided `&Config`:
-/// * `config.quoting_style` to decide how we will escape `name` using [`escape_name`].
-/// * `config.inode` decides whether to display inode numbers beside names using [`get_inode`].
-/// * `config.color` decides whether it's going to color `name` using [`color_name`].
-/// * `config.indicator_style` to append specific characters to `name` using [`classify_file`].
-/// * `config.format` to display symlink targets if `Format::Long`. This function is also
-///   responsible for coloring symlink target names if `config.color` is specified.
-/// * `config.context` to prepend security context to `name` if compiled with `feat_selinux`.
-///
-/// Note that non-unicode sequences in symlink targets are dealt with using
-/// [`std::path::Path::to_string_lossy`].
-#[allow(unused_variables)]
-fn display_file_name(
-    path: &PathData,
-    config: &Config,
-    prefix_context: Option<usize>,
-    longest_inode_len: usize,
-    out: &mut BufWriter<Stdout>,
-) -> Cell {
-    // This is our return value. We start by `&path.display_name` and modify it along the way.
-    let mut name = escape_name(&path.display_name, &config.quoting_style);
-
-    // We need to keep track of the width ourselves instead of letting term_grid
-    // infer it because the color codes mess up term_grid's width calculation.
-    let mut width = name.width();
-
-    if let Some(ls_colors) = &config.color {
-        if let Ok(metadata) = path.p_buf.symlink_metadata() {
-            name = color_name(ls_colors, &path.p_buf, name, &metadata);
-        }
-    }
-
-    #[cfg(unix)]
-    {
-        if config.inode && config.format != Format::Long {
-            let inode = match path.md(out) {
-                Some(md) => pad_left(&get_inode(md), longest_inode_len),
-                None => pad_left("?", longest_inode_len),
-            };
-            // increment width here b/c name was given colors and name.width() is now the wrong
-            // size for display
-            width += inode.width();
-            name = inode + " " + &name;
-        }
-    }
-
-    if config.indicator_style != IndicatorStyle::None {
-        let sym = classify_file(path, out);
-
-        let char_opt = match config.indicator_style {
-            IndicatorStyle::Classify => sym,
-            IndicatorStyle::FileType => {
-                // Don't append an asterisk.
-                match sym {
-                    Some('*') => None,
-                    _ => sym,
-                }
-            }
-            IndicatorStyle::Slash => {
-                // Append only a slash.
-                match sym {
-                    Some('/') => Some('/'),
-                    _ => None,
-                }
-            }
-            IndicatorStyle::None => None,
-        };
-
-        if let Some(c) = char_opt {
-            name.push(c);
-            width += 1;
-        }
-    }
-
-    if config.format == Format::Long
-        && path.file_type(out).is_some()
-        && path.file_type(out).unwrap().is_symlink()
-    {
-        if let Ok(target) = path.p_buf.read_link() {
-            name.push_str(" -> ");
-
-            // We might as well color the symlink output after the arrow.
-            // This makes extra system calls, but provides important information that
-            // people run `ls -l --color` are very interested in.
-            if let Some(ls_colors) = &config.color {
-                // We get the absolute path to be able to construct PathData with valid Metadata.
-                // This is because relative symlinks will fail to get_metadata.
-                let mut absolute_target = target.clone();
-                if target.is_relative() {
-                    if let Some(parent) = path.p_buf.parent() {
-                        absolute_target = parent.join(absolute_target);
-                    }
-                }
-
-                let target_data = PathData::new(absolute_target, None, None, config, false);
-
-                // If we have a symlink to a valid file, we use the metadata of said file.
-                // Because we use an absolute path, we can assume this is guaranteed to exist.
-                // Otherwise, we use path.md(), which will guarantee we color to the same
-                // color of non-existent symlinks according to style_for_path_with_metadata.
-                if path.md(out).is_none()
-                    && get_metadata(target_data.p_buf.as_path(), target_data.must_dereference)
-                        .is_err()
-                {
-                    name.push_str(&path.p_buf.read_link().unwrap().to_string_lossy());
-                } else {
-                    // Use fn get_metadata instead of md() here and above because ls
-                    // should not exit with an err, if we are unable to obtain the target_metadata
-                    let target_metadata = match get_metadata(
-                        target_data.p_buf.as_path(),
-                        target_data.must_dereference,
-                    ) {
-                        Ok(md) => md,
-                        Err(_) => path.md(out).unwrap().to_owned(),
-                    };
-
-                    name.push_str(&color_name(
-                        ls_colors,
-                        &target_data.p_buf,
-                        target.to_string_lossy().into_owned(),
-                        &target_metadata,
-                    ));
-                }
-            } else {
-                // If no coloring is required, we just use target as is.
-                name.push_str(&target.to_string_lossy());
-            }
-        }
-    }
-
-    // Prepend the security context to the `name` and adjust `width` in order
-    // to get correct alignment from later calls to`display_grid()`.
-    if config.context {
-        if let Some(pad_count) = prefix_context {
-            let security_context = if !matches!(config.format, Format::Commas) {
-                pad_left(&path.security_context, pad_count)
-            } else {
-                path.security_context.to_owned()
-            };
-            name = format!("{} {}", security_context, name);
-            width += security_context.len() + 1;
-        }
-    }
-
-    Cell {
-        contents: name,
-        width,
-    }
-}
-
-fn color_name(ls_colors: &LsColors, path: &Path, name: String, md: &Metadata) -> String {
-    match ls_colors.style_for_path_with_metadata(path, Some(md)) {
-        Some(style) => style.to_ansi_term_style().paint(name).to_string(),
-        None => name,
-    }
-}
-
-#[cfg(not(unix))]
-fn display_symlink_count(_metadata: &Metadata) -> String {
-    // Currently not sure of how to get this on Windows, so I'm punting.
-    // Git Bash looks like it may do the same thing.
-    String::from("1")
-}
-
-#[cfg(unix)]
-fn display_symlink_count(metadata: &Metadata) -> String {
-    metadata.nlink().to_string()
-}
-
-#[allow(unused_variables)]
-fn display_inode(metadata: &Metadata) -> String {
-    #[cfg(unix)]
-    {
-        get_inode(metadata)
-    }
-    #[cfg(not(unix))]
-    {
-        "".to_string()
-    }
-}
-
-// This returns the SELinux security context as UTF8 `String`.
-// In the long term this should be changed to `OsStr`, see discussions at #2621/#2656
-#[allow(unused_variables)]
-fn get_security_context(config: &Config, p_buf: &Path, must_dereference: bool) -> String {
-    let substitute_string = "?".to_string();
-    if config.selinux_supported {
-        #[cfg(feature = "selinux")]
-        {
-            match selinux::SecurityContext::of_path(p_buf, must_dereference.to_owned(), false) {
-                Err(_r) => {
-                    // TODO: show the actual reason why it failed
-                    show_warning!("failed to get security context of: {}", p_buf.quote());
-                    substitute_string
-                }
-                Ok(None) => substitute_string,
-                Ok(Some(context)) => {
-                    let context = context.as_bytes();
-
-                    let context = context.strip_suffix(&[0]).unwrap_or(context);
-                    String::from_utf8(context.to_vec()).unwrap_or_else(|e| {
-                        show_warning!(
-                            "getting security context of: {}: {}",
-                            p_buf.quote(),
-                            e.to_string()
-                        );
-                        String::from_utf8_lossy(context).into_owned()
-                    })
-                }
-            }
-        }
-        #[cfg(not(feature = "selinux"))]
-        {
-            substitute_string
-        }
-    } else {
-        substitute_string
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_ls/quoting_style.rs.html b/src/uu_ls/quoting_style.rs.html deleted file mode 100644 index 57d9f67db..000000000 --- a/src/uu_ls/quoting_style.rs.html +++ /dev/null @@ -1,1464 +0,0 @@ -quoting_style.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-
use std::char::from_digit;
-use std::ffi::OsStr;
-
-// These are characters with special meaning in the shell (e.g. bash).
-// The first const contains characters that only have a special meaning when they appear at the beginning of a name.
-const SPECIAL_SHELL_CHARS_START: &[char] = &['~', '#'];
-const SPECIAL_SHELL_CHARS: &str = "`$&*()|[]{};\\'\"<>?! ";
-
-pub(super) enum QuotingStyle {
-    Shell {
-        escape: bool,
-        always_quote: bool,
-        show_control: bool,
-    },
-    C {
-        quotes: Quotes,
-    },
-    Literal {
-        show_control: bool,
-    },
-}
-
-#[derive(Clone, Copy)]
-pub(super) enum Quotes {
-    None,
-    Single,
-    Double,
-    // TODO: Locale
-}
-
-// This implementation is heavily inspired by the std::char::EscapeDefault implementation
-// in the Rust standard library. This custom implementation is needed because the
-// characters \a, \b, \e, \f & \v are not recognized by Rust.
-struct EscapedChar {
-    state: EscapeState,
-}
-
-enum EscapeState {
-    Done,
-    Char(char),
-    Backslash(char),
-    ForceQuote(char),
-    Octal(EscapeOctal),
-}
-
-struct EscapeOctal {
-    c: char,
-    state: EscapeOctalState,
-    idx: usize,
-}
-
-enum EscapeOctalState {
-    Done,
-    Backslash,
-    Value,
-}
-
-impl Iterator for EscapeOctal {
-    type Item = char;
-
-    fn next(&mut self) -> Option<char> {
-        match self.state {
-            EscapeOctalState::Done => None,
-            EscapeOctalState::Backslash => {
-                self.state = EscapeOctalState::Value;
-                Some('\\')
-            }
-            EscapeOctalState::Value => {
-                let octal_digit = ((self.c as u32) >> (self.idx * 3)) & 0o7;
-                if self.idx == 0 {
-                    self.state = EscapeOctalState::Done;
-                } else {
-                    self.idx -= 1;
-                }
-                Some(from_digit(octal_digit, 8).unwrap())
-            }
-        }
-    }
-}
-
-impl EscapeOctal {
-    fn from(c: char) -> EscapeOctal {
-        EscapeOctal {
-            c,
-            idx: 2,
-            state: EscapeOctalState::Backslash,
-        }
-    }
-}
-
-impl EscapedChar {
-    fn new_literal(c: char) -> Self {
-        Self {
-            state: EscapeState::Char(c),
-        }
-    }
-
-    fn new_c(c: char, quotes: Quotes) -> Self {
-        use EscapeState::*;
-        let init_state = match c {
-            '\x07' => Backslash('a'),
-            '\x08' => Backslash('b'),
-            '\t' => Backslash('t'),
-            '\n' => Backslash('n'),
-            '\x0B' => Backslash('v'),
-            '\x0C' => Backslash('f'),
-            '\r' => Backslash('r'),
-            '\\' => Backslash('\\'),
-            '\'' => match quotes {
-                Quotes::Single => Backslash('\''),
-                _ => Char('\''),
-            },
-            '"' => match quotes {
-                Quotes::Double => Backslash('"'),
-                _ => Char('"'),
-            },
-            ' ' => match quotes {
-                Quotes::None => Backslash(' '),
-                _ => Char(' '),
-            },
-            _ if c.is_ascii_control() => Octal(EscapeOctal::from(c)),
-            _ => Char(c),
-        };
-        Self { state: init_state }
-    }
-
-    fn new_shell(c: char, escape: bool, quotes: Quotes) -> Self {
-        use EscapeState::*;
-        let init_state = match c {
-            _ if !escape && c.is_control() => Char(c),
-            '\x07' => Backslash('a'),
-            '\x08' => Backslash('b'),
-            '\t' => Backslash('t'),
-            '\n' => Backslash('n'),
-            '\x0B' => Backslash('v'),
-            '\x0C' => Backslash('f'),
-            '\r' => Backslash('r'),
-            '\x00'..='\x1F' | '\x7F' => Octal(EscapeOctal::from(c)),
-            '\'' => match quotes {
-                Quotes::Single => Backslash('\''),
-                _ => Char('\''),
-            },
-            _ if SPECIAL_SHELL_CHARS.contains(c) => ForceQuote(c),
-            _ => Char(c),
-        };
-        Self { state: init_state }
-    }
-
-    fn hide_control(self) -> Self {
-        match self.state {
-            EscapeState::Char(c) if c.is_control() => Self {
-                state: EscapeState::Char('?'),
-            },
-            _ => self,
-        }
-    }
-}
-
-impl Iterator for EscapedChar {
-    type Item = char;
-
-    fn next(&mut self) -> Option<char> {
-        match self.state {
-            EscapeState::Backslash(c) => {
-                self.state = EscapeState::Char(c);
-                Some('\\')
-            }
-            EscapeState::Char(c) | EscapeState::ForceQuote(c) => {
-                self.state = EscapeState::Done;
-                Some(c)
-            }
-            EscapeState::Done => None,
-            EscapeState::Octal(ref mut iter) => iter.next(),
-        }
-    }
-}
-
-fn shell_without_escape(name: &str, quotes: Quotes, show_control_chars: bool) -> (String, bool) {
-    let mut must_quote = false;
-    let mut escaped_str = String::with_capacity(name.len());
-
-    for c in name.chars() {
-        let escaped = {
-            let ec = EscapedChar::new_shell(c, false, quotes);
-            if show_control_chars {
-                ec
-            } else {
-                ec.hide_control()
-            }
-        };
-
-        match escaped.state {
-            EscapeState::Backslash('\'') => escaped_str.push_str("'\\''"),
-            EscapeState::ForceQuote(x) => {
-                must_quote = true;
-                escaped_str.push(x);
-            }
-            _ => {
-                for char in escaped {
-                    escaped_str.push(char);
-                }
-            }
-        }
-    }
-
-    must_quote = must_quote || name.starts_with(SPECIAL_SHELL_CHARS_START);
-    (escaped_str, must_quote)
-}
-
-fn shell_with_escape(name: &str, quotes: Quotes) -> (String, bool) {
-    // We need to keep track of whether we are in a dollar expression
-    // because e.g. \b\n is escaped as $'\b\n' and not like $'b'$'n'
-    let mut in_dollar = false;
-    let mut must_quote = false;
-    let mut escaped_str = String::with_capacity(name.len());
-
-    for c in name.chars() {
-        let escaped = EscapedChar::new_shell(c, true, quotes);
-        match escaped.state {
-            EscapeState::Char(x) => {
-                if in_dollar {
-                    escaped_str.push_str("''");
-                    in_dollar = false;
-                }
-                escaped_str.push(x);
-            }
-            EscapeState::ForceQuote(x) => {
-                if in_dollar {
-                    escaped_str.push_str("''");
-                    in_dollar = false;
-                }
-                must_quote = true;
-                escaped_str.push(x);
-            }
-            // Single quotes are not put in dollar expressions, but are escaped
-            // if the string also contains double quotes. In that case, they must
-            // be handled separately.
-            EscapeState::Backslash('\'') => {
-                must_quote = true;
-                in_dollar = false;
-                escaped_str.push_str("'\\''");
-            }
-            _ => {
-                if !in_dollar {
-                    escaped_str.push_str("'$'");
-                    in_dollar = true;
-                }
-                must_quote = true;
-                for char in escaped {
-                    escaped_str.push(char);
-                }
-            }
-        }
-    }
-    must_quote = must_quote || name.starts_with(SPECIAL_SHELL_CHARS_START);
-    (escaped_str, must_quote)
-}
-
-pub(super) fn escape_name(name: &OsStr, style: &QuotingStyle) -> String {
-    match style {
-        QuotingStyle::Literal { show_control } => {
-            if !show_control {
-                name.to_string_lossy()
-                    .chars()
-                    .flat_map(|c| EscapedChar::new_literal(c).hide_control())
-                    .collect()
-            } else {
-                name.to_string_lossy().into_owned()
-            }
-        }
-        QuotingStyle::C { quotes } => {
-            let escaped_str: String = name
-                .to_string_lossy()
-                .chars()
-                .flat_map(|c| EscapedChar::new_c(c, *quotes))
-                .collect();
-
-            match quotes {
-                Quotes::Single => format!("'{}'", escaped_str),
-                Quotes::Double => format!("\"{}\"", escaped_str),
-                _ => escaped_str,
-            }
-        }
-        QuotingStyle::Shell {
-            escape,
-            always_quote,
-            show_control,
-        } => {
-            let name = name.to_string_lossy();
-            let (quotes, must_quote) = if name.contains(&['"', '`', '$', '\\'][..]) {
-                (Quotes::Single, true)
-            } else if name.contains('\'') {
-                (Quotes::Double, true)
-            } else if *always_quote {
-                (Quotes::Single, true)
-            } else {
-                (Quotes::Single, false)
-            };
-
-            let (escaped_str, contains_quote_chars) = if *escape {
-                shell_with_escape(&name, quotes)
-            } else {
-                shell_without_escape(&name, quotes, *show_control)
-            };
-
-            match (must_quote | contains_quote_chars, quotes) {
-                (true, Quotes::Single) => format!("'{}'", escaped_str),
-                (true, Quotes::Double) => format!("\"{}\"", escaped_str),
-                _ => escaped_str,
-            }
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    // spell-checker:ignore (tests/words) one\'two one'two
-
-    use crate::quoting_style::{escape_name, Quotes, QuotingStyle};
-    fn get_style(s: &str) -> QuotingStyle {
-        match s {
-            "literal" => QuotingStyle::Literal {
-                show_control: false,
-            },
-            "literal-show" => QuotingStyle::Literal { show_control: true },
-            "escape" => QuotingStyle::C {
-                quotes: Quotes::None,
-            },
-            "c" => QuotingStyle::C {
-                quotes: Quotes::Double,
-            },
-            "shell" => QuotingStyle::Shell {
-                escape: false,
-                always_quote: false,
-                show_control: false,
-            },
-            "shell-show" => QuotingStyle::Shell {
-                escape: false,
-                always_quote: false,
-                show_control: true,
-            },
-            "shell-always" => QuotingStyle::Shell {
-                escape: false,
-                always_quote: true,
-                show_control: false,
-            },
-            "shell-always-show" => QuotingStyle::Shell {
-                escape: false,
-                always_quote: true,
-                show_control: true,
-            },
-            "shell-escape" => QuotingStyle::Shell {
-                escape: true,
-                always_quote: false,
-                show_control: false,
-            },
-            "shell-escape-always" => QuotingStyle::Shell {
-                escape: true,
-                always_quote: true,
-                show_control: false,
-            },
-            _ => panic!("Invalid name!"),
-        }
-    }
-
-    fn check_names(name: &str, map: Vec<(&str, &str)>) {
-        assert_eq!(
-            map.iter()
-                .map(|(_, style)| escape_name(name.as_ref(), &get_style(style)))
-                .collect::<Vec<String>>(),
-            map.iter()
-                .map(|(correct, _)| correct.to_string())
-                .collect::<Vec<String>>()
-        );
-    }
-
-    #[test]
-    fn test_simple_names() {
-        check_names(
-            "one_two",
-            vec![
-                ("one_two", "literal"),
-                ("one_two", "literal-show"),
-                ("one_two", "escape"),
-                ("\"one_two\"", "c"),
-                ("one_two", "shell"),
-                ("one_two", "shell-show"),
-                ("\'one_two\'", "shell-always"),
-                ("\'one_two\'", "shell-always-show"),
-                ("one_two", "shell-escape"),
-                ("\'one_two\'", "shell-escape-always"),
-            ],
-        );
-    }
-
-    #[test]
-    fn test_spaces() {
-        check_names(
-            "one two",
-            vec![
-                ("one two", "literal"),
-                ("one two", "literal-show"),
-                ("one\\ two", "escape"),
-                ("\"one two\"", "c"),
-                ("\'one two\'", "shell"),
-                ("\'one two\'", "shell-show"),
-                ("\'one two\'", "shell-always"),
-                ("\'one two\'", "shell-always-show"),
-                ("\'one two\'", "shell-escape"),
-                ("\'one two\'", "shell-escape-always"),
-            ],
-        );
-
-        check_names(
-            " one",
-            vec![
-                (" one", "literal"),
-                (" one", "literal-show"),
-                ("\\ one", "escape"),
-                ("\" one\"", "c"),
-                ("' one'", "shell"),
-                ("' one'", "shell-show"),
-                ("' one'", "shell-always"),
-                ("' one'", "shell-always-show"),
-                ("' one'", "shell-escape"),
-                ("' one'", "shell-escape-always"),
-            ],
-        );
-    }
-
-    #[test]
-    fn test_quotes() {
-        // One double quote
-        check_names(
-            "one\"two",
-            vec![
-                ("one\"two", "literal"),
-                ("one\"two", "literal-show"),
-                ("one\"two", "escape"),
-                ("\"one\\\"two\"", "c"),
-                ("'one\"two'", "shell"),
-                ("'one\"two'", "shell-show"),
-                ("'one\"two'", "shell-always"),
-                ("'one\"two'", "shell-always-show"),
-                ("'one\"two'", "shell-escape"),
-                ("'one\"two'", "shell-escape-always"),
-            ],
-        );
-
-        // One single quote
-        check_names(
-            "one\'two",
-            vec![
-                ("one'two", "literal"),
-                ("one'two", "literal-show"),
-                ("one'two", "escape"),
-                ("\"one'two\"", "c"),
-                ("\"one'two\"", "shell"),
-                ("\"one'two\"", "shell-show"),
-                ("\"one'two\"", "shell-always"),
-                ("\"one'two\"", "shell-always-show"),
-                ("\"one'two\"", "shell-escape"),
-                ("\"one'two\"", "shell-escape-always"),
-            ],
-        );
-
-        // One single quote and one double quote
-        check_names(
-            "one'two\"three",
-            vec![
-                ("one'two\"three", "literal"),
-                ("one'two\"three", "literal-show"),
-                ("one'two\"three", "escape"),
-                ("\"one'two\\\"three\"", "c"),
-                ("'one'\\''two\"three'", "shell"),
-                ("'one'\\''two\"three'", "shell-show"),
-                ("'one'\\''two\"three'", "shell-always"),
-                ("'one'\\''two\"three'", "shell-always-show"),
-                ("'one'\\''two\"three'", "shell-escape"),
-                ("'one'\\''two\"three'", "shell-escape-always"),
-            ],
-        );
-
-        // Consecutive quotes
-        check_names(
-            "one''two\"\"three",
-            vec![
-                ("one''two\"\"three", "literal"),
-                ("one''two\"\"three", "literal-show"),
-                ("one''two\"\"three", "escape"),
-                ("\"one''two\\\"\\\"three\"", "c"),
-                ("'one'\\'''\\''two\"\"three'", "shell"),
-                ("'one'\\'''\\''two\"\"three'", "shell-show"),
-                ("'one'\\'''\\''two\"\"three'", "shell-always"),
-                ("'one'\\'''\\''two\"\"three'", "shell-always-show"),
-                ("'one'\\'''\\''two\"\"three'", "shell-escape"),
-                ("'one'\\'''\\''two\"\"three'", "shell-escape-always"),
-            ],
-        );
-    }
-
-    #[test]
-    fn test_control_chars() {
-        // A simple newline
-        check_names(
-            "one\ntwo",
-            vec![
-                ("one?two", "literal"),
-                ("one\ntwo", "literal-show"),
-                ("one\\ntwo", "escape"),
-                ("\"one\\ntwo\"", "c"),
-                ("one?two", "shell"),
-                ("one\ntwo", "shell-show"),
-                ("'one?two'", "shell-always"),
-                ("'one\ntwo'", "shell-always-show"),
-                ("'one'$'\\n''two'", "shell-escape"),
-                ("'one'$'\\n''two'", "shell-escape-always"),
-            ],
-        );
-
-        // A control character followed by a special shell character
-        check_names(
-            "one\n&two",
-            vec![
-                ("one?&two", "literal"),
-                ("one\n&two", "literal-show"),
-                ("one\\n&two", "escape"),
-                ("\"one\\n&two\"", "c"),
-                ("'one?&two'", "shell"),
-                ("'one\n&two'", "shell-show"),
-                ("'one?&two'", "shell-always"),
-                ("'one\n&two'", "shell-always-show"),
-                ("'one'$'\\n''&two'", "shell-escape"),
-                ("'one'$'\\n''&two'", "shell-escape-always"),
-            ],
-        );
-
-        // The first 16 control characters. NUL is also included, even though it is of
-        // no importance for file names.
-        check_names(
-            "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F",
-            vec![
-                ("????????????????", "literal"),
-                (
-                    "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F",
-                    "literal-show",
-                ),
-                (
-                    "\\000\\001\\002\\003\\004\\005\\006\\a\\b\\t\\n\\v\\f\\r\\016\\017",
-                    "escape",
-                ),
-                (
-                    "\"\\000\\001\\002\\003\\004\\005\\006\\a\\b\\t\\n\\v\\f\\r\\016\\017\"",
-                    "c",
-                ),
-                ("????????????????", "shell"),
-                (
-                    "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F",
-                    "shell-show",
-                ),
-                ("'????????????????'", "shell-always"),
-                (
-                    "'\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0A\x0B\x0C\x0D\x0E\x0F'",
-                    "shell-always-show",
-                ),
-                (
-                    "''$'\\000\\001\\002\\003\\004\\005\\006\\a\\b\\t\\n\\v\\f\\r\\016\\017'",
-                    "shell-escape",
-                ),
-                (
-                    "''$'\\000\\001\\002\\003\\004\\005\\006\\a\\b\\t\\n\\v\\f\\r\\016\\017'",
-                    "shell-escape-always",
-                ),
-            ],
-        );
-
-        // The last 16 control characters.
-        check_names(
-            "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F",
-            vec![
-                ("????????????????", "literal"),
-                (
-                    "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F",
-                    "literal-show",
-                ),
-                (
-                    "\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037",
-                    "escape",
-                ),
-                (
-                    "\"\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037\"",
-                    "c",
-                ),
-                ("????????????????", "shell"),
-                (
-                    "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F",
-                    "shell-show",
-                ),
-                ("'????????????????'", "shell-always"),
-                (
-                    "'\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1A\x1B\x1C\x1D\x1E\x1F'",
-                    "shell-always-show",
-                ),
-                (
-                    "''$'\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037'",
-                    "shell-escape",
-                ),
-                (
-                    "''$'\\020\\021\\022\\023\\024\\025\\026\\027\\030\\031\\032\\033\\034\\035\\036\\037'",
-                    "shell-escape-always",
-                ),
-            ],
-        );
-
-        // DEL
-        check_names(
-            "\x7F",
-            vec![
-                ("?", "literal"),
-                ("\x7F", "literal-show"),
-                ("\\177", "escape"),
-                ("\"\\177\"", "c"),
-                ("?", "shell"),
-                ("\x7F", "shell-show"),
-                ("'?'", "shell-always"),
-                ("'\x7F'", "shell-always-show"),
-                ("''$'\\177'", "shell-escape"),
-                ("''$'\\177'", "shell-escape-always"),
-            ],
-        );
-    }
-
-    #[test]
-    fn test_question_mark() {
-        // A question mark must force quotes in shell and shell-always, unless
-        // it is in place of a control character (that case is already covered
-        // in other tests)
-        check_names(
-            "one?two",
-            vec![
-                ("one?two", "literal"),
-                ("one?two", "literal-show"),
-                ("one?two", "escape"),
-                ("\"one?two\"", "c"),
-                ("'one?two'", "shell"),
-                ("'one?two'", "shell-show"),
-                ("'one?two'", "shell-always"),
-                ("'one?two'", "shell-always-show"),
-                ("'one?two'", "shell-escape"),
-                ("'one?two'", "shell-escape-always"),
-            ],
-        );
-    }
-
-    #[test]
-    fn test_backslash() {
-        // Escaped in C-style, but not in Shell-style escaping
-        check_names(
-            "one\\two",
-            vec![
-                ("one\\two", "literal"),
-                ("one\\two", "literal-show"),
-                ("one\\\\two", "escape"),
-                ("\"one\\\\two\"", "c"),
-                ("'one\\two'", "shell"),
-                ("\'one\\two\'", "shell-always"),
-                ("'one\\two'", "shell-escape"),
-                ("'one\\two'", "shell-escape-always"),
-            ],
-        );
-    }
-
-    #[test]
-    fn test_tilde_and_hash() {
-        check_names("~", vec![("'~'", "shell"), ("'~'", "shell-escape")]);
-        check_names(
-            "~name",
-            vec![("'~name'", "shell"), ("'~name'", "shell-escape")],
-        );
-        check_names(
-            "some~name",
-            vec![("some~name", "shell"), ("some~name", "shell-escape")],
-        );
-        check_names("name~", vec![("name~", "shell"), ("name~", "shell-escape")]);
-
-        check_names("#", vec![("'#'", "shell"), ("'#'", "shell-escape")]);
-        check_names(
-            "#name",
-            vec![("'#name'", "shell"), ("'#name'", "shell-escape")],
-        );
-        check_names(
-            "some#name",
-            vec![("some#name", "shell"), ("some#name", "shell-escape")],
-        );
-        check_names("name#", vec![("name#", "shell"), ("name#", "shell-escape")]);
-    }
-
-    #[test]
-    fn test_special_chars_in_double_quotes() {
-        check_names(
-            "can'$t",
-            vec![
-                ("'can'\\''$t'", "shell"),
-                ("'can'\\''$t'", "shell-always"),
-                ("'can'\\''$t'", "shell-escape"),
-                ("'can'\\''$t'", "shell-escape-always"),
-            ],
-        );
-
-        check_names(
-            "can'`t",
-            vec![
-                ("'can'\\''`t'", "shell"),
-                ("'can'\\''`t'", "shell-always"),
-                ("'can'\\''`t'", "shell-escape"),
-                ("'can'\\''`t'", "shell-escape-always"),
-            ],
-        );
-
-        check_names(
-            "can'\\t",
-            vec![
-                ("'can'\\''\\t'", "shell"),
-                ("'can'\\''\\t'", "shell-always"),
-                ("'can'\\''\\t'", "shell-escape"),
-                ("'can'\\''\\t'", "shell-escape-always"),
-            ],
-        );
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_mkdir/mkdir.rs.html b/src/uu_mkdir/mkdir.rs.html deleted file mode 100644 index 66025706c..000000000 --- a/src/uu_mkdir/mkdir.rs.html +++ /dev/null @@ -1,388 +0,0 @@ -mkdir.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Nicholas Juszczak <juszczakn@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) ugoa cmode
-
-#[macro_use]
-extern crate uucore;
-
-use clap::OsValues;
-use clap::{crate_version, App, Arg, ArgMatches};
-use std::fs;
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-#[cfg(not(windows))]
-use uucore::mode;
-use uucore::InvalidEncodingHandling;
-
-static DEFAULT_PERM: u32 = 0o755;
-
-static ABOUT: &str = "Create the given DIRECTORY(ies) if they do not exist";
-mod options {
-    pub const MODE: &str = "mode";
-    pub const PARENTS: &str = "parents";
-    pub const VERBOSE: &str = "verbose";
-    pub const DIRS: &str = "dirs";
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [USER]", uucore::execution_phrase())
-}
-fn get_long_usage() -> String {
-    String::from("Each MODE is of the form '[ugoa]*([-+=]([rwxXst]*|[ugo]))+|[-+=]?[0-7]+'.")
-}
-
-#[cfg(windows)]
-fn get_mode(_matches: &ArgMatches, _mode_had_minus_prefix: bool) -> Result<u32, String> {
-    Ok(DEFAULT_PERM)
-}
-
-#[cfg(not(windows))]
-fn get_mode(matches: &ArgMatches, mode_had_minus_prefix: bool) -> Result<u32, String> {
-    let digits: &[char] = &['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
-    // Translate a ~str in octal form to u16, default to 755
-    // Not tested on Windows
-    let mut new_mode = DEFAULT_PERM;
-    match matches.value_of(options::MODE) {
-        Some(m) => {
-            for mode in m.split(',') {
-                if mode.contains(digits) {
-                    new_mode = mode::parse_numeric(new_mode, m, true)?;
-                } else {
-                    let cmode = if mode_had_minus_prefix {
-                        // clap parsing is finished, now put prefix back
-                        format!("-{}", mode)
-                    } else {
-                        mode.to_string()
-                    };
-                    new_mode = mode::parse_symbolic(new_mode, &cmode, mode::get_umask(), true)?;
-                }
-            }
-            Ok(new_mode)
-        }
-        None => Ok(DEFAULT_PERM),
-    }
-}
-
-#[cfg(windows)]
-fn strip_minus_from_mode(_args: &mut Vec<String>) -> bool {
-    false
-}
-
-#[cfg(not(windows))]
-fn strip_minus_from_mode(args: &mut Vec<String>) -> bool {
-    mode::strip_minus_from_mode(args)
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let mut args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    // Before we can parse 'args' with clap (and previously getopts),
-    // a possible MODE prefix '-' needs to be removed (e.g. "chmod -x FILE").
-    let mode_had_minus_prefix = strip_minus_from_mode(&mut args);
-
-    let usage = usage();
-    let after_help = get_long_usage();
-
-    // Linux-specific options, not implemented
-    // opts.optflag("Z", "context", "set SELinux security context" +
-    // " of each created directory to CTX"),
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let dirs = matches.values_of_os(options::DIRS).unwrap_or_default();
-    let verbose = matches.is_present(options::VERBOSE);
-    let recursive = matches.is_present(options::PARENTS);
-
-    match get_mode(&matches, mode_had_minus_prefix) {
-        Ok(mode) => exec(dirs, recursive, mode, verbose),
-        Err(f) => Err(USimpleError::new(1, f)),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::MODE)
-                .short('m')
-                .long(options::MODE)
-                .help("set file mode (not implemented on windows)")
-                .default_value("755"),
-        )
-        .arg(
-            Arg::new(options::PARENTS)
-                .short('p')
-                .long(options::PARENTS)
-                .alias("parent")
-                .help("make parent directories as needed"),
-        )
-        .arg(
-            Arg::new(options::VERBOSE)
-                .short('v')
-                .long(options::VERBOSE)
-                .help("print a message for each printed directory"),
-        )
-        .arg(
-            Arg::new(options::DIRS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1)
-                .allow_invalid_utf8(true),
-        )
-}
-
-/**
- * Create the list of new directories
- */
-fn exec(dirs: OsValues, recursive: bool, mode: u32, verbose: bool) -> UResult<()> {
-    for dir in dirs {
-        let path = Path::new(dir);
-        show_if_err!(mkdir(path, recursive, mode, verbose));
-    }
-    Ok(())
-}
-
-fn mkdir(path: &Path, recursive: bool, mode: u32, verbose: bool) -> UResult<()> {
-    let create_dir = if recursive {
-        fs::create_dir_all
-    } else {
-        fs::create_dir
-    };
-
-    create_dir(path).map_err_context(|| format!("cannot create directory {}", path.quote()))?;
-
-    if verbose {
-        println!(
-            "{}: created directory {}",
-            uucore::util_name(),
-            path.quote()
-        );
-    }
-
-    chmod(path, mode)
-}
-
-#[cfg(any(unix, target_os = "redox"))]
-fn chmod(path: &Path, mode: u32) -> UResult<()> {
-    use std::fs::{set_permissions, Permissions};
-    use std::os::unix::fs::PermissionsExt;
-
-    let mode = Permissions::from_mode(mode);
-
-    set_permissions(path, mode)
-        .map_err_context(|| format!("cannot set permissions {}", path.quote()))
-}
-
-#[cfg(windows)]
-fn chmod(_path: &Path, _mode: u32) -> UResult<()> {
-    // chmod on Windows only sets the readonly flag, which isn't even honored on directories
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_mkfifo/mkfifo.rs.html b/src/uu_mkfifo/mkfifo.rs.html deleted file mode 100644 index b1e4e6a62..000000000 --- a/src/uu_mkfifo/mkfifo.rs.html +++ /dev/null @@ -1,214 +0,0 @@ -mkfifo.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Gehring <mg@ebfe.org>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use libc::mkfifo;
-use std::ffi::CString;
-use uucore::error::{UResult, USimpleError};
-use uucore::{display::Quotable, InvalidEncodingHandling};
-
-static NAME: &str = "mkfifo";
-static USAGE: &str = "mkfifo [OPTION]... NAME...";
-static SUMMARY: &str = "Create a FIFO with the given name.";
-
-mod options {
-    pub static MODE: &str = "mode";
-    pub static SE_LINUX_SECURITY_CONTEXT: &str = "Z";
-    pub static CONTEXT: &str = "context";
-    pub static FIFO: &str = "fifo";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    if matches.is_present(options::CONTEXT) {
-        return Err(USimpleError::new(1, "--context is not implemented"));
-    }
-    if matches.is_present(options::SE_LINUX_SECURITY_CONTEXT) {
-        return Err(USimpleError::new(1, "-Z is not implemented"));
-    }
-
-    let mode = match matches.value_of(options::MODE) {
-        Some(m) => match usize::from_str_radix(m, 8) {
-            Ok(m) => m,
-            Err(e) => return Err(USimpleError::new(1, format!("invalid mode: {}", e))),
-        },
-        None => 0o666,
-    };
-
-    let fifos: Vec<String> = match matches.values_of(options::FIFO) {
-        Some(v) => v.clone().map(|s| s.to_owned()).collect(),
-        None => return Err(USimpleError::new(1, "missing operand")),
-    };
-
-    for f in fifos {
-        let err = unsafe {
-            let name = CString::new(f.as_bytes()).unwrap();
-            mkfifo(name.as_ptr(), mode as libc::mode_t)
-        };
-        if err == -1 {
-            show!(USimpleError::new(
-                1,
-                format!("cannot create fifo {}: File exists", f.quote())
-            ));
-        }
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::MODE)
-                .short('m')
-                .long(options::MODE)
-                .help("file permissions for the fifo")
-                .default_value("0666")
-                .value_name("0666"),
-        )
-        .arg(
-            Arg::new(options::SE_LINUX_SECURITY_CONTEXT)
-                .short('Z')
-                .help("set the SELinux security context to default type"),
-        )
-        .arg(
-            Arg::new(options::CONTEXT)
-                .long(options::CONTEXT)
-                .value_name("CTX")
-                .help(
-                    "like -Z, or if CTX is specified then set the SELinux \
-                    or SMACK security context to CTX",
-                ),
-        )
-        .arg(
-            Arg::new(options::FIFO)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_mknod/mknod.rs.html b/src/uu_mknod/mknod.rs.html deleted file mode 100644 index 91ed081a2..000000000 --- a/src/uu_mknod/mknod.rs.html +++ /dev/null @@ -1,448 +0,0 @@ -mknod.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) parsemode makedev sysmacros perror IFBLK IFCHR IFIFO
-
-use std::ffi::CString;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use libc::{dev_t, mode_t};
-use libc::{S_IFBLK, S_IFCHR, S_IFIFO, S_IRGRP, S_IROTH, S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR};
-
-use uucore::display::Quotable;
-use uucore::error::{set_exit_code, UResult, USimpleError, UUsageError};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "Create the special file NAME of the given TYPE.";
-static USAGE: &str = "mknod [OPTION]... NAME TYPE [MAJOR MINOR]";
-static LONG_HELP: &str = "Mandatory arguments to long options are mandatory for short options too.
--m, --mode=MODE    set file permission bits to MODE, not a=rw - umask
---help     display this help and exit
---version  output version information and exit
-
-Both MAJOR and MINOR must be specified when TYPE is b, c, or u, and they
-must be omitted when TYPE is p.  If MAJOR or MINOR begins with 0x or 0X,
-it is interpreted as hexadecimal; otherwise, if it begins with 0, as octal;
-otherwise, as decimal.  TYPE may be:
-
-b      create a block (buffered) special file
-c, u   create a character (unbuffered) special file
-p      create a FIFO
-
-NOTE: your shell may have its own version of mknod, which usually supersedes
-the version described here.  Please refer to your shell's documentation
-for details about the options it supports.
-";
-
-const MODE_RW_UGO: mode_t = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
-
-#[inline(always)]
-fn makedev(maj: u64, min: u64) -> dev_t {
-    // pick up from <sys/sysmacros.h>
-    ((min & 0xff) | ((maj & 0xfff) << 8) | ((min & !0xff) << 12) | ((maj & !0xfff) << 32)) as dev_t
-}
-
-#[cfg(windows)]
-fn _mknod(file_name: &str, mode: mode_t, dev: dev_t) -> i32 {
-    panic!("Unsupported for windows platform")
-}
-
-#[cfg(unix)]
-fn _mknod(file_name: &str, mode: mode_t, dev: dev_t) -> i32 {
-    let c_str = CString::new(file_name).expect("Failed to convert to CString");
-
-    // the user supplied a mode
-    let set_umask = mode & MODE_RW_UGO != MODE_RW_UGO;
-
-    unsafe {
-        // store prev umask
-        let last_umask = if set_umask { libc::umask(0) } else { 0 };
-
-        let errno = libc::mknod(c_str.as_ptr(), mode, dev);
-
-        // set umask back to original value
-        if set_umask {
-            libc::umask(last_umask);
-        }
-
-        if errno == -1 {
-            let c_str = CString::new(uucore::execution_phrase().as_bytes())
-                .expect("Failed to convert to CString");
-            // shows the error from the mknod syscall
-            libc::perror(c_str.as_ptr());
-        }
-        errno
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-    // Linux-specific options, not implemented
-    // opts.optflag("Z", "", "set the SELinux security context to default type");
-    // opts.optopt("", "context", "like -Z, or if CTX is specified then set the SELinux or SMACK security context to CTX");
-
-    let matches = uu_app().get_matches_from(args);
-
-    let mode = get_mode(&matches).map_err(|e| USimpleError::new(1, e))?;
-
-    let file_name = matches.value_of("name").expect("Missing argument 'NAME'");
-
-    // Only check the first character, to allow mnemonic usage like
-    // 'mknod /dev/rst0 character 18 0'.
-    let ch = matches
-        .value_of("type")
-        .expect("Missing argument 'TYPE'")
-        .chars()
-        .next()
-        .expect("Failed to get the first char");
-
-    if ch == 'p' {
-        if matches.is_present("major") || matches.is_present("minor") {
-            Err(UUsageError::new(
-                1,
-                "Fifos do not have major and minor device numbers.",
-            ))
-        } else {
-            let exit_code = _mknod(file_name, S_IFIFO | mode, 0);
-            set_exit_code(exit_code);
-            Ok(())
-        }
-    } else {
-        match (matches.value_of("major"), matches.value_of("minor")) {
-            (None, None) | (_, None) | (None, _) => {
-                return Err(UUsageError::new(
-                    1,
-                    "Special files require major and minor device numbers.",
-                ));
-            }
-            (Some(major), Some(minor)) => {
-                let major = major.parse::<u64>().expect("validated by clap");
-                let minor = minor.parse::<u64>().expect("validated by clap");
-
-                let dev = makedev(major, minor);
-                let exit_code = if ch == 'b' {
-                    // block special file
-                    _mknod(file_name, S_IFBLK | mode, dev)
-                } else if ch == 'c' || ch == 'u' {
-                    // char special file
-                    _mknod(file_name, S_IFCHR | mode, dev)
-                } else {
-                    unreachable!("{} was validated to be only b, c or u", ch);
-                };
-                set_exit_code(exit_code);
-                Ok(())
-            }
-        }
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .after_help(LONG_HELP)
-        .about(ABOUT)
-        .arg(
-            Arg::new("mode")
-                .short('m')
-                .long("mode")
-                .value_name("MODE")
-                .help("set file permission bits to MODE, not a=rw - umask"),
-        )
-        .arg(
-            Arg::new("name")
-                .value_name("NAME")
-                .help("name of the new file")
-                .required(true)
-                .index(1),
-        )
-        .arg(
-            Arg::new("type")
-                .value_name("TYPE")
-                .help("type of the new file (b, c, u or p)")
-                .required(true)
-                .validator(valid_type)
-                .index(2),
-        )
-        .arg(
-            Arg::new("major")
-                .value_name("MAJOR")
-                .help("major file type")
-                .validator(valid_u64)
-                .index(3),
-        )
-        .arg(
-            Arg::new("minor")
-                .value_name("MINOR")
-                .help("minor file type")
-                .validator(valid_u64)
-                .index(4),
-        )
-}
-
-fn get_mode(matches: &ArgMatches) -> Result<mode_t, String> {
-    match matches.value_of("mode") {
-        None => Ok(MODE_RW_UGO),
-        Some(str_mode) => uucore::mode::parse_mode(str_mode)
-            .map_err(|e| format!("invalid mode ({})", e))
-            .and_then(|mode| {
-                if mode > 0o777 {
-                    Err("mode must specify only file permission bits".to_string())
-                } else {
-                    Ok(mode)
-                }
-            }),
-    }
-}
-
-fn valid_type(tpe: &str) -> Result<(), String> {
-    // Only check the first character, to allow mnemonic usage like
-    // 'mknod /dev/rst0 character 18 0'.
-    tpe.chars()
-        .next()
-        .ok_or_else(|| "missing device type".to_string())
-        .and_then(|first_char| {
-            if vec!['b', 'c', 'u', 'p'].contains(&first_char) {
-                Ok(())
-            } else {
-                Err(format!("invalid device type {}", tpe.quote()))
-            }
-        })
-}
-
-fn valid_u64(num: &str) -> Result<(), String> {
-    num.parse::<u64>().map(|_| ()).map_err(|_| num.into())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_mktemp/mktemp.rs.html b/src/uu_mktemp/mktemp.rs.html deleted file mode 100644 index 370ac78b6..000000000 --- a/src/uu_mktemp/mktemp.rs.html +++ /dev/null @@ -1,560 +0,0 @@ -mktemp.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-
// This file is part of the uutils coreutils package.
-//
-// (c) Sunrin SHIMURA
-// Collaborator: Jian Zeng
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (paths) GPGHome
-
-use clap::{crate_version, App, Arg};
-use uucore::display::{println_verbatim, Quotable};
-use uucore::error::{FromIo, UError, UResult};
-
-use std::env;
-use std::error::Error;
-use std::fmt::Display;
-use std::iter;
-use std::path::{is_separator, PathBuf};
-
-use rand::Rng;
-use tempfile::Builder;
-
-static ABOUT: &str = "create a temporary file or directory.";
-
-static DEFAULT_TEMPLATE: &str = "tmp.XXXXXXXXXX";
-
-static OPT_DIRECTORY: &str = "directory";
-static OPT_DRY_RUN: &str = "dry-run";
-static OPT_QUIET: &str = "quiet";
-static OPT_SUFFIX: &str = "suffix";
-static OPT_TMPDIR: &str = "tmpdir";
-static OPT_T: &str = "t";
-
-static ARG_TEMPLATE: &str = "template";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [TEMPLATE]", uucore::execution_phrase())
-}
-
-#[derive(Debug)]
-enum MkTempError {
-    PersistError(PathBuf),
-    MustEndInX(String),
-    TooFewXs(String),
-    ContainsDirSeparator(String),
-    InvalidTemplate(String),
-}
-
-impl UError for MkTempError {}
-
-impl Error for MkTempError {}
-
-impl Display for MkTempError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        use MkTempError::*;
-        match self {
-            PersistError(p) => write!(f, "could not persist file {}", p.quote()),
-            MustEndInX(s) => write!(f, "with --suffix, template {} must end in X", s.quote()),
-            TooFewXs(s) => write!(f, "too few X's in template {}", s.quote()),
-            ContainsDirSeparator(s) => {
-                write!(
-                    f,
-                    "invalid suffix {}, contains directory separator",
-                    s.quote()
-                )
-            }
-            InvalidTemplate(s) => write!(
-                f,
-                "invalid template, {}; with --tmpdir, it may not be absolute",
-                s.quote()
-            ),
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let template = matches.value_of(ARG_TEMPLATE).unwrap();
-    let tmpdir = matches.value_of(OPT_TMPDIR).unwrap_or_default();
-
-    let (template, mut tmpdir) = if matches.is_present(OPT_TMPDIR)
-        && !PathBuf::from(tmpdir).is_dir() // if a temp dir is provided, it must be an actual path
-        && tmpdir.contains("XXX")
-    // If this is a template, it has to contain at least 3 X
-        && template == DEFAULT_TEMPLATE
-    // That means that clap does not think we provided a template
-    {
-        // Special case to workaround a limitation of clap when doing
-        // mktemp --tmpdir apt-key-gpghome.XXX
-        // The behavior should be
-        // mktemp --tmpdir $TMPDIR apt-key-gpghome.XX
-        // As --tmpdir is empty
-        //
-        // Fixed in clap 3
-        // See https://github.com/clap-rs/clap/pull/1587
-        let tmp = env::temp_dir();
-        (tmpdir, tmp)
-    } else if !matches.is_present(OPT_TMPDIR) {
-        let tmp = env::temp_dir();
-        (template, tmp)
-    } else {
-        (template, PathBuf::from(tmpdir))
-    };
-
-    let make_dir = matches.is_present(OPT_DIRECTORY);
-    let dry_run = matches.is_present(OPT_DRY_RUN);
-    let suppress_file_err = matches.is_present(OPT_QUIET);
-
-    let (prefix, rand, suffix) = parse_template(template, matches.value_of(OPT_SUFFIX))?;
-
-    if matches.is_present(OPT_TMPDIR) && PathBuf::from(prefix).is_absolute() {
-        return Err(MkTempError::InvalidTemplate(template.into()).into());
-    }
-
-    if matches.is_present(OPT_T) {
-        tmpdir = env::temp_dir()
-    }
-
-    let res = if dry_run {
-        dry_exec(tmpdir, prefix, rand, suffix)
-    } else {
-        exec(tmpdir, prefix, rand, suffix, make_dir)
-    };
-
-    if suppress_file_err {
-        // Mapping all UErrors to ExitCodes prevents the errors from being printed
-        res.map_err(|e| e.code().into())
-    } else {
-        res
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_DIRECTORY)
-                .short('d')
-                .long(OPT_DIRECTORY)
-                .help("Make a directory instead of a file"),
-        )
-        .arg(
-            Arg::new(OPT_DRY_RUN)
-                .short('u')
-                .long(OPT_DRY_RUN)
-                .help("do not create anything; merely print a name (unsafe)"),
-        )
-        .arg(
-            Arg::new(OPT_QUIET)
-                .short('q')
-                .long("quiet")
-                .help("Fail silently if an error occurs."),
-        )
-        .arg(
-            Arg::new(OPT_SUFFIX)
-                .long(OPT_SUFFIX)
-                .help(
-                    "append SUFFIX to TEMPLATE; SUFFIX must not contain a path separator. \
-                     This option is implied if TEMPLATE does not end with X.",
-                )
-                .value_name("SUFFIX"),
-        )
-        .arg(
-            Arg::new(OPT_TMPDIR)
-                .short('p')
-                .long(OPT_TMPDIR)
-                .help(
-                    "interpret TEMPLATE relative to DIR; if DIR is not specified, use \
-                     $TMPDIR ($TMP on windows) if set, else /tmp. With this option, TEMPLATE must not \
-                     be an absolute name; unlike with -t, TEMPLATE may contain \
-                     slashes, but mktemp creates only the final component",
-                )
-                .value_name("DIR"),
-        )
-        .arg(Arg::new(OPT_T).short('t').help(
-            "Generate a template (using the supplied prefix and TMPDIR (TMP on windows) if set) \
-             to create a filename template [deprecated]",
-        ))
-        .arg(
-            Arg::new(ARG_TEMPLATE)
-                .multiple_occurrences(false)
-                .takes_value(true)
-                .max_values(1)
-                .default_value(DEFAULT_TEMPLATE),
-        )
-}
-
-fn parse_template<'a>(
-    temp: &'a str,
-    suffix: Option<&'a str>,
-) -> UResult<(&'a str, usize, &'a str)> {
-    let right = match temp.rfind('X') {
-        Some(r) => r + 1,
-        None => return Err(MkTempError::TooFewXs(temp.into()).into()),
-    };
-    let left = temp[..right].rfind(|c| c != 'X').map_or(0, |i| i + 1);
-    let prefix = &temp[..left];
-    let rand = right - left;
-
-    if rand < 3 {
-        return Err(MkTempError::TooFewXs(temp.into()).into());
-    }
-
-    let mut suf = &temp[right..];
-
-    if let Some(s) = suffix {
-        if suf.is_empty() {
-            suf = s;
-        } else {
-            return Err(MkTempError::MustEndInX(temp.into()).into());
-        }
-    };
-
-    if suf.chars().any(is_separator) {
-        return Err(MkTempError::ContainsDirSeparator(suf.into()).into());
-    }
-
-    Ok((prefix, rand, suf))
-}
-
-pub fn dry_exec(mut tmpdir: PathBuf, prefix: &str, rand: usize, suffix: &str) -> UResult<()> {
-    let len = prefix.len() + suffix.len() + rand;
-    let mut buf = Vec::with_capacity(len);
-    buf.extend(prefix.as_bytes());
-    buf.extend(iter::repeat(b'X').take(rand));
-    buf.extend(suffix.as_bytes());
-
-    // Randomize.
-    let bytes = &mut buf[prefix.len()..prefix.len() + rand];
-    rand::thread_rng().fill(bytes);
-    for byte in bytes.iter_mut() {
-        *byte = match *byte % 62 {
-            v @ 0..=9 => (v + b'0'),
-            v @ 10..=35 => (v - 10 + b'a'),
-            v @ 36..=61 => (v - 36 + b'A'),
-            _ => unreachable!(),
-        }
-    }
-    // We guarantee utf8.
-    let buf = String::from_utf8(buf).unwrap();
-    tmpdir.push(buf);
-    println_verbatim(tmpdir).map_err_context(|| "failed to print directory name".to_owned())
-}
-
-fn exec(dir: PathBuf, prefix: &str, rand: usize, suffix: &str, make_dir: bool) -> UResult<()> {
-    let context = || {
-        format!(
-            "failed to create file via template '{}{}{}'",
-            prefix,
-            "X".repeat(rand),
-            suffix
-        )
-    };
-
-    let mut builder = Builder::new();
-    builder.prefix(prefix).rand_bytes(rand).suffix(suffix);
-
-    let path = if make_dir {
-        builder
-            .tempdir_in(&dir)
-            .map_err_context(context)?
-            .into_path() // `into_path` consumes the TempDir without removing it
-    } else {
-        builder
-            .tempfile_in(&dir)
-            .map_err_context(context)?
-            .keep() // `keep` ensures that the file is not deleted
-            .map_err(|e| MkTempError::PersistError(e.file.path().to_path_buf()))?
-            .1
-    };
-    println_verbatim(path).map_err_context(|| "failed to print directory name".to_owned())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_more/more.rs.html b/src/uu_more/more.rs.html deleted file mode 100644 index c5fe84cab..000000000 --- a/src/uu_more/more.rs.html +++ /dev/null @@ -1,1002 +0,0 @@ -more.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Martin Kysel <code@martinkysel.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE file
-//  * that was distributed with this source code.
-
-// spell-checker:ignore (methods) isnt
-
-use std::{
-    fs::File,
-    io::{stdin, stdout, BufReader, Read, Stdout, Write},
-    path::Path,
-    time::Duration,
-};
-
-#[cfg(all(unix, not(target_os = "fuchsia")))]
-extern crate nix;
-
-use clap::{crate_version, App, Arg};
-use crossterm::{
-    event::{self, Event, KeyCode, KeyEvent, KeyModifiers},
-    execute, queue,
-    style::Attribute,
-    terminal,
-};
-
-use unicode_segmentation::UnicodeSegmentation;
-use unicode_width::UnicodeWidthStr;
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError, UUsageError};
-
-const BELL: &str = "\x07";
-
-pub mod options {
-    pub const SILENT: &str = "silent";
-    pub const LOGICAL: &str = "logical";
-    pub const NO_PAUSE: &str = "no-pause";
-    pub const PRINT_OVER: &str = "print-over";
-    pub const CLEAN_PRINT: &str = "clean-print";
-    pub const SQUEEZE: &str = "squeeze";
-    pub const PLAIN: &str = "plain";
-    pub const LINES: &str = "lines";
-    pub const NUMBER: &str = "number";
-    pub const PATTERN: &str = "pattern";
-    pub const FROM_LINE: &str = "from-line";
-    pub const FILES: &str = "files";
-}
-
-const MULTI_FILE_TOP_PROMPT: &str = "::::::::::::::\n{}\n::::::::::::::\n";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let matches = uu_app().get_matches_from(args);
-
-    let mut buff = String::new();
-    let silent = matches.is_present(options::SILENT);
-    if let Some(files) = matches.values_of(options::FILES) {
-        let mut stdout = setup_term();
-        let length = files.len();
-
-        let mut files_iter = files.peekable();
-        while let (Some(file), next_file) = (files_iter.next(), files_iter.peek()) {
-            let file = Path::new(file);
-            if file.is_dir() {
-                terminal::disable_raw_mode().unwrap();
-                return Err(UUsageError::new(
-                    1,
-                    format!("{} is a directory.", file.quote()),
-                ));
-            }
-            if !file.exists() {
-                terminal::disable_raw_mode().unwrap();
-                return Err(USimpleError::new(
-                    1,
-                    format!("cannot open {}: No such file or directory", file.quote()),
-                ));
-            }
-            if length > 1 {
-                buff.push_str(&MULTI_FILE_TOP_PROMPT.replace("{}", file.to_str().unwrap()));
-            }
-            let mut reader = BufReader::new(File::open(file).unwrap());
-            reader.read_to_string(&mut buff).unwrap();
-            more(&buff, &mut stdout, next_file.copied(), silent)?;
-            buff.clear();
-        }
-        reset_term(&mut stdout);
-    } else if atty::isnt(atty::Stream::Stdin) {
-        stdin().read_to_string(&mut buff).unwrap();
-        let mut stdout = setup_term();
-        more(&buff, &mut stdout, None, silent)?;
-        reset_term(&mut stdout);
-    } else {
-        return Err(UUsageError::new(1, "bad usage"));
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .about("A file perusal filter for CRT viewing.")
-        .version(crate_version!())
-        .arg(
-            Arg::new(options::SILENT)
-                .short('d')
-                .long(options::SILENT)
-                .help("Display help instead of ringing bell"),
-        )
-        // The commented arguments below are unimplemented:
-        /*
-        .arg(
-            Arg::new(options::LOGICAL)
-                .short('f')
-                .long(options::LOGICAL)
-                .help("Count logical rather than screen lines"),
-        )
-        .arg(
-            Arg::new(options::NO_PAUSE)
-                .short('l')
-                .long(options::NO_PAUSE)
-                .help("Suppress pause after form feed"),
-        )
-        .arg(
-            Arg::new(options::PRINT_OVER)
-                .short('c')
-                .long(options::PRINT_OVER)
-                .help("Do not scroll, display text and clean line ends"),
-        )
-        .arg(
-            Arg::new(options::CLEAN_PRINT)
-                .short('p')
-                .long(options::CLEAN_PRINT)
-                .help("Do not scroll, clean screen and display text"),
-        )
-        .arg(
-            Arg::new(options::SQUEEZE)
-                .short('s')
-                .long(options::SQUEEZE)
-                .help("Squeeze multiple blank lines into one"),
-        )
-        .arg(
-            Arg::new(options::PLAIN)
-                .short('u')
-                .long(options::PLAIN)
-                .help("Suppress underlining and bold"),
-        )
-        .arg(
-            Arg::new(options::LINES)
-                .short('n')
-                .long(options::LINES)
-                .value_name("number")
-                .takes_value(true)
-                .help("The number of lines per screen full"),
-        )
-        .arg(
-            Arg::new(options::NUMBER)
-                .allow_hyphen_values(true)
-                .long(options::NUMBER)
-                .required(false)
-                .takes_value(true)
-                .help("Same as --lines"),
-        )
-        .arg(
-            Arg::new(options::FROM_LINE)
-                .short('F')
-                .allow_hyphen_values(true)
-                .required(false)
-                .takes_value(true)
-                .value_name("number")
-                .help("Display file beginning from line number"),
-        )
-        .arg(
-            Arg::new(options::PATTERN)
-                .short('P')
-                .allow_hyphen_values(true)
-                .required(false)
-                .takes_value(true)
-                .help("Display file beginning from pattern match"),
-        )
-        */
-        .arg(
-            Arg::new(options::FILES)
-                .required(false)
-                .multiple_occurrences(true)
-                .help("Path to the files to be read"),
-        )
-}
-
-#[cfg(not(target_os = "fuchsia"))]
-fn setup_term() -> std::io::Stdout {
-    let stdout = stdout();
-    terminal::enable_raw_mode().unwrap();
-    stdout
-}
-
-#[cfg(target_os = "fuchsia")]
-#[inline(always)]
-fn setup_term() -> usize {
-    0
-}
-
-#[cfg(not(target_os = "fuchsia"))]
-fn reset_term(stdout: &mut std::io::Stdout) {
-    terminal::disable_raw_mode().unwrap();
-    // Clear the prompt
-    queue!(stdout, terminal::Clear(terminal::ClearType::CurrentLine)).unwrap();
-    // Move cursor to the beginning without printing new line
-    print!("\r");
-    stdout.flush().unwrap();
-}
-
-#[cfg(target_os = "fuchsia")]
-#[inline(always)]
-fn reset_term(_: &mut usize) {}
-
-fn more(buff: &str, stdout: &mut Stdout, next_file: Option<&str>, silent: bool) -> UResult<()> {
-    let (cols, rows) = terminal::size().unwrap();
-    let lines = break_buff(buff, usize::from(cols));
-
-    let mut pager = Pager::new(rows, lines, next_file, silent);
-    pager.draw(stdout, None);
-    if pager.should_close() {
-        return Ok(());
-    }
-
-    loop {
-        let mut wrong_key = None;
-        if event::poll(Duration::from_millis(10)).unwrap() {
-            match event::read().unwrap() {
-                Event::Key(KeyEvent {
-                    code: KeyCode::Char('q'),
-                    modifiers: KeyModifiers::NONE,
-                })
-                | Event::Key(KeyEvent {
-                    code: KeyCode::Char('c'),
-                    modifiers: KeyModifiers::CONTROL,
-                }) => {
-                    reset_term(stdout);
-                    std::process::exit(0);
-                }
-                Event::Key(KeyEvent {
-                    code: KeyCode::Down,
-                    modifiers: KeyModifiers::NONE,
-                })
-                | Event::Key(KeyEvent {
-                    code: KeyCode::Char(' '),
-                    modifiers: KeyModifiers::NONE,
-                }) => {
-                    if pager.should_close() {
-                        return Ok(());
-                    } else {
-                        pager.page_down();
-                    }
-                }
-                Event::Key(KeyEvent {
-                    code: KeyCode::Up,
-                    modifiers: KeyModifiers::NONE,
-                }) => {
-                    pager.page_up();
-                }
-                Event::Key(KeyEvent {
-                    code: KeyCode::Char('j'),
-                    modifiers: KeyModifiers::NONE,
-                }) => {
-                    if pager.should_close() {
-                        return Ok(());
-                    } else {
-                        pager.next_line();
-                    }
-                }
-                Event::Key(KeyEvent {
-                    code: KeyCode::Char('k'),
-                    modifiers: KeyModifiers::NONE,
-                }) => {
-                    pager.prev_line();
-                }
-                Event::Resize(col, row) => {
-                    pager.page_resize(col, row);
-                }
-                Event::Key(KeyEvent {
-                    code: KeyCode::Char(k),
-                    ..
-                }) => wrong_key = Some(k),
-                _ => continue,
-            }
-
-            pager.draw(stdout, wrong_key);
-        }
-    }
-}
-
-struct Pager<'a> {
-    // The current line at the top of the screen
-    upper_mark: usize,
-    // The number of rows that fit on the screen
-    content_rows: u16,
-    lines: Vec<String>,
-    next_file: Option<&'a str>,
-    line_count: usize,
-    silent: bool,
-}
-
-impl<'a> Pager<'a> {
-    fn new(rows: u16, lines: Vec<String>, next_file: Option<&'a str>, silent: bool) -> Self {
-        let line_count = lines.len();
-        Self {
-            upper_mark: 0,
-            content_rows: rows.saturating_sub(1),
-            lines,
-            next_file,
-            line_count,
-            silent,
-        }
-    }
-
-    fn should_close(&mut self) -> bool {
-        self.upper_mark
-            .saturating_add(self.content_rows.into())
-            .ge(&self.line_count)
-    }
-
-    fn page_down(&mut self) {
-        // If the next page down position __after redraw__ is greater than the total line count,
-        // the upper mark must not grow past top of the screen at the end of the open file.
-        if self
-            .upper_mark
-            .saturating_add(self.content_rows as usize * 2)
-            .ge(&self.line_count)
-        {
-            self.upper_mark = self.line_count - self.content_rows as usize;
-            return;
-        }
-
-        self.upper_mark = self.upper_mark.saturating_add(self.content_rows.into());
-    }
-
-    fn page_up(&mut self) {
-        self.upper_mark = self.upper_mark.saturating_sub(self.content_rows.into());
-    }
-
-    fn next_line(&mut self) {
-        self.upper_mark = self.upper_mark.saturating_add(1);
-    }
-
-    fn prev_line(&mut self) {
-        self.upper_mark = self.upper_mark.saturating_sub(1);
-    }
-
-    // TODO: Deal with column size changes.
-    fn page_resize(&mut self, _: u16, row: u16) {
-        self.content_rows = row.saturating_sub(1);
-    }
-
-    fn draw(&self, stdout: &mut std::io::Stdout, wrong_key: Option<char>) {
-        let lower_mark = self
-            .line_count
-            .min(self.upper_mark.saturating_add(self.content_rows.into()));
-        self.draw_lines(stdout);
-        self.draw_prompt(stdout, lower_mark, wrong_key);
-        stdout.flush().unwrap();
-    }
-
-    fn draw_lines(&self, stdout: &mut std::io::Stdout) {
-        execute!(stdout, terminal::Clear(terminal::ClearType::CurrentLine)).unwrap();
-        let displayed_lines = self
-            .lines
-            .iter()
-            .skip(self.upper_mark)
-            .take(self.content_rows.into());
-
-        for line in displayed_lines {
-            stdout
-                .write_all(format!("\r{}\n", line).as_bytes())
-                .unwrap();
-        }
-    }
-
-    fn draw_prompt(&self, stdout: &mut Stdout, lower_mark: usize, wrong_key: Option<char>) {
-        let status_inner = if lower_mark == self.line_count {
-            format!("Next file: {}", self.next_file.unwrap_or_default())
-        } else {
-            format!(
-                "{}%",
-                (lower_mark as f64 / self.line_count as f64 * 100.0).round() as u16
-            )
-        };
-
-        let status = format!("--More--({})", status_inner);
-
-        let banner = match (self.silent, wrong_key) {
-            (true, Some(key)) => format!(
-                "{} [Unknown key: '{}'. Press 'h' for instructions. (unimplemented)]",
-                status, key
-            ),
-            (true, None) => format!("{}[Press space to continue, 'q' to quit.]", status),
-            (false, Some(_)) => format!("{}{}", status, BELL),
-            (false, None) => status,
-        };
-
-        write!(
-            stdout,
-            "\r{}{}{}",
-            Attribute::Reverse,
-            banner,
-            Attribute::Reset
-        )
-        .unwrap();
-    }
-}
-
-// Break the lines on the cols of the terminal
-fn break_buff(buff: &str, cols: usize) -> Vec<String> {
-    let mut lines = Vec::with_capacity(buff.lines().count());
-
-    for l in buff.lines() {
-        lines.append(&mut break_line(l, cols));
-    }
-    lines
-}
-
-fn break_line(line: &str, cols: usize) -> Vec<String> {
-    let width = UnicodeWidthStr::width(line);
-    let mut lines = Vec::new();
-    if width < cols {
-        lines.push(line.to_string());
-        return lines;
-    }
-
-    let gr_idx = UnicodeSegmentation::grapheme_indices(line, true);
-    let mut last_index = 0;
-    let mut total_width = 0;
-    for (index, grapheme) in gr_idx {
-        let width = UnicodeWidthStr::width(grapheme);
-        total_width += width;
-
-        if total_width > cols {
-            lines.push(line[last_index..index].to_string());
-            last_index = index;
-            total_width = width;
-        }
-    }
-
-    if last_index != line.len() {
-        lines.push(line[last_index..].to_string());
-    }
-    lines
-}
-
-#[cfg(test)]
-mod tests {
-    use super::break_line;
-    use unicode_width::UnicodeWidthStr;
-
-    #[test]
-    fn test_break_lines_long() {
-        let mut test_string = String::with_capacity(100);
-        for _ in 0..200 {
-            test_string.push('#');
-        }
-
-        let lines = break_line(&test_string, 80);
-        let widths: Vec<usize> = lines
-            .iter()
-            .map(|s| UnicodeWidthStr::width(&s[..]))
-            .collect();
-
-        assert_eq!((80, 80, 40), (widths[0], widths[1], widths[2]));
-    }
-
-    #[test]
-    fn test_break_lines_short() {
-        let mut test_string = String::with_capacity(100);
-        for _ in 0..20 {
-            test_string.push('#');
-        }
-
-        let lines = break_line(&test_string, 80);
-
-        assert_eq!(20, lines[0].len());
-    }
-
-    #[test]
-    fn test_break_line_zwj() {
-        let mut test_string = String::with_capacity(1100);
-        for _ in 0..20 {
-            test_string.push_str("👩🏻‍🔬");
-        }
-
-        let lines = break_line(&test_string, 80);
-
-        let widths: Vec<usize> = lines
-            .iter()
-            .map(|s| UnicodeWidthStr::width(&s[..]))
-            .collect();
-
-        // Each 👩🏻‍🔬 is 6 character width it break line to the closest number to 80 => 6 * 13 = 78
-        assert_eq!((78, 42), (widths[0], widths[1]));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_mv/error.rs.html b/src/uu_mv/error.rs.html deleted file mode 100644 index 2bfafa876..000000000 --- a/src/uu_mv/error.rs.html +++ /dev/null @@ -1,90 +0,0 @@ -error.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-
// This file is part of the uutils coreutils package.
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-use std::error::Error;
-use std::fmt::{Display, Formatter, Result};
-
-use uucore::error::UError;
-
-#[derive(Debug)]
-pub enum MvError {
-    NoSuchFile(String),
-    SameFile(String, String),
-    SelfSubdirectory(String),
-    DirectoryToNonDirectory(String),
-    NonDirectoryToDirectory(String, String),
-    NotADirectory(String),
-}
-
-impl Error for MvError {}
-impl UError for MvError {}
-impl Display for MvError {
-    fn fmt(&self, f: &mut Formatter) -> Result {
-        match self {
-            MvError::NoSuchFile(s) => write!(f, "cannot stat {}: No such file or directory", s),
-            MvError::SameFile(s, t) => write!(f, "{} and {} are the same file", s, t),
-            MvError::SelfSubdirectory(s) => write!(
-                f,
-                "cannot move '{s}' to a subdirectory of itself, '{s}/{s}'",
-                s = s
-            ),
-            MvError::DirectoryToNonDirectory(t) => {
-                write!(f, "cannot overwrite directory {} with non-directory", t)
-            }
-            MvError::NonDirectoryToDirectory(s, t) => write!(
-                f,
-                "cannot overwrite non-directory {} with directory {}",
-                t, s
-            ),
-            MvError::NotADirectory(t) => write!(f, "target {} is not a directory", t),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_mv/mv.rs.html b/src/uu_mv/mv.rs.html deleted file mode 100644 index bc1506b4e..000000000 --- a/src/uu_mv/mv.rs.html +++ /dev/null @@ -1,908 +0,0 @@ -mv.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-
// This file is part of the uutils coreutils package.
-//
-// (c) Orvar Segerström <orvarsegerstrom@gmail.com>
-// (c) Sokovikov Evgeniy  <skv-headless@yandex.ru>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) sourcepath targetpath
-
-mod error;
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use std::env;
-use std::ffi::OsString;
-use std::fs;
-use std::io::{self, stdin};
-#[cfg(unix)]
-use std::os::unix;
-#[cfg(windows)]
-use std::os::windows;
-use std::path::{Path, PathBuf};
-use uucore::backup_control::{self, BackupMode};
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UError, UResult, USimpleError, UUsageError};
-
-use fs_extra::dir::{move_dir, CopyOptions as DirCopyOptions};
-
-use crate::error::MvError;
-
-pub struct Behavior {
-    overwrite: OverwriteMode,
-    backup: BackupMode,
-    suffix: String,
-    update: bool,
-    target_dir: Option<OsString>,
-    no_target_dir: bool,
-    verbose: bool,
-    strip_slashes: bool,
-}
-
-#[derive(Clone, Eq, PartialEq)]
-pub enum OverwriteMode {
-    NoClobber,
-    Interactive,
-    Force,
-}
-
-static ABOUT: &str = "Move SOURCE to DEST, or multiple SOURCE(s) to DIRECTORY.";
-static LONG_HELP: &str = "";
-
-static OPT_FORCE: &str = "force";
-static OPT_INTERACTIVE: &str = "interactive";
-static OPT_NO_CLOBBER: &str = "no-clobber";
-static OPT_STRIP_TRAILING_SLASHES: &str = "strip-trailing-slashes";
-static OPT_TARGET_DIRECTORY: &str = "target-directory";
-static OPT_NO_TARGET_DIRECTORY: &str = "no-target-directory";
-static OPT_UPDATE: &str = "update";
-static OPT_VERBOSE: &str = "verbose";
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [-T] SOURCE DEST
-{0} [OPTION]... SOURCE... DIRECTORY
-{0} [OPTION]... -t DIRECTORY SOURCE...",
-        uucore::execution_phrase()
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app()
-        .after_help(&*format!(
-            "{}\n{}",
-            LONG_HELP,
-            backup_control::BACKUP_CONTROL_LONG_HELP
-        ))
-        .override_usage(&usage[..])
-        .get_matches_from(args);
-
-    let files: Vec<OsString> = matches
-        .values_of_os(ARG_FILES)
-        .unwrap_or_default()
-        .map(|v| v.to_os_string())
-        .collect();
-
-    let overwrite_mode = determine_overwrite_mode(&matches);
-    let backup_mode = backup_control::determine_backup_mode(&matches)?;
-
-    if overwrite_mode == OverwriteMode::NoClobber && backup_mode != BackupMode::NoBackup {
-        return Err(UUsageError::new(
-            1,
-            "options --backup and --no-clobber are mutually exclusive",
-        ));
-    }
-
-    let backup_suffix = backup_control::determine_backup_suffix(&matches);
-
-    let behavior = Behavior {
-        overwrite: overwrite_mode,
-        backup: backup_mode,
-        suffix: backup_suffix,
-        update: matches.is_present(OPT_UPDATE),
-        target_dir: matches
-            .value_of_os(OPT_TARGET_DIRECTORY)
-            .map(OsString::from),
-        no_target_dir: matches.is_present(OPT_NO_TARGET_DIRECTORY),
-        verbose: matches.is_present(OPT_VERBOSE),
-        strip_slashes: matches.is_present(OPT_STRIP_TRAILING_SLASHES),
-    };
-
-    exec(&files[..], behavior)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-    .arg(
-        backup_control::arguments::backup()
-    )
-    .arg(
-        backup_control::arguments::backup_no_args()
-    )
-    .arg(
-            Arg::new(OPT_FORCE)
-            .short('f')
-            .long(OPT_FORCE)
-            .help("do not prompt before overwriting")
-    )
-    .arg(
-            Arg::new(OPT_INTERACTIVE)
-            .short('i')
-            .long(OPT_INTERACTIVE)
-            .help("prompt before override")
-    )
-    .arg(
-            Arg::new(OPT_NO_CLOBBER).short('n')
-            .long(OPT_NO_CLOBBER)
-            .help("do not overwrite an existing file")
-    )
-    .arg(
-            Arg::new(OPT_STRIP_TRAILING_SLASHES)
-            .long(OPT_STRIP_TRAILING_SLASHES)
-            .help("remove any trailing slashes from each SOURCE argument")
-    )
-    .arg(
-        backup_control::arguments::suffix()
-    )
-    .arg(
-        Arg::new(OPT_TARGET_DIRECTORY)
-        .short('t')
-        .long(OPT_TARGET_DIRECTORY)
-        .help("move all SOURCE arguments into DIRECTORY")
-        .takes_value(true)
-        .value_name("DIRECTORY")
-        .conflicts_with(OPT_NO_TARGET_DIRECTORY)
-        .allow_invalid_utf8(true)
-    )
-    .arg(
-            Arg::new(OPT_NO_TARGET_DIRECTORY)
-            .short('T')
-            .long(OPT_NO_TARGET_DIRECTORY).
-            help("treat DEST as a normal file")
-    )
-    .arg(
-            Arg::new(OPT_UPDATE)
-            .short('u')
-            .long(OPT_UPDATE)
-            .help("move only when the SOURCE file is newer than the destination file or when the destination file is missing")
-    )
-    .arg(
-            Arg::new(OPT_VERBOSE)
-            .short('v')
-            .long(OPT_VERBOSE).help("explain what is being done")
-    )
-    .arg(
-        Arg::new(ARG_FILES)
-            .multiple_occurrences(true)
-            .takes_value(true)
-            .min_values(2)
-            .required(true)
-            .allow_invalid_utf8(true)
-        )
-}
-
-fn determine_overwrite_mode(matches: &ArgMatches) -> OverwriteMode {
-    // This does not exactly match the GNU implementation:
-    // The GNU mv defaults to Force, but if more than one of the
-    // overwrite options are supplied, only the last takes effect.
-    // To default to no-clobber in that situation seems safer:
-    //
-    if matches.is_present(OPT_NO_CLOBBER) {
-        OverwriteMode::NoClobber
-    } else if matches.is_present(OPT_INTERACTIVE) {
-        OverwriteMode::Interactive
-    } else {
-        OverwriteMode::Force
-    }
-}
-
-fn exec(files: &[OsString], b: Behavior) -> UResult<()> {
-    let paths: Vec<PathBuf> = {
-        let paths = files.iter().map(Path::new);
-
-        // Strip slashes from path, if strip opt present
-        if b.strip_slashes {
-            paths
-                .map(|p| p.components().as_path().to_owned())
-                .collect::<Vec<PathBuf>>()
-        } else {
-            paths.map(|p| p.to_owned()).collect::<Vec<PathBuf>>()
-        }
-    };
-
-    if let Some(ref name) = b.target_dir {
-        return move_files_into_dir(&paths, &PathBuf::from(name), &b);
-    }
-    match paths.len() {
-        /* case 0/1 are not possible thanks to clap */
-        2 => {
-            let source = &paths[0];
-            let target = &paths[1];
-            // Here we use the `symlink_metadata()` method instead of `exists()`,
-            // since it handles dangling symlinks correctly. The method gives an
-            // `Ok()` results unless the source does not exist, or the user
-            // lacks permission to access metadata.
-            if source.symlink_metadata().is_err() {
-                return Err(MvError::NoSuchFile(source.quote().to_string()).into());
-            }
-
-            // GNU semantics are: if the source and target are the same, no move occurs and we print an error
-            if source.eq(target) {
-                // Done to match GNU semantics for the dot file
-                if source.eq(Path::new(".")) || source.ends_with("/.") || source.is_file() {
-                    return Err(MvError::SameFile(
-                        source.quote().to_string(),
-                        target.quote().to_string(),
-                    )
-                    .into());
-                } else {
-                    return Err(MvError::SelfSubdirectory(source.display().to_string()).into());
-                }
-            }
-
-            if target.is_dir() {
-                if b.no_target_dir {
-                    if !source.is_dir() {
-                        Err(MvError::DirectoryToNonDirectory(target.quote().to_string()).into())
-                    } else {
-                        rename(source, target, &b).map_err_context(|| {
-                            format!("cannot move {} to {}", source.quote(), target.quote())
-                        })
-                    }
-                } else {
-                    move_files_into_dir(&[source.clone()], target, &b)
-                }
-            } else if target.exists() && source.is_dir() {
-                Err(MvError::NonDirectoryToDirectory(
-                    source.quote().to_string(),
-                    target.quote().to_string(),
-                )
-                .into())
-            } else {
-                rename(source, target, &b).map_err(|e| USimpleError::new(1, format!("{}", e)))
-            }
-        }
-        _ => {
-            if b.no_target_dir {
-                return Err(UUsageError::new(
-                    1,
-                    format!("mv: extra operand {}", files[2].quote()),
-                ));
-            }
-            let target_dir = paths.last().unwrap();
-            move_files_into_dir(&paths[..paths.len() - 1], target_dir, &b)
-        }
-    }
-}
-
-fn move_files_into_dir(files: &[PathBuf], target_dir: &Path, b: &Behavior) -> UResult<()> {
-    if !target_dir.is_dir() {
-        return Err(MvError::NotADirectory(target_dir.quote().to_string()).into());
-    }
-
-    for sourcepath in files.iter() {
-        let targetpath = match sourcepath.file_name() {
-            Some(name) => target_dir.join(name),
-            None => {
-                show!(MvError::NoSuchFile(sourcepath.quote().to_string()));
-                continue;
-            }
-        };
-        show_if_err!(
-            rename(sourcepath, &targetpath, b).map_err_context(|| format!(
-                "cannot move {} to {}",
-                sourcepath.quote(),
-                targetpath.quote()
-            ))
-        )
-    }
-    Ok(())
-}
-
-fn rename(from: &Path, to: &Path, b: &Behavior) -> io::Result<()> {
-    let mut backup_path = None;
-
-    if to.exists() {
-        match b.overwrite {
-            OverwriteMode::NoClobber => return Ok(()),
-            OverwriteMode::Interactive => {
-                println!("{}: overwrite {}? ", uucore::util_name(), to.quote());
-                if !read_yes() {
-                    return Ok(());
-                }
-            }
-            OverwriteMode::Force => {}
-        };
-
-        backup_path = backup_control::get_backup_path(b.backup, to, &b.suffix);
-        if let Some(ref backup_path) = backup_path {
-            rename_with_fallback(to, backup_path)?;
-        }
-
-        if b.update && fs::metadata(from)?.modified()? <= fs::metadata(to)?.modified()? {
-            return Ok(());
-        }
-    }
-
-    // "to" may no longer exist if it was backed up
-    if to.exists() && to.is_dir() {
-        // normalize behavior between *nix and windows
-        if from.is_dir() {
-            if is_empty_dir(to) {
-                fs::remove_dir(to)?
-            } else {
-                return Err(io::Error::new(io::ErrorKind::Other, "Directory not empty"));
-            }
-        }
-    }
-
-    rename_with_fallback(from, to)?;
-
-    if b.verbose {
-        print!("{} -> {}", from.quote(), to.quote());
-        match backup_path {
-            Some(path) => println!(" (backup: {})", path.quote()),
-            None => println!(),
-        }
-    }
-    Ok(())
-}
-
-/// A wrapper around `fs::rename`, so that if it fails, we try falling back on
-/// copying and removing.
-fn rename_with_fallback(from: &Path, to: &Path) -> io::Result<()> {
-    if fs::rename(from, to).is_err() {
-        // Get metadata without following symlinks
-        let metadata = from.symlink_metadata()?;
-        let file_type = metadata.file_type();
-
-        if file_type.is_symlink() {
-            rename_symlink_fallback(from, to)?;
-        } else if file_type.is_dir() {
-            // We remove the destination directory if it exists to match the
-            // behavior of `fs::rename`. As far as I can tell, `fs_extra`'s
-            // `move_dir` would otherwise behave differently.
-            if to.exists() {
-                fs::remove_dir_all(to)?;
-            }
-            let options = DirCopyOptions {
-                // From the `fs_extra` documentation:
-                // "Recursively copy a directory with a new name or place it
-                // inside the destination. (same behaviors like cp -r in Unix)"
-                copy_inside: true,
-                ..DirCopyOptions::new()
-            };
-            if let Err(err) = move_dir(from, to, &options) {
-                return match err.kind {
-                    fs_extra::error::ErrorKind::PermissionDenied => Err(io::Error::new(
-                        io::ErrorKind::PermissionDenied,
-                        "Permission denied",
-                    )),
-                    _ => Err(io::Error::new(io::ErrorKind::Other, format!("{:?}", err))),
-                };
-            }
-        } else {
-            fs::copy(from, to).and_then(|_| fs::remove_file(from))?;
-        }
-    }
-    Ok(())
-}
-
-/// Move the given symlink to the given destination. On Windows, dangling
-/// symlinks return an error.
-#[inline]
-fn rename_symlink_fallback(from: &Path, to: &Path) -> io::Result<()> {
-    let path_symlink_points_to = fs::read_link(from)?;
-    #[cfg(unix)]
-    {
-        unix::fs::symlink(&path_symlink_points_to, &to).and_then(|_| fs::remove_file(&from))?;
-    }
-    #[cfg(windows)]
-    {
-        if path_symlink_points_to.exists() {
-            if path_symlink_points_to.is_dir() {
-                windows::fs::symlink_dir(&path_symlink_points_to, &to)?;
-            } else {
-                windows::fs::symlink_file(&path_symlink_points_to, &to)?;
-            }
-            fs::remove_file(&from)?;
-        } else {
-            return Err(io::Error::new(
-                io::ErrorKind::NotFound,
-                "can't determine symlink type, since it is dangling",
-            ));
-        }
-    }
-    #[cfg(not(any(windows, unix)))]
-    {
-        return Err(io::Error::new(
-            io::ErrorKind::Other,
-            "your operating system does not support symlinks",
-        ));
-    }
-    Ok(())
-}
-
-fn read_yes() -> bool {
-    let mut s = String::new();
-    match stdin().read_line(&mut s) {
-        Ok(_) => match s.chars().next() {
-            Some(x) => x == 'y' || x == 'Y',
-            _ => false,
-        },
-        _ => false,
-    }
-}
-
-fn is_empty_dir(path: &Path) -> bool {
-    match fs::read_dir(path) {
-        Ok(contents) => contents.peekable().peek().is_none(),
-        Err(_e) => false,
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_nice/nice.rs.html b/src/uu_nice/nice.rs.html deleted file mode 100644 index 487588a31..000000000 --- a/src/uu_nice/nice.rs.html +++ /dev/null @@ -1,250 +0,0 @@ -nice.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) getpriority execvp setpriority nstr PRIO cstrs ENOENT
-
-#[macro_use]
-extern crate uucore;
-
-use libc::{c_char, c_int, execvp, PRIO_PROCESS};
-use std::ffi::CString;
-use std::io::Error;
-use std::ptr;
-
-use clap::{crate_version, App, AppSettings, Arg};
-use uucore::error::{set_exit_code, UResult, USimpleError, UUsageError};
-
-pub mod options {
-    pub static ADJUSTMENT: &str = "adjustment";
-    pub static COMMAND: &str = "COMMAND";
-}
-
-fn usage() -> String {
-    format!(
-        "
-  {0} [OPTIONS] [COMMAND [ARGS]]
-
-Run COMMAND with an adjusted niceness, which affects process scheduling.
-With no COMMAND, print the current niceness.  Niceness values range from at
-least -20 (most favorable to the process) to 19 (least favorable to the
-process).",
-        uucore::execution_phrase()
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let mut niceness = unsafe {
-        nix::errno::Errno::clear();
-        libc::getpriority(PRIO_PROCESS, 0)
-    };
-    if Error::last_os_error().raw_os_error().unwrap() != 0 {
-        return Err(USimpleError::new(
-            125,
-            format!("getpriority: {}", Error::last_os_error()),
-        ));
-    }
-
-    let adjustment = match matches.value_of(options::ADJUSTMENT) {
-        Some(nstr) => {
-            if !matches.is_present(options::COMMAND) {
-                return Err(UUsageError::new(
-                    125,
-                    "A command must be given with an adjustment.",
-                ));
-            }
-            match nstr.parse() {
-                Ok(num) => num,
-                Err(e) => {
-                    return Err(USimpleError::new(
-                        125,
-                        format!("\"{}\" is not a valid number: {}", nstr, e),
-                    ))
-                }
-            }
-        }
-        None => {
-            if !matches.is_present(options::COMMAND) {
-                println!("{}", niceness);
-                return Ok(());
-            }
-            10_i32
-        }
-    };
-
-    niceness += adjustment;
-    if unsafe { libc::setpriority(PRIO_PROCESS, 0, niceness) } == -1 {
-        show_warning!("setpriority: {}", Error::last_os_error());
-    }
-
-    let cstrs: Vec<CString> = matches
-        .values_of(options::COMMAND)
-        .unwrap()
-        .map(|x| CString::new(x.as_bytes()).unwrap())
-        .collect();
-
-    let mut args: Vec<*const c_char> = cstrs.iter().map(|s| s.as_ptr()).collect();
-    args.push(ptr::null::<c_char>());
-    unsafe {
-        execvp(args[0], args.as_mut_ptr());
-    }
-
-    show_error!("execvp: {}", Error::last_os_error());
-    let exit_code = if Error::last_os_error().raw_os_error().unwrap() as c_int == libc::ENOENT {
-        127
-    } else {
-        126
-    };
-    set_exit_code(exit_code);
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .setting(AppSettings::TrailingVarArg)
-        .version(crate_version!())
-        .arg(
-            Arg::new(options::ADJUSTMENT)
-                .short('n')
-                .long(options::ADJUSTMENT)
-                .help("add N to the niceness (default is 10)")
-                .takes_value(true)
-                .allow_hyphen_values(true),
-        )
-        .arg(Arg::new(options::COMMAND).multiple_occurrences(true))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_nl/helper.rs.html b/src/uu_nl/helper.rs.html deleted file mode 100644 index ab843210f..000000000 --- a/src/uu_nl/helper.rs.html +++ /dev/null @@ -1,296 +0,0 @@ -helper.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-
// spell-checker:ignore (ToDO) conv
-
-use crate::options;
-
-// parse_style parses a style string into a NumberingStyle.
-fn parse_style(chars: &[char]) -> Result<crate::NumberingStyle, String> {
-    if chars.len() == 1 && chars[0] == 'a' {
-        Ok(crate::NumberingStyle::NumberForAll)
-    } else if chars.len() == 1 && chars[0] == 't' {
-        Ok(crate::NumberingStyle::NumberForNonEmpty)
-    } else if chars.len() == 1 && chars[0] == 'n' {
-        Ok(crate::NumberingStyle::NumberForNone)
-    } else if chars.len() > 1 && chars[0] == 'p' {
-        let s: String = chars[1..].iter().cloned().collect();
-        match regex::Regex::new(&s) {
-            Ok(re) => Ok(crate::NumberingStyle::NumberForRegularExpression(Box::new(
-                re,
-            ))),
-            Err(_) => Err(String::from("Illegal regular expression")),
-        }
-    } else {
-        Err(String::from("Illegal style encountered"))
-    }
-}
-
-// parse_options loads the options into the settings, returning an array of
-// error messages.
-pub fn parse_options(settings: &mut crate::Settings, opts: &clap::ArgMatches) -> Vec<String> {
-    // This vector holds error messages encountered.
-    let mut errs: Vec<String> = vec![];
-    settings.renumber = !opts.is_present(options::NO_RENUMBER);
-    match opts.value_of(options::NUMBER_SEPARATOR) {
-        None => {}
-        Some(val) => {
-            settings.number_separator = val.to_owned();
-        }
-    }
-    match opts.value_of(options::NUMBER_FORMAT) {
-        None => {}
-        Some(val) => match val {
-            "ln" => {
-                settings.number_format = crate::NumberFormat::Left;
-            }
-            "rn" => {
-                settings.number_format = crate::NumberFormat::Right;
-            }
-            "rz" => {
-                settings.number_format = crate::NumberFormat::RightZero;
-            }
-            _ => {
-                errs.push(String::from("Illegal value for -n"));
-            }
-        },
-    }
-    match opts.value_of(options::BODY_NUMBERING) {
-        None => {}
-        Some(val) => {
-            let chars: Vec<char> = val.chars().collect();
-            match parse_style(&chars) {
-                Ok(s) => {
-                    settings.body_numbering = s;
-                }
-                Err(message) => {
-                    errs.push(message);
-                }
-            }
-        }
-    }
-    match opts.value_of(options::FOOTER_NUMBERING) {
-        None => {}
-        Some(val) => {
-            let chars: Vec<char> = val.chars().collect();
-            match parse_style(&chars) {
-                Ok(s) => {
-                    settings.footer_numbering = s;
-                }
-                Err(message) => {
-                    errs.push(message);
-                }
-            }
-        }
-    }
-    match opts.value_of(options::HEADER_NUMBERING) {
-        None => {}
-        Some(val) => {
-            let chars: Vec<char> = val.chars().collect();
-            match parse_style(&chars) {
-                Ok(s) => {
-                    settings.header_numbering = s;
-                }
-                Err(message) => {
-                    errs.push(message);
-                }
-            }
-        }
-    }
-    match opts.value_of(options::LINE_INCREMENT) {
-        None => {}
-        Some(val) => {
-            let conv: Option<u64> = val.parse().ok();
-            match conv {
-                None => {
-                    errs.push(String::from("Illegal value for -i"));
-                }
-                Some(num) => settings.line_increment = num,
-            }
-        }
-    }
-    match opts.value_of(options::NUMBER_WIDTH) {
-        None => {}
-        Some(val) => {
-            let conv: Option<usize> = val.parse().ok();
-            match conv {
-                None => {
-                    errs.push(String::from("Illegal value for -w"));
-                }
-                Some(num) => settings.number_width = num,
-            }
-        }
-    }
-    match opts.value_of(options::STARTING_LINE_NUMBER) {
-        None => {}
-        Some(val) => {
-            let conv: Option<u64> = val.parse().ok();
-            match conv {
-                None => {
-                    errs.push(String::from("Illegal value for -v"));
-                }
-                Some(num) => settings.starting_line_number = num,
-            }
-        }
-    }
-    match opts.value_of(options::JOIN_BLANK_LINES) {
-        None => {}
-        Some(val) => {
-            let conv: Option<u64> = val.parse().ok();
-            match conv {
-                None => {
-                    errs.push(String::from("Illegal value for -l"));
-                }
-                Some(num) => settings.join_blank_lines = num,
-            }
-        }
-    }
-    errs
-}
-
-
- \ No newline at end of file diff --git a/src/uu_nl/nl.rs.html b/src/uu_nl/nl.rs.html deleted file mode 100644 index cb86abc5f..000000000 --- a/src/uu_nl/nl.rs.html +++ /dev/null @@ -1,794 +0,0 @@ -nl.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Tobias Bohumir Schottdorf <tobias.schottdorf@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-//  *
-
-// spell-checker:ignore (ToDO) corasick memchr
-
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{stdin, BufRead, BufReader, Read};
-use std::iter::repeat;
-use std::path::Path;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-mod helper;
-
-static NAME: &str = "nl";
-static USAGE: &str = "nl [OPTION]... [FILE]...";
-// A regular expression matching everything.
-
-// Settings store options used by nl to produce its output.
-pub struct Settings {
-    // The variables corresponding to the options -h, -b, and -f.
-    header_numbering: NumberingStyle,
-    body_numbering: NumberingStyle,
-    footer_numbering: NumberingStyle,
-    // The variable corresponding to -d
-    section_delimiter: [char; 2],
-    // The variables corresponding to the options -v, -i, -l, -w.
-    starting_line_number: u64,
-    line_increment: u64,
-    join_blank_lines: u64,
-    number_width: usize, // Used with String::from_char, hence usize.
-    // The format of the number and the (default value for)
-    // renumbering each page.
-    number_format: NumberFormat,
-    renumber: bool,
-    // The string appended to each line number output.
-    number_separator: String,
-}
-
-// NumberingStyle stores which lines are to be numbered.
-// The possible options are:
-// 1. Number all lines
-// 2. Number only nonempty lines
-// 3. Don't number any lines at all
-// 4. Number all lines that match a basic regular expression.
-#[allow(clippy::enum_variant_names)]
-enum NumberingStyle {
-    NumberForAll,
-    NumberForNonEmpty,
-    NumberForNone,
-    NumberForRegularExpression(Box<regex::Regex>),
-}
-
-// NumberFormat specifies how line numbers are output within their allocated
-// space. They are justified to the left or right, in the latter case with
-// the option of having all unused space to its left turned into leading zeroes.
-enum NumberFormat {
-    Left,
-    Right,
-    RightZero,
-}
-
-pub mod options {
-    pub const FILE: &str = "file";
-    pub const BODY_NUMBERING: &str = "body-numbering";
-    pub const SECTION_DELIMITER: &str = "section-delimiter";
-    pub const FOOTER_NUMBERING: &str = "footer-numbering";
-    pub const HEADER_NUMBERING: &str = "header-numbering";
-    pub const LINE_INCREMENT: &str = "line-increment";
-    pub const JOIN_BLANK_LINES: &str = "join-blank-lines";
-    pub const NUMBER_FORMAT: &str = "number-format";
-    pub const NO_RENUMBER: &str = "no-renumber";
-    pub const NUMBER_SEPARATOR: &str = "number-separator";
-    pub const STARTING_LINE_NUMBER: &str = "starting-line-number";
-    pub const NUMBER_WIDTH: &str = "number-width";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    // A mutable settings object, initialized with the defaults.
-    let mut settings = Settings {
-        header_numbering: NumberingStyle::NumberForNone,
-        body_numbering: NumberingStyle::NumberForAll,
-        footer_numbering: NumberingStyle::NumberForNone,
-        section_delimiter: ['\\', ':'],
-        starting_line_number: 1,
-        line_increment: 1,
-        join_blank_lines: 1,
-        number_width: 6,
-        number_format: NumberFormat::Right,
-        renumber: true,
-        number_separator: String::from("\t"),
-    };
-
-    // Update the settings from the command line options, and terminate the
-    // program if some options could not successfully be parsed.
-    let parse_errors = helper::parse_options(&mut settings, &matches);
-    if !parse_errors.is_empty() {
-        return Err(USimpleError::new(
-            1,
-            format!("Invalid arguments supplied.\n{}", parse_errors.join("\n")),
-        ));
-    }
-
-    let mut read_stdin = false;
-    let files: Vec<String> = match matches.values_of(options::FILE) {
-        Some(v) => v.clone().map(|v| v.to_owned()).collect(),
-        None => vec!["-".to_owned()],
-    };
-
-    for file in &files {
-        if file == "-" {
-            // If both file names and '-' are specified, we choose to treat first all
-            // regular files, and then read from stdin last.
-            read_stdin = true;
-            continue;
-        }
-        let path = Path::new(file);
-        let reader = File::open(path).map_err_context(|| file.to_string())?;
-        let mut buffer = BufReader::new(reader);
-        nl(&mut buffer, &settings)?;
-    }
-
-    if read_stdin {
-        let mut buffer = BufReader::new(stdin());
-        nl(&mut buffer, &settings)?;
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::new(options::BODY_NUMBERING)
-                .short('b')
-                .long(options::BODY_NUMBERING)
-                .help("use STYLE for numbering body lines")
-                .value_name("SYNTAX"),
-        )
-        .arg(
-            Arg::new(options::SECTION_DELIMITER)
-                .short('d')
-                .long(options::SECTION_DELIMITER)
-                .help("use CC for separating logical pages")
-                .value_name("CC"),
-        )
-        .arg(
-            Arg::new(options::FOOTER_NUMBERING)
-                .short('f')
-                .long(options::FOOTER_NUMBERING)
-                .help("use STYLE for numbering footer lines")
-                .value_name("STYLE"),
-        )
-        .arg(
-            Arg::new(options::HEADER_NUMBERING)
-                .short('h')
-                .long(options::HEADER_NUMBERING)
-                .help("use STYLE for numbering header lines")
-                .value_name("STYLE"),
-        )
-        .arg(
-            Arg::new(options::LINE_INCREMENT)
-                .short('i')
-                .long(options::LINE_INCREMENT)
-                .help("line number increment at each line")
-                .value_name("NUMBER"),
-        )
-        .arg(
-            Arg::new(options::JOIN_BLANK_LINES)
-                .short('l')
-                .long(options::JOIN_BLANK_LINES)
-                .help("group of NUMBER empty lines counted as one")
-                .value_name("NUMBER"),
-        )
-        .arg(
-            Arg::new(options::NUMBER_FORMAT)
-                .short('n')
-                .long(options::NUMBER_FORMAT)
-                .help("insert line numbers according to FORMAT")
-                .value_name("FORMAT"),
-        )
-        .arg(
-            Arg::new(options::NO_RENUMBER)
-                .short('p')
-                .long(options::NO_RENUMBER)
-                .help("do not reset line numbers at logical pages"),
-        )
-        .arg(
-            Arg::new(options::NUMBER_SEPARATOR)
-                .short('s')
-                .long(options::NUMBER_SEPARATOR)
-                .help("add STRING after (possible) line number")
-                .value_name("STRING"),
-        )
-        .arg(
-            Arg::new(options::STARTING_LINE_NUMBER)
-                .short('v')
-                .long(options::STARTING_LINE_NUMBER)
-                .help("first line number on each logical page")
-                .value_name("NUMBER"),
-        )
-        .arg(
-            Arg::new(options::NUMBER_WIDTH)
-                .short('w')
-                .long(options::NUMBER_WIDTH)
-                .help("use NUMBER columns for line numbers")
-                .value_name("NUMBER"),
-        )
-}
-
-// nl implements the main functionality for an individual buffer.
-fn nl<T: Read>(reader: &mut BufReader<T>, settings: &Settings) -> UResult<()> {
-    let regexp: regex::Regex = regex::Regex::new(r".?").unwrap();
-    let mut line_no = settings.starting_line_number;
-    // The current line number's width as a string. Using to_string is inefficient
-    // but since we only do it once, it should not hurt.
-    let mut line_no_width = line_no.to_string().len();
-    let line_no_width_initial = line_no_width;
-    // Stores the smallest integer with one more digit than line_no, so that
-    // when line_no >= line_no_threshold, we need to use one more digit.
-    let mut line_no_threshold = 10u64.pow(line_no_width as u32);
-    let mut empty_line_count: u64 = 0;
-    let fill_char = match settings.number_format {
-        NumberFormat::RightZero => '0',
-        _ => ' ',
-    };
-    // Initially, we use the body's line counting settings
-    let mut regex_filter = match settings.body_numbering {
-        NumberingStyle::NumberForRegularExpression(ref re) => re,
-        _ => &regexp,
-    };
-    let mut line_filter: fn(&str, &regex::Regex) -> bool = pass_regex;
-    for l in reader.lines() {
-        let mut l = l.map_err_context(|| "could not read line".to_string())?;
-        // Sanitize the string. We want to print the newline ourselves.
-        if l.ends_with('\n') {
-            l.pop();
-        }
-        // Next we iterate through the individual chars to see if this
-        // is one of the special lines starting a new "section" in the
-        // document.
-        let line = l;
-        let mut odd = false;
-        // matched_group counts how many copies of section_delimiter
-        // this string consists of (0 if there's anything else)
-        let mut matched_groups = 0u8;
-        for c in line.chars() {
-            // If this is a newline character, the loop should end.
-            if c == '\n' {
-                break;
-            }
-            // If we have already seen three groups (corresponding to
-            // a header) or the current char does not form part of
-            // a new group, then this line is not a segment indicator.
-            if matched_groups >= 3 || settings.section_delimiter[if odd { 1 } else { 0 }] != c {
-                matched_groups = 0;
-                break;
-            }
-            if odd {
-                // We have seen a new group and count it.
-                matched_groups += 1;
-            }
-            odd = !odd;
-        }
-
-        // See how many groups we matched. That will tell us if this is
-        // a line starting a new segment, and the number of groups
-        // indicates what type of segment.
-        if matched_groups > 0 {
-            // The current line is a section delimiter, so we output
-            // a blank line.
-            println!();
-            // However the line does not count as a blank line, so we
-            // reset the counter used for --join-blank-lines.
-            empty_line_count = 0;
-            match *match matched_groups {
-                3 => {
-                    // This is a header, so we may need to reset the
-                    // line number and the line width
-                    if settings.renumber {
-                        line_no = settings.starting_line_number;
-                        line_no_width = line_no_width_initial;
-                        line_no_threshold = 10u64.pow(line_no_width as u32);
-                    }
-                    &settings.header_numbering
-                }
-                1 => &settings.footer_numbering,
-                // The only option left is 2, but rust wants
-                // a catch-all here.
-                _ => &settings.body_numbering,
-            } {
-                NumberingStyle::NumberForAll => {
-                    line_filter = pass_all;
-                }
-                NumberingStyle::NumberForNonEmpty => {
-                    line_filter = pass_nonempty;
-                }
-                NumberingStyle::NumberForNone => {
-                    line_filter = pass_none;
-                }
-                NumberingStyle::NumberForRegularExpression(ref re) => {
-                    line_filter = pass_regex;
-                    regex_filter = re;
-                }
-            }
-            continue;
-        }
-        // From this point on we format and print a "regular" line.
-        if line.is_empty() {
-            // The line is empty, which means that we have to care
-            // about the --join-blank-lines parameter.
-            empty_line_count += 1;
-        } else {
-            // This saves us from having to check for an empty string
-            // in the next selector.
-            empty_line_count = 0;
-        }
-        if !line_filter(&line, regex_filter)
-            || (empty_line_count > 0 && empty_line_count < settings.join_blank_lines)
-        {
-            // No number is printed for this line. Either we did not
-            // want to print one in the first place, or it is a blank
-            // line but we are still collecting more blank lines via
-            // the option --join-blank-lines.
-            println!("{}", line);
-            continue;
-        }
-        // If we make it here, then either we are printing a non-empty
-        // line or assigning a line number to an empty line. Either
-        // way, start counting empties from zero once more.
-        empty_line_count = 0;
-        // A line number is to be printed.
-        let w = if settings.number_width > line_no_width {
-            settings.number_width - line_no_width
-        } else {
-            0
-        };
-        let fill: String = repeat(fill_char).take(w).collect();
-        match settings.number_format {
-            NumberFormat::Left => println!(
-                "{1}{0}{2}{3}",
-                fill, line_no, settings.number_separator, line
-            ),
-            _ => println!(
-                "{0}{1}{2}{3}",
-                fill, line_no, settings.number_separator, line
-            ),
-        }
-        // Now update the variables for the (potential) next
-        // line.
-        line_no += settings.line_increment;
-        while line_no >= line_no_threshold {
-            // The line number just got longer.
-            line_no_threshold *= 10;
-            line_no_width += 1;
-        }
-    }
-    Ok(())
-}
-
-fn pass_regex(line: &str, re: &regex::Regex) -> bool {
-    re.is_match(line)
-}
-
-fn pass_nonempty(line: &str, _: &regex::Regex) -> bool {
-    !line.is_empty()
-}
-
-fn pass_none(_: &str, _: &regex::Regex) -> bool {
-    false
-}
-
-fn pass_all(_: &str, _: &regex::Regex) -> bool {
-    true
-}
-
-
- \ No newline at end of file diff --git a/src/uu_nohup/nohup.rs.html b/src/uu_nohup/nohup.rs.html deleted file mode 100644 index f95aaadb5..000000000 --- a/src/uu_nohup/nohup.rs.html +++ /dev/null @@ -1,448 +0,0 @@ -nohup.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) 2014 Vsevolod Velichko <torkvemada@sorokdva.net>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) execvp SIGHUP cproc vprocmgr cstrs homeout
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, AppSettings, Arg};
-use libc::{c_char, dup2, execvp, signal};
-use libc::{SIGHUP, SIG_IGN};
-use std::env;
-use std::ffi::CString;
-use std::fmt::{Display, Formatter};
-use std::fs::{File, OpenOptions};
-use std::io::Error;
-use std::os::unix::prelude::*;
-use std::path::{Path, PathBuf};
-use uucore::display::Quotable;
-use uucore::error::{set_exit_code, UError, UResult};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "Run COMMAND ignoring hangup signals.";
-static LONG_HELP: &str = "
-If standard input is terminal, it'll be replaced with /dev/null.
-If standard output is terminal, it'll be appended to nohup.out instead,
-or $HOME/nohup.out, if nohup.out open failed.
-If standard error is terminal, it'll be redirected to stdout.
-";
-static NOHUP_OUT: &str = "nohup.out";
-// exit codes that match the GNU implementation
-static EXIT_CANCELED: i32 = 125;
-static EXIT_CANNOT_INVOKE: i32 = 126;
-static EXIT_ENOENT: i32 = 127;
-static POSIX_NOHUP_FAILURE: i32 = 127;
-
-mod options {
-    pub const CMD: &str = "cmd";
-}
-
-#[derive(Debug)]
-enum NohupError {
-    CannotDetach,
-    CannotReplace(&'static str, std::io::Error),
-    OpenFailed(i32, std::io::Error),
-    OpenFailed2(i32, std::io::Error, String, std::io::Error),
-}
-
-impl std::error::Error for NohupError {}
-
-impl UError for NohupError {
-    fn code(&self) -> i32 {
-        match self {
-            NohupError::OpenFailed(code, _) | NohupError::OpenFailed2(code, _, _, _) => *code,
-            _ => 2,
-        }
-    }
-}
-
-impl Display for NohupError {
-    fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
-        match self {
-            NohupError::CannotDetach => write!(f, "Cannot detach from console"),
-            NohupError::CannotReplace(s, e) => write!(f, "Cannot replace {}: {}", s, e),
-            NohupError::OpenFailed(_, e) => {
-                write!(f, "failed to open {}: {}", NOHUP_OUT.quote(), e)
-            }
-            NohupError::OpenFailed2(_, e1, s, e2) => write!(
-                f,
-                "failed to open {}: {}\nfailed to open {}: {}",
-                NOHUP_OUT.quote(),
-                e1,
-                s.quote(),
-                e2
-            ),
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    replace_fds()?;
-
-    unsafe { signal(SIGHUP, SIG_IGN) };
-
-    if unsafe { !_vprocmgr_detach_from_console(0).is_null() } {
-        return Err(NohupError::CannotDetach.into());
-    };
-
-    let cstrs: Vec<CString> = matches
-        .values_of(options::CMD)
-        .unwrap()
-        .map(|x| CString::new(x.as_bytes()).unwrap())
-        .collect();
-    let mut args: Vec<*const c_char> = cstrs.iter().map(|s| s.as_ptr()).collect();
-    args.push(std::ptr::null());
-
-    let ret = unsafe { execvp(args[0], args.as_mut_ptr()) };
-    match ret {
-        libc::ENOENT => set_exit_code(EXIT_ENOENT),
-        _ => set_exit_code(EXIT_CANNOT_INVOKE),
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::CMD)
-                .hide(true)
-                .required(true)
-                .multiple_occurrences(true),
-        )
-        .setting(AppSettings::TrailingVarArg)
-}
-
-fn replace_fds() -> UResult<()> {
-    if atty::is(atty::Stream::Stdin) {
-        let new_stdin = File::open(Path::new("/dev/null"))
-            .map_err(|e| NohupError::CannotReplace("STDIN", e))?;
-        if unsafe { dup2(new_stdin.as_raw_fd(), 0) } != 0 {
-            return Err(NohupError::CannotReplace("STDIN", Error::last_os_error()).into());
-        }
-    }
-
-    if atty::is(atty::Stream::Stdout) {
-        let new_stdout = find_stdout()?;
-        let fd = new_stdout.as_raw_fd();
-
-        if unsafe { dup2(fd, 1) } != 1 {
-            return Err(NohupError::CannotReplace("STDOUT", Error::last_os_error()).into());
-        }
-    }
-
-    if atty::is(atty::Stream::Stderr) && unsafe { dup2(1, 2) } != 2 {
-        return Err(NohupError::CannotReplace("STDERR", Error::last_os_error()).into());
-    }
-    Ok(())
-}
-
-fn find_stdout() -> UResult<File> {
-    let internal_failure_code = match std::env::var("POSIXLY_CORRECT") {
-        Ok(_) => POSIX_NOHUP_FAILURE,
-        Err(_) => EXIT_CANCELED,
-    };
-
-    match OpenOptions::new()
-        .write(true)
-        .create(true)
-        .append(true)
-        .open(Path::new(NOHUP_OUT))
-    {
-        Ok(t) => {
-            show_error!(
-                "ignoring input and appending output to {}",
-                NOHUP_OUT.quote()
-            );
-            Ok(t)
-        }
-        Err(e1) => {
-            let home = match env::var("HOME") {
-                Err(_) => return Err(NohupError::OpenFailed(internal_failure_code, e1).into()),
-                Ok(h) => h,
-            };
-            let mut homeout = PathBuf::from(home);
-            homeout.push(NOHUP_OUT);
-            let homeout_str = homeout.to_str().unwrap();
-            match OpenOptions::new()
-                .write(true)
-                .create(true)
-                .append(true)
-                .open(&homeout)
-            {
-                Ok(t) => {
-                    show_error!(
-                        "ignoring input and appending output to {}",
-                        homeout_str.quote()
-                    );
-                    Ok(t)
-                }
-                Err(e2) => Err(NohupError::OpenFailed2(
-                    internal_failure_code,
-                    e1,
-                    homeout_str.to_string(),
-                    e2,
-                )
-                .into()),
-            }
-        }
-    }
-}
-
-fn usage() -> String {
-    format!(
-        "{0} COMMAND [ARG]...\n    {0} FLAG",
-        uucore::execution_phrase()
-    )
-}
-
-#[cfg(target_vendor = "apple")]
-extern "C" {
-    fn _vprocmgr_detach_from_console(flags: u32) -> *const libc::c_int;
-}
-
-#[cfg(any(target_os = "linux", target_os = "freebsd"))]
-unsafe fn _vprocmgr_detach_from_console(_: u32) -> *const libc::c_int {
-    std::ptr::null()
-}
-
-
- \ No newline at end of file diff --git a/src/uu_nproc/nproc.rs.html b/src/uu_nproc/nproc.rs.html deleted file mode 100644 index 6b9a30ba0..000000000 --- a/src/uu_nproc/nproc.rs.html +++ /dev/null @@ -1,242 +0,0 @@ -nproc.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Gehring <mg@ebfe.org>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) NPROCESSORS nprocs numstr threadstr sysconf
-
-use clap::{crate_version, App, Arg};
-use std::env;
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-
-#[cfg(target_os = "linux")]
-pub const _SC_NPROCESSORS_CONF: libc::c_int = 83;
-#[cfg(target_vendor = "apple")]
-pub const _SC_NPROCESSORS_CONF: libc::c_int = libc::_SC_NPROCESSORS_CONF;
-#[cfg(target_os = "freebsd")]
-pub const _SC_NPROCESSORS_CONF: libc::c_int = 57;
-#[cfg(target_os = "netbsd")]
-pub const _SC_NPROCESSORS_CONF: libc::c_int = 1001;
-
-static OPT_ALL: &str = "all";
-static OPT_IGNORE: &str = "ignore";
-
-static ABOUT: &str = "Print the number of cores available to the current process.";
-
-fn usage() -> String {
-    format!("{0} [OPTIONS]...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let mut ignore = match matches.value_of(OPT_IGNORE) {
-        Some(numstr) => match numstr.parse() {
-            Ok(num) => num,
-            Err(e) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("{} is not a valid number: {}", numstr.quote(), e),
-                ));
-            }
-        },
-        None => 0,
-    };
-
-    if !matches.is_present(OPT_ALL) {
-        // OMP_NUM_THREADS doesn't have an impact on --all
-        ignore += match env::var("OMP_NUM_THREADS") {
-            Ok(threadstr) => threadstr.parse().unwrap_or(0),
-            Err(_) => 0,
-        };
-    }
-
-    let mut cores = if matches.is_present(OPT_ALL) {
-        num_cpus_all()
-    } else {
-        num_cpus::get()
-    };
-
-    if cores <= ignore {
-        cores = 1;
-    } else {
-        cores -= ignore;
-    }
-    println!("{}", cores);
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_ALL)
-                .long(OPT_ALL)
-                .help("print the number of cores available to the system"),
-        )
-        .arg(
-            Arg::new(OPT_IGNORE)
-                .long(OPT_IGNORE)
-                .takes_value(true)
-                .help("ignore up to N cores"),
-        )
-}
-
-#[cfg(any(
-    target_os = "linux",
-    target_vendor = "apple",
-    target_os = "freebsd",
-    target_os = "netbsd"
-))]
-fn num_cpus_all() -> usize {
-    let nprocs = unsafe { libc::sysconf(_SC_NPROCESSORS_CONF) };
-    if nprocs == 1 {
-        // In some situation, /proc and /sys are not mounted, and sysconf returns 1.
-        // However, we want to guarantee that `nproc --all` >= `nproc`.
-        num_cpus::get()
-    } else if nprocs > 0 {
-        nprocs as usize
-    } else {
-        1
-    }
-}
-
-// Other platforms (e.g., windows), num_cpus::get() directly.
-#[cfg(not(any(
-    target_os = "linux",
-    target_vendor = "apple",
-    target_os = "freebsd",
-    target_os = "netbsd"
-)))]
-fn num_cpus_all() -> usize {
-    num_cpus::get()
-}
-
-
- \ No newline at end of file diff --git a/src/uu_numfmt/errors.rs.html b/src/uu_numfmt/errors.rs.html deleted file mode 100644 index 3a2249c7e..000000000 --- a/src/uu_numfmt/errors.rs.html +++ /dev/null @@ -1,82 +0,0 @@ -errors.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use std::{
-    error::Error,
-    fmt::{Debug, Display},
-};
-use uucore::error::UError;
-
-#[derive(Debug)]
-pub enum NumfmtError {
-    IoError(String),
-    IllegalArgument(String),
-    FormattingError(String),
-}
-
-impl UError for NumfmtError {
-    fn code(&self) -> i32 {
-        match self {
-            NumfmtError::IoError(_) => 1,
-            NumfmtError::IllegalArgument(_) => 1,
-            NumfmtError::FormattingError(_) => 2,
-        }
-    }
-}
-
-impl Error for NumfmtError {}
-
-impl Display for NumfmtError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            NumfmtError::IoError(s)
-            | NumfmtError::IllegalArgument(s)
-            | NumfmtError::FormattingError(s) => write!(f, "{}", s),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_numfmt/format.rs.html b/src/uu_numfmt/format.rs.html deleted file mode 100644 index 704436078..000000000 --- a/src/uu_numfmt/format.rs.html +++ /dev/null @@ -1,642 +0,0 @@ -format.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-
use uucore::display::Quotable;
-
-use crate::options::{NumfmtOptions, RoundMethod};
-use crate::units::{DisplayableSuffix, RawSuffix, Result, Suffix, Unit, IEC_BASES, SI_BASES};
-
-/// Iterate over a line's fields, where each field is a contiguous sequence of
-/// non-whitespace, optionally prefixed with one or more characters of leading
-/// whitespace. Fields are returned as tuples of `(prefix, field)`.
-///
-/// # Examples:
-///
-/// ```
-/// let mut fields = uu_numfmt::format::WhitespaceSplitter { s: Some("    1234 5") };
-///
-/// assert_eq!(Some(("    ", "1234")), fields.next());
-/// assert_eq!(Some((" ", "5")), fields.next());
-/// assert_eq!(None, fields.next());
-/// ```
-///
-/// Delimiters are included in the results; `prefix` will be empty only for
-/// the first field of the line (including the case where the input line is
-/// empty):
-///
-/// ```
-/// let mut fields = uu_numfmt::format::WhitespaceSplitter { s: Some("first second") };
-///
-/// assert_eq!(Some(("", "first")), fields.next());
-/// assert_eq!(Some((" ", "second")), fields.next());
-///
-/// let mut fields = uu_numfmt::format::WhitespaceSplitter { s: Some("") };
-///
-/// assert_eq!(Some(("", "")), fields.next());
-/// ```
-pub struct WhitespaceSplitter<'a> {
-    pub s: Option<&'a str>,
-}
-
-impl<'a> Iterator for WhitespaceSplitter<'a> {
-    type Item = (&'a str, &'a str);
-
-    /// Yield the next field in the input string as a tuple `(prefix, field)`.
-    fn next(&mut self) -> Option<Self::Item> {
-        let haystack = self.s?;
-
-        let (prefix, field) = haystack.split_at(
-            haystack
-                .find(|c: char| !c.is_whitespace())
-                .unwrap_or(haystack.len()),
-        );
-
-        let (field, rest) = field.split_at(
-            field
-                .find(|c: char| c.is_whitespace())
-                .unwrap_or(field.len()),
-        );
-
-        self.s = if !rest.is_empty() { Some(rest) } else { None };
-
-        Some((prefix, field))
-    }
-}
-
-fn parse_suffix(s: &str) -> Result<(f64, Option<Suffix>)> {
-    if s.is_empty() {
-        return Err("invalid number: ''".to_string());
-    }
-
-    let with_i = s.ends_with('i');
-    let mut iter = s.chars();
-    if with_i {
-        iter.next_back();
-    }
-    let suffix = match iter.next_back() {
-        Some('K') => Some((RawSuffix::K, with_i)),
-        Some('M') => Some((RawSuffix::M, with_i)),
-        Some('G') => Some((RawSuffix::G, with_i)),
-        Some('T') => Some((RawSuffix::T, with_i)),
-        Some('P') => Some((RawSuffix::P, with_i)),
-        Some('E') => Some((RawSuffix::E, with_i)),
-        Some('Z') => Some((RawSuffix::Z, with_i)),
-        Some('Y') => Some((RawSuffix::Y, with_i)),
-        Some('0'..='9') => None,
-        _ => return Err(format!("invalid suffix in input: {}", s.quote())),
-    };
-
-    let suffix_len = match suffix {
-        None => 0,
-        Some((_, false)) => 1,
-        Some((_, true)) => 2,
-    };
-
-    let number = s[..s.len() - suffix_len]
-        .parse::<f64>()
-        .map_err(|_| format!("invalid number: {}", s.quote()))?;
-
-    Ok((number, suffix))
-}
-
-fn remove_suffix(i: f64, s: Option<Suffix>, u: &Unit) -> Result<f64> {
-    match (s, u) {
-        (None, _) => Ok(i),
-        (Some((raw_suffix, false)), &Unit::Auto) | (Some((raw_suffix, false)), &Unit::Si) => {
-            match raw_suffix {
-                RawSuffix::K => Ok(i * 1e3),
-                RawSuffix::M => Ok(i * 1e6),
-                RawSuffix::G => Ok(i * 1e9),
-                RawSuffix::T => Ok(i * 1e12),
-                RawSuffix::P => Ok(i * 1e15),
-                RawSuffix::E => Ok(i * 1e18),
-                RawSuffix::Z => Ok(i * 1e21),
-                RawSuffix::Y => Ok(i * 1e24),
-            }
-        }
-        (Some((raw_suffix, false)), &Unit::Iec(false))
-        | (Some((raw_suffix, true)), &Unit::Auto)
-        | (Some((raw_suffix, true)), &Unit::Iec(true)) => match raw_suffix {
-            RawSuffix::K => Ok(i * IEC_BASES[1]),
-            RawSuffix::M => Ok(i * IEC_BASES[2]),
-            RawSuffix::G => Ok(i * IEC_BASES[3]),
-            RawSuffix::T => Ok(i * IEC_BASES[4]),
-            RawSuffix::P => Ok(i * IEC_BASES[5]),
-            RawSuffix::E => Ok(i * IEC_BASES[6]),
-            RawSuffix::Z => Ok(i * IEC_BASES[7]),
-            RawSuffix::Y => Ok(i * IEC_BASES[8]),
-        },
-        (_, _) => Err("This suffix is unsupported for specified unit".to_owned()),
-    }
-}
-
-fn transform_from(s: &str, opts: &Unit) -> Result<f64> {
-    let (i, suffix) = parse_suffix(s)?;
-
-    remove_suffix(i, suffix, opts).map(|n| if n < 0.0 { -n.abs().ceil() } else { n.ceil() })
-}
-
-/// Divide numerator by denominator, with rounding.
-///
-/// If the result of the division is less than 10.0, round to one decimal point.
-///
-/// Otherwise, round to an integer.
-///
-/// # Examples:
-///
-/// ```
-/// use uu_numfmt::format::div_round;
-/// use uu_numfmt::options::RoundMethod;
-///
-/// // Rounding methods:
-/// assert_eq!(div_round(1.01, 1.0, RoundMethod::FromZero), 1.1);
-/// assert_eq!(div_round(1.01, 1.0, RoundMethod::TowardsZero), 1.0);
-/// assert_eq!(div_round(1.01, 1.0, RoundMethod::Up), 1.1);
-/// assert_eq!(div_round(1.01, 1.0, RoundMethod::Down), 1.0);
-/// assert_eq!(div_round(1.01, 1.0, RoundMethod::Nearest), 1.0);
-///
-/// // Division:
-/// assert_eq!(div_round(999.1, 1000.0, RoundMethod::FromZero), 1.0);
-/// assert_eq!(div_round(1001., 10., RoundMethod::FromZero), 101.);
-/// assert_eq!(div_round(9991., 10., RoundMethod::FromZero), 1000.);
-/// assert_eq!(div_round(-12.34, 1.0, RoundMethod::FromZero), -13.0);
-/// assert_eq!(div_round(1000.0, -3.14, RoundMethod::FromZero), -319.0);
-/// assert_eq!(div_round(-271828.0, -271.0, RoundMethod::FromZero), 1004.0);
-/// ```
-pub fn div_round(n: f64, d: f64, method: RoundMethod) -> f64 {
-    let v = n / d;
-
-    if v.abs() < 10.0 {
-        method.round(10.0 * v) / 10.0
-    } else {
-        method.round(v)
-    }
-}
-
-fn consider_suffix(n: f64, u: &Unit, round_method: RoundMethod) -> Result<(f64, Option<Suffix>)> {
-    use crate::units::RawSuffix::*;
-
-    let abs_n = n.abs();
-    let suffixes = [K, M, G, T, P, E, Z, Y];
-
-    let (bases, with_i) = match *u {
-        Unit::Si => (&SI_BASES, false),
-        Unit::Iec(with_i) => (&IEC_BASES, with_i),
-        Unit::Auto => return Err("Unit 'auto' isn't supported with --to options".to_owned()),
-        Unit::None => return Ok((n, None)),
-    };
-
-    let i = match abs_n {
-        _ if abs_n <= bases[1] - 1.0 => return Ok((n, None)),
-        _ if abs_n < bases[2] => 1,
-        _ if abs_n < bases[3] => 2,
-        _ if abs_n < bases[4] => 3,
-        _ if abs_n < bases[5] => 4,
-        _ if abs_n < bases[6] => 5,
-        _ if abs_n < bases[7] => 6,
-        _ if abs_n < bases[8] => 7,
-        _ if abs_n < bases[9] => 8,
-        _ => return Err("Number is too big and unsupported".to_string()),
-    };
-
-    let v = div_round(n, bases[i], round_method);
-
-    // check if rounding pushed us into the next base
-    if v.abs() >= bases[1] {
-        Ok((v / bases[1], Some((suffixes[i], with_i))))
-    } else {
-        Ok((v, Some((suffixes[i - 1], with_i))))
-    }
-}
-
-fn transform_to(s: f64, opts: &Unit, round_method: RoundMethod) -> Result<String> {
-    let (i2, s) = consider_suffix(s, opts, round_method)?;
-    Ok(match s {
-        None => format!("{}", i2),
-        Some(s) if i2.abs() < 10.0 => format!("{:.1}{}", i2, DisplayableSuffix(s)),
-        Some(s) => format!("{:.0}{}", i2, DisplayableSuffix(s)),
-    })
-}
-
-fn format_string(
-    source: &str,
-    options: &NumfmtOptions,
-    implicit_padding: Option<isize>,
-) -> Result<String> {
-    // strip the (optional) suffix before applying any transformation
-    let source_without_suffix = match &options.suffix {
-        Some(suffix) => source.strip_suffix(suffix).unwrap_or(source),
-        None => source,
-    };
-
-    let number = transform_to(
-        transform_from(source_without_suffix, &options.transform.from)?,
-        &options.transform.to,
-        options.round,
-    )?;
-
-    // bring back the suffix before applying padding
-    let number_with_suffix = match &options.suffix {
-        Some(suffix) => format!("{}{}", number, suffix),
-        None => number,
-    };
-
-    Ok(match implicit_padding.unwrap_or(options.padding) {
-        0 => number_with_suffix,
-        p if p > 0 => format!("{:>padding$}", number_with_suffix, padding = p as usize),
-        p => format!(
-            "{:<padding$}",
-            number_with_suffix,
-            padding = p.abs() as usize
-        ),
-    })
-}
-
-fn format_and_print_delimited(s: &str, options: &NumfmtOptions) -> Result<()> {
-    let delimiter = options.delimiter.as_ref().unwrap();
-
-    for (n, field) in (1..).zip(s.split(delimiter)) {
-        let field_selected = uucore::ranges::contain(&options.fields, n);
-
-        // print delimiter before second and subsequent fields
-        if n > 1 {
-            print!("{}", delimiter);
-        }
-
-        if field_selected {
-            print!("{}", format_string(field.trim_start(), options, None)?);
-        } else {
-            // print unselected field without conversion
-            print!("{}", field);
-        }
-    }
-
-    println!();
-
-    Ok(())
-}
-
-fn format_and_print_whitespace(s: &str, options: &NumfmtOptions) -> Result<()> {
-    for (n, (prefix, field)) in (1..).zip(WhitespaceSplitter { s: Some(s) }) {
-        let field_selected = uucore::ranges::contain(&options.fields, n);
-
-        if field_selected {
-            let empty_prefix = prefix.is_empty();
-
-            // print delimiter before second and subsequent fields
-            let prefix = if n > 1 {
-                print!(" ");
-                &prefix[1..]
-            } else {
-                prefix
-            };
-
-            let implicit_padding = if !empty_prefix && options.padding == 0 {
-                Some((prefix.len() + field.len()) as isize)
-            } else {
-                None
-            };
-
-            print!("{}", format_string(field, options, implicit_padding)?);
-        } else {
-            // print unselected field without conversion
-            print!("{}{}", prefix, field);
-        }
-    }
-
-    println!();
-
-    Ok(())
-}
-
-/// Format a line of text according to the selected options.
-///
-/// Given a line of text `s`, split the line into fields, transform and format
-/// any selected numeric fields, and print the result to stdout. Fields not
-/// selected for conversion are passed through unmodified.
-pub fn format_and_print(s: &str, options: &NumfmtOptions) -> Result<()> {
-    match &options.delimiter {
-        Some(_) => format_and_print_delimited(s, options),
-        None => format_and_print_whitespace(s, options),
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_numfmt/numfmt.rs.html b/src/uu_numfmt/numfmt.rs.html deleted file mode 100644 index 332109421..000000000 --- a/src/uu_numfmt/numfmt.rs.html +++ /dev/null @@ -1,676 +0,0 @@ -numfmt.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Yury Krivopalov <ykrivopalov@yandex.ru>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore N'th M'th
-
-use crate::errors::*;
-use crate::format::format_and_print;
-use crate::options::*;
-use crate::units::{Result, Unit};
-use clap::{crate_version, App, AppSettings, Arg, ArgMatches};
-use std::io::{BufRead, Write};
-use uucore::display::Quotable;
-use uucore::error::UResult;
-use uucore::ranges::Range;
-
-pub mod errors;
-pub mod format;
-pub mod options;
-mod units;
-
-static ABOUT: &str = "Convert numbers from/to human-readable strings";
-static LONG_HELP: &str = "UNIT options:
-   none   no auto-scaling is done; suffixes will trigger an error
-
-   auto   accept optional single/two letter suffix:
-
-          1K = 1000, 1Ki = 1024, 1M = 1000000, 1Mi = 1048576,
-
-   si     accept optional single letter suffix:
-
-          1K = 1000, 1M = 1000000, ...
-
-   iec    accept optional single letter suffix:
-
-          1K = 1024, 1M = 1048576, ...
-
-   iec-i  accept optional two-letter suffix:
-
-          1Ki = 1024, 1Mi = 1048576, ...
-
-FIELDS supports cut(1) style field ranges:
-  N    N'th field, counted from 1
-  N-   from N'th field, to end of line
-  N-M  from N'th to M'th field (inclusive)
-  -M   from first to M'th field (inclusive)
-  -    all fields
-Multiple fields/ranges can be separated with commas
-";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [NUMBER]...", uucore::execution_phrase())
-}
-
-fn handle_args<'a>(args: impl Iterator<Item = &'a str>, options: NumfmtOptions) -> UResult<()> {
-    for l in args {
-        match format_and_print(l, &options) {
-            Ok(_) => Ok(()),
-            Err(e) => Err(NumfmtError::FormattingError(e.to_string())),
-        }?;
-    }
-
-    Ok(())
-}
-
-fn handle_buffer<R>(input: R, options: NumfmtOptions) -> UResult<()>
-where
-    R: BufRead,
-{
-    let mut lines = input.lines();
-    for (idx, line) in lines.by_ref().enumerate() {
-        match line {
-            Ok(l) if idx < options.header => {
-                println!("{}", l);
-                Ok(())
-            }
-            Ok(l) => match format_and_print(&l, &options) {
-                Ok(_) => Ok(()),
-                Err(e) => Err(NumfmtError::FormattingError(e.to_string())),
-            },
-            Err(e) => Err(NumfmtError::IoError(e.to_string())),
-        }?;
-    }
-    Ok(())
-}
-
-fn parse_unit(s: &str) -> Result<Unit> {
-    match s {
-        "auto" => Ok(Unit::Auto),
-        "si" => Ok(Unit::Si),
-        "iec" => Ok(Unit::Iec(false)),
-        "iec-i" => Ok(Unit::Iec(true)),
-        "none" => Ok(Unit::None),
-        _ => Err("Unsupported unit is specified".to_owned()),
-    }
-}
-
-fn parse_options(args: &ArgMatches) -> Result<NumfmtOptions> {
-    let from = parse_unit(args.value_of(options::FROM).unwrap())?;
-    let to = parse_unit(args.value_of(options::TO).unwrap())?;
-
-    let transform = TransformOptions { from, to };
-
-    let padding = match args.value_of(options::PADDING) {
-        Some(s) => s.parse::<isize>().map_err(|err| err.to_string()),
-        None => Ok(0),
-    }?;
-
-    let header = match args.occurrences_of(options::HEADER) {
-        0 => Ok(0),
-        _ => {
-            let value = args.value_of(options::HEADER).unwrap();
-
-            value
-                .parse::<usize>()
-                .map_err(|_| value)
-                .and_then(|n| match n {
-                    0 => Err(value),
-                    _ => Ok(n),
-                })
-                .map_err(|value| format!("invalid header value {}", value.quote()))
-        }
-    }?;
-
-    let fields = match args.value_of(options::FIELD).unwrap() {
-        "-" => vec![Range {
-            low: 1,
-            high: std::usize::MAX,
-        }],
-        v => Range::from_list(v)?,
-    };
-
-    let delimiter = args.value_of(options::DELIMITER).map_or(Ok(None), |arg| {
-        if arg.len() == 1 {
-            Ok(Some(arg.to_string()))
-        } else {
-            Err("the delimiter must be a single character".to_string())
-        }
-    })?;
-
-    // unwrap is fine because the argument has a default value
-    let round = match args.value_of(options::ROUND).unwrap() {
-        "up" => RoundMethod::Up,
-        "down" => RoundMethod::Down,
-        "from-zero" => RoundMethod::FromZero,
-        "towards-zero" => RoundMethod::TowardsZero,
-        "nearest" => RoundMethod::Nearest,
-        _ => unreachable!("Should be restricted by clap"),
-    };
-
-    let suffix = args.value_of(options::SUFFIX).map(|s| s.to_owned());
-
-    Ok(NumfmtOptions {
-        transform,
-        padding,
-        header,
-        fields,
-        delimiter,
-        round,
-        suffix,
-    })
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let options = parse_options(&matches).map_err(NumfmtError::IllegalArgument)?;
-
-    let result = match matches.values_of(options::NUMBER) {
-        Some(values) => handle_args(values, options),
-        None => {
-            let stdin = std::io::stdin();
-            let mut locked_stdin = stdin.lock();
-            handle_buffer(&mut locked_stdin, options)
-        }
-    };
-
-    match result {
-        Err(e) => {
-            std::io::stdout().flush().expect("error flushing stdout");
-            Err(e)
-        }
-        _ => Ok(()),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(LONG_HELP)
-        .setting(AppSettings::AllowNegativeNumbers)
-        .arg(
-            Arg::new(options::DELIMITER)
-                .short('d')
-                .long(options::DELIMITER)
-                .value_name("X")
-                .help("use X instead of whitespace for field delimiter"),
-        )
-        .arg(
-            Arg::new(options::FIELD)
-                .long(options::FIELD)
-                .help("replace the numbers in these input fields (default=1) see FIELDS below")
-                .value_name("FIELDS")
-                .default_value(options::FIELD_DEFAULT),
-        )
-        .arg(
-            Arg::new(options::FROM)
-                .long(options::FROM)
-                .help("auto-scale input numbers to UNITs; see UNIT below")
-                .value_name("UNIT")
-                .default_value(options::FROM_DEFAULT),
-        )
-        .arg(
-            Arg::new(options::TO)
-                .long(options::TO)
-                .help("auto-scale output numbers to UNITs; see UNIT below")
-                .value_name("UNIT")
-                .default_value(options::TO_DEFAULT),
-        )
-        .arg(
-            Arg::new(options::PADDING)
-                .long(options::PADDING)
-                .help(
-                    "pad the output to N characters; positive N will \
-                     right-align; negative N will left-align; padding is \
-                     ignored if the output is wider than N; the default is \
-                     to automatically pad if a whitespace is found",
-                )
-                .value_name("N"),
-        )
-        .arg(
-            Arg::new(options::HEADER)
-                .long(options::HEADER)
-                .help(
-                    "print (without converting) the first N header lines; \
-                     N defaults to 1 if not specified",
-                )
-                .value_name("N")
-                .default_missing_value(options::HEADER_DEFAULT)
-                .hide_default_value(true),
-        )
-        .arg(
-            Arg::new(options::ROUND)
-                .long(options::ROUND)
-                .help(
-                    "use METHOD for rounding when scaling; METHOD can be: up,\
-                    down, from-zero (default), towards-zero, nearest",
-                )
-                .value_name("METHOD")
-                .default_value("from-zero")
-                .possible_values(&["up", "down", "from-zero", "towards-zero", "nearest"]),
-        )
-        .arg(
-            Arg::new(options::SUFFIX)
-                .long(options::SUFFIX)
-                .help(
-                    "print SUFFIX after each formatted number, and accept \
-                    inputs optionally ending with SUFFIX",
-                )
-                .value_name("SUFFIX"),
-        )
-        .arg(
-            Arg::new(options::NUMBER)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-#[cfg(test)]
-mod tests {
-    use super::{handle_buffer, NumfmtOptions, Range, RoundMethod, TransformOptions, Unit};
-    use std::io::{BufReader, Error, ErrorKind, Read};
-    struct MockBuffer {}
-
-    impl Read for MockBuffer {
-        fn read(&mut self, _: &mut [u8]) -> Result<usize, Error> {
-            Err(Error::new(ErrorKind::BrokenPipe, "broken pipe"))
-        }
-    }
-
-    fn get_valid_options() -> NumfmtOptions {
-        NumfmtOptions {
-            transform: TransformOptions {
-                from: Unit::None,
-                to: Unit::None,
-            },
-            padding: 10,
-            header: 1,
-            fields: vec![Range { low: 0, high: 1 }],
-            delimiter: None,
-            round: RoundMethod::Nearest,
-            suffix: None,
-        }
-    }
-
-    #[test]
-    fn broken_buffer_returns_io_error() {
-        let mock_buffer = MockBuffer {};
-        let result = handle_buffer(BufReader::new(mock_buffer), get_valid_options())
-            .expect_err("returned Ok after receiving IO error");
-        let result_debug = format!("{:?}", result);
-        let result_display = format!("{}", result);
-        assert_eq!(result_debug, "IoError(\"broken pipe\")");
-        assert_eq!(result_display, "broken pipe");
-        assert_eq!(result.code(), 1);
-    }
-
-    #[test]
-    fn non_numeric_returns_formatting_error() {
-        let input_value = b"135\nhello";
-        let result = handle_buffer(BufReader::new(&input_value[..]), get_valid_options())
-            .expect_err("returned Ok after receiving improperly formatted input");
-        let result_debug = format!("{:?}", result);
-        let result_display = format!("{}", result);
-        assert_eq!(
-            result_debug,
-            "FormattingError(\"invalid suffix in input: 'hello'\")"
-        );
-        assert_eq!(result_display, "invalid suffix in input: 'hello'");
-        assert_eq!(result.code(), 2);
-    }
-
-    #[test]
-    fn valid_input_returns_ok() {
-        let input_value = b"165\n100\n300\n500";
-        let result = handle_buffer(BufReader::new(&input_value[..]), get_valid_options());
-        assert!(result.is_ok(), "did not return Ok for valid input");
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_numfmt/options.rs.html b/src/uu_numfmt/options.rs.html deleted file mode 100644 index d24fab876..000000000 --- a/src/uu_numfmt/options.rs.html +++ /dev/null @@ -1,132 +0,0 @@ -options.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-
use crate::units::Unit;
-use uucore::ranges::Range;
-
-pub const DELIMITER: &str = "delimiter";
-pub const FIELD: &str = "field";
-pub const FIELD_DEFAULT: &str = "1";
-pub const FROM: &str = "from";
-pub const FROM_DEFAULT: &str = "none";
-pub const HEADER: &str = "header";
-pub const HEADER_DEFAULT: &str = "1";
-pub const NUMBER: &str = "NUMBER";
-pub const PADDING: &str = "padding";
-pub const ROUND: &str = "round";
-pub const SUFFIX: &str = "suffix";
-pub const TO: &str = "to";
-pub const TO_DEFAULT: &str = "none";
-
-pub struct TransformOptions {
-    pub from: Unit,
-    pub to: Unit,
-}
-
-pub struct NumfmtOptions {
-    pub transform: TransformOptions,
-    pub padding: isize,
-    pub header: usize,
-    pub fields: Vec<Range>,
-    pub delimiter: Option<String>,
-    pub round: RoundMethod,
-    pub suffix: Option<String>,
-}
-
-#[derive(Clone, Copy)]
-pub enum RoundMethod {
-    Up,
-    Down,
-    FromZero,
-    TowardsZero,
-    Nearest,
-}
-
-impl RoundMethod {
-    pub fn round(&self, f: f64) -> f64 {
-        match self {
-            RoundMethod::Up => f.ceil(),
-            RoundMethod::Down => f.floor(),
-            RoundMethod::FromZero => {
-                if f < 0.0 {
-                    f.floor()
-                } else {
-                    f.ceil()
-                }
-            }
-            RoundMethod::TowardsZero => {
-                if f < 0.0 {
-                    f.ceil()
-                } else {
-                    f.floor()
-                }
-            }
-            RoundMethod::Nearest => f.round(),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_numfmt/units.rs.html b/src/uu_numfmt/units.rs.html deleted file mode 100644 index 7c07cfc5e..000000000 --- a/src/uu_numfmt/units.rs.html +++ /dev/null @@ -1,130 +0,0 @@ -units.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-
use std::fmt;
-
-pub const SI_BASES: [f64; 10] = [1., 1e3, 1e6, 1e9, 1e12, 1e15, 1e18, 1e21, 1e24, 1e27];
-
-pub const IEC_BASES: [f64; 10] = [
-    1.,
-    1_024.,
-    1_048_576.,
-    1_073_741_824.,
-    1_099_511_627_776.,
-    1_125_899_906_842_624.,
-    1_152_921_504_606_846_976.,
-    1_180_591_620_717_411_303_424.,
-    1_208_925_819_614_629_174_706_176.,
-    1_237_940_039_285_380_274_899_124_224.,
-];
-
-pub type WithI = bool;
-
-pub enum Unit {
-    Auto,
-    Si,
-    Iec(WithI),
-    None,
-}
-
-pub type Result<T> = std::result::Result<T, String>;
-
-#[derive(Clone, Copy, Debug)]
-pub enum RawSuffix {
-    K,
-    M,
-    G,
-    T,
-    P,
-    E,
-    Z,
-    Y,
-}
-
-pub type Suffix = (RawSuffix, WithI);
-
-pub struct DisplayableSuffix(pub Suffix);
-
-impl fmt::Display for DisplayableSuffix {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        let DisplayableSuffix((ref raw_suffix, ref with_i)) = *self;
-        match raw_suffix {
-            RawSuffix::K => write!(f, "K"),
-            RawSuffix::M => write!(f, "M"),
-            RawSuffix::G => write!(f, "G"),
-            RawSuffix::T => write!(f, "T"),
-            RawSuffix::P => write!(f, "P"),
-            RawSuffix::E => write!(f, "E"),
-            RawSuffix::Z => write!(f, "Z"),
-            RawSuffix::Y => write!(f, "Y"),
-        }
-        .and_then(|()| match with_i {
-            true => write!(f, "i"),
-            false => Ok(()),
-        })
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/byteorder_io.rs.html b/src/uu_od/byteorder_io.rs.html deleted file mode 100644 index 8152f38b3..000000000 --- a/src/uu_od/byteorder_io.rs.html +++ /dev/null @@ -1,108 +0,0 @@ -byteorder_io.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-
// spell-checker:ignore (ToDO) byteorder
-
-// workaround until https://github.com/BurntSushi/byteorder/issues/41 has been fixed
-// based on: https://github.com/netvl/immeta/blob/4460ee/src/utils.rs#L76
-
-use byteorder::ByteOrder as ByteOrderTrait;
-use byteorder::{BigEndian, LittleEndian, NativeEndian};
-
-#[derive(Copy, Clone, Debug, Eq, PartialEq)]
-pub enum ByteOrder {
-    Little,
-    Big,
-    Native,
-}
-
-macro_rules! gen_byte_order_ops {
-    ($($read_name:ident, $write_name:ident -> $tpe:ty),+) => {
-        impl ByteOrder {
-            $(
-            #[allow(dead_code)]
-            #[inline]
-            pub fn $read_name(self, source: &[u8]) -> $tpe {
-                match self {
-                    ByteOrder::Little => LittleEndian::$read_name(source),
-                    ByteOrder::Big => BigEndian::$read_name(source),
-                    ByteOrder::Native => NativeEndian::$read_name(source),
-                }
-            }
-
-            #[allow(dead_code)]
-            pub fn $write_name(self, target: &mut [u8], n: $tpe) {
-                match self {
-                    ByteOrder::Little => LittleEndian::$write_name(target, n),
-                    ByteOrder::Big => BigEndian::$write_name(target, n),
-                    ByteOrder::Native => NativeEndian::$write_name(target, n),
-                }
-            }
-            )+
-        }
-    }
-}
-
-gen_byte_order_ops! {
-    read_u16, write_u16 -> u16,
-    read_u32, write_u32 -> u32,
-    read_u64, write_u64 -> u64,
-    read_i16, write_i16 -> i16,
-    read_i32, write_i32 -> i32,
-    read_i64, write_i64 -> i64,
-    read_f32, write_f32 -> f32,
-    read_f64, write_f64 -> f64
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/formatteriteminfo.rs.html b/src/uu_od/formatteriteminfo.rs.html deleted file mode 100644 index 41226efed..000000000 --- a/src/uu_od/formatteriteminfo.rs.html +++ /dev/null @@ -1,122 +0,0 @@ -formatteriteminfo.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-
// spell-checker:ignore (ToDO) formatteriteminfo
-
-use std::fmt;
-
-#[allow(clippy::enum_variant_names)]
-#[derive(Copy)]
-pub enum FormatWriter {
-    IntWriter(fn(u64) -> String),
-    FloatWriter(fn(f64) -> String),
-    MultibyteWriter(fn(&[u8]) -> String),
-}
-
-impl Clone for FormatWriter {
-    #[inline]
-    fn clone(&self) -> Self {
-        *self
-    }
-}
-
-impl PartialEq for FormatWriter {
-    fn eq(&self, other: &FormatWriter) -> bool {
-        use crate::formatteriteminfo::FormatWriter::*;
-
-        match (self, other) {
-            (&IntWriter(ref a), &IntWriter(ref b)) => a == b,
-            (&FloatWriter(ref a), &FloatWriter(ref b)) => a == b,
-            (&MultibyteWriter(ref a), &MultibyteWriter(ref b)) => *a as usize == *b as usize,
-            _ => false,
-        }
-    }
-}
-
-impl Eq for FormatWriter {}
-
-impl fmt::Debug for FormatWriter {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        match *self {
-            FormatWriter::IntWriter(ref p) => {
-                f.write_str("IntWriter:")?;
-                fmt::Pointer::fmt(p, f)
-            }
-            FormatWriter::FloatWriter(ref p) => {
-                f.write_str("FloatWriter:")?;
-                fmt::Pointer::fmt(p, f)
-            }
-            FormatWriter::MultibyteWriter(ref p) => {
-                f.write_str("MultibyteWriter:")?;
-                fmt::Pointer::fmt(&(*p as *const ()), f)
-            }
-        }
-    }
-}
-
-#[derive(Copy, Clone, PartialEq, Eq, Debug)]
-pub struct FormatterItemInfo {
-    pub byte_size: usize,
-    pub print_width: usize, // including a space in front of the text
-    pub formatter: FormatWriter,
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/inputdecoder.rs.html b/src/uu_od/inputdecoder.rs.html deleted file mode 100644 index 9ee96f188..000000000 --- a/src/uu_od/inputdecoder.rs.html +++ /dev/null @@ -1,396 +0,0 @@ -inputdecoder.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
use half::f16;
-use std::io;
-
-use crate::byteorder_io::ByteOrder;
-use crate::multifilereader::HasError;
-use crate::peekreader::PeekRead;
-
-/// Processes an input and provides access to the data read in various formats
-///
-/// Currently only useful if the input implements `PeekRead`.
-pub struct InputDecoder<'a, I>
-where
-    I: 'a,
-{
-    /// The input from which data is read
-    input: &'a mut I,
-
-    /// A memory buffer, it's size is set in `new`.
-    data: Vec<u8>,
-    /// The number of bytes in the buffer reserved for the peek data from `PeekRead`.
-    reserved_peek_length: usize,
-
-    /// The number of (valid) bytes in the buffer.
-    used_normal_length: usize,
-    /// The number of peek bytes in the buffer.
-    used_peek_length: usize,
-
-    /// Byte order used to read data from the buffer.
-    byte_order: ByteOrder,
-}
-
-impl<'a, I> InputDecoder<'a, I> {
-    /// Creates a new `InputDecoder` with an allocated buffer of `normal_length` + `peek_length` bytes.
-    /// `byte_order` determines how to read multibyte formats from the buffer.
-    pub fn new(
-        input: &mut I,
-        normal_length: usize,
-        peek_length: usize,
-        byte_order: ByteOrder,
-    ) -> InputDecoder<I> {
-        let bytes = vec![0; normal_length + peek_length];
-
-        InputDecoder {
-            input,
-            data: bytes,
-            reserved_peek_length: peek_length,
-            used_normal_length: 0,
-            used_peek_length: 0,
-            byte_order,
-        }
-    }
-}
-
-impl<'a, I> InputDecoder<'a, I>
-where
-    I: PeekRead,
-{
-    /// calls `peek_read` on the internal stream to (re)fill the buffer. Returns a
-    /// MemoryDecoder providing access to the result or returns an i/o error.
-    pub fn peek_read(&mut self) -> io::Result<MemoryDecoder> {
-        match self
-            .input
-            .peek_read(self.data.as_mut_slice(), self.reserved_peek_length)
-        {
-            Ok((n, p)) => {
-                self.used_normal_length = n;
-                self.used_peek_length = p;
-                Ok(MemoryDecoder {
-                    data: &mut self.data,
-                    used_normal_length: self.used_normal_length,
-                    used_peek_length: self.used_peek_length,
-                    byte_order: self.byte_order,
-                })
-            }
-            Err(e) => Err(e),
-        }
-    }
-}
-
-impl<'a, I> HasError for InputDecoder<'a, I>
-where
-    I: HasError,
-{
-    /// calls has_error on the internal stream.
-    fn has_error(&self) -> bool {
-        self.input.has_error()
-    }
-}
-
-/// Provides access to the internal data in various formats
-pub struct MemoryDecoder<'a> {
-    /// A reference to the parents' data
-    data: &'a mut Vec<u8>,
-    /// The number of (valid) bytes in the buffer.
-    used_normal_length: usize,
-    /// The number of peek bytes in the buffer.
-    used_peek_length: usize,
-    /// Byte order used to read data from the buffer.
-    byte_order: ByteOrder,
-}
-
-impl<'a> MemoryDecoder<'a> {
-    /// Set a part of the internal buffer to zero.
-    /// access to the whole buffer is possible, not just to the valid data.
-    pub fn zero_out_buffer(&mut self, start: usize, end: usize) {
-        for i in start..end {
-            self.data[i] = 0;
-        }
-    }
-
-    /// Returns the current length of the buffer. (ie. how much valid data it contains.)
-    pub fn length(&self) -> usize {
-        self.used_normal_length
-    }
-
-    /// Creates a clone of the internal buffer. The clone only contain the valid data.
-    pub fn clone_buffer(&self, other: &mut Vec<u8>) {
-        other.clone_from(self.data);
-        other.resize(self.used_normal_length, 0);
-    }
-
-    /// Returns a slice to the internal buffer starting at `start`.
-    pub fn get_buffer(&self, start: usize) -> &[u8] {
-        &self.data[start..self.used_normal_length]
-    }
-
-    /// Returns a slice to the internal buffer including the peek data starting at `start`.
-    pub fn get_full_buffer(&self, start: usize) -> &[u8] {
-        &self.data[start..self.used_normal_length + self.used_peek_length]
-    }
-
-    /// Returns a u8/u16/u32/u64 from the internal buffer at position `start`.
-    pub fn read_uint(&self, start: usize, byte_size: usize) -> u64 {
-        match byte_size {
-            1 => u64::from(self.data[start]),
-            2 => u64::from(self.byte_order.read_u16(&self.data[start..start + 2])),
-            4 => u64::from(self.byte_order.read_u32(&self.data[start..start + 4])),
-            8 => self.byte_order.read_u64(&self.data[start..start + 8]),
-            _ => panic!("Invalid byte_size: {}", byte_size),
-        }
-    }
-
-    /// Returns a f32/f64 from the internal buffer at position `start`.
-    pub fn read_float(&self, start: usize, byte_size: usize) -> f64 {
-        match byte_size {
-            2 => f64::from(f16::from_bits(
-                self.byte_order.read_u16(&self.data[start..start + 2]),
-            )),
-            4 => f64::from(self.byte_order.read_f32(&self.data[start..start + 4])),
-            8 => self.byte_order.read_f64(&self.data[start..start + 8]),
-            _ => panic!("Invalid byte_size: {}", byte_size),
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::byteorder_io::ByteOrder;
-    use crate::peekreader::PeekReader;
-    use std::io::Cursor;
-
-    #[test]
-    #[allow(clippy::float_cmp)]
-    fn smoke_test() {
-        let data = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xff, 0xff];
-        let mut input = PeekReader::new(Cursor::new(&data));
-        let mut sut = InputDecoder::new(&mut input, 8, 2, ByteOrder::Little);
-
-        // Peek normal length
-        let mut mem = sut.peek_read().unwrap();
-
-        assert_eq!(8, mem.length());
-
-        assert_eq!(-2.0, mem.read_float(0, 8));
-        assert_eq!(-2.0, mem.read_float(4, 4));
-        assert_eq!(0xc000000000000000, mem.read_uint(0, 8));
-        assert_eq!(0xc0000000, mem.read_uint(4, 4));
-        assert_eq!(0xc000, mem.read_uint(6, 2));
-        assert_eq!(0xc0, mem.read_uint(7, 1));
-        assert_eq!(&[0, 0xc0], mem.get_buffer(6));
-        assert_eq!(&[0, 0xc0, 0xff, 0xff], mem.get_full_buffer(6));
-
-        let mut copy: Vec<u8> = Vec::new();
-        mem.clone_buffer(&mut copy);
-        assert_eq!(vec![0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0], copy);
-
-        mem.zero_out_buffer(7, 8);
-        assert_eq!(&[0, 0, 0xff, 0xff], mem.get_full_buffer(6));
-
-        // Peek tail
-        let mem = sut.peek_read().unwrap();
-        assert_eq!(2, mem.length());
-        assert_eq!(0xffff, mem.read_uint(0, 2));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/inputoffset.rs.html b/src/uu_od/inputoffset.rs.html deleted file mode 100644 index 1f54c7ffa..000000000 --- a/src/uu_od/inputoffset.rs.html +++ /dev/null @@ -1,232 +0,0 @@ -inputoffset.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-
#[derive(Copy, Clone, Debug, Eq, PartialEq)]
-pub enum Radix {
-    Decimal,
-    Hexadecimal,
-    Octal,
-    NoPrefix,
-}
-
-/// provides the byte offset printed at the left margin
-pub struct InputOffset {
-    /// The radix to print the byte offset. NoPrefix will not print a byte offset.
-    radix: Radix,
-    /// The current position. Initialize at `new`, increase using `increase_position`.
-    byte_pos: usize,
-    /// An optional label printed in parentheses, typically different from `byte_pos`,
-    /// but will increase with the same value if `byte_pos` in increased.
-    label: Option<usize>,
-}
-
-impl InputOffset {
-    /// creates a new `InputOffset` using the provided values.
-    pub fn new(radix: Radix, byte_pos: usize, label: Option<usize>) -> InputOffset {
-        InputOffset {
-            radix,
-            byte_pos,
-            label,
-        }
-    }
-
-    /// Increase `byte_pos` and `label` if a label is used.
-    pub fn increase_position(&mut self, n: usize) {
-        self.byte_pos += n;
-        if let Some(l) = self.label {
-            self.label = Some(l + n);
-        }
-    }
-
-    #[cfg(test)]
-    fn set_radix(&mut self, radix: Radix) {
-        self.radix = radix;
-    }
-
-    /// returns a string with the current byte offset
-    pub fn format_byte_offset(&self) -> String {
-        match (self.radix, self.label) {
-            (Radix::Decimal, None) => format!("{:07}", self.byte_pos),
-            (Radix::Decimal, Some(l)) => format!("{:07} ({:07})", self.byte_pos, l),
-            (Radix::Hexadecimal, None) => format!("{:06X}", self.byte_pos),
-            (Radix::Hexadecimal, Some(l)) => format!("{:06X} ({:06X})", self.byte_pos, l),
-            (Radix::Octal, None) => format!("{:07o}", self.byte_pos),
-            (Radix::Octal, Some(l)) => format!("{:07o} ({:07o})", self.byte_pos, l),
-            (Radix::NoPrefix, None) => String::from(""),
-            (Radix::NoPrefix, Some(l)) => format!("({:07o})", l),
-        }
-    }
-
-    /// Prints the byte offset followed by a newline, or nothing at all if
-    /// both `Radix::NoPrefix` was set and no label (--traditional) is used.
-    pub fn print_final_offset(&self) {
-        if self.radix != Radix::NoPrefix || self.label.is_some() {
-            println!("{}", self.format_byte_offset());
-        }
-    }
-}
-
-#[test]
-fn test_input_offset() {
-    let mut sut = InputOffset::new(Radix::Hexadecimal, 10, None);
-    assert_eq!("00000A", &sut.format_byte_offset());
-    sut.increase_position(10);
-    assert_eq!("000014", &sut.format_byte_offset());
-
-    // note normally the radix will not change after initialization
-    sut.set_radix(Radix::Decimal);
-    assert_eq!("0000020", &sut.format_byte_offset());
-
-    sut.set_radix(Radix::Hexadecimal);
-    assert_eq!("000014", &sut.format_byte_offset());
-
-    sut.set_radix(Radix::Octal);
-    assert_eq!("0000024", &sut.format_byte_offset());
-
-    sut.set_radix(Radix::NoPrefix);
-    assert_eq!("", &sut.format_byte_offset());
-
-    sut.increase_position(10);
-    sut.set_radix(Radix::Octal);
-    assert_eq!("0000036", &sut.format_byte_offset());
-}
-
-#[test]
-fn test_input_offset_with_label() {
-    let mut sut = InputOffset::new(Radix::Hexadecimal, 10, Some(20));
-    assert_eq!("00000A (000014)", &sut.format_byte_offset());
-    sut.increase_position(10);
-    assert_eq!("000014 (00001E)", &sut.format_byte_offset());
-
-    // note normally the radix will not change after initialization
-    sut.set_radix(Radix::Decimal);
-    assert_eq!("0000020 (0000030)", &sut.format_byte_offset());
-
-    sut.set_radix(Radix::Hexadecimal);
-    assert_eq!("000014 (00001E)", &sut.format_byte_offset());
-
-    sut.set_radix(Radix::Octal);
-    assert_eq!("0000024 (0000036)", &sut.format_byte_offset());
-
-    sut.set_radix(Radix::NoPrefix);
-    assert_eq!("(0000036)", &sut.format_byte_offset());
-
-    sut.increase_position(10);
-    sut.set_radix(Radix::Octal);
-    assert_eq!("0000036 (0000050)", &sut.format_byte_offset());
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/multifilereader.rs.html b/src/uu_od/multifilereader.rs.html deleted file mode 100644 index fc998ef7d..000000000 --- a/src/uu_od/multifilereader.rs.html +++ /dev/null @@ -1,418 +0,0 @@ -multifilereader.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// spell-checker:ignore (ToDO) multifile curr fnames fname xfrd fillloop mockstream
-
-use std::fs::File;
-use std::io;
-use std::io::BufReader;
-use std::vec::Vec;
-
-use uucore::display::Quotable;
-
-pub enum InputSource<'a> {
-    FileName(&'a str),
-    Stdin,
-    #[allow(dead_code)]
-    Stream(Box<dyn io::Read>),
-}
-
-// MultifileReader - concatenate all our input, file or stdin.
-pub struct MultifileReader<'a> {
-    ni: Vec<InputSource<'a>>,
-    curr_file: Option<Box<dyn io::Read>>,
-    any_err: bool,
-}
-
-pub trait HasError {
-    fn has_error(&self) -> bool;
-}
-
-impl<'b> MultifileReader<'b> {
-    pub fn new(fnames: Vec<InputSource>) -> MultifileReader {
-        let mut mf = MultifileReader {
-            ni: fnames,
-            curr_file: None, // normally this means done; call next_file()
-            any_err: false,
-        };
-        mf.next_file();
-        mf
-    }
-
-    fn next_file(&mut self) {
-        // loop retries with subsequent files if err - normally 'loops' once
-        loop {
-            if self.ni.is_empty() {
-                self.curr_file = None;
-                break;
-            }
-            match self.ni.remove(0) {
-                InputSource::Stdin => {
-                    self.curr_file = Some(Box::new(BufReader::new(std::io::stdin())));
-                    break;
-                }
-                InputSource::FileName(fname) => {
-                    match File::open(fname) {
-                        Ok(f) => {
-                            self.curr_file = Some(Box::new(BufReader::new(f)));
-                            break;
-                        }
-                        Err(e) => {
-                            // If any file can't be opened,
-                            // print an error at the time that the file is needed,
-                            // then move on the the next file.
-                            // This matches the behavior of the original `od`
-                            show_error!("{}: {}", fname.maybe_quote(), e);
-                            self.any_err = true
-                        }
-                    }
-                }
-                InputSource::Stream(s) => {
-                    self.curr_file = Some(s);
-                    break;
-                }
-            }
-        }
-    }
-}
-
-impl<'b> io::Read for MultifileReader<'b> {
-    // Fill buf with bytes read from the list of files
-    // Returns Ok(<number of bytes read>)
-    // Handles io errors itself, thus always returns OK
-    // Fills the provided buffer completely, unless it has run out of input.
-    // If any call returns short (< buf.len()), all subsequent calls will return Ok<0>
-    fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
-        let mut xfrd = 0;
-        // while buffer we are filling is not full.. May go through several files.
-        'fillloop: while xfrd < buf.len() {
-            match self.curr_file {
-                None => break,
-                Some(ref mut curr_file) => {
-                    loop {
-                        // stdin may return on 'return' (enter), even though the buffer isn't full.
-                        xfrd += match curr_file.read(&mut buf[xfrd..]) {
-                            Ok(0) => break,
-                            Ok(n) => n,
-                            Err(e) => {
-                                show_error!("I/O: {}", e);
-                                self.any_err = true;
-                                break;
-                            }
-                        };
-                        if xfrd == buf.len() {
-                            // transferred all that was asked for.
-                            break 'fillloop;
-                        }
-                    }
-                }
-            }
-            self.next_file();
-        }
-        Ok(xfrd)
-    }
-}
-
-impl<'b> HasError for MultifileReader<'b> {
-    fn has_error(&self) -> bool {
-        self.any_err
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::mockstream::*;
-    use std::io::{Cursor, ErrorKind, Read};
-
-    #[test]
-    fn test_multi_file_reader_one_read() {
-        let inputs = vec![
-            InputSource::Stream(Box::new(Cursor::new(&b"abcd"[..]))),
-            InputSource::Stream(Box::new(Cursor::new(&b"ABCD"[..]))),
-        ];
-        let mut v = [0; 10];
-
-        let mut sut = MultifileReader::new(inputs);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 8);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x41, 0x42, 0x43, 0x44, 0, 0]);
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 0);
-    }
-
-    #[test]
-    fn test_multi_file_reader_two_reads() {
-        let inputs = vec![
-            InputSource::Stream(Box::new(Cursor::new(&b"abcd"[..]))),
-            InputSource::Stream(Box::new(Cursor::new(&b"ABCD"[..]))),
-        ];
-        let mut v = [0; 5];
-
-        let mut sut = MultifileReader::new(inputs);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 5);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x41]);
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 3);
-        assert_eq!(v, [0x42, 0x43, 0x44, 0x64, 0x41]); // last two bytes are not overwritten
-    }
-
-    #[test]
-    fn test_multi_file_reader_read_error() {
-        let c = Cursor::new(&b"1234"[..])
-            .chain(FailingMockStream::new(ErrorKind::Other, "Failing", 1))
-            .chain(Cursor::new(&b"5678"[..]));
-        let inputs = vec![
-            InputSource::Stream(Box::new(c)),
-            InputSource::Stream(Box::new(Cursor::new(&b"ABCD"[..]))),
-        ];
-        let mut v = [0; 5];
-
-        let mut sut = MultifileReader::new(inputs);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 5);
-        assert_eq!(v, [49, 50, 51, 52, 65]);
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 3);
-        assert_eq!(v, [66, 67, 68, 52, 65]); // last two bytes are not overwritten
-
-        // note: no retry on i/o error, so 5678 is missing
-    }
-
-    #[test]
-    fn test_multi_file_reader_read_error_at_start() {
-        let inputs = vec![
-            InputSource::Stream(Box::new(FailingMockStream::new(
-                ErrorKind::Other,
-                "Failing",
-                1,
-            ))),
-            InputSource::Stream(Box::new(Cursor::new(&b"abcd"[..]))),
-            InputSource::Stream(Box::new(FailingMockStream::new(
-                ErrorKind::Other,
-                "Failing",
-                1,
-            ))),
-            InputSource::Stream(Box::new(Cursor::new(&b"ABCD"[..]))),
-            InputSource::Stream(Box::new(FailingMockStream::new(
-                ErrorKind::Other,
-                "Failing",
-                1,
-            ))),
-        ];
-        let mut v = [0; 5];
-
-        let mut sut = MultifileReader::new(inputs);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 5);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x41]);
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 3);
-        assert_eq!(v, [0x42, 0x43, 0x44, 0x64, 0x41]); // last two bytes are not overwritten
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/od.rs.html b/src/uu_od/od.rs.html deleted file mode 100644 index 6fa32698c..000000000 --- a/src/uu_od/od.rs.html +++ /dev/null @@ -1,1352 +0,0 @@ -od.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Ben Hirsch <benhirsch24@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (clap) DontDelimitTrailingValues
-// spell-checker:ignore (ToDO) formatteriteminfo inputdecoder inputoffset mockstream nrofbytes partialreader odfunc multifile exitcode
-
-#[macro_use]
-extern crate uucore;
-
-mod byteorder_io;
-mod formatteriteminfo;
-mod inputdecoder;
-mod inputoffset;
-#[cfg(test)]
-mod mockstream;
-mod multifilereader;
-mod output_info;
-mod parse_formats;
-mod parse_inputs;
-mod parse_nrofbytes;
-mod partialreader;
-mod peekreader;
-mod prn_char;
-mod prn_float;
-mod prn_int;
-
-use std::cmp;
-
-use crate::byteorder_io::*;
-use crate::formatteriteminfo::*;
-use crate::inputdecoder::{InputDecoder, MemoryDecoder};
-use crate::inputoffset::{InputOffset, Radix};
-use crate::multifilereader::*;
-use crate::output_info::OutputInfo;
-use crate::parse_formats::{parse_format_flags, ParsedFormatterItemInfo};
-use crate::parse_inputs::{parse_inputs, CommandLineInputs};
-use crate::parse_nrofbytes::parse_number_of_bytes;
-use crate::partialreader::*;
-use crate::peekreader::*;
-use crate::prn_char::format_ascii_dump;
-use clap::{crate_version, App, AppSettings, Arg, ArgMatches};
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-use uucore::parse_size::ParseSizeError;
-use uucore::InvalidEncodingHandling;
-
-const PEEK_BUFFER_SIZE: usize = 4; // utf-8 can be 4 bytes
-static ABOUT: &str = "dump files in octal and other formats";
-
-static USAGE: &str = r#"
-    od [OPTION]... [--] [FILENAME]...
-    od [-abcdDefFhHiIlLoOsxX] [FILENAME] [[+][0x]OFFSET[.][b]]
-    od --traditional [OPTION]... [FILENAME] [[+][0x]OFFSET[.][b] [[+][0x]LABEL[.][b]]]"#;
-
-static LONG_HELP: &str = r#"
-Displays data in various human-readable formats. If multiple formats are
-specified, the output will contain all formats in the order they appear on the
-command line. Each format will be printed on a new line. Only the line
-containing the first format will be prefixed with the offset.
-
-If no filename is specified, or it is "-", stdin will be used. After a "--", no
-more options will be recognized. This allows for filenames starting with a "-".
-
-If a filename is a valid number which can be used as an offset in the second
-form, you can force it to be recognized as a filename if you include an option
-like "-j0", which is only valid in the first form.
-
-RADIX is one of o,d,x,n for octal, decimal, hexadecimal or none.
-
-BYTES is decimal by default, octal if prefixed with a "0", or hexadecimal if
-prefixed with "0x". The suffixes b, KB, K, MB, M, GB, G, will multiply the
-number with 512, 1000, 1024, 1000^2, 1024^2, 1000^3, 1024^3, 1000^2, 1024^2.
-
-OFFSET and LABEL are octal by default, hexadecimal if prefixed with "0x" or
-decimal if a "." suffix is added. The "b" suffix will multiply with 512.
-
-TYPE contains one or more format specifications consisting of:
-    a       for printable 7-bits ASCII
-    c       for utf-8 characters or octal for undefined characters
-    d[SIZE] for signed decimal
-    f[SIZE] for floating point
-    o[SIZE] for octal
-    u[SIZE] for unsigned decimal
-    x[SIZE] for hexadecimal
-SIZE is the number of bytes which can be the number 1, 2, 4, 8 or 16,
-    or C, I, S, L for 1, 2, 4, 8 bytes for integer types,
-    or F, D, L for 4, 8, 16 bytes for floating point.
-Any type specification can have a "z" suffix, which will add a ASCII dump at
-    the end of the line.
-
-If an error occurred, a diagnostic message will be printed to stderr, and the
-exitcode will be non-zero."#;
-
-pub(crate) mod options {
-    pub const ADDRESS_RADIX: &str = "address-radix";
-    pub const SKIP_BYTES: &str = "skip-bytes";
-    pub const READ_BYTES: &str = "read-bytes";
-    pub const ENDIAN: &str = "endian";
-    pub const STRINGS: &str = "strings";
-    pub const FORMAT: &str = "format";
-    pub const OUTPUT_DUPLICATES: &str = "output-duplicates";
-    pub const TRADITIONAL: &str = "traditional";
-    pub const WIDTH: &str = "width";
-    pub const FILENAME: &str = "FILENAME";
-}
-
-struct OdOptions {
-    byte_order: ByteOrder,
-    skip_bytes: usize,
-    read_bytes: Option<usize>,
-    label: Option<usize>,
-    input_strings: Vec<String>,
-    formats: Vec<ParsedFormatterItemInfo>,
-    line_bytes: usize,
-    output_duplicates: bool,
-    radix: Radix,
-}
-
-impl OdOptions {
-    fn new(matches: ArgMatches, args: Vec<String>) -> UResult<OdOptions> {
-        let byte_order = match matches.value_of(options::ENDIAN) {
-            None => ByteOrder::Native,
-            Some("little") => ByteOrder::Little,
-            Some("big") => ByteOrder::Big,
-            Some(s) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("Invalid argument --endian={}", s),
-                ));
-            }
-        };
-
-        let mut skip_bytes = match matches.value_of(options::SKIP_BYTES) {
-            None => 0,
-            Some(s) => match parse_number_of_bytes(s) {
-                Ok(n) => n,
-                Err(e) => {
-                    return Err(USimpleError::new(
-                        1,
-                        format_error_message(e, s, options::SKIP_BYTES),
-                    ))
-                }
-            },
-        };
-
-        let mut label: Option<usize> = None;
-
-        let parsed_input = parse_inputs(&matches)
-            .map_err(|e| USimpleError::new(1, format!("Invalid inputs: {}", e)))?;
-        let input_strings = match parsed_input {
-            CommandLineInputs::FileNames(v) => v,
-            CommandLineInputs::FileAndOffset((f, s, l)) => {
-                skip_bytes = s;
-                label = l;
-                vec![f]
-            }
-        };
-
-        let formats = parse_format_flags(&args).map_err(|e| USimpleError::new(1, e))?;
-
-        let mut line_bytes = match matches.value_of(options::WIDTH) {
-            None => 16,
-            Some(s) => {
-                if matches.occurrences_of(options::WIDTH) == 0 {
-                    16
-                } else {
-                    match parse_number_of_bytes(s) {
-                        Ok(n) => n,
-                        Err(e) => {
-                            return Err(USimpleError::new(
-                                1,
-                                format_error_message(e, s, options::WIDTH),
-                            ))
-                        }
-                    }
-                }
-            }
-        };
-
-        let min_bytes = formats.iter().fold(1, |max, next| {
-            cmp::max(max, next.formatter_item_info.byte_size)
-        });
-        if line_bytes == 0 || line_bytes % min_bytes != 0 {
-            show_warning!("invalid width {}; using {} instead", line_bytes, min_bytes);
-            line_bytes = min_bytes;
-        }
-
-        let output_duplicates = matches.is_present(options::OUTPUT_DUPLICATES);
-
-        let read_bytes = match matches.value_of(options::READ_BYTES) {
-            None => None,
-            Some(s) => match parse_number_of_bytes(s) {
-                Ok(n) => Some(n),
-                Err(e) => {
-                    return Err(USimpleError::new(
-                        1,
-                        format_error_message(e, s, options::READ_BYTES),
-                    ))
-                }
-            },
-        };
-
-        let radix = match matches.value_of(options::ADDRESS_RADIX) {
-            None => Radix::Octal,
-            Some(s) => {
-                let st = s.as_bytes();
-                if st.len() != 1 {
-                    return Err(USimpleError::new(
-                        1,
-                        "Radix must be one of [d, o, n, x]".to_string(),
-                    ));
-                } else {
-                    let radix: char =
-                        *(st.get(0).expect("byte string of length 1 lacks a 0th elem")) as char;
-                    match radix {
-                        'd' => Radix::Decimal,
-                        'x' => Radix::Hexadecimal,
-                        'o' => Radix::Octal,
-                        'n' => Radix::NoPrefix,
-                        _ => {
-                            return Err(USimpleError::new(
-                                1,
-                                "Radix must be one of [d, o, n, x]".to_string(),
-                            ))
-                        }
-                    }
-                }
-            }
-        };
-
-        Ok(OdOptions {
-            byte_order,
-            skip_bytes,
-            read_bytes,
-            label,
-            input_strings,
-            formats,
-            line_bytes,
-            output_duplicates,
-            radix,
-        })
-    }
-}
-
-/// parses and validates command line parameters, prepares data structures,
-/// opens the input and calls `odfunc` to process the input.
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let clap_opts = uu_app();
-
-    let clap_matches = clap_opts
-        .clone() // Clone to reuse clap_opts to print help
-        .get_matches_from(args.clone());
-
-    let od_options = OdOptions::new(clap_matches, args)?;
-
-    let mut input_offset =
-        InputOffset::new(od_options.radix, od_options.skip_bytes, od_options.label);
-
-    let mut input = open_input_peek_reader(
-        &od_options.input_strings,
-        od_options.skip_bytes,
-        od_options.read_bytes,
-    );
-    let mut input_decoder = InputDecoder::new(
-        &mut input,
-        od_options.line_bytes,
-        PEEK_BUFFER_SIZE,
-        od_options.byte_order,
-    );
-
-    let output_info = OutputInfo::new(
-        od_options.line_bytes,
-        &od_options.formats[..],
-        od_options.output_duplicates,
-    );
-
-    odfunc(&mut input_offset, &mut input_decoder, &output_info)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .override_usage(USAGE)
-        .after_help(LONG_HELP)
-        .setting(
-            AppSettings::TrailingVarArg |
-            AppSettings::DontDelimitTrailingValues |
-            AppSettings::DeriveDisplayOrder
-        )
-        .arg(
-            Arg::new(options::ADDRESS_RADIX)
-                .short('A')
-                .long(options::ADDRESS_RADIX)
-                .help("Select the base in which file offsets are printed.")
-                .value_name("RADIX"),
-        )
-        .arg(
-            Arg::new(options::SKIP_BYTES)
-                .short('j')
-                .long(options::SKIP_BYTES)
-                .help("Skip bytes input bytes before formatting and writing.")
-                .value_name("BYTES"),
-        )
-        .arg(
-            Arg::new(options::READ_BYTES)
-                .short('N')
-                .long(options::READ_BYTES)
-                .help("limit dump to BYTES input bytes")
-                .value_name("BYTES"),
-        )
-        .arg(
-            Arg::new(options::ENDIAN)
-                .long(options::ENDIAN)
-                .help("byte order to use for multi-byte formats")
-                .possible_values(&["big", "little"])
-                .value_name("big|little"),
-        )
-        .arg(
-            Arg::new(options::STRINGS)
-                .short('S')
-                .long(options::STRINGS)
-                .help(
-                    "NotImplemented: output strings of at least BYTES graphic chars. 3 is assumed when \
-                     BYTES is not specified.",
-                )
-                .default_missing_value("3")
-                .value_name("BYTES"),
-        )
-        .arg(
-            Arg::new("a")
-                .short('a')
-                .help("named characters, ignoring high-order bit")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("b")
-                .short('b')
-                .help("octal bytes")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("c")
-                .short('c')
-                .help("ASCII characters or backslash escapes")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("d")
-                .short('d')
-                .help("unsigned decimal 2-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("D")
-                .short('D')
-                .help("unsigned decimal 4-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("o")
-                .short('o')
-                .help("octal 2-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("I")
-                .short('I')
-                .help("decimal 8-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("L")
-                .short('L')
-                .help("decimal 8-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("i")
-                .short('i')
-                .help("decimal 4-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("l")
-                .short('l')
-                .help("decimal 8-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("x")
-                .short('x')
-                .help("hexadecimal 2-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("h")
-                .short('h')
-                .help("hexadecimal 2-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("O")
-                .short('O')
-                .help("octal 4-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("s")
-                .short('s')
-                .help("decimal 2-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("X")
-                .short('X')
-                .help("hexadecimal 4-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("H")
-                .short('H')
-                .help("hexadecimal 4-byte units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("e")
-                .short('e')
-                .help("floating point double precision (64-bit) units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("f")
-                .short('f')
-                .help("floating point double precision (32-bit) units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new("F")
-                .short('F')
-                .help("floating point double precision (64-bit) units")
-                .multiple_occurrences(true)
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::FORMAT)
-                .short('t')
-                .long("format")
-                .help("select output format or formats")
-                .multiple_occurrences(true)
-                .number_of_values(1)
-                .value_name("TYPE"),
-        )
-        .arg(
-            Arg::new(options::OUTPUT_DUPLICATES)
-                .short('v')
-                .long(options::OUTPUT_DUPLICATES)
-                .help("do not use * to mark line suppression")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::WIDTH)
-                .short('w')
-                .long(options::WIDTH)
-                .help(
-                    "output BYTES bytes per output line. 32 is implied when BYTES is not \
-                     specified.",
-                )
-                .default_missing_value("32")
-                .value_name("BYTES"),
-        )
-        .arg(
-            Arg::new(options::TRADITIONAL)
-                .long(options::TRADITIONAL)
-                .help("compatibility mode with one input, offset and label.")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::FILENAME)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-/// Loops through the input line by line, calling print_bytes to take care of the output.
-fn odfunc<I>(
-    input_offset: &mut InputOffset,
-    input_decoder: &mut InputDecoder<I>,
-    output_info: &OutputInfo,
-) -> UResult<()>
-where
-    I: PeekRead + HasError,
-{
-    let mut duplicate_line = false;
-    let mut previous_bytes: Vec<u8> = Vec::new();
-    let line_bytes = output_info.byte_size_line;
-
-    loop {
-        // print each line data (or multi-format raster of several lines describing the same data).
-
-        match input_decoder.peek_read() {
-            Ok(mut memory_decoder) => {
-                let length = memory_decoder.length();
-
-                if length == 0 {
-                    input_offset.print_final_offset();
-                    break;
-                }
-
-                // not enough byte for a whole element, this should only happen on the last line.
-                if length != line_bytes {
-                    // set zero bytes in the part of the buffer that will be used, but is not filled.
-                    let mut max_used = length + output_info.byte_size_block;
-                    if max_used > line_bytes {
-                        max_used = line_bytes;
-                    }
-
-                    memory_decoder.zero_out_buffer(length, max_used);
-                }
-
-                if !output_info.output_duplicates
-                    && length == line_bytes
-                    && memory_decoder.get_buffer(0) == &previous_bytes[..]
-                {
-                    if !duplicate_line {
-                        duplicate_line = true;
-                        println!("*");
-                    }
-                } else {
-                    duplicate_line = false;
-                    if length == line_bytes {
-                        // save a copy of the input unless it is the last line
-                        memory_decoder.clone_buffer(&mut previous_bytes);
-                    }
-
-                    print_bytes(
-                        &input_offset.format_byte_offset(),
-                        &memory_decoder,
-                        output_info,
-                    );
-                }
-
-                input_offset.increase_position(length);
-            }
-            Err(e) => {
-                show_error!("{}", e);
-                input_offset.print_final_offset();
-                return Err(1.into());
-            }
-        };
-    }
-
-    if input_decoder.has_error() {
-        Err(1.into())
-    } else {
-        Ok(())
-    }
-}
-
-/// Outputs a single line of input, into one or more lines human readable output.
-fn print_bytes(prefix: &str, input_decoder: &MemoryDecoder, output_info: &OutputInfo) {
-    let mut first = true; // First line of a multi-format raster.
-    for f in output_info.spaced_formatters_iter() {
-        let mut output_text = String::new();
-
-        let mut b = 0;
-        while b < input_decoder.length() {
-            output_text.push_str(&format!(
-                "{:>width$}",
-                "",
-                width = f.spacing[b % output_info.byte_size_block]
-            ));
-
-            match f.formatter_item_info.formatter {
-                FormatWriter::IntWriter(func) => {
-                    let p = input_decoder.read_uint(b, f.formatter_item_info.byte_size);
-                    output_text.push_str(&func(p));
-                }
-                FormatWriter::FloatWriter(func) => {
-                    let p = input_decoder.read_float(b, f.formatter_item_info.byte_size);
-                    output_text.push_str(&func(p));
-                }
-                FormatWriter::MultibyteWriter(func) => {
-                    output_text.push_str(&func(input_decoder.get_full_buffer(b)));
-                }
-            }
-
-            b += f.formatter_item_info.byte_size;
-        }
-
-        if f.add_ascii_dump {
-            let missing_spacing = output_info
-                .print_width_line
-                .saturating_sub(output_text.chars().count());
-            output_text.push_str(&format!(
-                "{:>width$}  {}",
-                "",
-                format_ascii_dump(input_decoder.get_buffer(0)),
-                width = missing_spacing
-            ));
-        }
-
-        if first {
-            print!("{}", prefix); // print offset
-                                  // if printing in multiple formats offset is printed only once
-            first = false;
-        } else {
-            // this takes the space of the file offset on subsequent
-            // lines of multi-format rasters.
-            print!("{:>width$}", "", width = prefix.chars().count());
-        }
-        println!("{}", output_text);
-    }
-}
-
-/// returns a reader implementing `PeekRead + Read + HasError` providing the combined input
-///
-/// `skip_bytes` is the number of bytes skipped from the input
-/// `read_bytes` is an optional limit to the number of bytes to read
-fn open_input_peek_reader(
-    input_strings: &[String],
-    skip_bytes: usize,
-    read_bytes: Option<usize>,
-) -> PeekReader<PartialReader<MultifileReader>> {
-    // should return  "impl PeekRead + Read + HasError" when supported in (stable) rust
-    let inputs = input_strings
-        .iter()
-        .map(|w| match w as &str {
-            "-" => InputSource::Stdin,
-            x => InputSource::FileName(x),
-        })
-        .collect::<Vec<_>>();
-
-    let mf = MultifileReader::new(inputs);
-    let pr = PartialReader::new(mf, skip_bytes, read_bytes);
-    PeekReader::new(pr)
-}
-
-fn format_error_message(error: ParseSizeError, s: &str, option: &str) -> String {
-    // NOTE:
-    // GNU's od echos affected flag, -N or --read-bytes (-j or --skip-bytes, etc.), depending user's selection
-    // GNU's od does distinguish between "invalid (suffix in) argument"
-    match error {
-        ParseSizeError::ParseFailure(_) => format!("invalid --{} argument {}", option, s.quote()),
-        ParseSizeError::SizeTooBig(_) => format!("--{} argument {} too large", option, s.quote()),
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/output_info.rs.html b/src/uu_od/output_info.rs.html deleted file mode 100644 index c64fda493..000000000 --- a/src/uu_od/output_info.rs.html +++ /dev/null @@ -1,898 +0,0 @@ -output_info.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-
// spell-checker:ignore formatteriteminfo blocksize thisblock
-
-use std::cmp;
-use std::slice::Iter;
-
-use crate::formatteriteminfo::FormatterItemInfo;
-use crate::parse_formats::ParsedFormatterItemInfo;
-
-/// Size in bytes of the max datatype. ie set to 16 for 128-bit numbers.
-const MAX_BYTES_PER_UNIT: usize = 8;
-
-/// Contains information to output single output line in human readable form
-pub struct SpacedFormatterItemInfo {
-    /// Contains a function pointer to output data, and information about the output format.
-    pub formatter_item_info: FormatterItemInfo,
-    /// Contains the number of spaces to add to align data with other output formats.
-    ///
-    /// If the corresponding data is a single byte, each entry in this array contains
-    /// the number of spaces to insert when outputting each byte. If the corresponding
-    /// data is multi-byte, only the fist byte position is used. For example a 32-bit
-    /// datatype, could use positions 0, 4, 8, 12, ....
-    /// As each block is formatted identically, only the spacing for a single block is set.
-    pub spacing: [usize; MAX_BYTES_PER_UNIT],
-    /// if set adds a ascii dump at the end of the line
-    pub add_ascii_dump: bool,
-}
-
-/// Contains information about all output lines.
-pub struct OutputInfo {
-    /// The number of bytes of a line.
-    pub byte_size_line: usize,
-    /// The width of a line in human readable format.
-    pub print_width_line: usize,
-
-    /// The number of bytes in a block. (This is the size of the largest datatype in `spaced_formatters`.)
-    pub byte_size_block: usize,
-    /// The width of a block in human readable format. (The size of the largest format.)
-    pub print_width_block: usize,
-    /// All formats.
-    spaced_formatters: Vec<SpacedFormatterItemInfo>,
-    /// determines if duplicate output lines should be printed, or
-    /// skipped with a "*" showing one or more skipped lines.
-    pub output_duplicates: bool,
-}
-
-impl OutputInfo {
-    /// Returns an iterator over the `SpacedFormatterItemInfo` vector.
-    pub fn spaced_formatters_iter(&self) -> Iter<SpacedFormatterItemInfo> {
-        self.spaced_formatters.iter()
-    }
-
-    /// Creates a new `OutputInfo` based on the parameters
-    pub fn new(
-        line_bytes: usize,
-        formats: &[ParsedFormatterItemInfo],
-        output_duplicates: bool,
-    ) -> OutputInfo {
-        let byte_size_block = formats.iter().fold(1, |max, next| {
-            cmp::max(max, next.formatter_item_info.byte_size)
-        });
-        let print_width_block = formats.iter().fold(1, |max, next| {
-            cmp::max(
-                max,
-                next.formatter_item_info.print_width
-                    * (byte_size_block / next.formatter_item_info.byte_size),
-            )
-        });
-        let print_width_line = print_width_block * (line_bytes / byte_size_block);
-
-        let spaced_formatters =
-            OutputInfo::create_spaced_formatter_info(formats, byte_size_block, print_width_block);
-
-        OutputInfo {
-            byte_size_line: line_bytes,
-            print_width_line,
-            byte_size_block,
-            print_width_block,
-            spaced_formatters,
-            output_duplicates,
-        }
-    }
-
-    fn create_spaced_formatter_info(
-        formats: &[ParsedFormatterItemInfo],
-        byte_size_block: usize,
-        print_width_block: usize,
-    ) -> Vec<SpacedFormatterItemInfo> {
-        formats
-            .iter()
-            .map(|f| SpacedFormatterItemInfo {
-                formatter_item_info: f.formatter_item_info,
-                add_ascii_dump: f.add_ascii_dump,
-                spacing: OutputInfo::calculate_alignment(f, byte_size_block, print_width_block),
-            })
-            .collect()
-    }
-
-    /// calculates proper alignment for a single line of output
-    ///
-    /// Multiple representations of the same data, will be right-aligned for easy reading.
-    /// For example a 64 bit octal and a 32-bit decimal with a 16-bit hexadecimal looks like this:
-    /// ```ignore
-    /// 1777777777777777777777 1777777777777777777777
-    ///  4294967295 4294967295  4294967295 4294967295
-    ///   ffff ffff  ffff ffff   ffff ffff  ffff ffff
-    /// ```
-    /// In this example is additional spacing before the first and third decimal number,
-    /// and there is additional spacing before the 1st, 3rd, 5th and 7th hexadecimal number.
-    /// This way both the octal and decimal, as well as the decimal and hexadecimal numbers
-    /// left align. Note that the alignment below both octal numbers is identical.
-    ///
-    /// This function calculates the required spacing for a single line, given the size
-    /// of a block, and the width of a block. The size of a block is the largest type
-    /// and the width is width of the the type which needs the most space to print that
-    /// number of bytes. So both numbers might refer to different types. All widths
-    /// include a space at the front. For example the width of a 8-bit hexadecimal,
-    /// is 3 characters, for example " FF".
-    ///
-    /// This algorithm first calculates how many spaces needs to be added, based the
-    /// block size and the size of the type, and the widths of the block and the type.
-    /// The required spaces are spread across the available positions.
-    /// If the blocksize is 8, and the size of the type is 8 too, there will be just
-    /// one value in a block, so all spacing will be assigned to position 0.
-    /// If the blocksize is 8, and the size of the type is 2, the spacing will be
-    /// spread across position 0, 2, 4, 6. All 4 positions will get an additional
-    /// space as long as there are more then 4 spaces available. If there are 2
-    /// spaces available, they will be assigned to position 0 and 4. If there is
-    /// 1 space available, it will be assigned to position 0. This will be combined,
-    /// For example 7 spaces will be assigned to position 0, 2, 4, 6 like: 3, 1, 2, 1.
-    /// And 7 spaces with 2 positions will be assigned to position 0 and 4 like 4, 3.
-    ///
-    /// Here is another example showing the alignment of 64-bit unsigned decimal numbers,
-    /// 32-bit hexadecimal number, 16-bit octal numbers and 8-bit hexadecimal numbers:
-    /// ```ignore
-    ///        18446744073709551615        18446744073709551615
-    ///      ffffffff      ffffffff      ffffffff      ffffffff
-    /// 177777 177777 177777 177777 177777 177777 177777 177777
-    ///  ff ff  ff ff  ff ff  ff ff  ff ff  ff ff  ff ff  ff ff
-    /// ```
-    ///
-    /// This algorithm assumes the size of all types is a power of 2 (1, 2, 4, 8, 16, ...)
-    /// Increase MAX_BYTES_PER_UNIT to allow larger types.
-    fn calculate_alignment(
-        sf: &dyn TypeSizeInfo,
-        byte_size_block: usize,
-        print_width_block: usize,
-    ) -> [usize; MAX_BYTES_PER_UNIT] {
-        assert!(
-            byte_size_block <= MAX_BYTES_PER_UNIT,
-            "{}-bits types are unsupported. Current max={}-bits.",
-            8 * byte_size_block,
-            8 * MAX_BYTES_PER_UNIT
-        );
-        let mut spacing = [0; MAX_BYTES_PER_UNIT];
-
-        let mut byte_size = sf.byte_size();
-        let mut items_in_block = byte_size_block / byte_size;
-        let thisblock_width = sf.print_width() * items_in_block;
-        let mut missing_spacing = print_width_block - thisblock_width;
-
-        while items_in_block > 0 {
-            let avg_spacing: usize = missing_spacing / items_in_block;
-            for i in 0..items_in_block {
-                spacing[i * byte_size] += avg_spacing;
-                missing_spacing -= avg_spacing;
-            }
-
-            items_in_block /= 2;
-            byte_size *= 2;
-        }
-
-        spacing
-    }
-}
-
-trait TypeSizeInfo {
-    fn byte_size(&self) -> usize;
-    fn print_width(&self) -> usize;
-}
-
-impl TypeSizeInfo for ParsedFormatterItemInfo {
-    fn byte_size(&self) -> usize {
-        self.formatter_item_info.byte_size
-    }
-    fn print_width(&self) -> usize {
-        self.formatter_item_info.print_width
-    }
-}
-
-#[cfg(test)]
-struct TypeInfo {
-    byte_size: usize,
-    print_width: usize,
-}
-
-#[cfg(test)]
-impl TypeSizeInfo for TypeInfo {
-    fn byte_size(&self) -> usize {
-        self.byte_size
-    }
-    fn print_width(&self) -> usize {
-        self.print_width
-    }
-}
-
-#[test]
-fn test_calculate_alignment() {
-    // For this example `byte_size_block` is 8 and 'print_width_block' is 23:
-    // 1777777777777777777777 1777777777777777777777
-    //  4294967295 4294967295  4294967295 4294967295
-    //   ffff ffff  ffff ffff   ffff ffff  ffff ffff
-
-    // the first line has no additional spacing:
-    assert_eq!(
-        [0, 0, 0, 0, 0, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 8,
-                print_width: 23,
-            },
-            8,
-            23
-        )
-    );
-    // the second line a single space at the start of the block:
-    assert_eq!(
-        [1, 0, 0, 0, 0, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 4,
-                print_width: 11,
-            },
-            8,
-            23
-        )
-    );
-    // the third line two spaces at pos 0, and 1 space at pos 4:
-    assert_eq!(
-        [2, 0, 0, 0, 1, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 2,
-                print_width: 5,
-            },
-            8,
-            23
-        )
-    );
-
-    // For this example `byte_size_block` is 8 and 'print_width_block' is 28:
-    //        18446744073709551615        18446744073709551615
-    //      ffffffff      ffffffff      ffffffff      ffffffff
-    // 177777 177777 177777 177777 177777 177777 177777 177777
-    //  ff ff  ff ff  ff ff  ff ff  ff ff  ff ff  ff ff  ff ff
-
-    assert_eq!(
-        [7, 0, 0, 0, 0, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 8,
-                print_width: 21,
-            },
-            8,
-            28
-        )
-    );
-    assert_eq!(
-        [5, 0, 0, 0, 5, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 4,
-                print_width: 9,
-            },
-            8,
-            28
-        )
-    );
-    assert_eq!(
-        [0, 0, 0, 0, 0, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 2,
-                print_width: 7,
-            },
-            8,
-            28
-        )
-    );
-    assert_eq!(
-        [1, 0, 1, 0, 1, 0, 1, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 3,
-            },
-            8,
-            28
-        )
-    );
-
-    // 9 tests where 8 .. 16 spaces are spread across 8 positions
-    assert_eq!(
-        [1, 1, 1, 1, 1, 1, 1, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 8
-        )
-    );
-    assert_eq!(
-        [2, 1, 1, 1, 1, 1, 1, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 9
-        )
-    );
-    assert_eq!(
-        [2, 1, 1, 1, 2, 1, 1, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 10
-        )
-    );
-    assert_eq!(
-        [3, 1, 1, 1, 2, 1, 1, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 11
-        )
-    );
-    assert_eq!(
-        [2, 1, 2, 1, 2, 1, 2, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 12
-        )
-    );
-    assert_eq!(
-        [3, 1, 2, 1, 2, 1, 2, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 13
-        )
-    );
-    assert_eq!(
-        [3, 1, 2, 1, 3, 1, 2, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 14
-        )
-    );
-    assert_eq!(
-        [4, 1, 2, 1, 3, 1, 2, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 15
-        )
-    );
-    assert_eq!(
-        [2, 2, 2, 2, 2, 2, 2, 2],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 16
-        )
-    );
-
-    // 4 tests where 15 spaces are spread across 8, 4, 2 or 1 position(s)
-    assert_eq!(
-        [4, 1, 2, 1, 3, 1, 2, 1],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 1,
-                print_width: 2,
-            },
-            8,
-            16 + 15
-        )
-    );
-    assert_eq!(
-        [5, 0, 3, 0, 4, 0, 3, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 2,
-                print_width: 4,
-            },
-            8,
-            16 + 15
-        )
-    );
-    assert_eq!(
-        [8, 0, 0, 0, 7, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 4,
-                print_width: 8,
-            },
-            8,
-            16 + 15
-        )
-    );
-    assert_eq!(
-        [15, 0, 0, 0, 0, 0, 0, 0],
-        OutputInfo::calculate_alignment(
-            &TypeInfo {
-                byte_size: 8,
-                print_width: 16,
-            },
-            8,
-            16 + 15
-        )
-    );
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/parse_formats.rs.html b/src/uu_od/parse_formats.rs.html deleted file mode 100644 index bf3abb438..000000000 --- a/src/uu_od/parse_formats.rs.html +++ /dev/null @@ -1,1088 +0,0 @@ -parse_formats.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-
// spell-checker:ignore formatteriteminfo docopt fvox fvoxw vals acdx
-
-use uucore::display::Quotable;
-
-use crate::formatteriteminfo::FormatterItemInfo;
-use crate::prn_char::*;
-use crate::prn_float::*;
-use crate::prn_int::*;
-
-#[derive(Copy, Clone, PartialEq, Eq, Debug)]
-pub struct ParsedFormatterItemInfo {
-    pub formatter_item_info: FormatterItemInfo,
-    pub add_ascii_dump: bool,
-}
-
-impl ParsedFormatterItemInfo {
-    pub fn new(
-        formatter_item_info: FormatterItemInfo,
-        add_ascii_dump: bool,
-    ) -> ParsedFormatterItemInfo {
-        ParsedFormatterItemInfo {
-            formatter_item_info,
-            add_ascii_dump,
-        }
-    }
-}
-
-fn od_argument_traditional_format(ch: char) -> Option<FormatterItemInfo> {
-    match ch {
-        'a' => Some(FORMAT_ITEM_A),
-        'B' => Some(FORMAT_ITEM_OCT16),
-        'b' => Some(FORMAT_ITEM_OCT8),
-        'c' => Some(FORMAT_ITEM_C),
-        'D' => Some(FORMAT_ITEM_DEC32U),
-        'd' => Some(FORMAT_ITEM_DEC16U),
-        'e' => Some(FORMAT_ITEM_F64),
-        'F' => Some(FORMAT_ITEM_F64),
-        'f' => Some(FORMAT_ITEM_F32),
-        'H' => Some(FORMAT_ITEM_HEX32),
-        'h' => Some(FORMAT_ITEM_HEX16),
-        'i' => Some(FORMAT_ITEM_DEC32S),
-        'I' => Some(FORMAT_ITEM_DEC64S),
-        'L' => Some(FORMAT_ITEM_DEC64S),
-        'l' => Some(FORMAT_ITEM_DEC64S),
-        'O' => Some(FORMAT_ITEM_OCT32),
-        'o' => Some(FORMAT_ITEM_OCT16),
-        's' => Some(FORMAT_ITEM_DEC16S),
-        'X' => Some(FORMAT_ITEM_HEX32),
-        'x' => Some(FORMAT_ITEM_HEX16),
-        _ => None,
-    }
-}
-
-fn od_format_type(type_char: FormatType, byte_size: u8) -> Option<FormatterItemInfo> {
-    match (type_char, byte_size) {
-        (FormatType::Ascii, _) => Some(FORMAT_ITEM_A),
-        (FormatType::Char, _) => Some(FORMAT_ITEM_C),
-
-        (FormatType::DecimalInt, 1) => Some(FORMAT_ITEM_DEC8S),
-        (FormatType::DecimalInt, 2) => Some(FORMAT_ITEM_DEC16S),
-        (FormatType::DecimalInt, 0) | (FormatType::DecimalInt, 4) => Some(FORMAT_ITEM_DEC32S),
-        (FormatType::DecimalInt, 8) => Some(FORMAT_ITEM_DEC64S),
-
-        (FormatType::OctalInt, 1) => Some(FORMAT_ITEM_OCT8),
-        (FormatType::OctalInt, 2) => Some(FORMAT_ITEM_OCT16),
-        (FormatType::OctalInt, 0) | (FormatType::OctalInt, 4) => Some(FORMAT_ITEM_OCT32),
-        (FormatType::OctalInt, 8) => Some(FORMAT_ITEM_OCT64),
-
-        (FormatType::UnsignedInt, 1) => Some(FORMAT_ITEM_DEC8U),
-        (FormatType::UnsignedInt, 2) => Some(FORMAT_ITEM_DEC16U),
-        (FormatType::UnsignedInt, 0) | (FormatType::UnsignedInt, 4) => Some(FORMAT_ITEM_DEC32U),
-        (FormatType::UnsignedInt, 8) => Some(FORMAT_ITEM_DEC64U),
-
-        (FormatType::HexadecimalInt, 1) => Some(FORMAT_ITEM_HEX8),
-        (FormatType::HexadecimalInt, 2) => Some(FORMAT_ITEM_HEX16),
-        (FormatType::HexadecimalInt, 0) | (FormatType::HexadecimalInt, 4) => {
-            Some(FORMAT_ITEM_HEX32)
-        }
-        (FormatType::HexadecimalInt, 8) => Some(FORMAT_ITEM_HEX64),
-
-        (FormatType::Float, 2) => Some(FORMAT_ITEM_F16),
-        (FormatType::Float, 0) | (FormatType::Float, 4) => Some(FORMAT_ITEM_F32),
-        (FormatType::Float, 8) => Some(FORMAT_ITEM_F64),
-
-        _ => None,
-    }
-}
-
-fn od_argument_with_option(ch: char) -> bool {
-    matches!(ch, 'A' | 'j' | 'N' | 'S' | 'w')
-}
-
-/// Parses format flags from command line
-///
-/// getopts, docopt, clap don't seem suitable to parse the command line
-/// arguments used for formats. In particular arguments can appear
-/// multiple times and the order they appear in, is significant.
-///
-/// arguments like -f, -o, -x can appear separate or combined: -fox
-/// it can also be mixed with non format related flags like -v: -fvox
-/// arguments with parameters like -w16 can only appear at the end: -fvoxw16
-/// parameters of -t/--format specify 1 or more formats.
-/// if -- appears on the command line, parsing should stop.
-pub fn parse_format_flags(args: &[String]) -> Result<Vec<ParsedFormatterItemInfo>, String> {
-    let mut formats = Vec::new();
-
-    // args[0] is the name of the binary
-    let arg_iter = args.iter().skip(1);
-    let mut expect_type_string = false;
-
-    for arg in arg_iter {
-        if expect_type_string {
-            let v = parse_type_string(arg)?;
-            formats.extend(v.into_iter());
-            expect_type_string = false;
-        } else if arg.starts_with("--") {
-            if arg.len() == 2 {
-                break;
-            }
-            if arg.starts_with("--format=") {
-                let params: String = arg.chars().skip_while(|c| *c != '=').skip(1).collect();
-                let v = parse_type_string(&params)?;
-                formats.extend(v.into_iter());
-            }
-            if arg == "--format" {
-                expect_type_string = true;
-            }
-        } else if arg.starts_with('-') {
-            let flags = arg.chars().skip(1);
-            let mut format_spec = String::new();
-            for c in flags {
-                if expect_type_string {
-                    format_spec.push(c);
-                } else if od_argument_with_option(c) {
-                    break;
-                } else if c == 't' {
-                    expect_type_string = true;
-                } else {
-                    // not every option is a format
-                    if let Some(r) = od_argument_traditional_format(c) {
-                        formats.push(ParsedFormatterItemInfo::new(r, false))
-                    }
-                }
-            }
-            if !format_spec.is_empty() {
-                let v = parse_type_string(&format_spec)?;
-                formats.extend(v.into_iter());
-                expect_type_string = false;
-            }
-        }
-    }
-    if expect_type_string {
-        return Err("missing format specification after '--format' / '-t'".to_string());
-    }
-
-    if formats.is_empty() {
-        formats.push(ParsedFormatterItemInfo::new(FORMAT_ITEM_OCT16, false)); // 2 byte octal is the default
-    }
-
-    Ok(formats)
-}
-
-#[derive(PartialEq, Eq, Debug, Copy, Clone)]
-enum FormatType {
-    Ascii,
-    Char,
-    DecimalInt,
-    OctalInt,
-    UnsignedInt,
-    HexadecimalInt,
-    Float,
-}
-
-#[derive(PartialEq, Eq, Debug, Copy, Clone)]
-enum FormatTypeCategory {
-    Char,
-    Integer,
-    Float,
-}
-
-fn format_type(ch: char) -> Option<FormatType> {
-    match ch {
-        'a' => Some(FormatType::Ascii),
-        'c' => Some(FormatType::Char),
-        'd' => Some(FormatType::DecimalInt),
-        'o' => Some(FormatType::OctalInt),
-        'u' => Some(FormatType::UnsignedInt),
-        'x' => Some(FormatType::HexadecimalInt),
-        'f' => Some(FormatType::Float),
-        _ => None,
-    }
-}
-
-fn format_type_category(t: FormatType) -> FormatTypeCategory {
-    match t {
-        FormatType::Ascii | FormatType::Char => FormatTypeCategory::Char,
-        FormatType::DecimalInt
-        | FormatType::OctalInt
-        | FormatType::UnsignedInt
-        | FormatType::HexadecimalInt => FormatTypeCategory::Integer,
-        FormatType::Float => FormatTypeCategory::Float,
-    }
-}
-
-fn is_format_size_char(
-    ch: Option<char>,
-    format_type: FormatTypeCategory,
-    byte_size: &mut u8,
-) -> bool {
-    match (format_type, ch) {
-        (FormatTypeCategory::Integer, Some('C')) => {
-            *byte_size = 1;
-            true
-        }
-        (FormatTypeCategory::Integer, Some('S')) => {
-            *byte_size = 2;
-            true
-        }
-        (FormatTypeCategory::Integer, Some('I')) => {
-            *byte_size = 4;
-            true
-        }
-        (FormatTypeCategory::Integer, Some('L')) => {
-            *byte_size = 8;
-            true
-        }
-
-        (FormatTypeCategory::Float, Some('F')) => {
-            *byte_size = 4;
-            true
-        }
-        (FormatTypeCategory::Float, Some('D')) => {
-            *byte_size = 8;
-            true
-        }
-        // FormatTypeCategory::Float, 'L' => *byte_size = 16, // TODO support f128
-        _ => false,
-    }
-}
-
-fn is_format_size_decimal(
-    ch: Option<char>,
-    format_type: FormatTypeCategory,
-    decimal_size: &mut String,
-) -> bool {
-    if format_type == FormatTypeCategory::Char {
-        return false;
-    }
-    match ch {
-        Some(d) if d.is_digit(10) => {
-            decimal_size.push(d);
-            true
-        }
-        _ => false,
-    }
-}
-
-fn is_format_dump_char(ch: Option<char>, show_ascii_dump: &mut bool) -> bool {
-    match ch {
-        Some('z') => {
-            *show_ascii_dump = true;
-            true
-        }
-        _ => false,
-    }
-}
-
-fn parse_type_string(params: &str) -> Result<Vec<ParsedFormatterItemInfo>, String> {
-    let mut formats = Vec::new();
-
-    let mut chars = params.chars();
-    let mut ch = chars.next();
-
-    while let Some(type_char) = ch {
-        let type_char = format_type(type_char).ok_or_else(|| {
-            format!(
-                "unexpected char '{}' in format specification {}",
-                type_char,
-                params.quote()
-            )
-        })?;
-
-        let type_cat = format_type_category(type_char);
-
-        ch = chars.next();
-
-        let mut byte_size = 0u8;
-        let mut show_ascii_dump = false;
-        if is_format_size_char(ch, type_cat, &mut byte_size) {
-            ch = chars.next();
-        } else {
-            let mut decimal_size = String::new();
-            while is_format_size_decimal(ch, type_cat, &mut decimal_size) {
-                ch = chars.next();
-            }
-            if !decimal_size.is_empty() {
-                byte_size = decimal_size.parse().map_err(|_| {
-                    format!(
-                        "invalid number {} in format specification {}",
-                        decimal_size.quote(),
-                        params.quote()
-                    )
-                })?;
-            }
-        }
-        if is_format_dump_char(ch, &mut show_ascii_dump) {
-            ch = chars.next();
-        }
-
-        let ft = od_format_type(type_char, byte_size).ok_or_else(|| {
-            format!(
-                "invalid size '{}' in format specification {}",
-                byte_size,
-                params.quote()
-            )
-        })?;
-        formats.push(ParsedFormatterItemInfo::new(ft, show_ascii_dump));
-    }
-
-    Ok(formats)
-}
-
-#[cfg(test)]
-pub fn parse_format_flags_str(args_str: &[&'static str]) -> Result<Vec<FormatterItemInfo>, String> {
-    let args: Vec<String> = args_str.iter().map(|s| s.to_string()).collect();
-    parse_format_flags(&args).map(|v| {
-        // tests using this function assume add_ascii_dump is not set
-        v.into_iter()
-            .inspect(|f| assert!(!f.add_ascii_dump))
-            .map(|f| f.formatter_item_info)
-            .collect()
-    })
-}
-
-#[test]
-fn test_no_options() {
-    assert_eq!(
-        parse_format_flags_str(&["od"]).unwrap(),
-        vec![FORMAT_ITEM_OCT16]
-    );
-}
-
-#[test]
-fn test_one_option() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-F"]).unwrap(),
-        vec![FORMAT_ITEM_F64]
-    );
-}
-
-#[test]
-fn test_two_separate_options() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-F", "-x"]).unwrap(),
-        vec![FORMAT_ITEM_F64, FORMAT_ITEM_HEX16]
-    );
-}
-
-#[test]
-fn test_two_combined_options() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-Fx"]).unwrap(),
-        vec![FORMAT_ITEM_F64, FORMAT_ITEM_HEX16]
-    );
-}
-
-#[test]
-fn test_ignore_non_format_parameters() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-d", "-Ax"]).unwrap(),
-        vec![FORMAT_ITEM_DEC16U]
-    );
-}
-
-#[test]
-fn test_ignore_separate_parameters() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-I", "-A", "x"]).unwrap(),
-        vec![FORMAT_ITEM_DEC64S]
-    );
-}
-
-#[test]
-fn test_ignore_trailing_vals() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-D", "--", "-x"]).unwrap(),
-        vec![FORMAT_ITEM_DEC32U]
-    );
-}
-
-#[test]
-fn test_invalid_long_format() {
-    parse_format_flags_str(&["od", "--format=X"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=xX"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=aC"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=fI"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=xD"]).unwrap_err();
-
-    parse_format_flags_str(&["od", "--format=xC1"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=x1C"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=xz1"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=xzC"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=xzz"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=xCC"]).unwrap_err();
-
-    parse_format_flags_str(&["od", "--format=c1"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=x256"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=d5"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format=f1"]).unwrap_err();
-}
-
-#[test]
-fn test_long_format_a() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=a"]).unwrap(),
-        vec![FORMAT_ITEM_A]
-    );
-}
-
-#[test]
-fn test_long_format_cz() {
-    assert_eq!(
-        parse_format_flags(&["od".to_string(), "--format=cz".to_string()]).unwrap(),
-        vec![ParsedFormatterItemInfo::new(FORMAT_ITEM_C, true)]
-    );
-}
-
-#[test]
-fn test_long_format_d() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=d8"]).unwrap(),
-        vec![FORMAT_ITEM_DEC64S]
-    );
-}
-
-#[test]
-fn test_long_format_d_default() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=d"]).unwrap(),
-        vec![FORMAT_ITEM_DEC32S]
-    );
-}
-
-#[test]
-fn test_long_format_o_default() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=o"]).unwrap(),
-        vec![FORMAT_ITEM_OCT32]
-    );
-}
-
-#[test]
-fn test_long_format_u_default() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=u"]).unwrap(),
-        vec![FORMAT_ITEM_DEC32U]
-    );
-}
-
-#[test]
-fn test_long_format_x_default() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=x"]).unwrap(),
-        vec![FORMAT_ITEM_HEX32]
-    );
-}
-
-#[test]
-fn test_long_format_f_default() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format=f"]).unwrap(),
-        vec![FORMAT_ITEM_F32]
-    );
-}
-
-#[test]
-fn test_long_format_next_arg() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "--format", "f8"]).unwrap(),
-        vec![FORMAT_ITEM_F64]
-    );
-}
-
-#[test]
-fn test_short_format_next_arg() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-t", "x8"]).unwrap(),
-        vec![FORMAT_ITEM_HEX64]
-    );
-}
-
-#[test]
-fn test_short_format_combined_arg() {
-    assert_eq!(
-        parse_format_flags_str(&["od", "-tu8"]).unwrap(),
-        vec![FORMAT_ITEM_DEC64U]
-    );
-}
-
-#[test]
-fn test_format_next_arg_invalid() {
-    parse_format_flags_str(&["od", "--format", "-v"]).unwrap_err();
-    parse_format_flags_str(&["od", "--format"]).unwrap_err();
-    parse_format_flags_str(&["od", "-t", "-v"]).unwrap_err();
-    parse_format_flags_str(&["od", "-t"]).unwrap_err();
-}
-
-#[test]
-fn test_mixed_formats() {
-    assert_eq!(
-        parse_format_flags(&[
-            "od".to_string(),
-            "--skip-bytes=2".to_string(),
-            "-vItu1z".to_string(),
-            "-N".to_string(),
-            "1000".to_string(),
-            "-xt".to_string(),
-            "acdx1".to_string(),
-            "--format=u2c".to_string(),
-            "--format".to_string(),
-            "f".to_string(),
-            "-xAx".to_string(),
-            "--".to_string(),
-            "-h".to_string(),
-            "--format=f8".to_string(),
-        ])
-        .unwrap(),
-        vec![
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_DEC64S, false), // I
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_DEC8U, true),   // tu1z
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_HEX16, false),  // x
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_A, false),      // ta
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_C, false),      // tc
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_DEC32S, false), // td
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_HEX8, false),   // tx1
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_DEC16U, false), // tu2
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_C, false),      // tc
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_F32, false),    // tf
-            ParsedFormatterItemInfo::new(FORMAT_ITEM_HEX16, false),  // x
-        ]
-    );
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/parse_inputs.rs.html b/src/uu_od/parse_inputs.rs.html deleted file mode 100644 index 89f4480de..000000000 --- a/src/uu_od/parse_inputs.rs.html +++ /dev/null @@ -1,740 +0,0 @@ -parse_inputs.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-
use super::options;
-use clap::ArgMatches;
-
-/// Abstraction for getopts
-pub trait CommandLineOpts {
-    /// returns all command line parameters which do not belong to an option.
-    fn inputs(&self) -> Vec<&str>;
-    /// tests if any of the specified options is present.
-    fn opts_present(&self, _: &[&str]) -> bool;
-}
-
-/// Implementation for `getopts`
-impl<'a> CommandLineOpts for ArgMatches {
-    fn inputs(&self) -> Vec<&str> {
-        self.values_of(options::FILENAME)
-            .map(|values| values.collect())
-            .unwrap_or_default()
-    }
-
-    fn opts_present(&self, opts: &[&str]) -> bool {
-        opts.iter().any(|opt| self.is_present(opt))
-    }
-}
-
-/// Contains the Input filename(s) with an optional offset.
-///
-/// `FileNames` is used for one or more file inputs ("-" = stdin)
-/// `FileAndOffset` is used for a single file input, with an offset
-/// and an optional label. Offset and label are specified in bytes.
-/// `FileAndOffset` will be only used if an offset is specified,
-/// but it might be 0.
-#[derive(PartialEq, Debug)]
-pub enum CommandLineInputs {
-    FileNames(Vec<String>),
-    FileAndOffset((String, usize, Option<usize>)),
-}
-
-/// Interprets the command line inputs of od.
-///
-/// Returns either an unspecified number of filenames.
-/// Or it will return a single filename, with an offset and optional label.
-/// Offset and label are specified in bytes.
-/// '-' is used as filename if stdin is meant. This is also returned if
-/// there is no input, as stdin is the default input.
-pub fn parse_inputs(matches: &dyn CommandLineOpts) -> Result<CommandLineInputs, String> {
-    let mut input_strings = matches.inputs();
-
-    if matches.opts_present(&["traditional"]) {
-        return parse_inputs_traditional(input_strings);
-    }
-
-    // test if command line contains: [file] <offset>
-    // fall-through if no (valid) offset is found
-    if input_strings.len() == 1 || input_strings.len() == 2 {
-        // if any of the options -A, -j, -N, -t, -v or -w are present there is no offset
-        if !matches.opts_present(&[
-            options::ADDRESS_RADIX,
-            options::READ_BYTES,
-            options::SKIP_BYTES,
-            options::FORMAT,
-            options::OUTPUT_DUPLICATES,
-            options::WIDTH,
-        ]) {
-            // test if the last input can be parsed as an offset.
-            let offset = parse_offset_operand(input_strings[input_strings.len() - 1]);
-            if let Ok(n) = offset {
-                // if there is just 1 input (stdin), an offset must start with '+'
-                if input_strings.len() == 1 && input_strings[0].starts_with('+') {
-                    return Ok(CommandLineInputs::FileAndOffset(("-".to_string(), n, None)));
-                }
-                if input_strings.len() == 2 {
-                    return Ok(CommandLineInputs::FileAndOffset((
-                        input_strings[0].to_string(),
-                        n,
-                        None,
-                    )));
-                }
-            }
-        }
-    }
-
-    if input_strings.is_empty() {
-        input_strings.push("-");
-    }
-    Ok(CommandLineInputs::FileNames(
-        input_strings.iter().map(|&s| s.to_string()).collect(),
-    ))
-}
-
-/// interprets inputs when --traditional is on the command line
-///
-/// normally returns CommandLineInputs::FileAndOffset, but if no offset is found,
-/// it returns CommandLineInputs::FileNames (also to differentiate from the offset == 0)
-pub fn parse_inputs_traditional(input_strings: Vec<&str>) -> Result<CommandLineInputs, String> {
-    match input_strings.len() {
-        0 => Ok(CommandLineInputs::FileNames(vec!["-".to_string()])),
-        1 => {
-            let offset0 = parse_offset_operand(input_strings[0]);
-            Ok(match offset0 {
-                Ok(n) => CommandLineInputs::FileAndOffset(("-".to_string(), n, None)),
-                _ => CommandLineInputs::FileNames(
-                    input_strings.iter().map(|&s| s.to_string()).collect(),
-                ),
-            })
-        }
-        2 => {
-            let offset0 = parse_offset_operand(input_strings[0]);
-            let offset1 = parse_offset_operand(input_strings[1]);
-            match (offset0, offset1) {
-                (Ok(n), Ok(m)) => Ok(CommandLineInputs::FileAndOffset((
-                    "-".to_string(),
-                    n,
-                    Some(m),
-                ))),
-                (_, Ok(m)) => Ok(CommandLineInputs::FileAndOffset((
-                    input_strings[0].to_string(),
-                    m,
-                    None,
-                ))),
-                _ => Err(format!("invalid offset: {}", input_strings[1])),
-            }
-        }
-        3 => {
-            let offset = parse_offset_operand(input_strings[1]);
-            let label = parse_offset_operand(input_strings[2]);
-            match (offset, label) {
-                (Ok(n), Ok(m)) => Ok(CommandLineInputs::FileAndOffset((
-                    input_strings[0].to_string(),
-                    n,
-                    Some(m),
-                ))),
-                (Err(_), _) => Err(format!("invalid offset: {}", input_strings[1])),
-                (_, Err(_)) => Err(format!("invalid label: {}", input_strings[2])),
-            }
-        }
-        _ => Err(format!(
-            "too many inputs after --traditional: {}",
-            input_strings[3]
-        )),
-    }
-}
-
-/// parses format used by offset and label on the command line
-pub fn parse_offset_operand(s: &str) -> Result<usize, &'static str> {
-    let mut start = 0;
-    let mut len = s.len();
-    let mut radix = 8;
-    let mut multiply = 1;
-
-    if s.starts_with('+') {
-        start += 1;
-    }
-
-    if s[start..len].starts_with("0x") || s[start..len].starts_with("0X") {
-        start += 2;
-        radix = 16;
-    } else {
-        if s[start..len].ends_with('b') {
-            len -= 1;
-            multiply = 512;
-        }
-        if s[start..len].ends_with('.') {
-            len -= 1;
-            radix = 10;
-        }
-    }
-    match usize::from_str_radix(&s[start..len], radix) {
-        Ok(i) => Ok(i * multiply),
-        Err(_) => Err("parse failed"),
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::uu_app;
-
-    #[test]
-    fn test_parse_inputs_normal() {
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["-".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["-".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "-"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["file1".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "file1"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["file1".to_string(), "file2".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "file1", "file2"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec![
-                "-".to_string(),
-                "file1".to_string(),
-                "file2".to_string(),
-            ]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "-", "file1", "file2"])).unwrap()
-        );
-    }
-
-    #[test]
-    fn test_parse_inputs_with_offset() {
-        // offset is found without filename, so stdin will be used.
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("-".to_string(), 8, None)),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "+10"])).unwrap()
-        );
-
-        // offset must start with "+" if no input is specified.
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["10".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "10"])).unwrap()
-        );
-
-        // offset is not valid, so it is considered a filename.
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["+10a".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "+10a"])).unwrap()
-        );
-
-        // if -j is included in the command line, there cannot be an offset.
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["+10".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "-j10", "+10"])).unwrap()
-        );
-
-        // if -v is included in the command line, there cannot be an offset.
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["+10".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "-o", "-v", "+10"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("file1".to_string(), 8, None)),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "file1", "+10"])).unwrap()
-        );
-
-        // offset does not need to start with "+" if a filename is included.
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("file1".to_string(), 8, None)),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "file1", "10"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["file1".to_string(), "+10a".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "file1", "+10a"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["file1".to_string(), "+10".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "-j10", "file1", "+10"])).unwrap()
-        );
-
-        // offset must be last on the command line
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["+10".to_string(), "file1".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "+10", "file1"])).unwrap()
-        );
-    }
-
-    #[test]
-    fn test_parse_inputs_traditional() {
-        // it should not return FileAndOffset to signal no offset was entered on the command line.
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["-".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional"])).unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileNames(vec!["file1".to_string()]),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "file1"])).unwrap()
-        );
-
-        // offset does not need to start with a +
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("-".to_string(), 8, None)),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "10"])).unwrap()
-        );
-
-        // valid offset and valid label
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("-".to_string(), 8, Some(8))),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "10", "10"]))
-                .unwrap()
-        );
-
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("file1".to_string(), 8, None)),
-            parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "file1", "10"]))
-                .unwrap()
-        );
-
-        // only one file is allowed, it must be the first
-        parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "10", "file1"]))
-            .unwrap_err();
-
-        assert_eq!(
-            CommandLineInputs::FileAndOffset(("file1".to_string(), 8, Some(8))),
-            parse_inputs(&uu_app().get_matches_from(vec![
-                "od",
-                "--traditional",
-                "file1",
-                "10",
-                "10"
-            ]))
-            .unwrap()
-        );
-
-        parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "10", "file1", "10"]))
-            .unwrap_err();
-
-        parse_inputs(&uu_app().get_matches_from(vec!["od", "--traditional", "10", "10", "file1"]))
-            .unwrap_err();
-
-        parse_inputs(&uu_app().get_matches_from(vec![
-            "od",
-            "--traditional",
-            "10",
-            "10",
-            "10",
-            "10",
-        ]))
-        .unwrap_err();
-    }
-
-    fn parse_offset_operand_str(s: &str) -> Result<usize, &'static str> {
-        parse_offset_operand(&String::from(s))
-    }
-
-    #[test]
-    fn test_parse_offset_operand_invalid() {
-        parse_offset_operand_str("").unwrap_err();
-        parse_offset_operand_str("a").unwrap_err();
-        parse_offset_operand_str("+").unwrap_err();
-        parse_offset_operand_str("+b").unwrap_err();
-        parse_offset_operand_str("0x1.").unwrap_err();
-        parse_offset_operand_str("0x1.b").unwrap_err();
-        parse_offset_operand_str("-").unwrap_err();
-        parse_offset_operand_str("-1").unwrap_err();
-        parse_offset_operand_str("1e10").unwrap_err();
-    }
-
-    #[test]
-    fn test_parse_offset_operand() {
-        assert_eq!(8, parse_offset_operand_str("10").unwrap()); // default octal
-        assert_eq!(0, parse_offset_operand_str("0").unwrap());
-        assert_eq!(8, parse_offset_operand_str("+10").unwrap()); // optional leading '+'
-        assert_eq!(16, parse_offset_operand_str("0x10").unwrap()); // hex
-        assert_eq!(16, parse_offset_operand_str("0X10").unwrap()); // hex
-        assert_eq!(16, parse_offset_operand_str("+0X10").unwrap()); // hex
-        assert_eq!(10, parse_offset_operand_str("10.").unwrap()); // decimal
-        assert_eq!(10, parse_offset_operand_str("+10.").unwrap()); // decimal
-        assert_eq!(4096, parse_offset_operand_str("10b").unwrap()); // b suffix = *512
-        assert_eq!(4096, parse_offset_operand_str("+10b").unwrap()); // b suffix = *512
-        assert_eq!(5120, parse_offset_operand_str("10.b").unwrap()); // b suffix = *512
-        assert_eq!(5120, parse_offset_operand_str("+10.b").unwrap()); // b suffix = *512
-        assert_eq!(267, parse_offset_operand_str("0x10b").unwrap()); // hex
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/parse_nrofbytes.rs.html b/src/uu_od/parse_nrofbytes.rs.html deleted file mode 100644 index f22a2db50..000000000 --- a/src/uu_od/parse_nrofbytes.rs.html +++ /dev/null @@ -1,186 +0,0 @@ -parse_nrofbytes.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-
use uucore::parse_size::{parse_size, ParseSizeError};
-
-pub fn parse_number_of_bytes(s: &str) -> Result<usize, ParseSizeError> {
-    let mut start = 0;
-    let mut len = s.len();
-    let mut radix = 16;
-    let mut multiply = 1;
-
-    if s.starts_with("0x") || s.starts_with("0X") {
-        start = 2;
-    } else if s.starts_with('0') {
-        radix = 8;
-    } else {
-        return parse_size(&s[start..]);
-    }
-
-    let mut ends_with = s.chars().rev();
-    match ends_with.next() {
-        Some('b') if radix != 16 => {
-            multiply = 512;
-            len -= 1;
-        }
-        Some('k') | Some('K') => {
-            multiply = 1024;
-            len -= 1;
-        }
-        Some('m') | Some('M') => {
-            multiply = 1024 * 1024;
-            len -= 1;
-        }
-        Some('G') => {
-            multiply = 1024 * 1024 * 1024;
-            len -= 1;
-        }
-        #[cfg(target_pointer_width = "64")]
-        Some('T') => {
-            multiply = 1024 * 1024 * 1024 * 1024;
-            len -= 1;
-        }
-        #[cfg(target_pointer_width = "64")]
-        Some('P') => {
-            multiply = 1024 * 1024 * 1024 * 1024 * 1024;
-            len -= 1;
-        }
-        #[cfg(target_pointer_width = "64")]
-        Some('E') => {
-            multiply = 1024 * 1024 * 1024 * 1024 * 1024 * 1024;
-            len -= 1;
-        }
-        Some('B') if radix != 16 => {
-            len -= 2;
-            multiply = match ends_with.next() {
-                Some('k') | Some('K') => 1000,
-                Some('m') | Some('M') => 1000 * 1000,
-                Some('G') => 1000 * 1000 * 1000,
-                #[cfg(target_pointer_width = "64")]
-                Some('T') => 1000 * 1000 * 1000 * 1000,
-                #[cfg(target_pointer_width = "64")]
-                Some('P') => 1000 * 1000 * 1000 * 1000 * 1000,
-                #[cfg(target_pointer_width = "64")]
-                Some('E') => 1000 * 1000 * 1000 * 1000 * 1000 * 1000,
-                _ => return Err(ParseSizeError::ParseFailure(s.to_string())),
-            }
-        }
-        _ => {}
-    }
-
-    let factor = match usize::from_str_radix(&s[start..len], radix) {
-        Ok(f) => f,
-        Err(e) => return Err(ParseSizeError::ParseFailure(e.to_string())),
-    };
-    factor
-        .checked_mul(multiply)
-        .ok_or_else(|| ParseSizeError::SizeTooBig(s.to_string()))
-}
-
-#[test]
-fn test_parse_number_of_bytes() {
-    // octal input
-    assert_eq!(8, parse_number_of_bytes("010").unwrap());
-    assert_eq!(8 * 512, parse_number_of_bytes("010b").unwrap());
-    assert_eq!(8 * 1024, parse_number_of_bytes("010k").unwrap());
-    assert_eq!(8 * 1_048_576, parse_number_of_bytes("010m").unwrap());
-
-    // hex input
-    assert_eq!(15, parse_number_of_bytes("0xf").unwrap());
-    assert_eq!(15, parse_number_of_bytes("0XF").unwrap());
-    assert_eq!(27, parse_number_of_bytes("0x1b").unwrap());
-    assert_eq!(16 * 1024, parse_number_of_bytes("0x10k").unwrap());
-    assert_eq!(16 * 1_048_576, parse_number_of_bytes("0x10m").unwrap());
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/partialreader.rs.html b/src/uu_od/partialreader.rs.html deleted file mode 100644 index 0f310024b..000000000 --- a/src/uu_od/partialreader.rs.html +++ /dev/null @@ -1,424 +0,0 @@ -partialreader.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// spell-checker:ignore mockstream abcdefgh bcdefgh
-
-use std::cmp;
-use std::io;
-use std::io::Read;
-
-use crate::multifilereader::HasError;
-
-/// When a large number of bytes must be skipped, it will be read into a
-/// dynamically allocated buffer. The buffer will be limited to this size.
-const MAX_SKIP_BUFFER: usize = 16 * 1024;
-
-/// Wrapper for `std::io::Read` which can skip bytes at the beginning
-/// of the input, and it can limit the returned bytes to a particular
-/// number of bytes.
-pub struct PartialReader<R> {
-    inner: R,
-    skip: usize,
-    limit: Option<usize>,
-}
-
-impl<R> PartialReader<R> {
-    /// Create a new `PartialReader` wrapping `inner`, which will skip
-    /// `skip` bytes, and limits the output to `limit` bytes. Set `limit`
-    /// to `None` if there should be no limit.
-    pub fn new(inner: R, skip: usize, limit: Option<usize>) -> Self {
-        PartialReader { inner, skip, limit }
-    }
-}
-
-impl<R: Read> Read for PartialReader<R> {
-    fn read(&mut self, out: &mut [u8]) -> io::Result<usize> {
-        if self.skip > 0 {
-            let mut bytes = [0; MAX_SKIP_BUFFER];
-
-            while self.skip > 0 {
-                let skip_count = cmp::min(self.skip, MAX_SKIP_BUFFER);
-
-                match self.inner.read(&mut bytes[..skip_count])? {
-                    0 => {
-                        // this is an error as we still have more to skip
-                        return Err(io::Error::new(
-                            io::ErrorKind::UnexpectedEof,
-                            "tried to skip past end of input",
-                        ));
-                    }
-                    n => self.skip -= n,
-                }
-            }
-        }
-
-        match self.limit {
-            None => self.inner.read(out),
-            Some(0) => Ok(0),
-            Some(ref mut limit) => {
-                let slice = if *limit > out.len() {
-                    out
-                } else {
-                    &mut out[0..*limit]
-                };
-                match self.inner.read(slice) {
-                    Err(e) => Err(e),
-                    Ok(r) => {
-                        *limit -= r;
-                        Ok(r)
-                    }
-                }
-            }
-        }
-    }
-}
-
-impl<R: HasError> HasError for PartialReader<R> {
-    fn has_error(&self) -> bool {
-        self.inner.has_error()
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use crate::mockstream::*;
-    use std::io::{Cursor, ErrorKind, Read};
-
-    #[test]
-    fn test_read_without_limits() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 0, None);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 8);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0, 0]);
-    }
-
-    #[test]
-    fn test_read_without_limits_with_error() {
-        let mut v = [0; 10];
-        let f = FailingMockStream::new(ErrorKind::PermissionDenied, "No access", 3);
-        let mut sut = PartialReader::new(f, 0, None);
-
-        let error = sut.read(v.as_mut()).unwrap_err();
-        assert_eq!(error.kind(), ErrorKind::PermissionDenied);
-        assert_eq!(error.to_string(), "No access");
-    }
-
-    #[test]
-    fn test_read_skipping_bytes() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 2, None);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 6);
-        assert_eq!(v, [0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0, 0, 0, 0]);
-    }
-
-    #[test]
-    fn test_read_skipping_all() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 20, None);
-
-        let error = sut.read(v.as_mut()).unwrap_err();
-        assert_eq!(error.kind(), ErrorKind::UnexpectedEof);
-    }
-
-    #[test]
-    fn test_read_skipping_with_error() {
-        let mut v = [0; 10];
-        let f = FailingMockStream::new(ErrorKind::PermissionDenied, "No access", 3);
-        let mut sut = PartialReader::new(f, 2, None);
-
-        let error = sut.read(v.as_mut()).unwrap_err();
-        assert_eq!(error.kind(), ErrorKind::PermissionDenied);
-        assert_eq!(error.to_string(), "No access");
-    }
-
-    #[test]
-    fn test_read_skipping_with_two_reads_during_skip() {
-        let mut v = [0; 10];
-        let c = Cursor::new(&b"a"[..]).chain(Cursor::new(&b"bcdefgh"[..]));
-        let mut sut = PartialReader::new(c, 2, None);
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 6);
-        assert_eq!(v, [0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0, 0, 0, 0]);
-    }
-
-    #[test]
-    fn test_read_skipping_huge_number() {
-        let mut v = [0; 10];
-        // test if it does not eat all memory....
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), usize::max_value(), None);
-
-        sut.read(v.as_mut()).unwrap_err();
-    }
-
-    #[test]
-    fn test_read_limiting_all() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 0, Some(0));
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 0);
-    }
-
-    #[test]
-    fn test_read_limiting() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 0, Some(6));
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 6);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0, 0, 0, 0]);
-    }
-
-    #[test]
-    fn test_read_limiting_with_error() {
-        let mut v = [0; 10];
-        let f = FailingMockStream::new(ErrorKind::PermissionDenied, "No access", 3);
-        let mut sut = PartialReader::new(f, 0, Some(6));
-
-        let error = sut.read(v.as_mut()).unwrap_err();
-        assert_eq!(error.kind(), ErrorKind::PermissionDenied);
-        assert_eq!(error.to_string(), "No access");
-    }
-
-    #[test]
-    fn test_read_limiting_with_large_limit() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 0, Some(20));
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 8);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0, 0]);
-    }
-
-    #[test]
-    fn test_read_limiting_with_multiple_reads() {
-        let mut v = [0; 3];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 0, Some(6));
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 3);
-        assert_eq!(v, [0x61, 0x62, 0x63]);
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 3);
-        assert_eq!(v, [0x64, 0x65, 0x66]);
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 0);
-    }
-
-    #[test]
-    fn test_read_skipping_and_limiting() {
-        let mut v = [0; 10];
-        let mut sut = PartialReader::new(Cursor::new(&b"abcdefgh"[..]), 2, Some(4));
-
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 4);
-        assert_eq!(v, [0x63, 0x64, 0x65, 0x66, 0, 0, 0, 0, 0, 0]);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/peekreader.rs.html b/src/uu_od/peekreader.rs.html deleted file mode 100644 index b37645a2e..000000000 --- a/src/uu_od/peekreader.rs.html +++ /dev/null @@ -1,434 +0,0 @@ -peekreader.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-
// spell-checker:ignore (ToDO) tempbuffer abcdefgh abcdefghij
-
-//! Contains the trait `PeekRead` and type `PeekReader` implementing it.
-
-use std::io;
-use std::io::{Read, Write};
-
-use crate::multifilereader::HasError;
-
-/// A trait which supplies a function to peek into a stream without
-/// actually reading it.
-///
-/// Like `std::io::Read`, it allows to read data from a stream, with
-/// the additional possibility to reserve a part of the returned data
-/// with the data which will be read in subsequent calls.
-///
-pub trait PeekRead {
-    /// Reads data into a buffer.
-    ///
-    /// Fills `out` with data. The last `peek_size` bytes of `out` are
-    /// used for data which keeps available on subsequent calls.
-    /// `peek_size` must be smaller or equal to the size of `out`.
-    ///
-    /// Returns a tuple where the first number is the number of bytes
-    /// read from the stream, and the second number is the number of
-    /// bytes additionally read. Any of the numbers might be zero.
-    /// It can also return an error.
-    ///
-    /// A type implementing this trait, will typically also implement
-    /// `std::io::Read`.
-    ///
-    /// # Panics
-    /// Might panic if `peek_size` is larger then the size of `out`
-    fn peek_read(&mut self, out: &mut [u8], peek_size: usize) -> io::Result<(usize, usize)>;
-}
-
-/// Wrapper for `std::io::Read` allowing to peek into the data to be read.
-pub struct PeekReader<R> {
-    inner: R,
-    temp_buffer: Vec<u8>,
-}
-
-impl<R> PeekReader<R> {
-    /// Create a new `PeekReader` wrapping `inner`
-    pub fn new(inner: R) -> Self {
-        PeekReader {
-            inner,
-            temp_buffer: Vec::new(),
-        }
-    }
-}
-
-impl<R: Read> PeekReader<R> {
-    fn read_from_tempbuffer(&mut self, mut out: &mut [u8]) -> usize {
-        match out.write(self.temp_buffer.as_mut_slice()) {
-            Ok(n) => {
-                self.temp_buffer.drain(..n);
-                n
-            }
-            Err(_) => 0,
-        }
-    }
-
-    fn write_to_tempbuffer(&mut self, bytes: &[u8]) {
-        // if temp_buffer is not empty, data has to be inserted in front
-        let org_buffer: Vec<_> = self.temp_buffer.drain(..).collect();
-        self.temp_buffer.write_all(bytes).unwrap();
-        self.temp_buffer.extend(org_buffer);
-    }
-}
-
-impl<R: Read> Read for PeekReader<R> {
-    fn read(&mut self, out: &mut [u8]) -> io::Result<usize> {
-        let start_pos = self.read_from_tempbuffer(out);
-        match self.inner.read(&mut out[start_pos..]) {
-            Err(e) => Err(e),
-            Ok(n) => Ok(n + start_pos),
-        }
-    }
-}
-
-impl<R: Read> PeekRead for PeekReader<R> {
-    /// Reads data into a buffer.
-    ///
-    /// See `PeekRead::peek_read`.
-    ///
-    /// # Panics
-    /// If `peek_size` is larger then the size of `out`
-    fn peek_read(&mut self, out: &mut [u8], peek_size: usize) -> io::Result<(usize, usize)> {
-        assert!(out.len() >= peek_size);
-        match self.read(out) {
-            Err(e) => Err(e),
-            Ok(bytes_in_buffer) => {
-                let unused = out.len() - bytes_in_buffer;
-                if peek_size <= unused {
-                    Ok((bytes_in_buffer, 0))
-                } else {
-                    let actual_peek_size = peek_size - unused;
-                    let real_size = bytes_in_buffer - actual_peek_size;
-                    self.write_to_tempbuffer(&out[real_size..bytes_in_buffer]);
-                    Ok((real_size, actual_peek_size))
-                }
-            }
-        }
-    }
-}
-
-impl<R: HasError> HasError for PeekReader<R> {
-    fn has_error(&self) -> bool {
-        self.inner.has_error()
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use std::io::{Cursor, Read};
-
-    #[test]
-    fn test_read_normal() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefgh"[..]));
-
-        let mut v = [0; 10];
-        assert_eq!(sut.read(v.as_mut()).unwrap(), 8);
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0, 0]);
-    }
-
-    #[test]
-    fn test_peek_read_without_buffer() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefgh"[..]));
-
-        let mut v = [0; 10];
-        assert_eq!(sut.peek_read(v.as_mut(), 0).unwrap(), (8, 0));
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0, 0]);
-    }
-
-    #[test]
-    fn test_peek_read_and_read() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefghij"[..]));
-
-        let mut v = [0; 8];
-        assert_eq!(sut.peek_read(v.as_mut(), 4).unwrap(), (4, 4));
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68]);
-
-        let mut v2 = [0; 8];
-        assert_eq!(sut.read(v2.as_mut()).unwrap(), 6);
-        assert_eq!(v2, [0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0, 0]);
-    }
-
-    #[test]
-    fn test_peek_read_multiple_times() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefghij"[..]));
-
-        let mut s1 = [0; 8];
-        assert_eq!(sut.peek_read(s1.as_mut(), 4).unwrap(), (4, 4));
-        assert_eq!(s1, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68]);
-
-        let mut s2 = [0; 8];
-        assert_eq!(sut.peek_read(s2.as_mut(), 4).unwrap(), (4, 2));
-        assert_eq!(s2, [0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0, 0]);
-
-        let mut s3 = [0; 8];
-        assert_eq!(sut.peek_read(s3.as_mut(), 4).unwrap(), (2, 0));
-        assert_eq!(s3, [0x69, 0x6a, 0, 0, 0, 0, 0, 0]);
-    }
-
-    #[test]
-    fn test_peek_read_and_read_with_small_buffer() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefghij"[..]));
-
-        let mut v = [0; 8];
-        assert_eq!(sut.peek_read(v.as_mut(), 4).unwrap(), (4, 4));
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68]);
-
-        let mut v2 = [0; 2];
-        assert_eq!(sut.read(v2.as_mut()).unwrap(), 2);
-        assert_eq!(v2, [0x65, 0x66]);
-        assert_eq!(sut.read(v2.as_mut()).unwrap(), 2);
-        assert_eq!(v2, [0x67, 0x68]);
-        assert_eq!(sut.read(v2.as_mut()).unwrap(), 2);
-        assert_eq!(v2, [0x69, 0x6a]);
-    }
-
-    #[test]
-    fn test_peek_read_with_smaller_buffer() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefghij"[..]));
-
-        let mut v = [0; 8];
-        assert_eq!(sut.peek_read(v.as_mut(), 4).unwrap(), (4, 4));
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68]);
-
-        let mut v2 = [0; 2];
-        assert_eq!(sut.peek_read(v2.as_mut(), 2).unwrap(), (0, 2));
-        assert_eq!(v2, [0x65, 0x66]);
-        assert_eq!(sut.peek_read(v2.as_mut(), 0).unwrap(), (2, 0));
-        assert_eq!(v2, [0x65, 0x66]);
-        assert_eq!(sut.peek_read(v2.as_mut(), 0).unwrap(), (2, 0));
-        assert_eq!(v2, [0x67, 0x68]);
-        assert_eq!(sut.peek_read(v2.as_mut(), 0).unwrap(), (2, 0));
-        assert_eq!(v2, [0x69, 0x6a]);
-    }
-
-    #[test]
-    fn test_peek_read_peek_with_larger_peek_buffer() {
-        let mut sut = PeekReader::new(Cursor::new(&b"abcdefghij"[..]));
-
-        let mut v = [0; 8];
-        assert_eq!(sut.peek_read(v.as_mut(), 4).unwrap(), (4, 4));
-        assert_eq!(v, [0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68]);
-
-        let mut v2 = [0; 8];
-        assert_eq!(sut.peek_read(v2.as_mut(), 8).unwrap(), (0, 6));
-        assert_eq!(v2, [0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0, 0]);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/prn_char.rs.html b/src/uu_od/prn_char.rs.html deleted file mode 100644 index 997676f21..000000000 --- a/src/uu_od/prn_char.rs.html +++ /dev/null @@ -1,314 +0,0 @@ -prn_char.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-
use std::str::from_utf8;
-
-use crate::formatteriteminfo::*;
-
-pub static FORMAT_ITEM_A: FormatterItemInfo = FormatterItemInfo {
-    byte_size: 1,
-    print_width: 4,
-    formatter: FormatWriter::IntWriter(format_item_a),
-};
-
-pub static FORMAT_ITEM_C: FormatterItemInfo = FormatterItemInfo {
-    byte_size: 1,
-    print_width: 4,
-    formatter: FormatWriter::MultibyteWriter(format_item_c),
-};
-
-static A_CHARS: [&str; 128] = [
-    "nul", "soh", "stx", "etx", "eot", "enq", "ack", "bel", "bs", "ht", "nl", "vt", "ff", "cr",
-    "so", "si", "dle", "dc1", "dc2", "dc3", "dc4", "nak", "syn", "etb", "can", "em", "sub", "esc",
-    "fs", "gs", "rs", "us", "sp", "!", "\"", "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-",
-    ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@",
-    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S",
-    "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f",
-    "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y",
-    "z", "{", "|", "}", "~", "del",
-];
-
-fn format_item_a(p: u64) -> String {
-    // item-bytes == 1
-    let b = (p & 0x7f) as u8;
-    format!("{:>4}", A_CHARS.get(b as usize).unwrap_or(&"??"))
-}
-
-static C_CHARS: [&str; 128] = [
-    "\\0", "001", "002", "003", "004", "005", "006", "\\a", "\\b", "\\t", "\\n", "\\v", "\\f",
-    "\\r", "016", "017", "020", "021", "022", "023", "024", "025", "026", "027", "030", "031",
-    "032", "033", "034", "035", "036", "037", " ", "!", "\"", "#", "$", "%", "&", "'", "(", ")",
-    "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<",
-    "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
-    "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\\", "]", "^", "_", "`", "a", "b",
-    "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u",
-    "v", "w", "x", "y", "z", "{", "|", "}", "~", "177",
-];
-
-fn format_item_c(bytes: &[u8]) -> String {
-    // item-bytes == 1
-    let b = bytes[0];
-
-    if b & 0x80 == 0x00 {
-        match C_CHARS.get(b as usize) {
-            Some(s) => format!("{:>4}", s),
-            None => format!("{:>4}", b),
-        }
-    } else if (b & 0xc0) == 0x80 {
-        // second or subsequent octet of an utf-8 sequence
-        String::from("  **")
-    } else if ((b & 0xe0) == 0xc0) && (bytes.len() >= 2) {
-        // start of a 2 octet utf-8 sequence
-        match from_utf8(&bytes[0..2]) {
-            Ok(s) => format!("{:>4}", s),
-            Err(_) => format!(" {:03o}", b),
-        }
-    } else if ((b & 0xf0) == 0xe0) && (bytes.len() >= 3) {
-        // start of a 3 octet utf-8 sequence
-        match from_utf8(&bytes[0..3]) {
-            Ok(s) => format!("{:>4}", s),
-            Err(_) => format!(" {:03o}", b),
-        }
-    } else if ((b & 0xf8) == 0xf0) && (bytes.len() >= 4) {
-        // start of a 4 octet utf-8 sequence
-        match from_utf8(&bytes[0..4]) {
-            Ok(s) => format!("{:>4}", s),
-            Err(_) => format!(" {:03o}", b),
-        }
-    } else {
-        // invalid utf-8
-        format!(" {:03o}", b)
-    }
-}
-
-pub fn format_ascii_dump(bytes: &[u8]) -> String {
-    let mut result = String::new();
-
-    result.push('>');
-    for c in bytes.iter() {
-        if *c >= 0x20 && *c <= 0x7e {
-            result.push_str(C_CHARS[*c as usize]);
-        } else {
-            result.push('.');
-        }
-    }
-    result.push('<');
-
-    result
-}
-
-#[test]
-fn test_format_item_a() {
-    assert_eq!(" nul", format_item_a(0x00));
-    assert_eq!(" soh", format_item_a(0x01));
-    assert_eq!("  sp", format_item_a(0x20));
-    assert_eq!("   A", format_item_a(0x41));
-    assert_eq!("   ~", format_item_a(0x7e));
-    assert_eq!(" del", format_item_a(0x7f));
-
-    assert_eq!(" nul", format_item_a(0x80));
-    assert_eq!("   A", format_item_a(0xc1));
-    assert_eq!("   ~", format_item_a(0xfe));
-    assert_eq!(" del", format_item_a(0xff));
-}
-
-#[test]
-fn test_format_item_c() {
-    assert_eq!("  \\0", format_item_c(&[0x00]));
-    assert_eq!(" 001", format_item_c(&[0x01]));
-    assert_eq!("    ", format_item_c(&[0x20]));
-    assert_eq!("   A", format_item_c(&[0x41]));
-    assert_eq!("   ~", format_item_c(&[0x7e]));
-    assert_eq!(" 177", format_item_c(&[0x7f]));
-    assert_eq!("   A", format_item_c(&[0x41, 0x21]));
-
-    assert_eq!("  **", format_item_c(&[0x80]));
-    assert_eq!("  **", format_item_c(&[0x9f]));
-
-    assert_eq!("   ß", format_item_c(&[0xc3, 0x9f]));
-    assert_eq!("   ß", format_item_c(&[0xc3, 0x9f, 0x21]));
-
-    assert_eq!("   \u{1000}", format_item_c(&[0xe1, 0x80, 0x80]));
-    assert_eq!("   \u{1000}", format_item_c(&[0xe1, 0x80, 0x80, 0x21]));
-
-    assert_eq!("   \u{1f496}", format_item_c(&[0xf0, 0x9f, 0x92, 0x96]));
-    assert_eq!(
-        "   \u{1f496}",
-        format_item_c(&[0xf0, 0x9f, 0x92, 0x96, 0x21])
-    );
-
-    assert_eq!(" 300", format_item_c(&[0xc0, 0x80])); // invalid utf-8 (UTF-8 null)
-    assert_eq!(" 301", format_item_c(&[0xc1, 0xa1])); // invalid utf-8
-    assert_eq!(" 303", format_item_c(&[0xc3, 0xc3])); // invalid utf-8
-    assert_eq!(" 360", format_item_c(&[0xf0, 0x82, 0x82, 0xac])); // invalid utf-8 (overlong)
-    assert_eq!(" 360", format_item_c(&[0xf0, 0x9f, 0x92])); // invalid utf-8 (missing octet)
-    assert_eq!("   \u{10FFFD}", format_item_c(&[0xf4, 0x8f, 0xbf, 0xbd])); // largest valid utf-8   // spell-checker:ignore 10FFFD FFFD
-    assert_eq!(" 364", format_item_c(&[0xf4, 0x90, 0x00, 0x00])); // invalid utf-8
-    assert_eq!(" 365", format_item_c(&[0xf5, 0x80, 0x80, 0x80])); // invalid utf-8
-    assert_eq!(" 377", format_item_c(&[0xff])); // invalid utf-8
-}
-
-#[test]
-fn test_format_ascii_dump() {
-    assert_eq!(">.<", format_ascii_dump(&[0x00]));
-    assert_eq!(
-        ">. A~.<",
-        format_ascii_dump(&[0x1f, 0x20, 0x41, 0x7e, 0x7f])
-    );
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/prn_float.rs.html b/src/uu_od/prn_float.rs.html deleted file mode 100644 index e8f4e563a..000000000 --- a/src/uu_od/prn_float.rs.html +++ /dev/null @@ -1,448 +0,0 @@ -prn_float.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-
use half::f16;
-use std::f32;
-use std::f64;
-use std::num::FpCategory;
-
-use crate::formatteriteminfo::*;
-
-pub static FORMAT_ITEM_F16: FormatterItemInfo = FormatterItemInfo {
-    byte_size: 2,
-    print_width: 10,
-    formatter: FormatWriter::FloatWriter(format_item_flo16),
-};
-
-pub static FORMAT_ITEM_F32: FormatterItemInfo = FormatterItemInfo {
-    byte_size: 4,
-    print_width: 15,
-    formatter: FormatWriter::FloatWriter(format_item_flo32),
-};
-
-pub static FORMAT_ITEM_F64: FormatterItemInfo = FormatterItemInfo {
-    byte_size: 8,
-    print_width: 25,
-    formatter: FormatWriter::FloatWriter(format_item_flo64),
-};
-
-pub fn format_item_flo16(f: f64) -> String {
-    format!(" {}", format_flo16(f16::from_f64(f)))
-}
-
-pub fn format_item_flo32(f: f64) -> String {
-    format!(" {}", format_flo32(f as f32))
-}
-
-pub fn format_item_flo64(f: f64) -> String {
-    format!(" {}", format_flo64(f))
-}
-
-fn format_flo16(f: f16) -> String {
-    format_float(f64::from(f), 9, 4)
-}
-
-// formats float with 8 significant digits, eg 12345678 or -1.2345678e+12
-// always returns a string of 14 characters
-fn format_flo32(f: f32) -> String {
-    let width: usize = 14;
-    let precision: usize = 8;
-
-    if f.classify() == FpCategory::Subnormal {
-        // subnormal numbers will be normal as f64, so will print with a wrong precision
-        format!("{:width$e}", f, width = width) // subnormal numbers
-    } else {
-        format_float(f64::from(f), width, precision)
-    }
-}
-
-fn format_flo64(f: f64) -> String {
-    format_float(f, 24, 17)
-}
-
-fn format_float(f: f64, width: usize, precision: usize) -> String {
-    if !f.is_normal() {
-        if f == -0.0 && f.is_sign_negative() {
-            return format!("{:>width$}", "-0", width = width);
-        }
-        if f == 0.0 || !f.is_finite() {
-            return format!("{:width$}", f, width = width);
-        }
-        return format!("{:width$e}", f, width = width); // subnormal numbers
-    }
-
-    let mut l = f.abs().log10().floor() as i32;
-
-    let r = 10f64.powi(l);
-    if (f > 0.0 && r > f) || (f < 0.0 && -r < f) {
-        // fix precision error
-        l -= 1;
-    }
-
-    if l >= 0 && l <= (precision as i32 - 1) {
-        format!(
-            "{:width$.dec$}",
-            f,
-            width = width,
-            dec = (precision - 1) - l as usize
-        )
-    } else if l == -1 {
-        format!("{:width$.dec$}", f, width = width, dec = precision)
-    } else {
-        format!("{:width$.dec$e}", f, width = width, dec = precision - 1)
-    }
-}
-
-#[test]
-#[allow(clippy::excessive_precision)]
-fn test_format_flo32() {
-    assert_eq!(format_flo32(1.0), "     1.0000000");
-    assert_eq!(format_flo32(9.9999990), "     9.9999990");
-    assert_eq!(format_flo32(10.0), "     10.000000");
-    assert_eq!(format_flo32(99.999977), "     99.999977");
-    assert_eq!(format_flo32(99.999992), "     99.999992");
-    assert_eq!(format_flo32(100.0), "     100.00000");
-    assert_eq!(format_flo32(999.99994), "     999.99994");
-    assert_eq!(format_flo32(1000.0), "     1000.0000");
-    assert_eq!(format_flo32(9999.9990), "     9999.9990");
-    assert_eq!(format_flo32(10000.0), "     10000.000");
-    assert_eq!(format_flo32(99999.992), "     99999.992");
-    assert_eq!(format_flo32(100000.0), "     100000.00");
-    assert_eq!(format_flo32(999999.94), "     999999.94");
-    assert_eq!(format_flo32(1000000.0), "     1000000.0");
-    assert_eq!(format_flo32(9999999.0), "     9999999.0");
-    assert_eq!(format_flo32(10000000.0), "      10000000");
-    assert_eq!(format_flo32(99999992.0), "      99999992");
-    assert_eq!(format_flo32(100000000.0), "   1.0000000e8");
-    assert_eq!(format_flo32(9.9999994e8), "   9.9999994e8");
-    assert_eq!(format_flo32(1.0e9), "   1.0000000e9");
-    assert_eq!(format_flo32(9.9999990e9), "   9.9999990e9");
-    assert_eq!(format_flo32(1.0e10), "  1.0000000e10");
-
-    assert_eq!(format_flo32(0.1), "    0.10000000");
-    assert_eq!(format_flo32(0.99999994), "    0.99999994");
-    assert_eq!(format_flo32(0.010000001), "  1.0000001e-2");
-    assert_eq!(format_flo32(0.099999994), "  9.9999994e-2");
-    assert_eq!(format_flo32(0.001), "  1.0000000e-3");
-    assert_eq!(format_flo32(0.0099999998), "  9.9999998e-3");
-
-    assert_eq!(format_flo32(-1.0), "    -1.0000000");
-    assert_eq!(format_flo32(-9.9999990), "    -9.9999990");
-    assert_eq!(format_flo32(-10.0), "    -10.000000");
-    assert_eq!(format_flo32(-99.999977), "    -99.999977");
-    assert_eq!(format_flo32(-99.999992), "    -99.999992");
-    assert_eq!(format_flo32(-100.0), "    -100.00000");
-    assert_eq!(format_flo32(-999.99994), "    -999.99994");
-    assert_eq!(format_flo32(-1000.0), "    -1000.0000");
-    assert_eq!(format_flo32(-9999.9990), "    -9999.9990");
-    assert_eq!(format_flo32(-10000.0), "    -10000.000");
-    assert_eq!(format_flo32(-99999.992), "    -99999.992");
-    assert_eq!(format_flo32(-100000.0), "    -100000.00");
-    assert_eq!(format_flo32(-999999.94), "    -999999.94");
-    assert_eq!(format_flo32(-1000000.0), "    -1000000.0");
-    assert_eq!(format_flo32(-9999999.0), "    -9999999.0");
-    assert_eq!(format_flo32(-10000000.0), "     -10000000");
-    assert_eq!(format_flo32(-99999992.0), "     -99999992");
-    assert_eq!(format_flo32(-100000000.0), "  -1.0000000e8");
-    assert_eq!(format_flo32(-9.9999994e8), "  -9.9999994e8");
-    assert_eq!(format_flo32(-1.0e9), "  -1.0000000e9");
-    assert_eq!(format_flo32(-9.9999990e9), "  -9.9999990e9");
-    assert_eq!(format_flo32(-1.0e10), " -1.0000000e10");
-
-    assert_eq!(format_flo32(-0.1), "   -0.10000000");
-    assert_eq!(format_flo32(-0.99999994), "   -0.99999994");
-    assert_eq!(format_flo32(-0.010000001), " -1.0000001e-2");
-    assert_eq!(format_flo32(-0.099999994), " -9.9999994e-2");
-    assert_eq!(format_flo32(-0.001), " -1.0000000e-3");
-    assert_eq!(format_flo32(-0.0099999998), " -9.9999998e-3");
-
-    assert_eq!(format_flo32(3.4028233e38), "  3.4028233e38");
-    assert_eq!(format_flo32(-3.4028233e38), " -3.4028233e38");
-    assert_eq!(format_flo32(-1.1663108e-38), "-1.1663108e-38");
-    assert_eq!(format_flo32(-4.7019771e-38), "-4.7019771e-38");
-    assert_eq!(format_flo32(1e-45), "         1e-45");
-
-    assert_eq!(format_flo32(-3.402823466e+38), " -3.4028235e38");
-    assert_eq!(format_flo32(f32::NAN), "           NaN");
-    assert_eq!(format_flo32(f32::INFINITY), "           inf");
-    assert_eq!(format_flo32(f32::NEG_INFINITY), "          -inf");
-    assert_eq!(format_flo32(-0.0), "            -0");
-    assert_eq!(format_flo32(0.0), "             0");
-}
-
-#[test]
-fn test_format_flo64() {
-    assert_eq!(format_flo64(1.0), "      1.0000000000000000");
-    assert_eq!(format_flo64(10.0), "      10.000000000000000");
-    assert_eq!(format_flo64(1000000000000000.0), "      1000000000000000.0");
-    assert_eq!(
-        format_flo64(10000000000000000.0),
-        "       10000000000000000"
-    );
-    assert_eq!(
-        format_flo64(100000000000000000.0),
-        "   1.0000000000000000e17"
-    );
-
-    assert_eq!(format_flo64(-0.1), "    -0.10000000000000001");
-    assert_eq!(format_flo64(-0.01), "  -1.0000000000000000e-2");
-
-    assert_eq!(
-        format_flo64(-2.2250738585072014e-308),
-        "-2.2250738585072014e-308"
-    );
-    assert_eq!(format_flo64(4e-320), "                  4e-320");
-    assert_eq!(format_flo64(f64::NAN), "                     NaN");
-    assert_eq!(format_flo64(f64::INFINITY), "                     inf");
-    assert_eq!(format_flo64(f64::NEG_INFINITY), "                    -inf");
-    assert_eq!(format_flo64(-0.0), "                      -0");
-    assert_eq!(format_flo64(0.0), "                       0");
-}
-
-#[test]
-fn test_format_flo16() {
-    assert_eq!(format_flo16(f16::from_bits(0x8400u16)), "-6.104e-5");
-    assert_eq!(format_flo16(f16::from_bits(0x8401u16)), "-6.109e-5");
-    assert_eq!(format_flo16(f16::from_bits(0x8402u16)), "-6.115e-5");
-    assert_eq!(format_flo16(f16::from_bits(0x8403u16)), "-6.121e-5");
-
-    assert_eq!(format_flo16(f16::from_f32(1.0)), "    1.000");
-    assert_eq!(format_flo16(f16::from_f32(10.0)), "    10.00");
-    assert_eq!(format_flo16(f16::from_f32(100.0)), "    100.0");
-    assert_eq!(format_flo16(f16::from_f32(1000.0)), "     1000");
-    assert_eq!(format_flo16(f16::from_f32(10000.0)), "  1.000e4");
-
-    assert_eq!(format_flo16(f16::from_f32(-0.2)), "  -0.2000");
-    assert_eq!(format_flo16(f16::from_f32(-0.02)), "-2.000e-2");
-
-    assert_eq!(format_flo16(f16::MIN_POSITIVE_SUBNORMAL), " 5.960e-8");
-    assert_eq!(format_flo16(f16::MIN), " -6.550e4");
-    assert_eq!(format_flo16(f16::NAN), "      NaN");
-    assert_eq!(format_flo16(f16::INFINITY), "      inf");
-    assert_eq!(format_flo16(f16::NEG_INFINITY), "     -inf");
-    assert_eq!(format_flo16(f16::NEG_ZERO), "       -0");
-    assert_eq!(format_flo16(f16::ZERO), "        0");
-}
-
-
- \ No newline at end of file diff --git a/src/uu_od/prn_int.rs.html b/src/uu_od/prn_int.rs.html deleted file mode 100644 index 406a27784..000000000 --- a/src/uu_od/prn_int.rs.html +++ /dev/null @@ -1,398 +0,0 @@ -prn_int.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
use crate::formatteriteminfo::*;
-
-/// format string to print octal using `int_writer_unsigned`
-macro_rules! OCT {
-    () => {
-        " {:0width$o}"
-    };
-}
-/// format string to print hexadecimal using `int_writer_unsigned`
-macro_rules! HEX {
-    () => {
-        " {:0width$x}"
-    };
-}
-/// format string to print decimal using `int_writer_unsigned` or `int_writer_signed`
-macro_rules! DEC {
-    () => {
-        " {:width$}"
-    };
-}
-
-/// defines a static struct of type `FormatterItemInfo` called `$NAME`
-///
-/// Used to format unsigned integer types with help of a function called `$function`
-/// `$byte_size` is the size of the type, `$print_width` is the maximum width in
-/// human-readable format. `$format_str` is one of OCT, HEX or DEC
-macro_rules! int_writer_unsigned {
-    ($NAME:ident, $byte_size:expr, $print_width:expr, $function:ident, $format_str:expr) => {
-        fn $function(p: u64) -> String {
-            format!($format_str, p, width = $print_width - 1)
-        }
-
-        pub static $NAME: FormatterItemInfo = FormatterItemInfo {
-            byte_size: $byte_size,
-            print_width: $print_width,
-            formatter: FormatWriter::IntWriter($function),
-        };
-    };
-}
-
-/// defines a static struct of type `FormatterItemInfo` called `$NAME`
-///
-/// Used to format signed integer types with help of a function called `$function`
-/// `$byte_size` is the size of the type, `$print_width` is the maximum width in
-/// human-readable format. `$format_str` should be DEC
-macro_rules! int_writer_signed {
-    ($NAME:ident, $byte_size:expr, $print_width:expr, $function:ident, $format_str:expr) => {
-        fn $function(p: u64) -> String {
-            let s = sign_extend(p, $byte_size);
-            format!($format_str, s, width = $print_width - 1)
-        }
-
-        pub static $NAME: FormatterItemInfo = FormatterItemInfo {
-            byte_size: $byte_size,
-            print_width: $print_width,
-            formatter: FormatWriter::IntWriter($function),
-        };
-    };
-}
-
-/// Extends a signed number in `item` of `item_bytes` bytes into a (signed) i64
-fn sign_extend(item: u64, item_bytes: usize) -> i64 {
-    let shift = 64 - item_bytes * 8;
-    (item << shift) as i64 >> shift
-}
-
-int_writer_unsigned!(FORMAT_ITEM_OCT8, 1, 4, format_item_oct8, OCT!()); // max: 377
-int_writer_unsigned!(FORMAT_ITEM_OCT16, 2, 7, format_item_oct16, OCT!()); // max: 177777
-int_writer_unsigned!(FORMAT_ITEM_OCT32, 4, 12, format_item_oct32, OCT!()); // max: 37777777777
-int_writer_unsigned!(FORMAT_ITEM_OCT64, 8, 23, format_item_oct64, OCT!()); // max: 1777777777777777777777
-
-int_writer_unsigned!(FORMAT_ITEM_HEX8, 1, 3, format_item_hex8, HEX!()); // max: ff
-int_writer_unsigned!(FORMAT_ITEM_HEX16, 2, 5, format_item_hex16, HEX!()); // max: ffff
-int_writer_unsigned!(FORMAT_ITEM_HEX32, 4, 9, format_item_hex32, HEX!()); // max: ffffffff
-int_writer_unsigned!(FORMAT_ITEM_HEX64, 8, 17, format_item_hex64, HEX!()); // max: ffffffffffffffff
-
-int_writer_unsigned!(FORMAT_ITEM_DEC8U, 1, 4, format_item_dec_u8, DEC!()); // max: 255
-int_writer_unsigned!(FORMAT_ITEM_DEC16U, 2, 6, format_item_dec_u16, DEC!()); // max: 65535
-int_writer_unsigned!(FORMAT_ITEM_DEC32U, 4, 11, format_item_dec_u32, DEC!()); // max: 4294967295
-int_writer_unsigned!(FORMAT_ITEM_DEC64U, 8, 21, format_item_dec_u64, DEC!()); // max: 18446744073709551615
-
-int_writer_signed!(FORMAT_ITEM_DEC8S, 1, 5, format_item_dec_s8, DEC!()); // max: -128
-int_writer_signed!(FORMAT_ITEM_DEC16S, 2, 7, format_item_dec_s16, DEC!()); // max: -32768
-int_writer_signed!(FORMAT_ITEM_DEC32S, 4, 12, format_item_dec_s32, DEC!()); // max: -2147483648
-int_writer_signed!(FORMAT_ITEM_DEC64S, 8, 21, format_item_dec_s64, DEC!()); // max: -9223372036854775808
-
-#[test]
-fn test_sign_extend() {
-    assert_eq!(
-        0xffff_ffff_ffff_ff80u64 as i64,
-        sign_extend(0x0000_0000_0000_0080, 1)
-    );
-    assert_eq!(
-        0xffff_ffff_ffff_8000u64 as i64,
-        sign_extend(0x0000_0000_0000_8000, 2)
-    );
-    assert_eq!(
-        0xffff_ffff_ff80_0000u64 as i64,
-        sign_extend(0x0000_0000_0080_0000, 3)
-    );
-    assert_eq!(
-        0xffff_ffff_8000_0000u64 as i64,
-        sign_extend(0x0000_0000_8000_0000, 4)
-    );
-    assert_eq!(
-        0xffff_ff80_0000_0000u64 as i64,
-        sign_extend(0x0000_0080_0000_0000, 5)
-    );
-    assert_eq!(
-        0xffff_8000_0000_0000u64 as i64,
-        sign_extend(0x0000_8000_0000_0000, 6)
-    );
-    assert_eq!(
-        0xff80_0000_0000_0000u64 as i64,
-        sign_extend(0x0080_0000_0000_0000, 7)
-    );
-    assert_eq!(
-        0x8000_0000_0000_0000u64 as i64,
-        sign_extend(0x8000_0000_0000_0000, 8)
-    );
-
-    assert_eq!(0x0000_0000_0000_007f, sign_extend(0x0000_0000_0000_007f, 1));
-    assert_eq!(0x0000_0000_0000_7fff, sign_extend(0x0000_0000_0000_7fff, 2));
-    assert_eq!(0x0000_0000_007f_ffff, sign_extend(0x0000_0000_007f_ffff, 3));
-    assert_eq!(0x0000_0000_7fff_ffff, sign_extend(0x0000_0000_7fff_ffff, 4));
-    assert_eq!(0x0000_007f_ffff_ffff, sign_extend(0x0000_007f_ffff_ffff, 5));
-    assert_eq!(0x0000_7fff_ffff_ffff, sign_extend(0x0000_7fff_ffff_ffff, 6));
-    assert_eq!(0x007f_ffff_ffff_ffff, sign_extend(0x007f_ffff_ffff_ffff, 7));
-    assert_eq!(0x7fff_ffff_ffff_ffff, sign_extend(0x7fff_ffff_ffff_ffff, 8));
-}
-
-#[test]
-fn test_format_item_oct() {
-    assert_eq!(" 000", format_item_oct8(0));
-    assert_eq!(" 377", format_item_oct8(0xff));
-    assert_eq!(" 000000", format_item_oct16(0));
-    assert_eq!(" 177777", format_item_oct16(0xffff));
-    assert_eq!(" 00000000000", format_item_oct32(0));
-    assert_eq!(" 37777777777", format_item_oct32(0xffff_ffff));
-    assert_eq!(" 0000000000000000000000", format_item_oct64(0));
-    assert_eq!(
-        " 1777777777777777777777",
-        format_item_oct64(0xffff_ffff_ffff_ffff)
-    );
-}
-
-#[test]
-fn test_format_item_hex() {
-    assert_eq!(" 00", format_item_hex8(0));
-    assert_eq!(" ff", format_item_hex8(0xff));
-    assert_eq!(" 0000", format_item_hex16(0));
-    assert_eq!(" ffff", format_item_hex16(0xffff));
-    assert_eq!(" 00000000", format_item_hex32(0));
-    assert_eq!(" ffffffff", format_item_hex32(0xffff_ffff));
-    assert_eq!(" 0000000000000000", format_item_hex64(0));
-    assert_eq!(
-        " ffffffffffffffff",
-        format_item_hex64(0xffff_ffff_ffff_ffff)
-    );
-}
-
-#[test]
-fn test_format_item_dec_u() {
-    assert_eq!("   0", format_item_dec_u8(0));
-    assert_eq!(" 255", format_item_dec_u8(0xff));
-    assert_eq!("     0", format_item_dec_u16(0));
-    assert_eq!(" 65535", format_item_dec_u16(0xffff));
-    assert_eq!("          0", format_item_dec_u32(0));
-    assert_eq!(" 4294967295", format_item_dec_u32(0xffff_ffff));
-    assert_eq!("                    0", format_item_dec_u64(0));
-    assert_eq!(
-        " 18446744073709551615",
-        format_item_dec_u64(0xffff_ffff_ffff_ffff)
-    );
-}
-
-#[test]
-fn test_format_item_dec_s() {
-    assert_eq!("    0", format_item_dec_s8(0));
-    assert_eq!("  127", format_item_dec_s8(0x7f));
-    assert_eq!(" -128", format_item_dec_s8(0x80));
-    assert_eq!("      0", format_item_dec_s16(0));
-    assert_eq!("  32767", format_item_dec_s16(0x7fff));
-    assert_eq!(" -32768", format_item_dec_s16(0x8000));
-    assert_eq!("           0", format_item_dec_s32(0));
-    assert_eq!("  2147483647", format_item_dec_s32(0x7fff_ffff));
-    assert_eq!(" -2147483648", format_item_dec_s32(0x8000_0000));
-    assert_eq!("                    0", format_item_dec_s64(0));
-    assert_eq!(
-        "  9223372036854775807",
-        format_item_dec_s64(0x7fff_ffff_ffff_ffff)
-    );
-    assert_eq!(
-        " -9223372036854775808",
-        format_item_dec_s64(0x8000_0000_0000_0000)
-    );
-}
-
-
- \ No newline at end of file diff --git a/src/uu_paste/paste.rs.html b/src/uu_paste/paste.rs.html deleted file mode 100644 index b9a5b4d2c..000000000 --- a/src/uu_paste/paste.rs.html +++ /dev/null @@ -1,310 +0,0 @@ -paste.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) delim
-
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{stdin, BufRead, BufReader, Read};
-use std::iter::repeat;
-use std::path::Path;
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Write lines consisting of the sequentially corresponding lines from each
-FILE, separated by TABs, to standard output.";
-
-mod options {
-    pub const DELIMITER: &str = "delimiters";
-    pub const SERIAL: &str = "serial";
-    pub const FILE: &str = "file";
-}
-
-// Wraps BufReader and stdin
-fn read_line<R: Read>(
-    reader: Option<&mut BufReader<R>>,
-    buf: &mut String,
-) -> std::io::Result<usize> {
-    match reader {
-        Some(reader) => reader.read_line(buf),
-        None => stdin().read_line(buf),
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let matches = uu_app().get_matches_from(args);
-
-    let serial = matches.is_present(options::SERIAL);
-    let delimiters = matches.value_of(options::DELIMITER).unwrap().to_owned();
-    let files = matches
-        .values_of(options::FILE)
-        .unwrap()
-        .map(|s| s.to_owned())
-        .collect();
-    paste(files, serial, delimiters)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::SERIAL)
-                .long(options::SERIAL)
-                .short('s')
-                .help("paste one file at a time instead of in parallel"),
-        )
-        .arg(
-            Arg::new(options::DELIMITER)
-                .long(options::DELIMITER)
-                .short('d')
-                .help("reuse characters from LIST instead of TABs")
-                .value_name("LIST")
-                .default_value("\t")
-                .hide_default_value(true),
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .value_name("FILE")
-                .multiple_occurrences(true)
-                .default_value("-"),
-        )
-}
-
-fn paste(filenames: Vec<String>, serial: bool, delimiters: String) -> UResult<()> {
-    let mut files = vec![];
-    for name in filenames {
-        let file = if name == "-" {
-            None
-        } else {
-            let path = Path::new(&name);
-            let r = File::open(path).map_err_context(String::new)?;
-            Some(BufReader::new(r))
-        };
-        files.push(file);
-    }
-
-    let delimiters: Vec<String> = unescape(delimiters)
-        .chars()
-        .map(|x| x.to_string())
-        .collect();
-    let mut delim_count = 0;
-
-    if serial {
-        for file in &mut files {
-            let mut output = String::new();
-            loop {
-                let mut line = String::new();
-                match read_line(file.as_mut(), &mut line) {
-                    Ok(0) => break,
-                    Ok(_) => {
-                        output.push_str(line.trim_end());
-                        output.push_str(&delimiters[delim_count % delimiters.len()]);
-                    }
-                    Err(e) => return Err(e.map_err_context(String::new)),
-                }
-                delim_count += 1;
-            }
-            println!("{}", &output[..output.len() - 1]);
-        }
-    } else {
-        let mut eof: Vec<bool> = repeat(false).take(files.len()).collect();
-        loop {
-            let mut output = String::new();
-            let mut eof_count = 0;
-            for (i, file) in files.iter_mut().enumerate() {
-                if eof[i] {
-                    eof_count += 1;
-                } else {
-                    let mut line = String::new();
-                    match read_line(file.as_mut(), &mut line) {
-                        Ok(0) => {
-                            eof[i] = true;
-                            eof_count += 1;
-                        }
-                        Ok(_) => output.push_str(line.trim_end()),
-                        Err(e) => return Err(e.map_err_context(String::new)),
-                    }
-                }
-                output.push_str(&delimiters[delim_count % delimiters.len()]);
-                delim_count += 1;
-            }
-            if files.len() == eof_count {
-                break;
-            }
-            println!("{}", &output[..output.len() - 1]);
-            delim_count = 0;
-        }
-    }
-    Ok(())
-}
-
-// Unescape all special characters
-// TODO: this will need work to conform to GNU implementation
-fn unescape(s: String) -> String {
-    s.replace("\\n", "\n")
-        .replace("\\t", "\t")
-        .replace("\\\\", "\\")
-        .replace('\\', "")
-}
-
-
- \ No newline at end of file diff --git a/src/uu_pathchk/pathchk.rs.html b/src/uu_pathchk/pathchk.rs.html deleted file mode 100644 index e585d2cea..000000000 --- a/src/uu_pathchk/pathchk.rs.html +++ /dev/null @@ -1,508 +0,0 @@ -pathchk.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-
#![allow(unused_must_use)] // because we of writeln!
-
-//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Inokentiy Babushkin <inokentiy.babushkin@googlemail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE file
-//  * that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) lstat
-use clap::{crate_version, App, Arg};
-use std::fs;
-use std::io::{ErrorKind, Write};
-use uucore::display::Quotable;
-use uucore::error::{set_exit_code, UResult, UUsageError};
-use uucore::InvalidEncodingHandling;
-
-// operating mode
-enum Mode {
-    Default, // use filesystem to determine information and limits
-    Basic,   // check basic compatibility with POSIX
-    Extra,   // check for leading dashes and empty names
-    Both,    // a combination of `Basic` and `Extra`
-}
-
-static ABOUT: &str = "Check whether file names are valid or portable";
-
-mod options {
-    pub const POSIX: &str = "posix";
-    pub const POSIX_SPECIAL: &str = "posix-special";
-    pub const PORTABILITY: &str = "portability";
-    pub const PATH: &str = "path";
-}
-
-// a few global constants as used in the GNU implementation
-const POSIX_PATH_MAX: usize = 256;
-const POSIX_NAME_MAX: usize = 14;
-
-fn usage() -> String {
-    format!("{0} [OPTION]... NAME...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    // set working mode
-    let is_posix = matches.values_of(options::POSIX).is_some();
-    let is_posix_special = matches.values_of(options::POSIX_SPECIAL).is_some();
-    let is_portability = matches.values_of(options::PORTABILITY).is_some();
-
-    let mode = if (is_posix && is_posix_special) || is_portability {
-        Mode::Both
-    } else if is_posix {
-        Mode::Basic
-    } else if is_posix_special {
-        Mode::Extra
-    } else {
-        Mode::Default
-    };
-
-    // take necessary actions
-    let paths = matches.values_of(options::PATH);
-    if paths.is_none() {
-        return Err(UUsageError::new(1, "missing operand"));
-    }
-
-    // free strings are path operands
-    // FIXME: TCS, seems inefficient and overly verbose (?)
-    let mut res = true;
-    for p in paths.unwrap() {
-        let mut path = Vec::new();
-        for path_segment in p.split('/') {
-            path.push(path_segment.to_string());
-        }
-        res &= check_path(&mode, &path);
-    }
-
-    // determine error code
-    if !res {
-        set_exit_code(1);
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::POSIX)
-                .short('p')
-                .help("check for most POSIX systems"),
-        )
-        .arg(
-            Arg::new(options::POSIX_SPECIAL)
-                .short('P')
-                .help(r#"check for empty names and leading "-""#),
-        )
-        .arg(
-            Arg::new(options::PORTABILITY)
-                .long(options::PORTABILITY)
-                .help("check for all POSIX systems (equivalent to -p -P)"),
-        )
-        .arg(
-            Arg::new(options::PATH)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-// check a path, given as a slice of it's components and an operating mode
-fn check_path(mode: &Mode, path: &[String]) -> bool {
-    match *mode {
-        Mode::Basic => check_basic(path),
-        Mode::Extra => check_default(path) && check_extra(path),
-        Mode::Both => check_basic(path) && check_extra(path),
-        _ => check_default(path),
-    }
-}
-
-// check a path in basic compatibility mode
-fn check_basic(path: &[String]) -> bool {
-    let joined_path = path.join("/");
-    let total_len = joined_path.len();
-    // path length
-    if total_len > POSIX_PATH_MAX {
-        writeln!(
-            &mut std::io::stderr(),
-            "limit {} exceeded by length {} of file name {}",
-            POSIX_PATH_MAX,
-            total_len,
-            joined_path
-        );
-        return false;
-    } else if total_len == 0 {
-        writeln!(&mut std::io::stderr(), "empty file name");
-        return false;
-    }
-    // components: character portability and length
-    for p in path {
-        let component_len = p.len();
-        if component_len > POSIX_NAME_MAX {
-            writeln!(
-                &mut std::io::stderr(),
-                "limit {} exceeded by length {} of file name component {}",
-                POSIX_NAME_MAX,
-                component_len,
-                p.quote()
-            );
-            return false;
-        }
-        if !check_portable_chars(p) {
-            return false;
-        }
-    }
-    // permission checks
-    check_searchable(&joined_path)
-}
-
-// check a path in extra compatibility mode
-fn check_extra(path: &[String]) -> bool {
-    // components: leading hyphens
-    for p in path {
-        if p.starts_with('-') {
-            writeln!(
-                &mut std::io::stderr(),
-                "leading hyphen in file name component {}",
-                p.quote()
-            );
-            return false;
-        }
-    }
-    // path length
-    if path.join("/").is_empty() {
-        writeln!(&mut std::io::stderr(), "empty file name");
-        return false;
-    }
-    true
-}
-
-// check a path in default mode (using the file system)
-fn check_default(path: &[String]) -> bool {
-    let joined_path = path.join("/");
-    let total_len = joined_path.len();
-    // path length
-    if total_len > libc::PATH_MAX as usize {
-        writeln!(
-            &mut std::io::stderr(),
-            "limit {} exceeded by length {} of file name {}",
-            libc::PATH_MAX,
-            total_len,
-            joined_path.quote()
-        );
-        return false;
-    }
-    // components: length
-    for p in path {
-        let component_len = p.len();
-        if component_len > libc::FILENAME_MAX as usize {
-            writeln!(
-                &mut std::io::stderr(),
-                "limit {} exceeded by length {} of file name component {}",
-                libc::FILENAME_MAX,
-                component_len,
-                p.quote()
-            );
-            return false;
-        }
-    }
-    // permission checks
-    check_searchable(&joined_path)
-}
-
-// check whether a path is or if other problems arise
-fn check_searchable(path: &str) -> bool {
-    // we use lstat, just like the original implementation
-    match fs::symlink_metadata(path) {
-        Ok(_) => true,
-        Err(e) => {
-            if e.kind() == ErrorKind::NotFound {
-                true
-            } else {
-                writeln!(&mut std::io::stderr(), "{}", e);
-                false
-            }
-        }
-    }
-}
-
-// check whether a path segment contains only valid (read: portable) characters
-fn check_portable_chars(path_segment: &str) -> bool {
-    const VALID_CHARS: &[u8] = b"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._-";
-    for (i, ch) in path_segment.as_bytes().iter().enumerate() {
-        if !VALID_CHARS.contains(ch) {
-            let invalid = path_segment[i..].chars().next().unwrap();
-            writeln!(
-                &mut std::io::stderr(),
-                "nonportable character '{}' in file name component {}",
-                invalid,
-                path_segment.quote()
-            );
-            return false;
-        }
-    }
-    true
-}
-
-
- \ No newline at end of file diff --git a/src/uu_pinky/pinky.rs.html b/src/uu_pinky/pinky.rs.html deleted file mode 100644 index 3d737e0b8..000000000 --- a/src/uu_pinky/pinky.rs.html +++ /dev/null @@ -1,764 +0,0 @@ -pinky.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) BUFSIZE gecos fullname, mesg iobuf
-
-use uucore::entries::{Locate, Passwd};
-use uucore::error::{FromIo, UResult};
-use uucore::libc::S_IWGRP;
-use uucore::utmpx::{self, time, Utmpx};
-
-use std::io::prelude::*;
-use std::io::BufReader;
-
-use std::fs::File;
-use std::os::unix::fs::MetadataExt;
-
-use clap::{crate_version, App, Arg};
-use std::path::PathBuf;
-use uucore::InvalidEncodingHandling;
-
-const BUFSIZE: usize = 1024;
-
-static ABOUT: &str = "pinky - lightweight finger";
-
-mod options {
-    pub const LONG_FORMAT: &str = "long_format";
-    pub const OMIT_HOME_DIR: &str = "omit_home_dir";
-    pub const OMIT_PROJECT_FILE: &str = "omit_project_file";
-    pub const OMIT_PLAN_FILE: &str = "omit_plan_file";
-    pub const SHORT_FORMAT: &str = "short_format";
-    pub const OMIT_HEADINGS: &str = "omit_headings";
-    pub const OMIT_NAME: &str = "omit_name";
-    pub const OMIT_NAME_HOST: &str = "omit_name_host";
-    pub const OMIT_NAME_HOST_TIME: &str = "omit_name_host_time";
-    pub const USER: &str = "user";
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [USER]...", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    format!(
-        "A lightweight 'finger' program;  print user information.\n\
-         The utmp file will be {}.",
-        utmpx::DEFAULT_FILE
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let usage = usage();
-    let after_help = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let users: Vec<String> = matches
-        .values_of(options::USER)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    // If true, display the hours:minutes since each user has touched
-    // the keyboard, or blank if within the last minute, or days followed
-    // by a 'd' if not within the last day.
-    let mut include_idle = true;
-
-    // If true, display a line at the top describing each field.
-    let include_heading = !matches.is_present(options::OMIT_HEADINGS);
-
-    // if true, display the user's full name from pw_gecos.
-    let mut include_fullname = true;
-
-    // if true, display the user's ~/.project file when doing long format.
-    let include_project = !matches.is_present(options::OMIT_PROJECT_FILE);
-
-    // if true, display the user's ~/.plan file when doing long format.
-    let include_plan = !matches.is_present(options::OMIT_PLAN_FILE);
-
-    // if true, display the user's home directory and shell
-    // when doing long format.
-    let include_home_and_shell = !matches.is_present(options::OMIT_HOME_DIR);
-
-    // if true, use the "short" output format.
-    let do_short_format = !matches.is_present(options::LONG_FORMAT);
-
-    /* if true, display the ut_host field. */
-    let mut include_where = true;
-
-    if matches.is_present(options::OMIT_NAME) {
-        include_fullname = false;
-    }
-    if matches.is_present(options::OMIT_NAME_HOST) {
-        include_fullname = false;
-        include_where = false;
-    }
-    if matches.is_present(options::OMIT_NAME_HOST_TIME) {
-        include_fullname = false;
-        include_idle = false;
-        include_where = false;
-    }
-
-    let pk = Pinky {
-        include_idle,
-        include_heading,
-        include_fullname,
-        include_project,
-        include_plan,
-        include_home_and_shell,
-        include_where,
-        names: users,
-    };
-
-    if do_short_format {
-        match pk.short_pinky() {
-            Ok(_) => Ok(()),
-            Err(e) => Err(e.map_err_context(String::new)),
-        }
-    } else {
-        pk.long_pinky();
-        Ok(())
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::LONG_FORMAT)
-                .short('l')
-                .requires(options::USER)
-                .help("produce long format output for the specified USERs"),
-        )
-        .arg(
-            Arg::new(options::OMIT_HOME_DIR)
-                .short('b')
-                .help("omit the user's home directory and shell in long format"),
-        )
-        .arg(
-            Arg::new(options::OMIT_PROJECT_FILE)
-                .short('h')
-                .help("omit the user's project file in long format"),
-        )
-        .arg(
-            Arg::new(options::OMIT_PLAN_FILE)
-                .short('p')
-                .help("omit the user's plan file in long format"),
-        )
-        .arg(
-            Arg::new(options::SHORT_FORMAT)
-                .short('s')
-                .help("do short format output, this is the default"),
-        )
-        .arg(
-            Arg::new(options::OMIT_HEADINGS)
-                .short('f')
-                .help("omit the line of column headings in short format"),
-        )
-        .arg(
-            Arg::new(options::OMIT_NAME)
-                .short('w')
-                .help("omit the user's full name in short format"),
-        )
-        .arg(
-            Arg::new(options::OMIT_NAME_HOST)
-                .short('i')
-                .help("omit the user's full name and remote host in short format"),
-        )
-        .arg(
-            Arg::new(options::OMIT_NAME_HOST_TIME)
-                .short('q')
-                .help("omit the user's full name, remote host and idle time in short format"),
-        )
-        .arg(
-            Arg::new(options::USER)
-                .takes_value(true)
-                .multiple_occurrences(true),
-        )
-}
-
-struct Pinky {
-    include_idle: bool,
-    include_heading: bool,
-    include_fullname: bool,
-    include_project: bool,
-    include_plan: bool,
-    include_where: bool,
-    include_home_and_shell: bool,
-    names: Vec<String>,
-}
-
-pub trait Capitalize {
-    fn capitalize(&self) -> String;
-}
-
-impl Capitalize for str {
-    fn capitalize(&self) -> String {
-        self.char_indices()
-            .fold(String::with_capacity(self.len()), |mut acc, x| {
-                if x.0 != 0 {
-                    acc.push(x.1)
-                } else {
-                    acc.push(x.1.to_ascii_uppercase())
-                }
-                acc
-            })
-    }
-}
-
-fn idle_string(when: i64) -> String {
-    thread_local! {
-        static NOW: time::Tm = time::now()
-    }
-    NOW.with(|n| {
-        let duration = n.to_timespec().sec - when;
-        if duration < 60 {
-            // less than 1min
-            "     ".to_owned()
-        } else if duration < 24 * 3600 {
-            // less than 1day
-            let hours = duration / (60 * 60);
-            let minutes = (duration % (60 * 60)) / 60;
-            format!("{:02}:{:02}", hours, minutes)
-        } else {
-            // more than 1day
-            let days = duration / (24 * 3600);
-            format!("{}d", days)
-        }
-    })
-}
-
-fn time_string(ut: &Utmpx) -> String {
-    time::strftime("%b %e %H:%M", &ut.login_time()).unwrap() // LC_ALL=C
-}
-
-impl Pinky {
-    fn print_entry(&self, ut: &Utmpx) -> std::io::Result<()> {
-        let mut pts_path = PathBuf::from("/dev");
-        pts_path.push(ut.tty_device().as_str());
-
-        let mesg;
-        let last_change;
-        match pts_path.metadata() {
-            Ok(meta) => {
-                mesg = if meta.mode() & (S_IWGRP as u32) != 0 {
-                    ' '
-                } else {
-                    '*'
-                };
-                last_change = meta.atime();
-            }
-            _ => {
-                mesg = '?';
-                last_change = 0;
-            }
-        }
-
-        print!("{1:<8.0$}", utmpx::UT_NAMESIZE, ut.user());
-
-        if self.include_fullname {
-            if let Ok(pw) = Passwd::locate(ut.user().as_ref()) {
-                let mut gecos = pw.user_info;
-                if let Some(n) = gecos.find(',') {
-                    gecos.truncate(n + 1);
-                }
-                print!(" {:<19.19}", gecos.replace("&", &pw.name.capitalize()));
-            } else {
-                print!(" {:19}", "        ???");
-            }
-        }
-
-        print!(" {}{:<8.*}", mesg, utmpx::UT_LINESIZE, ut.tty_device());
-
-        if self.include_idle {
-            if last_change != 0 {
-                print!(" {:<6}", idle_string(last_change));
-            } else {
-                print!(" {:<6}", "?????");
-            }
-        }
-
-        print!(" {}", time_string(ut));
-
-        let mut s = ut.host();
-        if self.include_where && !s.is_empty() {
-            s = ut.canon_host()?;
-            print!(" {}", s);
-        }
-
-        println!();
-        Ok(())
-    }
-
-    fn print_heading(&self) {
-        print!("{:<8}", "Login");
-        if self.include_fullname {
-            print!(" {:<19}", "Name");
-        }
-        print!(" {:<9}", " TTY");
-        if self.include_idle {
-            print!(" {:<6}", "Idle");
-        }
-        print!(" {:<16}", "When");
-        if self.include_where {
-            print!(" Where");
-        }
-        println!();
-    }
-
-    fn short_pinky(&self) -> std::io::Result<()> {
-        if self.include_heading {
-            self.print_heading();
-        }
-        for ut in Utmpx::iter_all_records() {
-            if ut.is_user_process() {
-                if self.names.is_empty() {
-                    self.print_entry(&ut)?
-                } else if self.names.iter().any(|n| n.as_str() == ut.user()) {
-                    self.print_entry(&ut)?;
-                }
-            }
-        }
-        Ok(())
-    }
-
-    fn long_pinky(&self) {
-        for u in &self.names {
-            print!("Login name: {:<28}In real life: ", u);
-            if let Ok(pw) = Passwd::locate(u.as_str()) {
-                println!(" {}", pw.user_info.replace("&", &pw.name.capitalize()));
-                if self.include_home_and_shell {
-                    print!("Directory: {:<29}", pw.user_dir);
-                    println!("Shell:  {}", pw.user_shell);
-                }
-                if self.include_project {
-                    let mut p = PathBuf::from(&pw.user_dir);
-                    p.push(".project");
-                    if let Ok(f) = File::open(p) {
-                        print!("Project: ");
-                        read_to_console(f);
-                    }
-                }
-                if self.include_plan {
-                    let mut p = PathBuf::from(&pw.user_dir);
-                    p.push(".plan");
-                    if let Ok(f) = File::open(p) {
-                        println!("Plan:");
-                        read_to_console(f);
-                    }
-                }
-                println!();
-            } else {
-                println!(" ???");
-            }
-        }
-    }
-}
-
-fn read_to_console<F: Read>(f: F) {
-    let mut reader = BufReader::new(f);
-    let mut iobuf = [0_u8; BUFSIZE];
-    while let Ok(n) = reader.read(&mut iobuf) {
-        if n == 0 {
-            break;
-        }
-        let s = String::from_utf8_lossy(&iobuf);
-        print!("{}", s);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_pr/pr.rs.html b/src/uu_pr/pr.rs.html deleted file mode 100644 index 7375e31d4..000000000 --- a/src/uu_pr/pr.rs.html +++ /dev/null @@ -1,2606 +0,0 @@ -pr.rs - source -
   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-  11
-  12
-  13
-  14
-  15
-  16
-  17
-  18
-  19
-  20
-  21
-  22
-  23
-  24
-  25
-  26
-  27
-  28
-  29
-  30
-  31
-  32
-  33
-  34
-  35
-  36
-  37
-  38
-  39
-  40
-  41
-  42
-  43
-  44
-  45
-  46
-  47
-  48
-  49
-  50
-  51
-  52
-  53
-  54
-  55
-  56
-  57
-  58
-  59
-  60
-  61
-  62
-  63
-  64
-  65
-  66
-  67
-  68
-  69
-  70
-  71
-  72
-  73
-  74
-  75
-  76
-  77
-  78
-  79
-  80
-  81
-  82
-  83
-  84
-  85
-  86
-  87
-  88
-  89
-  90
-  91
-  92
-  93
-  94
-  95
-  96
-  97
-  98
-  99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 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
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-1129
-1130
-1131
-1132
-1133
-1134
-1135
-1136
-1137
-1138
-1139
-1140
-1141
-1142
-1143
-1144
-1145
-1146
-1147
-1148
-1149
-1150
-1151
-1152
-1153
-1154
-1155
-1156
-1157
-1158
-1159
-1160
-1161
-1162
-1163
-1164
-1165
-1166
-1167
-1168
-1169
-1170
-1171
-1172
-1173
-1174
-1175
-1176
-1177
-1178
-1179
-1180
-1181
-1182
-1183
-1184
-1185
-1186
-1187
-1188
-1189
-1190
-1191
-1192
-1193
-1194
-1195
-1196
-1197
-1198
-1199
-1200
-1201
-1202
-1203
-1204
-1205
-1206
-1207
-1208
-1209
-1210
-1211
-1212
-1213
-1214
-1215
-1216
-1217
-1218
-1219
-1220
-1221
-1222
-1223
-1224
-1225
-1226
-1227
-1228
-1229
-1230
-1231
-1232
-1233
-1234
-1235
-1236
-1237
-1238
-1239
-1240
-1241
-1242
-1243
-1244
-1245
-1246
-1247
-1248
-1249
-1250
-1251
-1252
-1253
-1254
-1255
-1256
-1257
-1258
-1259
-1260
-1261
-1262
-1263
-1264
-1265
-1266
-1267
-1268
-1269
-1270
-1271
-1272
-1273
-1274
-1275
-1276
-1277
-1278
-1279
-1280
-1281
-1282
-1283
-1284
-1285
-1286
-1287
-1288
-1289
-1290
-1291
-1292
-1293
-1294
-1295
-1296
-1297
-1298
-1299
-1300
-1301
-
#![crate_name = "uu_pr"]
-
-// This file is part of the uutils coreutils package.
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-//
-
-// spell-checker:ignore (ToDO) adFfmprt, kmerge
-
-#[macro_use]
-extern crate quick_error;
-
-use chrono::offset::Local;
-use chrono::DateTime;
-use clap::App;
-use getopts::Matches;
-use getopts::{HasArg, Occur};
-use itertools::Itertools;
-use quick_error::ResultExt;
-use regex::Regex;
-use std::convert::From;
-use std::fs::{metadata, File};
-use std::io::{stdin, stdout, BufRead, BufReader, Lines, Read, Write};
-#[cfg(unix)]
-use std::os::unix::fs::FileTypeExt;
-
-use uucore::display::Quotable;
-use uucore::error::UResult;
-
-type IOError = std::io::Error;
-
-const NAME: &str = "pr";
-const VERSION: &str = env!("CARGO_PKG_VERSION");
-const TAB: char = '\t';
-const LINES_PER_PAGE: usize = 66;
-const LINES_PER_PAGE_FOR_FORM_FEED: usize = 63;
-const HEADER_LINES_PER_PAGE: usize = 5;
-const TRAILER_LINES_PER_PAGE: usize = 5;
-const FILE_STDIN: &str = "-";
-const READ_BUFFER_SIZE: usize = 1024 * 64;
-const DEFAULT_COLUMN_WIDTH: usize = 72;
-const DEFAULT_COLUMN_WIDTH_WITH_S_OPTION: usize = 512;
-const DEFAULT_COLUMN_SEPARATOR: &char = &TAB;
-const FF: u8 = 0x0C_u8;
-
-mod options {
-    pub const STRING_HEADER_OPTION: &str = "h";
-    pub const DOUBLE_SPACE_OPTION: &str = "d";
-    pub const NUMBERING_MODE_OPTION: &str = "n";
-    pub const FIRST_LINE_NUMBER_OPTION: &str = "N";
-    pub const PAGE_RANGE_OPTION: &str = "pages";
-    pub const NO_HEADER_TRAILER_OPTION: &str = "t";
-    pub const PAGE_LENGTH_OPTION: &str = "l";
-    pub const SUPPRESS_PRINTING_ERROR: &str = "r";
-    pub const FORM_FEED_OPTION: &str = "F";
-    pub const FORM_FEED_OPTION_SMALL: &str = "f";
-    pub const COLUMN_WIDTH_OPTION: &str = "w";
-    pub const PAGE_WIDTH_OPTION: &str = "W";
-    pub const ACROSS_OPTION: &str = "a";
-    pub const COLUMN_OPTION: &str = "column";
-    pub const COLUMN_CHAR_SEPARATOR_OPTION: &str = "s";
-    pub const COLUMN_STRING_SEPARATOR_OPTION: &str = "S";
-    pub const MERGE_FILES_PRINT: &str = "m";
-    pub const OFFSET_SPACES_OPTION: &str = "o";
-    pub const JOIN_LINES_OPTION: &str = "J";
-}
-
-struct OutputOptions {
-    /// Line numbering mode
-    number: Option<NumberingMode>,
-    header: String,
-    double_space: bool,
-    line_separator: String,
-    content_line_separator: String,
-    last_modified_time: String,
-    start_page: usize,
-    end_page: Option<usize>,
-    display_header_and_trailer: bool,
-    content_lines_per_page: usize,
-    page_separator_char: String,
-    column_mode_options: Option<ColumnModeOptions>,
-    merge_files_print: Option<usize>,
-    offset_spaces: String,
-    form_feed_used: bool,
-    join_lines: bool,
-    col_sep_for_printing: String,
-    line_width: Option<usize>,
-}
-
-struct FileLine {
-    file_id: usize,
-    line_number: usize,
-    page_number: usize,
-    group_key: usize,
-    line_content: Result<String, IOError>,
-    form_feeds_after: usize,
-}
-
-struct ColumnModeOptions {
-    width: usize,
-    columns: usize,
-    column_separator: String,
-    across_mode: bool,
-}
-
-/// Line numbering mode
-struct NumberingMode {
-    width: usize,
-    separator: String,
-    first_number: usize,
-}
-
-impl Default for NumberingMode {
-    fn default() -> NumberingMode {
-        NumberingMode {
-            width: 5,
-            separator: TAB.to_string(),
-            first_number: 1,
-        }
-    }
-}
-
-impl Default for FileLine {
-    fn default() -> FileLine {
-        FileLine {
-            file_id: 0,
-            line_number: 0,
-            page_number: 0,
-            group_key: 0,
-            line_content: Ok(String::new()),
-            form_feeds_after: 0,
-        }
-    }
-}
-
-impl From<IOError> for PrError {
-    fn from(err: IOError) -> Self {
-        PrError::EncounteredErrors(err.to_string())
-    }
-}
-
-quick_error! {
-    #[derive(Debug)]
-    enum PrError {
-        Input(err: IOError, path: String) {
-            context(path: &'a str, err: IOError) -> (err, path.to_owned())
-            display("pr: Reading from input {0} gave error", path)
-            source(err)
-        }
-
-        UnknownFiletype(path: String) {
-            display("pr: {0}: unknown filetype", path)
-        }
-
-        EncounteredErrors(msg: String) {
-            display("pr: {0}", msg)
-        }
-
-        IsDirectory(path: String) {
-            display("pr: {0}: Is a directory", path)
-        }
-
-        IsSocket(path: String) {
-            display("pr: cannot open {}, Operation not supported on socket", path)
-        }
-
-        NotExists(path: String) {
-            display("pr: cannot open {}, No such file or directory", path)
-        }
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(uucore::InvalidEncodingHandling::Ignore)
-        .accept_any();
-    let mut opts = getopts::Options::new();
-
-    opts.opt(
-        "",
-        options::PAGE_RANGE_OPTION,
-        "Begin and stop printing with page FIRST_PAGE[:LAST_PAGE]",
-        "FIRST_PAGE[:LAST_PAGE]",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::STRING_HEADER_OPTION,
-        "header",
-        "Use the string header to replace the file name \
-         in the header line.",
-        "STRING",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::DOUBLE_SPACE_OPTION,
-        "double-space",
-        "Produce output that is double spaced. An extra <newline> character is output following every <newline>
-           found in the input.",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::NUMBERING_MODE_OPTION,
-        "number-lines",
-        "Provide width digit line numbering.  The default for width, if not specified, is 5.  The number occupies
-           the first width column positions of each text column or each line of -m output.  If char (any non-digit
-           character) is given, it is appended to the line number to separate it from whatever follows.  The default
-           for char is a <tab>.  Line numbers longer than width columns are truncated.",
-        "[char][width]",
-        HasArg::Maybe,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::FIRST_LINE_NUMBER_OPTION,
-        "first-line-number",
-        "start counting with NUMBER at 1st line of first page printed",
-        "NUMBER",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::NO_HEADER_TRAILER_OPTION,
-        "omit-header",
-        "Write neither the five-line identifying header nor the five-line trailer usually supplied for  each  page.  Quit
-              writing after the last line of each file without spacing to the end of the page.",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::PAGE_LENGTH_OPTION,
-        "length",
-        "Override the 66-line default (default number of lines of text 56, and with -F 63) and reset the page length to lines.  If lines is not greater than the sum  of  both
-              the  header  and trailer depths (in lines), the pr utility shall suppress both the header and trailer, as if the
-              -t option were in effect. ",
-        "lines",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::SUPPRESS_PRINTING_ERROR,
-        "no-file-warnings",
-        "omit warning when a file cannot be opened",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::FORM_FEED_OPTION,
-        "form-feed",
-        "Use a <form-feed> for new pages, instead of the default behavior that uses a sequence of <newline>s.",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-    opts.opt(
-        options::FORM_FEED_OPTION_SMALL,
-        "form-feed",
-        "Same as -F but pause before beginning the first page if standard output is a
-           terminal.",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        "",
-        options::COLUMN_OPTION,
-        "Produce multi-column output that is arranged in column columns (the default shall be 1) and is written down each
-              column  in  the order in which the text is received from the input file. This option should not be used with -m.
-              The options -e and -i shall be assumed for multiple text-column output.  Whether or not text columns are produced
-              with identical vertical lengths is unspecified, but a text column shall never exceed the length of the
-              page (see the -l option). When used with -t, use the minimum number of lines to write the output.",
-        "[column]",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::COLUMN_WIDTH_OPTION,
-        "width",
-        "Set the width of the line to width column positions for multiple text-column output only. If the -w option is
-              not specified and the -s option is not specified, the default width shall be 72. If the -w option is not specified
-              and the -s option is specified, the default width shall be 512.",
-        "[width]",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::PAGE_WIDTH_OPTION,
-        "page-width",
-        "set page width to PAGE_WIDTH (72) characters always,
-        truncate lines, except -J option is set, no interference
-        with -S or -s",
-        "[width]",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::ACROSS_OPTION,
-        "across",
-        "Modify the effect of the - column option so that the columns are filled across the page in a  round-robin  order
-              (for example, when column is 2, the first input line heads column 1, the second heads column 2, the third is the
-              second line in column 1, and so on).",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::COLUMN_CHAR_SEPARATOR_OPTION,
-        "separator",
-        "Separate text columns by the single character char instead of by the appropriate number of <space>s
-           (default for char is the <tab> character).",
-        "char",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::COLUMN_STRING_SEPARATOR_OPTION,
-        "sep-string",
-        "separate columns by STRING,
-        without -S: Default separator <TAB> with -J and <space>
-        otherwise (same as -S\" \"), no effect on column options",
-        "string",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::MERGE_FILES_PRINT,
-        "merge",
-        "Merge files. Standard output shall be formatted so the pr utility writes one line from each file specified by  a
-              file  operand, side by side into text columns of equal fixed widths, in terms of the number of column positions.
-              Implementations shall support merging of at least nine file operands.",
-        "",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::OFFSET_SPACES_OPTION,
-        "indent",
-        "Each  line of output shall be preceded by offset <space>s. If the -o option is not specified, the default offset
-              shall be zero. The space taken is in addition to the output line width (see the -w option below).",
-        "offset",
-        HasArg::Yes,
-        Occur::Optional,
-    );
-
-    opts.opt(
-        options::JOIN_LINES_OPTION,
-        "join-lines",
-        "merge full lines, turns off -W line truncation, no column
-    alignment, --sep-string[=STRING] sets separators",
-        "offset",
-        HasArg::No,
-        Occur::Optional,
-    );
-
-    opts.optflag("", "help", "display this help and exit");
-    opts.optflag("V", "version", "output version information and exit");
-
-    let opt_args = recreate_arguments(&args);
-
-    let matches = match opts.parse(&opt_args[1..]) {
-        Ok(m) => m,
-        Err(e) => panic!("Invalid options\n{}", e),
-    };
-
-    if matches.opt_present("version") {
-        println!("{} {}", NAME, VERSION);
-        return Ok(());
-    }
-
-    let mut files = matches.free.clone();
-    if files.is_empty() {
-        files.insert(0, FILE_STDIN.to_owned());
-    }
-
-    if matches.opt_present("help") {
-        return print_usage(&mut opts, &matches);
-    }
-
-    let file_groups: Vec<_> = if matches.opt_present(options::MERGE_FILES_PRINT) {
-        vec![files]
-    } else {
-        files.into_iter().map(|i| vec![i]).collect()
-    };
-
-    for file_group in file_groups {
-        let result_options = build_options(&matches, &file_group, args.join(" "));
-        let options = match result_options {
-            Ok(options) => options,
-            Err(err) => {
-                print_error(&matches, err);
-                return Err(1.into());
-            }
-        };
-
-        let cmd_result = if let Ok(group) = file_group.iter().exactly_one() {
-            pr(group, &options)
-        } else {
-            mpr(&file_group, &options)
-        };
-
-        let status = match cmd_result {
-            Err(error) => {
-                print_error(&matches, error);
-                1
-            }
-            _ => 0,
-        };
-        if status != 0 {
-            return Err(status.into());
-        }
-    }
-    Ok(())
-}
-
-/// Returns re-written arguments which are passed to the program.
-/// Removes -column and +page option as getopts cannot parse things like -3 etc
-/// # Arguments
-/// * `args` - Command line arguments
-fn recreate_arguments(args: &[String]) -> Vec<String> {
-    let column_page_option = Regex::new(r"^[-+]\d+.*").unwrap();
-    let num_regex = Regex::new(r"(.\d+)|(\d+)|^[^-]$").unwrap();
-    //let a_file: Regex = Regex::new(r"^[^-+].*").unwrap();
-    let n_regex = Regex::new(r"^-n\s*$").unwrap();
-    let mut arguments = args.to_owned();
-    let num_option = args.iter().find_position(|x| n_regex.is_match(x.trim()));
-    if let Some((pos, _value)) = num_option {
-        if let Some(num_val_opt) = args.get(pos + 1) {
-            if !num_regex.is_match(num_val_opt) {
-                let could_be_file = arguments.remove(pos + 1);
-                arguments.insert(pos + 1, format!("{}", NumberingMode::default().width));
-                arguments.insert(pos + 2, could_be_file);
-            }
-        }
-    }
-
-    arguments
-        .into_iter()
-        .filter(|i| !column_page_option.is_match(i))
-        .collect()
-}
-
-fn print_error(matches: &Matches, err: PrError) {
-    if !matches.opt_present(options::SUPPRESS_PRINTING_ERROR) {
-        eprintln!("{}", err);
-    }
-}
-
-fn print_usage(opts: &mut getopts::Options, matches: &Matches) -> UResult<()> {
-    println!("{} {} -- print files", NAME, VERSION);
-    println!();
-    println!(
-        "Usage: {} [+page] [-column] [-adFfmprt] [[-e] [char] [gap]]
-        [-L locale] [-h header] [[-i] [char] [gap]]
-        [-l lines] [-o offset] [[-s] [char]] [[-n] [char]
-        [width]] [-w width] [-] [file ...].",
-        NAME
-    );
-    println!();
-    let usage: &str = "The pr utility is a printing and pagination filter
-     for text files.  When multiple input files are specified,
-     each is read, formatted, and written to standard
-     output.  By default, the input is separated
-     into 66-line pages, each with
-
-     o   A 5-line header with the page number, date,
-         time, and the pathname of the file.
-
-     o   A 5-line trailer consisting of blank lines.
-
-     If standard output is associated with a terminal,
-     diagnostic messages are suppressed until the pr
-     utility has completed processing.
-
-     When multiple column output is specified, text columns
-     are of equal width.  By default text columns
-     are separated by at least one <blank>.  Input lines
-     that do not fit into a text column are truncated.
-     Lines are not truncated under single column output.";
-    println!("{}", opts.usage(usage));
-    println!("    +page \t\tBegin output at page number page of the formatted input.");
-    println!(
-        "    -column \t\tProduce multi-column output. Refer --{}",
-        options::COLUMN_OPTION
-    );
-    if matches.free.is_empty() {
-        return Err(1.into());
-    }
-    Ok(())
-}
-
-fn parse_usize(matches: &Matches, opt: &str) -> Option<Result<usize, PrError>> {
-    let from_parse_error_to_pr_error = |value_to_parse: (String, String)| {
-        let i = value_to_parse.0;
-        let option = value_to_parse.1;
-        i.parse().map_err(|_e| {
-            PrError::EncounteredErrors(format!("invalid {} argument {}", option, i.quote()))
-        })
-    };
-    matches
-        .opt_str(opt)
-        .map(|i| (i, format!("-{}", opt)))
-        .map(from_parse_error_to_pr_error)
-}
-
-fn build_options(
-    matches: &Matches,
-    paths: &[String],
-    free_args: String,
-) -> Result<OutputOptions, PrError> {
-    let form_feed_used = matches.opt_present(options::FORM_FEED_OPTION)
-        || matches.opt_present(options::FORM_FEED_OPTION_SMALL);
-
-    let is_merge_mode = matches.opt_present(options::MERGE_FILES_PRINT);
-
-    if is_merge_mode && matches.opt_present(options::COLUMN_OPTION) {
-        let err_msg = String::from("cannot specify number of columns when printing in parallel");
-        return Err(PrError::EncounteredErrors(err_msg));
-    }
-
-    if is_merge_mode && matches.opt_present(options::ACROSS_OPTION) {
-        let err_msg = String::from("cannot specify both printing across and printing in parallel");
-        return Err(PrError::EncounteredErrors(err_msg));
-    }
-
-    let merge_files_print = if matches.opt_present(options::MERGE_FILES_PRINT) {
-        Some(paths.len())
-    } else {
-        None
-    };
-
-    let header = matches.opt_str(options::STRING_HEADER_OPTION).unwrap_or(
-        if is_merge_mode || paths[0] == FILE_STDIN {
-            String::new()
-        } else {
-            paths[0].to_string()
-        },
-    );
-
-    let default_first_number = NumberingMode::default().first_number;
-    let first_number = parse_usize(matches, options::FIRST_LINE_NUMBER_OPTION)
-        .unwrap_or(Ok(default_first_number))?;
-
-    let number = matches
-        .opt_str(options::NUMBERING_MODE_OPTION)
-        .map(|i| {
-            let parse_result = i.parse::<usize>();
-
-            let separator = if parse_result.is_err() {
-                i[0..1].to_string()
-            } else {
-                NumberingMode::default().separator
-            };
-
-            let width = match parse_result {
-                Ok(res) => res,
-                Err(_) => i[1..]
-                    .parse::<usize>()
-                    .unwrap_or(NumberingMode::default().width),
-            };
-
-            NumberingMode {
-                width,
-                separator,
-                first_number,
-            }
-        })
-        .or_else(|| {
-            if matches.opt_present(options::NUMBERING_MODE_OPTION) {
-                Some(NumberingMode::default())
-            } else {
-                None
-            }
-        });
-
-    let double_space = matches.opt_present(options::DOUBLE_SPACE_OPTION);
-
-    let content_line_separator = if double_space {
-        "\n".repeat(2)
-    } else {
-        "\n".to_string()
-    };
-
-    let line_separator = "\n".to_string();
-
-    let last_modified_time = if is_merge_mode || paths[0].eq(FILE_STDIN) {
-        let date_time = Local::now();
-        date_time.format("%b %d %H:%M %Y").to_string()
-    } else {
-        file_last_modified_time(paths.get(0).unwrap())
-    };
-
-    // +page option is less priority than --pages
-    let page_plus_re = Regex::new(r"\s*\+(\d+:*\d*)\s*").unwrap();
-    let start_page_in_plus_option = match page_plus_re.captures(&free_args).map(|i| {
-        let unparsed_num = i.get(1).unwrap().as_str().trim();
-        let x: Vec<_> = unparsed_num.split(':').collect();
-        x[0].to_string().parse::<usize>().map_err(|_e| {
-            PrError::EncounteredErrors(format!("invalid {} argument {}", "+", unparsed_num.quote()))
-        })
-    }) {
-        Some(res) => res?,
-        None => 1,
-    };
-
-    let end_page_in_plus_option = match page_plus_re
-        .captures(&free_args)
-        .map(|i| i.get(1).unwrap().as_str().trim())
-        .filter(|i| i.contains(':'))
-        .map(|unparsed_num| {
-            let x: Vec<_> = unparsed_num.split(':').collect();
-            x[1].to_string().parse::<usize>().map_err(|_e| {
-                PrError::EncounteredErrors(format!(
-                    "invalid {} argument {}",
-                    "+",
-                    unparsed_num.quote()
-                ))
-            })
-        }) {
-        Some(res) => Some(res?),
-        None => None,
-    };
-
-    let invalid_pages_map = |i: String| {
-        let unparsed_value = matches.opt_str(options::PAGE_RANGE_OPTION).unwrap();
-        i.parse::<usize>().map_err(|_e| {
-            PrError::EncounteredErrors(format!(
-                "invalid --pages argument {}",
-                unparsed_value.quote()
-            ))
-        })
-    };
-
-    let start_page = match matches
-        .opt_str(options::PAGE_RANGE_OPTION)
-        .map(|i| {
-            let x: Vec<_> = i.split(':').collect();
-            x[0].to_string()
-        })
-        .map(invalid_pages_map)
-    {
-        Some(res) => res?,
-        None => start_page_in_plus_option,
-    };
-
-    let end_page = match matches
-        .opt_str(options::PAGE_RANGE_OPTION)
-        .filter(|i| i.contains(':'))
-        .map(|i| {
-            let x: Vec<_> = i.split(':').collect();
-            x[1].to_string()
-        })
-        .map(invalid_pages_map)
-    {
-        Some(res) => Some(res?),
-        None => end_page_in_plus_option,
-    };
-
-    if let Some(end_page) = end_page {
-        if start_page > end_page {
-            return Err(PrError::EncounteredErrors(format!(
-                "invalid --pages argument '{}:{}'",
-                start_page, end_page
-            )));
-        }
-    }
-
-    let default_lines_per_page = if form_feed_used {
-        LINES_PER_PAGE_FOR_FORM_FEED
-    } else {
-        LINES_PER_PAGE
-    };
-
-    let page_length =
-        parse_usize(matches, options::PAGE_LENGTH_OPTION).unwrap_or(Ok(default_lines_per_page))?;
-
-    let page_length_le_ht = page_length < (HEADER_LINES_PER_PAGE + TRAILER_LINES_PER_PAGE);
-
-    let display_header_and_trailer =
-        !(page_length_le_ht) && !matches.opt_present(options::NO_HEADER_TRAILER_OPTION);
-
-    let content_lines_per_page = if page_length_le_ht {
-        page_length
-    } else {
-        page_length - (HEADER_LINES_PER_PAGE + TRAILER_LINES_PER_PAGE)
-    };
-
-    let page_separator_char = if matches.opt_present(options::FORM_FEED_OPTION) {
-        let bytes = vec![FF];
-        String::from_utf8(bytes).unwrap()
-    } else {
-        "\n".to_string()
-    };
-
-    let across_mode = matches.opt_present(options::ACROSS_OPTION);
-
-    let column_separator = match matches.opt_str(options::COLUMN_STRING_SEPARATOR_OPTION) {
-        Some(x) => Some(x),
-        None => matches.opt_str(options::COLUMN_CHAR_SEPARATOR_OPTION),
-    }
-    .unwrap_or_else(|| DEFAULT_COLUMN_SEPARATOR.to_string());
-
-    let default_column_width = if matches.opt_present(options::COLUMN_WIDTH_OPTION)
-        && matches.opt_present(options::COLUMN_CHAR_SEPARATOR_OPTION)
-    {
-        DEFAULT_COLUMN_WIDTH_WITH_S_OPTION
-    } else {
-        DEFAULT_COLUMN_WIDTH
-    };
-
-    let column_width =
-        parse_usize(matches, options::COLUMN_WIDTH_OPTION).unwrap_or(Ok(default_column_width))?;
-
-    let page_width = if matches.opt_present(options::JOIN_LINES_OPTION) {
-        None
-    } else {
-        match parse_usize(matches, options::PAGE_WIDTH_OPTION) {
-            Some(res) => Some(res?),
-            None => None,
-        }
-    };
-
-    let re_col = Regex::new(r"\s*-(\d+)\s*").unwrap();
-
-    let start_column_option = match re_col.captures(&free_args).map(|i| {
-        let unparsed_num = i.get(1).unwrap().as_str().trim();
-        unparsed_num.parse::<usize>().map_err(|_e| {
-            PrError::EncounteredErrors(format!("invalid {} argument {}", "-", unparsed_num.quote()))
-        })
-    }) {
-        Some(res) => Some(res?),
-        None => None,
-    };
-
-    // --column has more priority than -column
-
-    let column_option_value = match parse_usize(matches, options::COLUMN_OPTION) {
-        Some(res) => Some(res?),
-        None => start_column_option,
-    };
-
-    let column_mode_options = column_option_value.map(|columns| ColumnModeOptions {
-        columns,
-        width: column_width,
-        column_separator,
-        across_mode,
-    });
-
-    let offset_spaces =
-        " ".repeat(parse_usize(matches, options::OFFSET_SPACES_OPTION).unwrap_or(Ok(0))?);
-    let join_lines = matches.opt_present(options::JOIN_LINES_OPTION);
-
-    let col_sep_for_printing = column_mode_options
-        .as_ref()
-        .map(|i| i.column_separator.clone())
-        .unwrap_or_else(|| {
-            merge_files_print
-                .map(|_k| DEFAULT_COLUMN_SEPARATOR.to_string())
-                .unwrap_or_default()
-        });
-
-    let columns_to_print = merge_files_print
-        .unwrap_or_else(|| column_mode_options.as_ref().map(|i| i.columns).unwrap_or(1));
-
-    let line_width = if join_lines {
-        None
-    } else if columns_to_print > 1 {
-        Some(
-            column_mode_options
-                .as_ref()
-                .map(|i| i.width)
-                .unwrap_or(DEFAULT_COLUMN_WIDTH),
-        )
-    } else {
-        page_width
-    };
-
-    Ok(OutputOptions {
-        number,
-        header,
-        double_space,
-        line_separator,
-        content_line_separator,
-        last_modified_time,
-        start_page,
-        end_page,
-        display_header_and_trailer,
-        content_lines_per_page,
-        page_separator_char,
-        column_mode_options,
-        merge_files_print,
-        offset_spaces,
-        form_feed_used,
-        join_lines,
-        col_sep_for_printing,
-        line_width,
-    })
-}
-
-fn open(path: &str) -> Result<Box<dyn Read>, PrError> {
-    if path == FILE_STDIN {
-        let stdin = stdin();
-        return Ok(Box::new(stdin) as Box<dyn Read>);
-    }
-
-    metadata(path)
-        .map(|i| {
-            let path_string = path.to_string();
-            match i.file_type() {
-                #[cfg(unix)]
-                ft if ft.is_block_device() => Err(PrError::UnknownFiletype(path_string)),
-                #[cfg(unix)]
-                ft if ft.is_char_device() => Err(PrError::UnknownFiletype(path_string)),
-                #[cfg(unix)]
-                ft if ft.is_fifo() => Err(PrError::UnknownFiletype(path_string)),
-                #[cfg(unix)]
-                ft if ft.is_socket() => Err(PrError::IsSocket(path_string)),
-                ft if ft.is_dir() => Err(PrError::IsDirectory(path_string)),
-                ft if ft.is_file() || ft.is_symlink() => {
-                    Ok(Box::new(File::open(path).context(path)?) as Box<dyn Read>)
-                }
-                _ => Err(PrError::UnknownFiletype(path_string)),
-            }
-        })
-        .unwrap_or_else(|_| Err(PrError::NotExists(path.to_string())))
-}
-
-fn split_lines_if_form_feed(file_content: Result<String, IOError>) -> Vec<FileLine> {
-    file_content
-        .map(|content| {
-            let mut lines = Vec::new();
-            let mut f_occurred = 0;
-            let mut chunk = Vec::new();
-            for byte in content.as_bytes() {
-                if byte == &FF {
-                    f_occurred += 1;
-                } else {
-                    if f_occurred != 0 {
-                        // First time byte occurred in the scan
-                        lines.push(FileLine {
-                            line_content: Ok(String::from_utf8(chunk.clone()).unwrap()),
-                            form_feeds_after: f_occurred,
-                            ..FileLine::default()
-                        });
-                        chunk.clear();
-                    }
-                    chunk.push(*byte);
-                    f_occurred = 0;
-                }
-            }
-
-            lines.push(FileLine {
-                line_content: Ok(String::from_utf8(chunk).unwrap()),
-                form_feeds_after: f_occurred,
-                ..FileLine::default()
-            });
-
-            lines
-        })
-        .unwrap_or_else(|e| {
-            vec![FileLine {
-                line_content: Err(e),
-                ..FileLine::default()
-            }]
-        })
-}
-
-fn pr(path: &str, options: &OutputOptions) -> Result<i32, PrError> {
-    let lines = BufReader::with_capacity(READ_BUFFER_SIZE, open(path)?).lines();
-
-    let pages = read_stream_and_create_pages(options, lines, 0);
-
-    for page_with_page_number in pages {
-        let page_number = page_with_page_number.0 + 1;
-        let page = page_with_page_number.1;
-        print_page(&page, options, page_number)?;
-    }
-
-    Ok(0)
-}
-
-fn read_stream_and_create_pages(
-    options: &OutputOptions,
-    lines: Lines<BufReader<Box<dyn Read>>>,
-    file_id: usize,
-) -> Box<dyn Iterator<Item = (usize, Vec<FileLine>)>> {
-    let start_page = options.start_page;
-    let start_line_number = get_start_line_number(options);
-    let last_page = options.end_page;
-    let lines_needed_per_page = lines_to_read_for_page(options);
-
-    Box::new(
-        lines
-            .flat_map(split_lines_if_form_feed)
-            .enumerate()
-            .map(move |(i, line)| FileLine {
-                line_number: i + start_line_number,
-                file_id,
-                ..line
-            }) // Add line number and file_id
-            .batching(move |it| {
-                let mut first_page = Vec::new();
-                let mut page_with_lines = Vec::new();
-                for line in it {
-                    let form_feeds_after = line.form_feeds_after;
-                    first_page.push(line);
-
-                    if form_feeds_after > 1 {
-                        // insert empty pages
-                        page_with_lines.push(first_page);
-                        for _i in 1..form_feeds_after {
-                            page_with_lines.push(vec![]);
-                        }
-                        return Some(page_with_lines);
-                    }
-
-                    if first_page.len() == lines_needed_per_page || form_feeds_after == 1 {
-                        break;
-                    }
-                }
-
-                if first_page.is_empty() {
-                    return None;
-                }
-                page_with_lines.push(first_page);
-                Some(page_with_lines)
-            }) // Create set of pages as form feeds could lead to empty pages
-            .flatten() // Flatten to pages from page sets
-            .enumerate() // Assign page number
-            .skip_while(move |(x, _)| {
-                // Skip the not needed pages
-                let current_page = x + 1;
-                current_page < start_page
-            })
-            .take_while(move |(x, _)| {
-                // Take only the required pages
-                let current_page = x + 1;
-
-                current_page >= start_page
-                    && last_page.map_or(true, |last_page| current_page <= last_page)
-            }),
-    )
-}
-
-fn mpr(paths: &[String], options: &OutputOptions) -> Result<i32, PrError> {
-    let n_files = paths.len();
-
-    // Check if files exists
-    for path in paths {
-        open(path)?;
-    }
-
-    let file_line_groups = paths
-        .iter()
-        .enumerate()
-        .map(|(i, path)| {
-            let lines = BufReader::with_capacity(READ_BUFFER_SIZE, open(path).unwrap()).lines();
-
-            read_stream_and_create_pages(options, lines, i).flat_map(move |(x, line)| {
-                let file_line = line;
-                let page_number = x + 1;
-                file_line
-                    .into_iter()
-                    .map(|fl| FileLine {
-                        page_number,
-                        group_key: page_number * n_files + fl.file_id,
-                        ..fl
-                    })
-                    .collect::<Vec<_>>()
-            })
-        })
-        .kmerge_by(|a, b| {
-            if a.group_key == b.group_key {
-                a.line_number < b.line_number
-            } else {
-                a.group_key < b.group_key
-            }
-        })
-        .group_by(|file_line| file_line.group_key);
-
-    let start_page = options.start_page;
-    let mut lines = Vec::new();
-    let mut page_counter = start_page;
-
-    for (_key, file_line_group) in file_line_groups.into_iter() {
-        for file_line in file_line_group {
-            if let Err(e) = file_line.line_content {
-                return Err(e.into());
-            }
-            let new_page_number = file_line.page_number;
-            if page_counter != new_page_number {
-                print_page(&lines, options, page_counter)?;
-                lines = Vec::new();
-                page_counter = new_page_number;
-            }
-            lines.push(file_line);
-        }
-    }
-
-    print_page(&lines, options, page_counter)?;
-
-    Ok(0)
-}
-
-fn print_page(lines: &[FileLine], options: &OutputOptions, page: usize) -> Result<usize, IOError> {
-    let line_separator = options.line_separator.as_bytes();
-    let page_separator = options.page_separator_char.as_bytes();
-
-    let header = header_content(options, page);
-    let trailer_content = trailer_content(options);
-
-    let out = stdout();
-    let mut out = out.lock();
-
-    for x in header {
-        out.write_all(x.as_bytes())?;
-        out.write_all(line_separator)?;
-    }
-
-    let lines_written = write_columns(lines, options, &mut out)?;
-
-    for (index, x) in trailer_content.iter().enumerate() {
-        out.write_all(x.as_bytes())?;
-        if index + 1 != trailer_content.len() {
-            out.write_all(line_separator)?;
-        }
-    }
-    out.write_all(page_separator)?;
-    out.flush()?;
-    Ok(lines_written)
-}
-
-fn write_columns(
-    lines: &[FileLine],
-    options: &OutputOptions,
-    out: &mut impl Write,
-) -> Result<usize, IOError> {
-    let line_separator = options.content_line_separator.as_bytes();
-
-    let content_lines_per_page = if options.double_space {
-        options.content_lines_per_page / 2
-    } else {
-        options.content_lines_per_page
-    };
-
-    let columns = options
-        .merge_files_print
-        .unwrap_or_else(|| get_columns(options));
-    let line_width = options.line_width;
-    let mut lines_printed = 0;
-    let feed_line_present = options.form_feed_used;
-    let mut not_found_break = false;
-
-    let across_mode = options
-        .column_mode_options
-        .as_ref()
-        .map(|i| i.across_mode)
-        .unwrap_or(false);
-
-    let mut filled_lines = Vec::new();
-    if options.merge_files_print.is_some() {
-        let mut offset = 0;
-        for col in 0..columns {
-            let mut inserted = 0;
-            for line in &lines[offset..] {
-                if line.file_id != col {
-                    break;
-                }
-                filled_lines.push(Some(line));
-                inserted += 1;
-            }
-            offset += inserted;
-
-            for _i in inserted..content_lines_per_page {
-                filled_lines.push(None);
-            }
-        }
-    }
-
-    let table: Vec<Vec<_>> = (0..content_lines_per_page)
-        .map(move |a| {
-            (0..columns)
-                .map(|i| {
-                    if across_mode {
-                        lines.get(a * columns + i)
-                    } else if options.merge_files_print.is_some() {
-                        *filled_lines
-                            .get(content_lines_per_page * i + a)
-                            .unwrap_or(&None)
-                    } else {
-                        lines.get(content_lines_per_page * i + a)
-                    }
-                })
-                .collect()
-        })
-        .collect();
-
-    let blank_line = FileLine::default();
-    for row in table {
-        let indexes = row.len();
-        for (i, cell) in row.iter().enumerate() {
-            if cell.is_none() && options.merge_files_print.is_some() {
-                out.write_all(
-                    get_line_for_printing(options, &blank_line, columns, i, &line_width, indexes)
-                        .as_bytes(),
-                )?;
-            } else if cell.is_none() {
-                not_found_break = true;
-                break;
-            } else if cell.is_some() {
-                let file_line = cell.unwrap();
-
-                out.write_all(
-                    get_line_for_printing(options, file_line, columns, i, &line_width, indexes)
-                        .as_bytes(),
-                )?;
-                lines_printed += 1;
-            }
-        }
-        if not_found_break && feed_line_present {
-            break;
-        } else {
-            out.write_all(line_separator)?;
-        }
-    }
-
-    Ok(lines_printed)
-}
-
-fn get_line_for_printing(
-    options: &OutputOptions,
-    file_line: &FileLine,
-    columns: usize,
-    index: usize,
-    line_width: &Option<usize>,
-    indexes: usize,
-) -> String {
-    let blank_line = String::new();
-    let formatted_line_number = get_formatted_line_number(options, file_line.line_number, index);
-
-    let mut complete_line = format!(
-        "{}{}",
-        formatted_line_number,
-        file_line.line_content.as_ref().unwrap()
-    );
-
-    let offset_spaces = &options.offset_spaces;
-
-    let tab_count = complete_line.chars().filter(|i| i == &TAB).count();
-
-    let display_length = complete_line.len() + (tab_count * 7);
-
-    let sep = if (index + 1) != indexes && !options.join_lines {
-        &options.col_sep_for_printing
-    } else {
-        &blank_line
-    };
-
-    format!(
-        "{}{}{}",
-        offset_spaces,
-        line_width
-            .map(|i| {
-                let min_width = (i - (columns - 1)) / columns;
-                if display_length < min_width {
-                    for _i in 0..(min_width - display_length) {
-                        complete_line.push(' ');
-                    }
-                }
-
-                complete_line.chars().take(min_width).collect()
-            })
-            .unwrap_or(complete_line),
-        sep
-    )
-}
-
-fn get_formatted_line_number(opts: &OutputOptions, line_number: usize, index: usize) -> String {
-    let should_show_line_number =
-        opts.number.is_some() && (opts.merge_files_print.is_none() || index == 0);
-    if should_show_line_number && line_number != 0 {
-        let line_str = line_number.to_string();
-        let num_opt = opts.number.as_ref().unwrap();
-        let width = num_opt.width;
-        let separator = &num_opt.separator;
-        if line_str.len() >= width {
-            format!(
-                "{:>width$}{}",
-                &line_str[line_str.len() - width..],
-                separator,
-                width = width
-            )
-        } else {
-            format!("{:>width$}{}", line_str, separator, width = width)
-        }
-    } else {
-        String::new()
-    }
-}
-
-/// Returns a five line header content if displaying header is not disabled by
-/// using `NO_HEADER_TRAILER_OPTION` option.
-fn header_content(options: &OutputOptions, page: usize) -> Vec<String> {
-    if options.display_header_and_trailer {
-        let first_line = format!(
-            "{} {} Page {}",
-            options.last_modified_time, options.header, page
-        );
-        vec![
-            String::new(),
-            String::new(),
-            first_line,
-            String::new(),
-            String::new(),
-        ]
-    } else {
-        Vec::new()
-    }
-}
-
-fn file_last_modified_time(path: &str) -> String {
-    metadata(path)
-        .map(|i| {
-            i.modified()
-                .map(|x| {
-                    let date_time: DateTime<Local> = x.into();
-                    date_time.format("%b %d %H:%M %Y").to_string()
-                })
-                .unwrap_or_default()
-        })
-        .unwrap_or_default()
-}
-
-/// Returns five empty lines as trailer content if displaying trailer
-/// is not disabled by using `NO_HEADER_TRAILER_OPTION`option.
-fn trailer_content(options: &OutputOptions) -> Vec<String> {
-    if options.display_header_and_trailer && !options.form_feed_used {
-        vec![
-            String::new(),
-            String::new(),
-            String::new(),
-            String::new(),
-            String::new(),
-        ]
-    } else {
-        Vec::new()
-    }
-}
-
-/// Returns starting line number for the file to be printed.
-/// If -N is specified the first line number changes otherwise
-/// default is 1.
-fn get_start_line_number(opts: &OutputOptions) -> usize {
-    opts.number.as_ref().map(|i| i.first_number).unwrap_or(1)
-}
-
-/// Returns number of lines to read from input for constructing one page of pr output.
-/// If double space -d is used lines are halved.
-/// If columns --columns is used the lines are multiplied by the value.
-fn lines_to_read_for_page(opts: &OutputOptions) -> usize {
-    let content_lines_per_page = opts.content_lines_per_page;
-    let columns = get_columns(opts);
-    if opts.double_space {
-        (content_lines_per_page / 2) * columns
-    } else {
-        content_lines_per_page * columns
-    }
-}
-
-/// Returns number of columns to output
-fn get_columns(opts: &OutputOptions) -> usize {
-    opts.column_mode_options
-        .as_ref()
-        .map(|i| i.columns)
-        .unwrap_or(1)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_printenv/printenv.rs.html b/src/uu_printenv/printenv.rs.html deleted file mode 100644 index 822061666..000000000 --- a/src/uu_printenv/printenv.rs.html +++ /dev/null @@ -1,164 +0,0 @@ -printenv.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-/* last synced with: printenv (GNU coreutils) 8.13 */
-
-use clap::{crate_version, App, Arg};
-use std::env;
-use uucore::error::UResult;
-
-static ABOUT: &str = "Display the values of the specified environment VARIABLE(s), or (with no VARIABLE) display name and value pairs for them all.";
-
-static OPT_NULL: &str = "null";
-
-static ARG_VARIABLES: &str = "variables";
-
-fn usage() -> String {
-    format!("{0} [VARIABLE]... [OPTION]...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let variables: Vec<String> = matches
-        .values_of(ARG_VARIABLES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let separator = if matches.is_present(OPT_NULL) {
-        "\x00"
-    } else {
-        "\n"
-    };
-
-    if variables.is_empty() {
-        for (env_var, value) in env::vars() {
-            print!("{}={}{}", env_var, value, separator);
-        }
-        return Ok(());
-    }
-
-    let mut not_found = false;
-    for env_var in variables {
-        if let Ok(var) = env::var(env_var) {
-            print!("{}{}", var, separator);
-        } else {
-            not_found = true;
-        }
-    }
-
-    if not_found {
-        Err(1.into())
-    } else {
-        Ok(())
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_NULL)
-                .short('0')
-                .long(OPT_NULL)
-                .help("end each output line with 0 byte rather than newline"),
-        )
-        .arg(
-            Arg::new(ARG_VARIABLES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_printf/printf.rs.html b/src/uu_printf/printf.rs.html deleted file mode 100644 index 7103c67b8..000000000 --- a/src/uu_printf/printf.rs.html +++ /dev/null @@ -1,604 +0,0 @@ -printf.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-
#![allow(dead_code)]
-// spell-checker:ignore (change!) each's
-// spell-checker:ignore (ToDO) LONGHELP FORMATSTRING templating parameterizing formatstr
-
-use clap::{crate_version, App, Arg};
-use uucore::error::{UResult, UUsageError};
-use uucore::memo;
-use uucore::InvalidEncodingHandling;
-
-const VERSION: &str = "version";
-const HELP: &str = "help";
-static LONGHELP_LEAD: &str = "printf
-
- USAGE: printf FORMATSTRING [ARGUMENT]...
-
- basic anonymous string templating:
-
- prints format string at least once, repeating as long as there are remaining arguments
- output prints escaped literals in the format string as character literals
- output replaces anonymous fields with the next unused argument, formatted according to the field.
-
-Options:
-    --help              display this help and exit
-    --version           output version information and exit
-
-";
-static LONGHELP_BODY: &str = "
-  Prints the , replacing escaped character sequences with character literals
-    and substitution field sequences with passed arguments
-
- literally, with the exception of the below
-    escaped character sequences, and the substitution sequences described further down.
-
-  ESCAPE SEQUENCES
-
-  The following escape sequences, organized here in alphabetical order,
-  will print the corresponding character literal:
-
-  \"   double quote
-
-  \\\\    backslash
-
-  \\a  alert (BEL)
-
-  \\b  backspace
-
-  \\c  End-of-Input
-
-  \\e  escape
-
-  \\f  form feed
-
-  \\n  new line
-
-  \\r  carriage return
-
-  \\t  horizontal tab
-
-  \\v  vertical tab
-
-  \\NNN byte with value expressed in octal value NNN (1 to 3 digits)
-        values greater than 256 will be treated
-
-  \\xHH byte with value expressed in hexadecimal value NN (1 to 2 digits)
-
-  \\uHHHH Unicode (IEC 10646) character with value expressed in hexadecimal value HHHH (4 digits)
-
-  \\uHHHH Unicode character with value expressed in hexadecimal value HHHH (8 digits)
-
-  %% a single %
-
-  SUBSTITUTIONS
-
-  SUBSTITUTION QUICK REFERENCE
-
-  Fields
-
-  %s - string
-  %b - string parsed for literals
-    second parameter is max length
-
-  %c - char
-    no second parameter
-
-  %i or %d - 64-bit integer
-  %u - 64 bit unsigned integer
-  %x or %X - 64-bit unsigned integer as hex
-  %o - 64-bit unsigned integer as octal
-    second parameter is min-width, integer
-     output below that width is padded with leading zeroes
-
-  %f or %F - decimal floating point value
-  %e or %E - scientific notation floating point value
-  %g or %G - shorter of specially interpreted decimal or SciNote floating point value.
-    second parameter is
-      -max places after decimal point for floating point output
-      -max number of significant digits for scientific notation output
-
-  parameterizing fields
-
-  examples:
-
-  printf '%4.3i' 7
-  has a first parameter of 4
-     and a second parameter of 3
-  will result in ' 007'
-
-  printf '%.1s' abcde
-  has no first parameter
-     and a second parameter of 1
-  will result in 'a'
-
-  printf '%4c' q
-  has a first parameter of 4
-     and no second parameter
-  will result in  '   q'
-
-  The first parameter of a field is the minimum width to pad the output to
-   if the output is less than this absolute value of this width,
-   it will be padded with leading spaces, or, if the argument is negative,
-   with trailing spaces. the default is zero.
-
-  The second parameter of a field is particular to the output field type.
-   defaults can be found in the full substitution help below
-
-  special prefixes to numeric arguments
-    0 (e.g. 010) - interpret argument as octal (integer output fields only)
-    0x (e.g. 0xABC) - interpret argument as hex (numeric output fields only)
-    \' (e.g. \'a) - interpret argument as a character constant
-
-  HOW TO USE SUBSTITUTIONS
-
-  Substitutions are used to pass additional argument(s) into the FORMAT string, to be formatted a
-  particular way. E.g.
-
-      printf 'the letter %X comes before the letter %X' 10 11
-
-  will print
-
-     'the letter A comes before the letter B'
-
-  because the substitution field %X means
-  'take an integer argument and write it as a hexadecimal number'
-
-  Passing more arguments than are in the format string will cause the format string to be
-   repeated for the remaining substitutions
-
-     printf 'it is %i F in %s \n' 22 Portland 25 Boston 27 New York
-
-  will print
-
-     'it is 22 F in Portland
-      it is 25 F in Boston
-      it is 27 F in Boston
-     '
-  If a format string is printed but there are less arguments remaining
-   than there are substitution fields, substitution fields without
-   an argument will default to empty strings, or for numeric fields
-   the value 0
-
-  AVAILABLE SUBSTITUTIONS
-
-  This program, like GNU coreutils printf,
-  interprets a modified subset of the POSIX C printf spec,
-  a quick reference to substitutions is below.
-
-   STRING SUBSTITUTIONS
-    All string fields have a 'max width' parameter
-    %.3s means 'print no more than three characters of the original input'
-
-   %s - string
-
-   %b - escaped string - the string will be checked for any escaped literals from
-         the escaped literal list above, and translate them to literal characters.
-         e.g. \\n will be transformed into a newline character.
-
-        One special rule about %b mode is that octal literals are interpreted differently
-        In arguments passed by %b, pass octal-interpreted literals must be in the form of \\0NNN
-        instead of \\NNN. (Although, for legacy reasons, octal literals in the form of \\NNN will
-        still be interpreted and not throw a warning, you will have problems if you use this for a
-        literal whose code begins with zero, as it will be viewed as in \\0NNN form.)
-
-   CHAR SUBSTITUTIONS
-    The character field does not have a secondary parameter.
-
-   %c - a single character
-
-   INTEGER SUBSTITUTIONS
-    All integer fields have a 'pad with zero' parameter
-    %.4i means an integer which if it is less than 4 digits in length,
-    is padded with leading zeros until it is 4 digits in length.
-
-   %d or %i - 64-bit integer
-
-   %u - 64 bit unsigned integer
-
-   %x or %X - 64 bit unsigned integer printed in Hexadecimal (base 16)
-            %X instead of %x means to use uppercase letters for 'a' through 'f'
-
-   %o - 64 bit unsigned integer printed in octal (base 8)
-
-   FLOATING POINT SUBSTITUTIONS
-
-    All floating point fields have a 'max decimal places / max significant digits' parameter
-    %.10f means a decimal floating point with 7 decimal places past 0
-    %.10e means a scientific notation number with 10 significant digits
-    %.10g means the same behavior for decimal and Sci. Note, respectively, and provides the shorter
-          of each's output.
-
-    Like with GNU coreutils, the value after the decimal point is these outputs is parsed as a
-    double first before being rendered to text. For both implementations do not expect meaningful
-    precision past the 18th decimal place. When using a number of decimal places that is 18 or
-    higher, you can expect variation in output between GNU coreutils printf and this printf at the
-    18th decimal place of +/- 1
-
-   %f - floating point value presented in decimal, truncated and displayed to 6 decimal places by
-        default. There is not past-double behavior parity with Coreutils printf, values are not
-        estimated or adjusted beyond input values.
-
-   %e or %E - floating point value presented in scientific notation
-            7 significant digits by default
-            %E means use to use uppercase E for the mantissa.
-
-   %g or %G - floating point value presented in the shorter of decimal and scientific notation
-            behaves differently from %f and %E, please see posix printf spec for full details,
-            some examples of different behavior:
-
-            Sci Note has 6 significant digits by default
-            Trailing zeroes are removed
-            Instead of being truncated, digit after last is rounded
-
-   Like other behavior in this utility, the design choices of floating point
-    behavior in this utility is selected to reproduce in exact
-    the behavior of GNU coreutils' printf from an inputs and outputs standpoint.
-
-  USING PARAMETERS
-   Most substitution fields can be parameterized using up to 2 numbers that can
-   be passed to the field, between the % sign and the field letter.
-
-   The 1st parameter always indicates the minimum width of output, it is useful for creating
-     columnar output. Any output that would be less than this minimum width is padded with
-     leading spaces
-   The 2nd parameter is proceeded by a dot.
-   You do not have to use parameters
-
-  SPECIAL FORMS OF INPUT
-   For numeric input, the following additional forms of input are accepted besides decimal:
-
-    Octal (only with integer): if the argument begins with a 0 the proceeding characters
-      will be interpreted as octal (base 8) for integer fields
-
-    Hexadecimal: if the argument begins with 0x the proceeding characters will be interpreted
-      will be interpreted as hex (base 16) for any numeric fields
-      for float fields, hexadecimal input results in a precision
-      limit (in converting input past the decimal point) of 10^-15
-
-    Character Constant: if the argument begins with a single quote character, the first byte
-      of the next character will be interpreted as an 8-bit unsigned integer. If there are
-      additional bytes, they will throw an error (unless the environment variable POSIXLY_CORRECT
-      is set)
-
-WRITTEN BY :
-  Nathan E. Ross, et al. for the uutils project
-
-MORE INFO :
-  https://github.com/uutils/coreutils
-
-COPYRIGHT :
-  Copyright 2015 uutils project.
-  Licensed under the MIT License, please see LICENSE file for details
-
-";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    if args.len() <= 1 {
-        return Err(UUsageError::new(1, "missing operand"));
-    }
-    let formatstr = &args[1];
-
-    if formatstr == "--help" {
-        print!("{} {}", LONGHELP_LEAD, LONGHELP_BODY);
-    } else if formatstr == "--version" {
-        println!("{} {}", uucore::util_name(), crate_version!());
-    } else {
-        let printf_args = &args[2..];
-        memo::Memo::run_all(formatstr, printf_args);
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .arg(Arg::new(VERSION).long(VERSION))
-        .arg(Arg::new(HELP).long(HELP))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_ptx/ptx.rs.html b/src/uu_ptx/ptx.rs.html deleted file mode 100644 index f50196651..000000000 --- a/src/uu_ptx/ptx.rs.html +++ /dev/null @@ -1,1668 +0,0 @@ -ptx.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-812
-813
-814
-815
-816
-817
-818
-819
-820
-821
-822
-823
-824
-825
-826
-827
-828
-829
-830
-831
-832
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Dorota Kapturkiewicz <dokaptur@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDOs) corasick memchr Roff trunc oset iset
-
-use clap::{crate_version, App, Arg};
-use regex::Regex;
-use std::cmp;
-use std::collections::{BTreeSet, HashMap, HashSet};
-use std::default::Default;
-use std::error::Error;
-use std::fmt::{Display, Formatter};
-use std::fs::File;
-use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
-use std::num::ParseIntError;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UError, UResult};
-use uucore::InvalidEncodingHandling;
-
-static NAME: &str = "ptx";
-static BRIEF: &str = "Usage: ptx [OPTION]... [INPUT]...   (without -G) or: \
-                 ptx -G [OPTION]... [INPUT [OUTPUT]] \n Output a permuted index, \
-                 including context, of the words in the input files. \n\n Mandatory \
-                 arguments to long options are mandatory for short options too.\n
-                 With no FILE, or when FILE is -, read standard input. \
-                Default is '-F /'.";
-
-#[derive(Debug)]
-enum OutFormat {
-    Dumb,
-    Roff,
-    Tex,
-}
-
-#[derive(Debug)]
-struct Config {
-    format: OutFormat,
-    gnu_ext: bool,
-    auto_ref: bool,
-    input_ref: bool,
-    right_ref: bool,
-    ignore_case: bool,
-    macro_name: String,
-    trunc_str: String,
-    context_regex: String,
-    line_width: usize,
-    gap_size: usize,
-}
-
-impl Default for Config {
-    fn default() -> Config {
-        Config {
-            format: OutFormat::Dumb,
-            gnu_ext: true,
-            auto_ref: false,
-            input_ref: false,
-            right_ref: false,
-            ignore_case: false,
-            macro_name: "xx".to_owned(),
-            trunc_str: "/".to_owned(),
-            context_regex: "\\w+".to_owned(),
-            line_width: 72,
-            gap_size: 3,
-        }
-    }
-}
-
-fn read_word_filter_file(
-    matches: &clap::ArgMatches,
-    option: &str,
-) -> std::io::Result<HashSet<String>> {
-    let filename = matches
-        .value_of(option)
-        .expect("parsing options failed!")
-        .to_string();
-    let file = File::open(filename)?;
-    let reader = BufReader::new(file);
-    let mut words: HashSet<String> = HashSet::new();
-    for word in reader.lines() {
-        words.insert(word?);
-    }
-    Ok(words)
-}
-
-#[derive(Debug)]
-struct WordFilter {
-    only_specified: bool,
-    ignore_specified: bool,
-    only_set: HashSet<String>,
-    ignore_set: HashSet<String>,
-    word_regex: String,
-}
-
-impl WordFilter {
-    fn new(matches: &clap::ArgMatches, config: &Config) -> UResult<WordFilter> {
-        let (o, oset): (bool, HashSet<String>) = if matches.is_present(options::ONLY_FILE) {
-            let words =
-                read_word_filter_file(matches, options::ONLY_FILE).map_err_context(String::new)?;
-            (true, words)
-        } else {
-            (false, HashSet::new())
-        };
-        let (i, iset): (bool, HashSet<String>) = if matches.is_present(options::IGNORE_FILE) {
-            let words = read_word_filter_file(matches, options::IGNORE_FILE)
-                .map_err_context(String::new)?;
-            (true, words)
-        } else {
-            (false, HashSet::new())
-        };
-        if matches.is_present(options::BREAK_FILE) {
-            return Err(PtxError::NotImplemented("-b").into());
-        }
-        // Ignore empty string regex from cmd-line-args
-        let arg_reg: Option<String> = if matches.is_present(options::WORD_REGEXP) {
-            match matches.value_of(options::WORD_REGEXP) {
-                Some(v) => {
-                    if v.is_empty() {
-                        None
-                    } else {
-                        Some(v.to_string())
-                    }
-                }
-                None => None,
-            }
-        } else {
-            None
-        };
-        let reg = match arg_reg {
-            Some(arg_reg) => arg_reg,
-            None => {
-                if config.gnu_ext {
-                    "\\w+".to_owned()
-                } else {
-                    "[^ \t\n]+".to_owned()
-                }
-            }
-        };
-        Ok(WordFilter {
-            only_specified: o,
-            ignore_specified: i,
-            only_set: oset,
-            ignore_set: iset,
-            word_regex: reg,
-        })
-    }
-}
-
-#[derive(Debug, PartialOrd, PartialEq, Eq, Ord)]
-struct WordRef {
-    word: String,
-    global_line_nr: usize,
-    local_line_nr: usize,
-    position: usize,
-    position_end: usize,
-    filename: String,
-}
-
-#[derive(Debug)]
-enum PtxError {
-    DumbFormat,
-    NotImplemented(&'static str),
-    ParseError(ParseIntError),
-}
-
-impl Error for PtxError {}
-impl UError for PtxError {}
-
-impl Display for PtxError {
-    fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
-        match self {
-            PtxError::DumbFormat => {
-                write!(f, "There is no dumb format with GNU extensions disabled")
-            }
-            PtxError::NotImplemented(s) => write!(f, "{} not implemented yet", s),
-            PtxError::ParseError(e) => e.fmt(f),
-        }
-    }
-}
-
-fn get_config(matches: &clap::ArgMatches) -> UResult<Config> {
-    let mut config: Config = Default::default();
-    let err_msg = "parsing options failed";
-    if matches.is_present(options::TRADITIONAL) {
-        config.gnu_ext = false;
-        config.format = OutFormat::Roff;
-        config.context_regex = "[^ \t\n]+".to_owned();
-    } else {
-        return Err(PtxError::NotImplemented("GNU extensions").into());
-    }
-    if matches.is_present(options::SENTENCE_REGEXP) {
-        return Err(PtxError::NotImplemented("-S").into());
-    }
-    config.auto_ref = matches.is_present(options::AUTO_REFERENCE);
-    config.input_ref = matches.is_present(options::REFERENCES);
-    config.right_ref &= matches.is_present(options::RIGHT_SIDE_REFS);
-    config.ignore_case = matches.is_present(options::IGNORE_CASE);
-    if matches.is_present(options::MACRO_NAME) {
-        config.macro_name = matches
-            .value_of(options::MACRO_NAME)
-            .expect(err_msg)
-            .to_string();
-    }
-    if matches.is_present(options::FLAG_TRUNCATION) {
-        config.trunc_str = matches
-            .value_of(options::FLAG_TRUNCATION)
-            .expect(err_msg)
-            .to_string();
-    }
-    if matches.is_present(options::WIDTH) {
-        config.line_width = matches
-            .value_of(options::WIDTH)
-            .expect(err_msg)
-            .parse()
-            .map_err(PtxError::ParseError)?;
-    }
-    if matches.is_present(options::GAP_SIZE) {
-        config.gap_size = matches
-            .value_of(options::GAP_SIZE)
-            .expect(err_msg)
-            .parse()
-            .map_err(PtxError::ParseError)?;
-    }
-    if matches.is_present(options::FORMAT_ROFF) {
-        config.format = OutFormat::Roff;
-    }
-    if matches.is_present(options::FORMAT_TEX) {
-        config.format = OutFormat::Tex;
-    }
-    Ok(config)
-}
-
-struct FileContent {
-    lines: Vec<String>,
-    chars_lines: Vec<Vec<char>>,
-    offset: usize,
-}
-
-type FileMap = HashMap<String, FileContent>;
-
-fn read_input(input_files: &[String], config: &Config) -> std::io::Result<FileMap> {
-    let mut file_map: FileMap = HashMap::new();
-    let mut files = Vec::new();
-    if input_files.is_empty() {
-        files.push("-");
-    } else if config.gnu_ext {
-        for file in input_files {
-            files.push(file);
-        }
-    } else {
-        files.push(&input_files[0]);
-    }
-    let mut offset: usize = 0;
-    for filename in files {
-        let reader: BufReader<Box<dyn Read>> = BufReader::new(if filename == "-" {
-            Box::new(stdin())
-        } else {
-            let file = File::open(filename)?;
-            Box::new(file)
-        });
-        let lines: Vec<String> = reader.lines().collect::<std::io::Result<Vec<String>>>()?;
-
-        // Indexing UTF-8 string requires walking from the beginning, which can hurts performance badly when the line is long.
-        // Since we will be jumping around the line a lot, we dump the content into a Vec<char>, which can be indexed in constant time.
-        let chars_lines: Vec<Vec<char>> = lines.iter().map(|x| x.chars().collect()).collect();
-        let size = lines.len();
-        file_map.insert(
-            filename.to_owned(),
-            FileContent {
-                lines,
-                chars_lines,
-                offset,
-            },
-        );
-        offset += size
-    }
-    Ok(file_map)
-}
-
-/// Go through every lines in the input files and record each match occurrence as a `WordRef`.
-fn create_word_set(config: &Config, filter: &WordFilter, file_map: &FileMap) -> BTreeSet<WordRef> {
-    let reg = Regex::new(&filter.word_regex).unwrap();
-    let ref_reg = Regex::new(&config.context_regex).unwrap();
-    let mut word_set: BTreeSet<WordRef> = BTreeSet::new();
-    for (file, lines) in file_map.iter() {
-        let mut count: usize = 0;
-        let offs = lines.offset;
-        for line in &lines.lines {
-            // if -r, exclude reference from word set
-            let (ref_beg, ref_end) = match ref_reg.find(line) {
-                Some(x) => (x.start(), x.end()),
-                None => (0, 0),
-            };
-            // match words with given regex
-            for mat in reg.find_iter(line) {
-                let (beg, end) = (mat.start(), mat.end());
-                if config.input_ref && ((beg, end) == (ref_beg, ref_end)) {
-                    continue;
-                }
-                let mut word = line[beg..end].to_owned();
-                if filter.only_specified && !(filter.only_set.contains(&word)) {
-                    continue;
-                }
-                if filter.ignore_specified && filter.ignore_set.contains(&word) {
-                    continue;
-                }
-                if config.ignore_case {
-                    word = word.to_lowercase();
-                }
-                word_set.insert(WordRef {
-                    word,
-                    filename: file.clone(),
-                    global_line_nr: offs + count,
-                    local_line_nr: count,
-                    position: beg,
-                    position_end: end,
-                });
-            }
-            count += 1;
-        }
-    }
-    word_set
-}
-
-fn get_reference(config: &Config, word_ref: &WordRef, line: &str, context_reg: &Regex) -> String {
-    if config.auto_ref {
-        format!(
-            "{}:{}",
-            word_ref.filename.maybe_quote(),
-            word_ref.local_line_nr + 1
-        )
-    } else if config.input_ref {
-        let (beg, end) = match context_reg.find(line) {
-            Some(x) => (x.start(), x.end()),
-            None => (0, 0),
-        };
-        line[beg..end].to_string()
-    } else {
-        String::new()
-    }
-}
-
-fn assert_str_integrity(s: &[char], beg: usize, end: usize) {
-    assert!(beg <= end);
-    assert!(end <= s.len());
-}
-
-fn trim_broken_word_left(s: &[char], beg: usize, end: usize) -> usize {
-    assert_str_integrity(s, beg, end);
-    if beg == end || beg == 0 || s[beg].is_whitespace() || s[beg - 1].is_whitespace() {
-        return beg;
-    }
-    let mut b = beg;
-    while b < end && !s[b].is_whitespace() {
-        b += 1;
-    }
-    b
-}
-
-fn trim_broken_word_right(s: &[char], beg: usize, end: usize) -> usize {
-    assert_str_integrity(s, beg, end);
-    if beg == end || end == s.len() || s[end - 1].is_whitespace() || s[end].is_whitespace() {
-        return end;
-    }
-    let mut e = end;
-    while beg < e && !s[e - 1].is_whitespace() {
-        e -= 1;
-    }
-    e
-}
-
-fn trim_idx(s: &[char], beg: usize, end: usize) -> (usize, usize) {
-    assert_str_integrity(s, beg, end);
-    let mut b = beg;
-    let mut e = end;
-    while b < e && s[b].is_whitespace() {
-        b += 1;
-    }
-    while b < e && s[e - 1].is_whitespace() {
-        e -= 1;
-    }
-    (b, e)
-}
-
-fn get_output_chunks(
-    all_before: &[char],
-    keyword: &str,
-    all_after: &[char],
-    config: &Config,
-) -> (String, String, String, String) {
-    // Chunk size logics are mostly copied from the GNU ptx source.
-    // https://github.com/MaiZure/coreutils-8.3/blob/master/src/ptx.c#L1234
-    let half_line_size = (config.line_width / 2) as usize;
-    let max_before_size = cmp::max(half_line_size as isize - config.gap_size as isize, 0) as usize;
-    let max_after_size = cmp::max(
-        half_line_size as isize
-            - (2 * config.trunc_str.len()) as isize
-            - keyword.len() as isize
-            - 1,
-        0,
-    ) as usize;
-
-    // Allocate plenty space for all the chunks.
-    let mut head = String::with_capacity(half_line_size);
-    let mut before = String::with_capacity(half_line_size);
-    let mut after = String::with_capacity(half_line_size);
-    let mut tail = String::with_capacity(half_line_size);
-
-    // the before chunk
-
-    // trim whitespace away from all_before to get the index where the before chunk should end.
-    let (_, before_end) = trim_idx(all_before, 0, all_before.len());
-
-    // the minimum possible begin index of the before_chunk is the end index minus the length.
-    let before_beg = cmp::max(before_end as isize - max_before_size as isize, 0) as usize;
-    // in case that falls in the middle of a word, trim away the word.
-    let before_beg = trim_broken_word_left(all_before, before_beg, before_end);
-
-    // trim away white space.
-    let (before_beg, before_end) = trim_idx(all_before, before_beg, before_end);
-
-    // and get the string.
-    let before_str: String = all_before[before_beg..before_end].iter().collect();
-    before.push_str(&before_str);
-    assert!(max_before_size >= before.len());
-
-    // the after chunk
-
-    // must be no longer than the minimum between the max size and the total available string.
-    let after_end = cmp::min(max_after_size, all_after.len());
-    // in case that falls in the middle of a word, trim away the word.
-    let after_end = trim_broken_word_right(all_after, 0, after_end);
-
-    // trim away white space.
-    let (_, after_end) = trim_idx(all_after, 0, after_end);
-
-    // and get the string
-    let after_str: String = all_after[0..after_end].iter().collect();
-    after.push_str(&after_str);
-    assert!(max_after_size >= after.len());
-
-    // the tail chunk
-
-    // max size of the tail chunk = max size of left half - space taken by before chunk - gap size.
-    let max_tail_size = cmp::max(
-        max_before_size as isize - before.len() as isize - config.gap_size as isize,
-        0,
-    ) as usize;
-
-    // the tail chunk takes text starting from where the after chunk ends (with whitespace trimmed).
-    let (tail_beg, _) = trim_idx(all_after, after_end, all_after.len());
-
-    // end = begin + max length
-    let tail_end = cmp::min(all_after.len(), tail_beg + max_tail_size) as usize;
-    // in case that falls in the middle of a word, trim away the word.
-    let tail_end = trim_broken_word_right(all_after, tail_beg, tail_end);
-
-    // trim away whitespace again.
-    let (tail_beg, tail_end) = trim_idx(all_after, tail_beg, tail_end);
-
-    // and get the string
-    let tail_str: String = all_after[tail_beg..tail_end].iter().collect();
-    tail.push_str(&tail_str);
-
-    // the head chunk
-
-    // max size of the head chunk = max size of right half - space taken by after chunk - gap size.
-    let max_head_size = cmp::max(
-        max_after_size as isize - after.len() as isize - config.gap_size as isize,
-        0,
-    ) as usize;
-
-    // the head chunk takes text from before the before chunk
-    let (_, head_end) = trim_idx(all_before, 0, before_beg);
-
-    // begin = end - max length
-    let head_beg = cmp::max(head_end as isize - max_head_size as isize, 0) as usize;
-    // in case that falls in the middle of a word, trim away the word.
-    let head_beg = trim_broken_word_left(all_before, head_beg, head_end);
-
-    // trim away white space again.
-    let (head_beg, head_end) = trim_idx(all_before, head_beg, head_end);
-
-    // and get the string.
-    let head_str: String = all_before[head_beg..head_end].iter().collect();
-    head.push_str(&head_str);
-
-    // put right context truncation string if needed
-    if after_end != all_after.len() && tail_beg == tail_end {
-        after.push_str(&config.trunc_str);
-    } else if after_end != all_after.len() && tail_end != all_after.len() {
-        tail.push_str(&config.trunc_str);
-    }
-
-    // put left context truncation string if needed
-    if before_beg != 0 && head_beg == head_end {
-        before = format!("{}{}", config.trunc_str, before);
-    } else if before_beg != 0 && head_beg != 0 {
-        head = format!("{}{}", config.trunc_str, head);
-    }
-
-    (tail, before, after, head)
-}
-
-fn tex_mapper(x: char) -> String {
-    match x {
-        '\\' => "\\backslash{}".to_owned(),
-        '$' | '%' | '#' | '&' | '_' => format!("\\{}", x),
-        '}' | '{' => format!("$\\{}$", x),
-        _ => x.to_string(),
-    }
-}
-
-/// Escape special characters for TeX.
-fn format_tex_field(s: &str) -> String {
-    let mapped_chunks: Vec<String> = s.chars().map(tex_mapper).collect();
-    mapped_chunks.join("")
-}
-
-fn format_tex_line(
-    config: &Config,
-    word_ref: &WordRef,
-    line: &str,
-    chars_line: &[char],
-    reference: &str,
-) -> String {
-    let mut output = String::new();
-    output.push_str(&format!("\\{} ", config.macro_name));
-    let all_before = if config.input_ref {
-        let before = &line[0..word_ref.position];
-        let before_start_trim_offset =
-            word_ref.position - before.trim_start_matches(reference).trim_start().len();
-        let before_end_index = before.len();
-        &chars_line[before_start_trim_offset..cmp::max(before_end_index, before_start_trim_offset)]
-    } else {
-        let before_chars_trim_idx = (0, word_ref.position);
-        &chars_line[before_chars_trim_idx.0..before_chars_trim_idx.1]
-    };
-    let keyword = &line[word_ref.position..word_ref.position_end];
-    let after_chars_trim_idx = (word_ref.position_end, chars_line.len());
-    let all_after = &chars_line[after_chars_trim_idx.0..after_chars_trim_idx.1];
-    let (tail, before, after, head) = get_output_chunks(all_before, keyword, all_after, config);
-    output.push_str(&format!(
-        "{5}{0}{6}{5}{1}{6}{5}{2}{6}{5}{3}{6}{5}{4}{6}",
-        format_tex_field(&tail),
-        format_tex_field(&before),
-        format_tex_field(keyword),
-        format_tex_field(&after),
-        format_tex_field(&head),
-        "{",
-        "}"
-    ));
-    if config.auto_ref || config.input_ref {
-        output.push_str(&format!("{}{}{}", "{", format_tex_field(reference), "}"));
-    }
-    output
-}
-
-fn format_roff_field(s: &str) -> String {
-    s.replace('\"', "\"\"")
-}
-
-fn format_roff_line(
-    config: &Config,
-    word_ref: &WordRef,
-    line: &str,
-    chars_line: &[char],
-    reference: &str,
-) -> String {
-    let mut output = String::new();
-    output.push_str(&format!(".{}", config.macro_name));
-    let all_before = if config.input_ref {
-        let before = &line[0..word_ref.position];
-        let before_start_trim_offset =
-            word_ref.position - before.trim_start_matches(reference).trim_start().len();
-        let before_end_index = before.len();
-        &chars_line[before_start_trim_offset..cmp::max(before_end_index, before_start_trim_offset)]
-    } else {
-        let before_chars_trim_idx = (0, word_ref.position);
-        &chars_line[before_chars_trim_idx.0..before_chars_trim_idx.1]
-    };
-    let keyword = &line[word_ref.position..word_ref.position_end];
-    let after_chars_trim_idx = (word_ref.position_end, chars_line.len());
-    let all_after = &chars_line[after_chars_trim_idx.0..after_chars_trim_idx.1];
-    let (tail, before, after, head) = get_output_chunks(all_before, keyword, all_after, config);
-    output.push_str(&format!(
-        " \"{}\" \"{}\" \"{}{}\" \"{}\"",
-        format_roff_field(&tail),
-        format_roff_field(&before),
-        format_roff_field(keyword),
-        format_roff_field(&after),
-        format_roff_field(&head)
-    ));
-    if config.auto_ref || config.input_ref {
-        output.push_str(&format!(" \"{}\"", format_roff_field(reference)));
-    }
-    output
-}
-
-fn write_traditional_output(
-    config: &Config,
-    file_map: &FileMap,
-    words: &BTreeSet<WordRef>,
-    output_filename: &str,
-) -> UResult<()> {
-    let mut writer: BufWriter<Box<dyn Write>> = BufWriter::new(if output_filename == "-" {
-        Box::new(stdout())
-    } else {
-        let file = File::create(output_filename).map_err_context(String::new)?;
-        Box::new(file)
-    });
-
-    let context_reg = Regex::new(&config.context_regex).unwrap();
-
-    for word_ref in words.iter() {
-        let file_map_value: &FileContent = file_map
-            .get(&(word_ref.filename))
-            .expect("Missing file in file map");
-        let FileContent {
-            ref lines,
-            ref chars_lines,
-            offset: _,
-        } = *(file_map_value);
-        let reference = get_reference(
-            config,
-            word_ref,
-            &lines[word_ref.local_line_nr],
-            &context_reg,
-        );
-        let output_line: String = match config.format {
-            OutFormat::Tex => format_tex_line(
-                config,
-                word_ref,
-                &lines[word_ref.local_line_nr],
-                &chars_lines[word_ref.local_line_nr],
-                &reference,
-            ),
-            OutFormat::Roff => format_roff_line(
-                config,
-                word_ref,
-                &lines[word_ref.local_line_nr],
-                &chars_lines[word_ref.local_line_nr],
-                &reference,
-            ),
-            OutFormat::Dumb => {
-                return Err(PtxError::DumbFormat.into());
-            }
-        };
-        writeln!(writer, "{}", output_line).map_err_context(String::new)?;
-    }
-    Ok(())
-}
-
-mod options {
-    pub static FILE: &str = "file";
-    pub static AUTO_REFERENCE: &str = "auto-reference";
-    pub static TRADITIONAL: &str = "traditional";
-    pub static FLAG_TRUNCATION: &str = "flag-truncation";
-    pub static MACRO_NAME: &str = "macro-name";
-    pub static FORMAT_ROFF: &str = "format=roff";
-    pub static RIGHT_SIDE_REFS: &str = "right-side-refs";
-    pub static SENTENCE_REGEXP: &str = "sentence-regexp";
-    pub static FORMAT_TEX: &str = "format=tex";
-    pub static WORD_REGEXP: &str = "word-regexp";
-    pub static BREAK_FILE: &str = "break-file";
-    pub static IGNORE_CASE: &str = "ignore-case";
-    pub static GAP_SIZE: &str = "gap-size";
-    pub static IGNORE_FILE: &str = "ignore-file";
-    pub static ONLY_FILE: &str = "only-file";
-    pub static REFERENCES: &str = "references";
-    pub static WIDTH: &str = "width";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    // let mut opts = Options::new();
-    let matches = uu_app().get_matches_from(args);
-
-    let mut input_files: Vec<String> = match &matches.values_of(options::FILE) {
-        Some(v) => v.clone().map(|v| v.to_owned()).collect(),
-        None => vec!["-".to_string()],
-    };
-
-    let config = get_config(&matches)?;
-    let word_filter = WordFilter::new(&matches, &config)?;
-    let file_map = read_input(&input_files, &config).map_err_context(String::new)?;
-    let word_set = create_word_set(&config, &word_filter, &file_map);
-    let output_file = if !config.gnu_ext && input_files.len() == 2 {
-        input_files.pop().unwrap()
-    } else {
-        "-".to_string()
-    };
-    write_traditional_output(&config, &file_map, &word_set, &output_file)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(BRIEF)
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-        .arg(
-            Arg::new(options::AUTO_REFERENCE)
-                .short('A')
-                .long(options::AUTO_REFERENCE)
-                .help("output automatically generated references")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::TRADITIONAL)
-                .short('G')
-                .long(options::TRADITIONAL)
-                .help("behave more like System V 'ptx'"),
-        )
-        .arg(
-            Arg::new(options::FLAG_TRUNCATION)
-                .short('F')
-                .long(options::FLAG_TRUNCATION)
-                .help("use STRING for flagging line truncations")
-                .value_name("STRING")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::MACRO_NAME)
-                .short('M')
-                .long(options::MACRO_NAME)
-                .help("macro name to use instead of 'xx'")
-                .value_name("STRING")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::FORMAT_ROFF)
-                .short('O')
-                .long(options::FORMAT_ROFF)
-                .help("generate output as roff directives"),
-        )
-        .arg(
-            Arg::new(options::RIGHT_SIDE_REFS)
-                .short('R')
-                .long(options::RIGHT_SIDE_REFS)
-                .help("put references at right, not counted in -w")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::SENTENCE_REGEXP)
-                .short('S')
-                .long(options::SENTENCE_REGEXP)
-                .help("for end of lines or end of sentences")
-                .value_name("REGEXP")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::FORMAT_TEX)
-                .short('T')
-                .long(options::FORMAT_TEX)
-                .help("generate output as TeX directives"),
-        )
-        .arg(
-            Arg::new(options::WORD_REGEXP)
-                .short('W')
-                .long(options::WORD_REGEXP)
-                .help("use REGEXP to match each keyword")
-                .value_name("REGEXP")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::BREAK_FILE)
-                .short('b')
-                .long(options::BREAK_FILE)
-                .help("word break characters in this FILE")
-                .value_name("FILE")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::IGNORE_CASE)
-                .short('f')
-                .long(options::IGNORE_CASE)
-                .help("fold lower case to upper case for sorting")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::GAP_SIZE)
-                .short('g')
-                .long(options::GAP_SIZE)
-                .help("gap size in columns between output fields")
-                .value_name("NUMBER")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::IGNORE_FILE)
-                .short('i')
-                .long(options::IGNORE_FILE)
-                .help("read ignore word list from FILE")
-                .value_name("FILE")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::ONLY_FILE)
-                .short('o')
-                .long(options::ONLY_FILE)
-                .help("read only word list from this FILE")
-                .value_name("FILE")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::REFERENCES)
-                .short('r')
-                .long(options::REFERENCES)
-                .help("first field of each line is a reference")
-                .value_name("FILE")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::WIDTH)
-                .short('w')
-                .long(options::WIDTH)
-                .help("output width in columns, reference excluded")
-                .value_name("NUMBER")
-                .takes_value(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_pwd/pwd.rs.html b/src/uu_pwd/pwd.rs.html deleted file mode 100644 index da0d53927..000000000 --- a/src/uu_pwd/pwd.rs.html +++ /dev/null @@ -1,348 +0,0 @@ -pwd.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Derek Chiang <derekchiang93@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use clap::{crate_version, App, Arg};
-use std::env;
-use std::io;
-use std::path::PathBuf;
-
-use uucore::display::println_verbatim;
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Display the full filename of the current working directory.";
-static OPT_LOGICAL: &str = "logical";
-static OPT_PHYSICAL: &str = "physical";
-
-fn physical_path() -> io::Result<PathBuf> {
-    // std::env::current_dir() is a thin wrapper around libc::getcwd().
-
-    // On Unix, getcwd() must return the physical path:
-    // https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html
-    #[cfg(unix)]
-    {
-        env::current_dir()
-    }
-
-    // On Windows we have to resolve it.
-    // On other systems we also resolve it, just in case.
-    #[cfg(not(unix))]
-    {
-        env::current_dir().and_then(|path| path.canonicalize())
-    }
-}
-
-fn logical_path() -> io::Result<PathBuf> {
-    // getcwd() on Windows seems to include symlinks, so this is easy.
-    #[cfg(windows)]
-    {
-        env::current_dir()
-    }
-
-    // If we're not on Windows we do things Unix-style.
-    //
-    // Typical Unix-like kernels don't actually keep track of the logical working
-    // directory. They know the precise directory a process is in, and the getcwd()
-    // syscall reconstructs a path from that.
-    //
-    // The logical working directory is maintained by the shell, in the $PWD
-    // environment variable. So we check carefully if that variable looks
-    // reasonable, and if not then we fall back to the physical path.
-    //
-    // POSIX: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/pwd.html
-    #[cfg(not(windows))]
-    {
-        use std::path::Path;
-        fn looks_reasonable(path: &Path) -> bool {
-            // First, check if it's an absolute path.
-            if !path.has_root() {
-                return false;
-            }
-
-            // Then, make sure there are no . or .. components.
-            // Path::components() isn't useful here, it normalizes those out.
-
-            // to_string_lossy() may allocate, but that's fine, we call this
-            // only once per run. It may also lose information, but not any
-            // information that we need for this check.
-            if path
-                .to_string_lossy()
-                .split(std::path::is_separator)
-                .any(|piece| piece == "." || piece == "..")
-            {
-                return false;
-            }
-
-            // Finally, check if it matches the directory we're in.
-            #[cfg(unix)]
-            {
-                use std::fs::metadata;
-                use std::os::unix::fs::MetadataExt;
-                let path_info = match metadata(path) {
-                    Ok(info) => info,
-                    Err(_) => return false,
-                };
-                let real_info = match metadata(".") {
-                    Ok(info) => info,
-                    Err(_) => return false,
-                };
-                if path_info.dev() != real_info.dev() || path_info.ino() != real_info.ino() {
-                    return false;
-                }
-            }
-
-            #[cfg(not(unix))]
-            {
-                use std::fs::canonicalize;
-                let canon_path = match canonicalize(path) {
-                    Ok(path) => path,
-                    Err(_) => return false,
-                };
-                let real_path = match canonicalize(".") {
-                    Ok(path) => path,
-                    Err(_) => return false,
-                };
-                if canon_path != real_path {
-                    return false;
-                }
-            }
-
-            true
-        }
-
-        match env::var_os("PWD").map(PathBuf::from) {
-            Some(value) if looks_reasonable(&value) => Ok(value),
-            _ => env::current_dir(),
-        }
-    }
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... FILE...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-    let cwd = if matches.is_present(OPT_LOGICAL) {
-        logical_path()
-    } else {
-        physical_path()
-    }
-    .map_err_context(|| "failed to get current directory".to_owned())?;
-
-    // \\?\ is a prefix Windows gives to paths under certain circumstances,
-    // including when canonicalizing them.
-    // With the right extension trait we can remove it non-lossily, but
-    // we print it lossily anyway, so no reason to bother.
-    #[cfg(windows)]
-    let cwd = cwd
-        .to_string_lossy()
-        .strip_prefix(r"\\?\")
-        .map(Into::into)
-        .unwrap_or(cwd);
-
-    println_verbatim(&cwd).map_err_context(|| "failed to print current directory".to_owned())?;
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_LOGICAL)
-                .short('L')
-                .long(OPT_LOGICAL)
-                .help("use PWD from environment, even if it contains symlinks"),
-        )
-        .arg(
-            Arg::new(OPT_PHYSICAL)
-                .short('P')
-                .long(OPT_PHYSICAL)
-                .overrides_with(OPT_LOGICAL)
-                .help("avoid all symlinks"),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_readlink/readlink.rs.html b/src/uu_readlink/readlink.rs.html deleted file mode 100644 index e9ee965f0..000000000 --- a/src/uu_readlink/readlink.rs.html +++ /dev/null @@ -1,362 +0,0 @@ -readlink.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Haitao Li <lihaitao@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) errno
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::fs;
-use std::io::{stdout, Write};
-use std::path::{Path, PathBuf};
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
-use uucore::fs::{canonicalize, MissingHandling, ResolveMode};
-
-const ABOUT: &str = "Print value of a symbolic link or canonical file name.";
-const OPT_CANONICALIZE: &str = "canonicalize";
-const OPT_CANONICALIZE_MISSING: &str = "canonicalize-missing";
-const OPT_CANONICALIZE_EXISTING: &str = "canonicalize-existing";
-const OPT_NO_NEWLINE: &str = "no-newline";
-const OPT_QUIET: &str = "quiet";
-const OPT_SILENT: &str = "silent";
-const OPT_VERBOSE: &str = "verbose";
-const OPT_ZERO: &str = "zero";
-
-const ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let mut no_newline = matches.is_present(OPT_NO_NEWLINE);
-    let use_zero = matches.is_present(OPT_ZERO);
-    let silent = matches.is_present(OPT_SILENT) || matches.is_present(OPT_QUIET);
-    let verbose = matches.is_present(OPT_VERBOSE);
-
-    let res_mode = if matches.is_present(OPT_CANONICALIZE)
-        || matches.is_present(OPT_CANONICALIZE_EXISTING)
-        || matches.is_present(OPT_CANONICALIZE_MISSING)
-    {
-        ResolveMode::Logical
-    } else {
-        ResolveMode::None
-    };
-
-    let can_mode = if matches.is_present(OPT_CANONICALIZE_EXISTING) {
-        MissingHandling::Existing
-    } else if matches.is_present(OPT_CANONICALIZE_MISSING) {
-        MissingHandling::Missing
-    } else {
-        MissingHandling::Normal
-    };
-
-    let files: Vec<String> = matches
-        .values_of(ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-    if files.is_empty() {
-        return Err(UUsageError::new(1, "missing operand"));
-    }
-
-    if no_newline && files.len() > 1 && !silent {
-        show_error!("ignoring --no-newline with multiple arguments");
-        no_newline = false;
-    }
-
-    for f in &files {
-        let p = PathBuf::from(f);
-        let path_result = if res_mode == ResolveMode::None {
-            fs::read_link(&p)
-        } else {
-            canonicalize(&p, can_mode, res_mode)
-        };
-        match path_result {
-            Ok(path) => show(&path, no_newline, use_zero).map_err_context(String::new)?,
-            Err(err) => {
-                if verbose {
-                    return Err(USimpleError::new(
-                        1,
-                        format!("{}: errno {}", f.maybe_quote(), err.raw_os_error().unwrap()),
-                    ));
-                } else {
-                    return Err(1.into());
-                }
-            }
-        }
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_CANONICALIZE)
-                .short('f')
-                .long(OPT_CANONICALIZE)
-                .help(
-                    "canonicalize by following every symlink in every component of the \
-                     given name recursively; all but the last component must exist",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_CANONICALIZE_EXISTING)
-                .short('e')
-                .long("canonicalize-existing")
-                .help(
-                    "canonicalize by following every symlink in every component of the \
-                     given name recursively, all components must exist",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_CANONICALIZE_MISSING)
-                .short('m')
-                .long(OPT_CANONICALIZE_MISSING)
-                .help(
-                    "canonicalize by following every symlink in every component of the \
-                     given name recursively, without requirements on components existence",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_NO_NEWLINE)
-                .short('n')
-                .long(OPT_NO_NEWLINE)
-                .help("do not output the trailing delimiter"),
-        )
-        .arg(
-            Arg::new(OPT_QUIET)
-                .short('q')
-                .long(OPT_QUIET)
-                .help("suppress most error messages"),
-        )
-        .arg(
-            Arg::new(OPT_SILENT)
-                .short('s')
-                .long(OPT_SILENT)
-                .help("suppress most error messages"),
-        )
-        .arg(
-            Arg::new(OPT_VERBOSE)
-                .short('v')
-                .long(OPT_VERBOSE)
-                .help("report error message"),
-        )
-        .arg(
-            Arg::new(OPT_ZERO)
-                .short('z')
-                .long(OPT_ZERO)
-                .help("separate output with NUL rather than newline"),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true),
-        )
-}
-
-fn show(path: &Path, no_newline: bool, use_zero: bool) -> std::io::Result<()> {
-    let path = path.to_str().unwrap();
-    if use_zero {
-        print!("{}\0", path);
-    } else if no_newline {
-        print!("{}", path);
-    } else {
-        println!("{}", path);
-    }
-    stdout().flush()
-}
-
-
- \ No newline at end of file diff --git a/src/uu_realpath/realpath.rs.html b/src/uu_realpath/realpath.rs.html deleted file mode 100644 index 6d2d44b26..000000000 --- a/src/uu_realpath/realpath.rs.html +++ /dev/null @@ -1,344 +0,0 @@ -realpath.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) 2014 Vsevolod Velichko <torkvemada@sorokdva.net>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) retcode
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::{
-    io::{stdout, Write},
-    path::{Path, PathBuf},
-};
-use uucore::{
-    display::{print_verbatim, Quotable},
-    error::{FromIo, UResult},
-    fs::{canonicalize, MissingHandling, ResolveMode},
-};
-
-static ABOUT: &str = "print the resolved path";
-
-static OPT_QUIET: &str = "quiet";
-static OPT_STRIP: &str = "strip";
-static OPT_ZERO: &str = "zero";
-static OPT_PHYSICAL: &str = "physical";
-static OPT_LOGICAL: &str = "logical";
-const OPT_CANONICALIZE_MISSING: &str = "canonicalize-missing";
-const OPT_CANONICALIZE_EXISTING: &str = "canonicalize-existing";
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... FILE...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    /*  the list of files */
-
-    let paths: Vec<PathBuf> = matches
-        .values_of(ARG_FILES)
-        .unwrap()
-        .map(PathBuf::from)
-        .collect();
-
-    let strip = matches.is_present(OPT_STRIP);
-    let zero = matches.is_present(OPT_ZERO);
-    let quiet = matches.is_present(OPT_QUIET);
-    let logical = matches.is_present(OPT_LOGICAL);
-    let can_mode = if matches.is_present(OPT_CANONICALIZE_EXISTING) {
-        MissingHandling::Existing
-    } else if matches.is_present(OPT_CANONICALIZE_MISSING) {
-        MissingHandling::Missing
-    } else {
-        MissingHandling::Normal
-    };
-    for path in &paths {
-        let result = resolve_path(path, strip, zero, logical, can_mode);
-        if !quiet {
-            show_if_err!(result.map_err_context(|| path.maybe_quote().to_string()));
-        }
-    }
-    // Although we return `Ok`, it is possible that a call to
-    // `show!()` above has set the exit code for the program to a
-    // non-zero integer.
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_QUIET)
-                .short('q')
-                .long(OPT_QUIET)
-                .help("Do not print warnings for invalid paths"),
-        )
-        .arg(
-            Arg::new(OPT_STRIP)
-                .short('s')
-                .long(OPT_STRIP)
-                .help("Only strip '.' and '..' components, but don't resolve symbolic links"),
-        )
-        .arg(
-            Arg::new(OPT_ZERO)
-                .short('z')
-                .long(OPT_ZERO)
-                .help("Separate output filenames with \\0 rather than newline"),
-        )
-        .arg(
-            Arg::new(OPT_LOGICAL)
-                .short('L')
-                .long(OPT_LOGICAL)
-                .help("resolve '..' components before symlinks"),
-        )
-        .arg(
-            Arg::new(OPT_PHYSICAL)
-                .short('P')
-                .long(OPT_PHYSICAL)
-                .overrides_with_all(&[OPT_STRIP, OPT_LOGICAL])
-                .help("resolve symlinks as encountered (default)"),
-        )
-        .arg(
-            Arg::new(OPT_CANONICALIZE_EXISTING)
-                .short('e')
-                .long(OPT_CANONICALIZE_EXISTING)
-                .help(
-                    "canonicalize by following every symlink in every component of the \
-                     given name recursively, all components must exist",
-                ),
-        )
-        .arg(
-            Arg::new(OPT_CANONICALIZE_MISSING)
-                .short('m')
-                .long(OPT_CANONICALIZE_MISSING)
-                .help(
-                    "canonicalize by following every symlink in every component of the \
-                     given name recursively, without requirements on components existence",
-                ),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .required(true)
-                .min_values(1),
-        )
-}
-
-/// Resolve a path to an absolute form and print it.
-///
-/// If `strip` is `true`, then this function does not attempt to resolve
-/// symbolic links in the path. If `zero` is `true`, then this function
-/// prints the path followed by the null byte (`'\0'`) instead of a
-/// newline character (`'\n'`).
-///
-/// # Errors
-///
-/// This function returns an error if there is a problem resolving
-/// symbolic links.
-fn resolve_path(
-    p: &Path,
-    strip: bool,
-    zero: bool,
-    logical: bool,
-    can_mode: MissingHandling,
-) -> std::io::Result<()> {
-    let resolve = if strip {
-        ResolveMode::None
-    } else if logical {
-        ResolveMode::Logical
-    } else {
-        ResolveMode::Physical
-    };
-    let abs = canonicalize(p, can_mode, resolve)?;
-    let line_ending = if zero { b'\0' } else { b'\n' };
-
-    print_verbatim(&abs)?;
-    stdout().write_all(&[line_ending])?;
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_relpath/relpath.rs.html b/src/uu_relpath/relpath.rs.html deleted file mode 100644 index 21693d1b2..000000000 --- a/src/uu_relpath/relpath.rs.html +++ /dev/null @@ -1,192 +0,0 @@ -relpath.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-87
-88
-89
-90
-91
-92
-93
-94
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) 2014 Vsevolod Velichko <torkvemada@sorokdva.net>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) subpath absto absfrom absbase
-
-use clap::{crate_version, App, Arg};
-use std::env;
-use std::path::{Path, PathBuf};
-use uucore::display::println_verbatim;
-use uucore::error::{FromIo, UResult};
-use uucore::fs::{canonicalize, MissingHandling, ResolveMode};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "Convert TO destination to the relative path from the FROM dir.
-If FROM path is omitted, current working dir will be used.";
-
-mod options {
-    pub const DIR: &str = "DIR";
-    pub const TO: &str = "TO";
-    pub const FROM: &str = "FROM";
-}
-
-fn usage() -> String {
-    format!("{} [-d DIR] TO [FROM]", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let to = Path::new(matches.value_of(options::TO).unwrap()).to_path_buf(); // required
-    let from = match matches.value_of(options::FROM) {
-        Some(p) => Path::new(p).to_path_buf(),
-        None => env::current_dir().unwrap(),
-    };
-    let absto = canonicalize(to, MissingHandling::Normal, ResolveMode::Logical)
-        .map_err_context(String::new)?;
-    let absfrom = canonicalize(from, MissingHandling::Normal, ResolveMode::Logical)
-        .map_err_context(String::new)?;
-
-    if matches.is_present(options::DIR) {
-        let base = Path::new(&matches.value_of(options::DIR).unwrap()).to_path_buf();
-        let absbase = canonicalize(base, MissingHandling::Normal, ResolveMode::Logical)
-            .map_err_context(String::new)?;
-        if !absto.as_path().starts_with(absbase.as_path())
-            || !absfrom.as_path().starts_with(absbase.as_path())
-        {
-            return println_verbatim(absto).map_err_context(String::new);
-        }
-    }
-
-    let mut suffix_pos = 0;
-    for (f, t) in absfrom.components().zip(absto.components()) {
-        if f == t {
-            suffix_pos += 1;
-        } else {
-            break;
-        }
-    }
-
-    let mut result = PathBuf::new();
-    absfrom
-        .components()
-        .skip(suffix_pos)
-        .map(|_| result.push(".."))
-        .last();
-    absto
-        .components()
-        .skip(suffix_pos)
-        .map(|x| result.push(x.as_os_str()))
-        .last();
-
-    println_verbatim(result).map_err_context(String::new)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(Arg::new(options::DIR).short('d').takes_value(true).help(
-            "If any of FROM and TO is not subpath of DIR, output absolute path instead of relative",
-        ))
-        .arg(Arg::new(options::TO).required(true).takes_value(true))
-        .arg(Arg::new(options::FROM).takes_value(true))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_rm/rm.rs.html b/src/uu_rm/rm.rs.html deleted file mode 100644 index e20306408..000000000 --- a/src/uu_rm/rm.rs.html +++ /dev/null @@ -1,918 +0,0 @@ -rm.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (path) eacces
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use remove_dir_all::remove_dir_all;
-use std::collections::VecDeque;
-use std::fs;
-use std::io::{stderr, stdin, BufRead, Write};
-use std::ops::BitOr;
-use std::path::{Path, PathBuf};
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError, UUsageError};
-use walkdir::{DirEntry, WalkDir};
-
-#[derive(Eq, PartialEq, Clone, Copy)]
-enum InteractiveMode {
-    None,
-    Once,
-    Always,
-}
-
-struct Options {
-    force: bool,
-    interactive: InteractiveMode,
-    #[allow(dead_code)]
-    one_fs: bool,
-    preserve_root: bool,
-    recursive: bool,
-    dir: bool,
-    verbose: bool,
-}
-
-static ABOUT: &str = "Remove (unlink) the FILE(s)";
-static OPT_DIR: &str = "dir";
-static OPT_INTERACTIVE: &str = "interactive";
-static OPT_FORCE: &str = "force";
-static OPT_NO_PRESERVE_ROOT: &str = "no-preserve-root";
-static OPT_ONE_FILE_SYSTEM: &str = "one-file-system";
-static OPT_PRESERVE_ROOT: &str = "preserve-root";
-static OPT_PROMPT: &str = "prompt";
-static OPT_PROMPT_MORE: &str = "prompt-more";
-static OPT_RECURSIVE: &str = "recursive";
-static OPT_RECURSIVE_R: &str = "recursive_R";
-static OPT_VERBOSE: &str = "verbose";
-static PRESUME_INPUT_TTY: &str = "-presume-input-tty";
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... FILE...", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    String::from(
-        "By default, rm does not remove directories.  Use the --recursive (-r or -R)
-        option to remove each listed directory, too, along with all of its contents
-
-        To remove a file whose name starts with a '-', for example '-foo',
-        use one of these commands:
-        rm -- -foo
-
-        rm ./-foo
-
-        Note that if you use rm to remove a file, it might be possible to recover
-        some of its contents, given sufficient expertise and/or time.  For greater
-        assurance that the contents are truly unrecoverable, consider using shred.",
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let long_usage = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&long_usage[..])
-        .get_matches_from(args);
-
-    let files: Vec<String> = matches
-        .values_of(ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let force = matches.is_present(OPT_FORCE);
-
-    if files.is_empty() && !force {
-        // Still check by hand and not use clap
-        // Because "rm -f" is a thing
-        return Err(UUsageError::new(1, "missing operand"));
-    } else {
-        let options = Options {
-            force,
-            interactive: {
-                if matches.is_present(OPT_PROMPT) {
-                    InteractiveMode::Always
-                } else if matches.is_present(OPT_PROMPT_MORE) {
-                    InteractiveMode::Once
-                } else if matches.is_present(OPT_INTERACTIVE) {
-                    match matches.value_of(OPT_INTERACTIVE).unwrap() {
-                        "none" => InteractiveMode::None,
-                        "once" => InteractiveMode::Once,
-                        "always" => InteractiveMode::Always,
-                        val => {
-                            return Err(USimpleError::new(
-                                1,
-                                format!("Invalid argument to interactive ({})", val),
-                            ))
-                        }
-                    }
-                } else {
-                    InteractiveMode::None
-                }
-            },
-            one_fs: matches.is_present(OPT_ONE_FILE_SYSTEM),
-            preserve_root: !matches.is_present(OPT_NO_PRESERVE_ROOT),
-            recursive: matches.is_present(OPT_RECURSIVE) || matches.is_present(OPT_RECURSIVE_R),
-            dir: matches.is_present(OPT_DIR),
-            verbose: matches.is_present(OPT_VERBOSE),
-        };
-        if options.interactive == InteractiveMode::Once && (options.recursive || files.len() > 3) {
-            let msg = if options.recursive {
-                "Remove all arguments recursively? "
-            } else {
-                "Remove all arguments? "
-            };
-            if !prompt(msg) {
-                return Ok(());
-            }
-        }
-
-        if remove(files, options) {
-            return Err(1.into());
-        }
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-
-        .arg(
-            Arg::new(OPT_FORCE)
-            .short('f')
-            .long(OPT_FORCE)
-            .multiple_occurrences(true)
-            .help("ignore nonexistent files and arguments, never prompt")
-        )
-        .arg(
-            Arg::new(OPT_PROMPT)
-            .short('i')
-            .long("prompt before every removal")
-        )
-        .arg(
-            Arg::new(OPT_PROMPT_MORE)
-            .short('I')
-            .help("prompt once before removing more than three files, or when removing recursively. Less intrusive than -i, while still giving some protection against most mistakes")
-        )
-        .arg(
-            Arg::new(OPT_INTERACTIVE)
-            .long(OPT_INTERACTIVE)
-            .help("prompt according to WHEN: never, once (-I), or always (-i). Without WHEN, prompts always")
-            .value_name("WHEN")
-            .takes_value(true)
-        )
-        .arg(
-            Arg::new(OPT_ONE_FILE_SYSTEM)
-            .long(OPT_ONE_FILE_SYSTEM)
-            .help("when removing a hierarchy recursively, skip any directory that is on a file system different from that of the corresponding command line argument (NOT IMPLEMENTED)")
-        )
-        .arg(
-            Arg::new(OPT_NO_PRESERVE_ROOT)
-            .long(OPT_NO_PRESERVE_ROOT)
-            .help("do not treat '/' specially")
-        )
-        .arg(
-            Arg::new(OPT_PRESERVE_ROOT)
-            .long(OPT_PRESERVE_ROOT)
-            .help("do not remove '/' (default)")
-        )
-        .arg(
-            Arg::new(OPT_RECURSIVE).short('r')
-            .multiple_occurrences(true)
-            .long(OPT_RECURSIVE)
-            .help("remove directories and their contents recursively")
-        )
-        .arg(
-            // To mimic GNU's behavior we also want the '-R' flag. However, using clap's
-            // alias method 'visible_alias("R")' would result in a long '--R' flag.
-            Arg::new(OPT_RECURSIVE_R).short('R')
-            .help("Equivalent to -r")
-        )
-        .arg(
-            Arg::new(OPT_DIR)
-            .short('d')
-            .long(OPT_DIR)
-            .help("remove empty directories")
-        )
-        .arg(
-            Arg::new(OPT_VERBOSE)
-            .short('v')
-            .long(OPT_VERBOSE)
-            .help("explain what is being done")
-        )
-        // From the GNU source code:
-        // This is solely for testing.
-        // Do not document.
-        // It is relatively difficult to ensure that there is a tty on stdin.
-        // Since rm acts differently depending on that, without this option,
-        // it'd be harder to test the parts of rm that depend on that setting.
-        // In contrast with Arg::long, Arg::alias does not strip leading
-        // hyphens. Therefore it supports 3 leading hyphens.
-        .arg(
-            Arg::new(PRESUME_INPUT_TTY)
-            .long(PRESUME_INPUT_TTY)
-            .alias(PRESUME_INPUT_TTY)
-            .hide(true)
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-            .multiple_occurrences(true)
-            .takes_value(true)
-            .min_values(1)
-        )
-}
-
-// TODO: implement one-file-system (this may get partially implemented in walkdir)
-fn remove(files: Vec<String>, options: Options) -> bool {
-    let mut had_err = false;
-
-    for filename in &files {
-        let file = Path::new(filename);
-        had_err = match file.symlink_metadata() {
-            Ok(metadata) => {
-                if metadata.is_dir() {
-                    handle_dir(file, &options)
-                } else if is_symlink_dir(&metadata) {
-                    remove_dir(file, &options)
-                } else {
-                    remove_file(file, &options)
-                }
-            }
-            Err(_e) => {
-                // TODO: actually print out the specific error
-                // TODO: When the error is not about missing files
-                // (e.g., permission), even rm -f should fail with
-                // outputting the error, but there's no easy eay.
-                if !options.force {
-                    show_error!(
-                        "cannot remove {}: No such file or directory",
-                        filename.quote()
-                    );
-                    true
-                } else {
-                    false
-                }
-            }
-        }
-        .bitor(had_err);
-    }
-
-    had_err
-}
-
-fn handle_dir(path: &Path, options: &Options) -> bool {
-    let mut had_err = false;
-
-    let is_root = path.has_root() && path.parent().is_none();
-    if options.recursive && (!is_root || !options.preserve_root) {
-        if options.interactive != InteractiveMode::Always && !options.verbose {
-            // we need the extra crate because apparently fs::remove_dir_all() does not function
-            // correctly on Windows
-            if let Err(e) = remove_dir_all(path) {
-                had_err = true;
-                if e.kind() == std::io::ErrorKind::PermissionDenied {
-                    // GNU compatibility (rm/fail-eacces.sh)
-                    // here, GNU doesn't use some kind of remove_dir_all
-                    // It will show directory+file
-                    show_error!("cannot remove {}: {}", path.quote(), "Permission denied");
-                } else {
-                    show_error!("cannot remove {}: {}", path.quote(), e);
-                }
-            }
-        } else {
-            let mut dirs: VecDeque<DirEntry> = VecDeque::new();
-
-            for entry in WalkDir::new(path) {
-                match entry {
-                    Ok(entry) => {
-                        let file_type = entry.file_type();
-                        if file_type.is_dir() {
-                            dirs.push_back(entry);
-                        } else {
-                            had_err = remove_file(entry.path(), options).bitor(had_err);
-                        }
-                    }
-                    Err(e) => {
-                        had_err = true;
-                        show_error!("recursing in {}: {}", path.quote(), e);
-                    }
-                }
-            }
-
-            for dir in dirs.iter().rev() {
-                had_err = remove_dir(dir.path(), options).bitor(had_err);
-            }
-        }
-    } else if options.dir && (!is_root || !options.preserve_root) {
-        had_err = remove_dir(path, options).bitor(had_err);
-    } else if options.recursive {
-        show_error!("could not remove directory {}", path.quote());
-        had_err = true;
-    } else {
-        show_error!(
-            "cannot remove {}: Is a directory", // GNU's rm error message does not include help
-            path.quote()
-        );
-        had_err = true;
-    }
-
-    had_err
-}
-
-fn remove_dir(path: &Path, options: &Options) -> bool {
-    let response = if options.interactive == InteractiveMode::Always {
-        prompt_file(path, true)
-    } else {
-        true
-    };
-    if response {
-        if let Ok(mut read_dir) = fs::read_dir(path) {
-            if options.dir || options.recursive {
-                if read_dir.next().is_none() {
-                    match fs::remove_dir(path) {
-                        Ok(_) => {
-                            if options.verbose {
-                                println!("removed directory {}", normalize(path).quote());
-                            }
-                        }
-                        Err(e) => {
-                            if e.kind() == std::io::ErrorKind::PermissionDenied {
-                                // GNU compatibility (rm/fail-eacces.sh)
-                                show_error!(
-                                    "cannot remove {}: {}",
-                                    path.quote(),
-                                    "Permission denied"
-                                );
-                            } else {
-                                show_error!("cannot remove {}: {}", path.quote(), e);
-                            }
-                            return true;
-                        }
-                    }
-                } else {
-                    // directory can be read but is not empty
-                    show_error!("cannot remove {}: Directory not empty", path.quote());
-                    return true;
-                }
-            } else {
-                // called to remove a symlink_dir (windows) without "-r"/"-R" or "-d"
-                show_error!("cannot remove {}: Is a directory", path.quote());
-                return true;
-            }
-        } else {
-            // GNU's rm shows this message if directory is empty but not readable
-            show_error!("cannot remove {}: Directory not empty", path.quote());
-            return true;
-        }
-    }
-
-    false
-}
-
-fn remove_file(path: &Path, options: &Options) -> bool {
-    let response = if options.interactive == InteractiveMode::Always {
-        prompt_file(path, false)
-    } else {
-        true
-    };
-    if response {
-        match fs::remove_file(path) {
-            Ok(_) => {
-                if options.verbose {
-                    println!("removed {}", normalize(path).quote());
-                }
-            }
-            Err(e) => {
-                if e.kind() == std::io::ErrorKind::PermissionDenied {
-                    // GNU compatibility (rm/fail-eacces.sh)
-                    show_error!("cannot remove {}: {}", path.quote(), "Permission denied");
-                } else {
-                    show_error!("cannot remove {}: {}", path.quote(), e);
-                }
-                return true;
-            }
-        }
-    }
-
-    false
-}
-
-fn prompt_file(path: &Path, is_dir: bool) -> bool {
-    if is_dir {
-        prompt(&(format!("rm: remove directory {}? ", path.quote())))
-    } else {
-        prompt(&(format!("rm: remove file {}? ", path.quote())))
-    }
-}
-
-fn normalize(path: &Path) -> PathBuf {
-    // copied from https://github.com/rust-lang/cargo/blob/2e4cfc2b7d43328b207879228a2ca7d427d188bb/src/cargo/util/paths.rs#L65-L90
-    // both projects are MIT https://github.com/rust-lang/cargo/blob/master/LICENSE-MIT
-    // for std impl progress see rfc https://github.com/rust-lang/rfcs/issues/2208
-    // TODO: replace this once that lands
-    uucore::fs::normalize_path(path)
-}
-
-fn prompt(msg: &str) -> bool {
-    let _ = stderr().write_all(msg.as_bytes());
-    let _ = stderr().flush();
-
-    let mut buf = Vec::new();
-    let stdin = stdin();
-    let mut stdin = stdin.lock();
-
-    match stdin.read_until(b'\n', &mut buf) {
-        Ok(x) if x > 0 => matches!(buf[0], b'y' | b'Y'),
-        _ => false,
-    }
-}
-
-#[cfg(not(windows))]
-fn is_symlink_dir(_metadata: &fs::Metadata) -> bool {
-    false
-}
-
-#[cfg(windows)]
-use std::os::windows::prelude::MetadataExt;
-
-#[cfg(windows)]
-fn is_symlink_dir(metadata: &fs::Metadata) -> bool {
-    use winapi::um::winnt::FILE_ATTRIBUTE_DIRECTORY;
-
-    metadata.file_type().is_symlink()
-        && ((metadata.file_attributes() & FILE_ATTRIBUTE_DIRECTORY) != 0)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_rmdir/rmdir.rs.html b/src/uu_rmdir/rmdir.rs.html deleted file mode 100644 index 6ab24c94c..000000000 --- a/src/uu_rmdir/rmdir.rs.html +++ /dev/null @@ -1,414 +0,0 @@ -rmdir.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) ENOTDIR
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::fs::{read_dir, remove_dir};
-use std::io;
-use std::path::Path;
-use uucore::display::Quotable;
-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";
-static OPT_PARENTS: &str = "parents";
-static OPT_VERBOSE: &str = "verbose";
-
-static ARG_DIRS: &str = "dirs";
-
-fn usage() -> String {
-    format!("{0} [OPTION]... DIRECTORY...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let opts = Opts {
-        ignore: matches.is_present(OPT_IGNORE_FAIL_NON_EMPTY),
-        parents: matches.is_present(OPT_PARENTS),
-        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;
-
-            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 bytes = path.as_os_str().as_bytes();
-                if error.raw_os_error() == Some(libc::ENOTDIR) && bytes.ends_with(b"/") {
-                    // Strip the trailing slash or .symlink_metadata() will follow the symlink
-                    let no_slash: &Path = OsStr::from_bytes(&bytes[..bytes.len() - 1]).as_ref();
-                    if is_symlink(no_slash).unwrap_or(false)
-                        && points_to_directory(no_slash).unwrap_or(true)
-                    {
-                        show_error!(
-                            "failed to remove {}: Symbolic link not followed",
-                            path.quote()
-                        );
-                        continue;
-                    }
-                }
-            }
-
-            show_error!("failed to remove {}: {}", path.quote(), strip_errno(&error));
-        }
-    }
-
-    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.quote());
-    }
-    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<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_IGNORE_FAIL_NON_EMPTY)
-                .long(OPT_IGNORE_FAIL_NON_EMPTY)
-                .help("ignore each failure that is solely because a directory is non-empty"),
-        )
-        .arg(Arg::new(OPT_PARENTS).short('p').long(OPT_PARENTS).help(
-            "remove DIRECTORY and its ancestors; e.g.,
-                  'rmdir -p a/b/c' is similar to rmdir a/b/c a/b a",
-        ))
-        .arg(
-            Arg::new(OPT_VERBOSE)
-                .short('v')
-                .long(OPT_VERBOSE)
-                .help("output a diagnostic for every directory processed"),
-        )
-        .arg(
-            Arg::new(ARG_DIRS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1)
-                .required(true)
-                .allow_invalid_utf8(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_runcon/errors.rs.html b/src/uu_runcon/errors.rs.html deleted file mode 100644 index 03855c2b1..000000000 --- a/src/uu_runcon/errors.rs.html +++ /dev/null @@ -1,236 +0,0 @@ -errors.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-
use std::ffi::OsString;
-use std::fmt::{Display, Formatter, Write};
-use std::io;
-use std::str::Utf8Error;
-
-use uucore::display::Quotable;
-use uucore::error::UError;
-
-pub(crate) type Result<T> = std::result::Result<T, Error>;
-
-// This list is NOT exhaustive. This command might perform an `execvp()` to run
-// a different program. When that happens successfully, the exit status of this
-// process will be the exit status of that program.
-pub(crate) mod error_exit_status {
-    pub const NOT_FOUND: i32 = 127;
-    pub const COULD_NOT_EXECUTE: i32 = 126;
-    pub const ANOTHER_ERROR: i32 = libc::EXIT_FAILURE;
-}
-
-#[derive(thiserror::Error, Debug)]
-pub(crate) enum Error {
-    #[error("No command is specified")]
-    MissingCommand,
-
-    #[error("SELinux is not enabled")]
-    SELinuxNotEnabled,
-
-    #[error(transparent)]
-    NotUTF8(#[from] Utf8Error),
-
-    #[error(transparent)]
-    CommandLine(#[from] clap::Error),
-
-    #[error("{operation} failed")]
-    SELinux {
-        operation: &'static str,
-        source: selinux::errors::Error,
-    },
-
-    #[error("{operation} failed")]
-    Io {
-        operation: &'static str,
-        source: io::Error,
-    },
-
-    #[error("{operation} failed on {}", .operand1.quote())]
-    Io1 {
-        operation: &'static str,
-        operand1: OsString,
-        source: io::Error,
-    },
-}
-
-impl Error {
-    pub(crate) fn from_io(operation: &'static str, source: io::Error) -> Self {
-        Self::Io { operation, source }
-    }
-
-    pub(crate) fn from_io1(
-        operation: &'static str,
-        operand1: impl Into<OsString>,
-        source: io::Error,
-    ) -> Self {
-        Self::Io1 {
-            operation,
-            operand1: operand1.into(),
-            source,
-        }
-    }
-
-    pub(crate) fn from_selinux(operation: &'static str, source: selinux::errors::Error) -> Self {
-        Self::SELinux { operation, source }
-    }
-}
-
-pub(crate) fn write_full_error<W>(writer: &mut W, err: &dyn std::error::Error) -> std::fmt::Result
-where
-    W: Write,
-{
-    write!(writer, "{}", err)?;
-    let mut err = err;
-    while let Some(source) = err.source() {
-        err = source;
-        write!(writer, ": {}", err)?;
-    }
-    write!(writer, ".")?;
-    Ok(())
-}
-
-#[derive(Debug)]
-pub(crate) struct RunconError {
-    inner: Error,
-    code: i32,
-}
-
-impl RunconError {
-    pub(crate) fn new(e: Error) -> RunconError {
-        RunconError::with_code(error_exit_status::ANOTHER_ERROR, e)
-    }
-
-    pub(crate) fn with_code(code: i32, e: Error) -> RunconError {
-        RunconError { inner: e, code }
-    }
-}
-
-impl std::error::Error for RunconError {}
-impl UError for RunconError {
-    fn code(&self) -> i32 {
-        self.code
-    }
-}
-impl Display for RunconError {
-    fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
-        write_full_error(f, &self.inner)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_runcon/runcon.rs.html b/src/uu_runcon/runcon.rs.html deleted file mode 100644 index 01591b0e4..000000000 --- a/src/uu_runcon/runcon.rs.html +++ /dev/null @@ -1,854 +0,0 @@ -runcon.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-
// spell-checker:ignore (vars) RFILE
-
-use uucore::error::{UResult, UUsageError};
-
-use clap::{App, Arg};
-use selinux::{OpaqueSecurityContext, SecurityClass, SecurityContext};
-
-use std::borrow::Cow;
-use std::ffi::{CStr, CString, OsStr, OsString};
-use std::os::raw::c_char;
-use std::os::unix::ffi::OsStrExt;
-use std::{io, ptr};
-
-mod errors;
-
-use errors::error_exit_status;
-use errors::{Error, Result, RunconError};
-
-const VERSION: &str = env!("CARGO_PKG_VERSION");
-const ABOUT: &str = "Run command with specified security context.";
-const DESCRIPTION: &str = "Run COMMAND with completely-specified CONTEXT, or with current or \
-                      transitioned security context modified by one or more of \
-                      LEVEL, ROLE, TYPE, and USER.\n\n\
-                      If none of --compute, --type, --user, --role or --range is specified, \
-                      then the first argument is used as the complete context.\n\n\
-                      Note that only carefully-chosen contexts are likely to successfully run.\n\n\
-                      With neither CONTEXT nor COMMAND are specified, \
-                      then this prints the current security context.";
-
-pub mod options {
-    pub const COMPUTE: &str = "compute";
-
-    pub const USER: &str = "user";
-    pub const ROLE: &str = "role";
-    pub const TYPE: &str = "type";
-    pub const RANGE: &str = "range";
-}
-
-fn get_usage() -> String {
-    format!(
-        "{0} [CONTEXT COMMAND [ARG...]]\n    \
-         {0} [-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] COMMAND [ARG...]",
-        uucore::execution_phrase()
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = get_usage();
-
-    let config = uu_app().override_usage(usage.as_ref());
-
-    let options = match parse_command_line(config, args) {
-        Ok(r) => r,
-        Err(r) => {
-            if let Error::CommandLine(ref r) = r {
-                match r.kind {
-                    clap::ErrorKind::DisplayHelp | clap::ErrorKind::DisplayVersion => {
-                        println!("{}", r);
-                        return Ok(());
-                    }
-                    _ => {}
-                }
-            }
-            return Err(UUsageError::new(
-                error_exit_status::ANOTHER_ERROR,
-                format!("{}", r),
-            ));
-        }
-    };
-
-    match &options.mode {
-        CommandLineMode::Print => print_current_context().map_err(|e| RunconError::new(e).into()),
-        CommandLineMode::PlainContext { context, command } => {
-            get_plain_context(context)
-                .and_then(set_next_exec_context)
-                .map_err(RunconError::new)?;
-            // On successful execution, the following call never returns,
-            // and this process image is replaced.
-            execute_command(command, &options.arguments)
-        }
-        CommandLineMode::CustomContext {
-            compute_transition_context,
-            user,
-            role,
-            the_type,
-            range,
-            command,
-        } => {
-            match command {
-                Some(command) => {
-                    get_custom_context(
-                        *compute_transition_context,
-                        user.as_deref(),
-                        role.as_deref(),
-                        the_type.as_deref(),
-                        range.as_deref(),
-                        command,
-                    )
-                    .and_then(set_next_exec_context)
-                    .map_err(RunconError::new)?;
-                    // On successful execution, the following call never returns,
-                    // and this process image is replaced.
-                    execute_command(command, &options.arguments)
-                }
-                None => print_current_context().map_err(|e| RunconError::new(e).into()),
-            }
-        }
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(VERSION)
-        .about(ABOUT)
-        .after_help(DESCRIPTION)
-        .arg(
-            Arg::new(options::COMPUTE)
-                .short('c')
-                .long(options::COMPUTE)
-                .takes_value(false)
-                .help("Compute process transition context before modifying."),
-        )
-        .arg(
-            Arg::new(options::USER)
-                .short('u')
-                .long(options::USER)
-                .takes_value(true)
-                .value_name("USER")
-                .help("Set user USER in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::ROLE)
-                .short('r')
-                .long(options::ROLE)
-                .takes_value(true)
-                .value_name("ROLE")
-                .help("Set role ROLE in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::TYPE)
-                .short('t')
-                .long(options::TYPE)
-                .takes_value(true)
-                .value_name("TYPE")
-                .help("Set type TYPE in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::RANGE)
-                .short('l')
-                .long(options::RANGE)
-                .takes_value(true)
-                .value_name("RANGE")
-                .help("Set range RANGE in the target security context.")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new("ARG")
-                .multiple_occurrences(true)
-                .allow_invalid_utf8(true),
-        )
-        // Once "ARG" is parsed, everything after that belongs to it.
-        //
-        // This is not how POSIX does things, but this is how the GNU implementation
-        // parses its command line.
-        .setting(clap::AppSettings::TrailingVarArg)
-}
-
-#[derive(Debug)]
-enum CommandLineMode {
-    Print,
-
-    PlainContext {
-        context: OsString,
-        command: OsString,
-    },
-
-    CustomContext {
-        /// Compute process transition context before modifying.
-        compute_transition_context: bool,
-
-        /// Use the current context with the specified user.
-        user: Option<OsString>,
-
-        /// Use the current context with the specified role.
-        role: Option<OsString>,
-
-        /// Use the current context with the specified type.
-        the_type: Option<OsString>,
-
-        /// Use the current context with the specified range.
-        range: Option<OsString>,
-
-        // `command` can be `None`, in which case we're dealing with this syntax:
-        // runcon [-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE]
-        //
-        // This syntax is undocumented, but it is accepted by the GNU implementation,
-        // so we do the same for compatibility.
-        command: Option<OsString>,
-    },
-}
-
-#[derive(Debug)]
-struct Options {
-    mode: CommandLineMode,
-    arguments: Vec<OsString>,
-}
-
-fn parse_command_line(config: App, args: impl uucore::Args) -> Result<Options> {
-    let matches = config.try_get_matches_from(args)?;
-
-    let compute_transition_context = matches.is_present(options::COMPUTE);
-
-    let mut args = matches
-        .values_of_os("ARG")
-        .unwrap_or_default()
-        .map(OsString::from);
-
-    if compute_transition_context
-        || matches.is_present(options::USER)
-        || matches.is_present(options::ROLE)
-        || matches.is_present(options::TYPE)
-        || matches.is_present(options::RANGE)
-    {
-        // runcon [-c] [-u USER] [-r ROLE] [-t TYPE] [-l RANGE] [COMMAND [args]]
-
-        let mode = CommandLineMode::CustomContext {
-            compute_transition_context,
-            user: matches.value_of_os(options::USER).map(Into::into),
-            role: matches.value_of_os(options::ROLE).map(Into::into),
-            the_type: matches.value_of_os(options::TYPE).map(Into::into),
-            range: matches.value_of_os(options::RANGE).map(Into::into),
-            command: args.next(),
-        };
-
-        Ok(Options {
-            mode,
-            arguments: args.collect(),
-        })
-    } else if let Some(context) = args.next() {
-        // runcon CONTEXT COMMAND [args]
-
-        args.next()
-            .ok_or(Error::MissingCommand)
-            .map(move |command| Options {
-                mode: CommandLineMode::PlainContext { context, command },
-                arguments: args.collect(),
-            })
-    } else {
-        // runcon
-
-        Ok(Options {
-            mode: CommandLineMode::Print,
-            arguments: Vec::default(),
-        })
-    }
-}
-
-fn print_current_context() -> Result<()> {
-    let op = "Getting security context of the current process";
-    let context = SecurityContext::current(false).map_err(|r| Error::from_selinux(op, r))?;
-
-    let context = context
-        .to_c_string()
-        .map_err(|r| Error::from_selinux(op, r))?;
-
-    if let Some(context) = context {
-        let context = context.as_ref().to_str()?;
-        println!("{}", context);
-    } else {
-        println!();
-    }
-    Ok(())
-}
-
-fn set_next_exec_context(context: OpaqueSecurityContext) -> Result<()> {
-    let c_context = context
-        .to_c_string()
-        .map_err(|r| Error::from_selinux("Creating new context", r))?;
-
-    let sc = SecurityContext::from_c_str(&c_context, false);
-
-    if sc.check() != Some(true) {
-        let ctx = OsStr::from_bytes(c_context.as_bytes());
-        let err = io::ErrorKind::InvalidInput.into();
-        return Err(Error::from_io1("Checking security context", ctx, err));
-    }
-
-    sc.set_for_next_exec()
-        .map_err(|r| Error::from_selinux("Setting new security context", r))
-}
-
-fn get_plain_context(context: &OsStr) -> Result<OpaqueSecurityContext> {
-    if selinux::kernel_support() == selinux::KernelSupport::Unsupported {
-        return Err(Error::SELinuxNotEnabled);
-    }
-
-    let c_context = os_str_to_c_string(context)?;
-
-    OpaqueSecurityContext::from_c_str(&c_context)
-        .map_err(|r| Error::from_selinux("Creating new context", r))
-}
-
-fn get_transition_context(command: &OsStr) -> Result<SecurityContext> {
-    // Generate context based on process transition.
-    let sec_class = SecurityClass::from_name("process")
-        .map_err(|r| Error::from_selinux("Getting process security class", r))?;
-
-    // Get context of file to be executed.
-    let file_context = match SecurityContext::of_path(command, true, false) {
-        Ok(Some(context)) => context,
-
-        Ok(None) => {
-            let err = io::Error::from_raw_os_error(libc::ENODATA);
-            return Err(Error::from_io1("getfilecon", command, err));
-        }
-
-        Err(r) => {
-            let op = "Getting security context of command file";
-            return Err(Error::from_selinux(op, r));
-        }
-    };
-
-    let process_context = SecurityContext::current(false)
-        .map_err(|r| Error::from_selinux("Getting security context of the current process", r))?;
-
-    // Compute result of process transition.
-    process_context
-        .of_labeling_decision(&file_context, sec_class, "")
-        .map_err(|r| Error::from_selinux("Computing result of process transition", r))
-}
-
-fn get_initial_custom_opaque_context(
-    compute_transition_context: bool,
-    command: &OsStr,
-) -> Result<OpaqueSecurityContext> {
-    let context = if compute_transition_context {
-        get_transition_context(command)?
-    } else {
-        SecurityContext::current(false).map_err(|r| {
-            Error::from_selinux("Getting security context of the current process", r)
-        })?
-    };
-
-    let c_context = context
-        .to_c_string()
-        .map_err(|r| Error::from_selinux("Getting security context", r))?
-        .unwrap_or_else(|| Cow::Owned(CString::default()));
-
-    OpaqueSecurityContext::from_c_str(c_context.as_ref())
-        .map_err(|r| Error::from_selinux("Creating new context", r))
-}
-
-fn get_custom_context(
-    compute_transition_context: bool,
-    user: Option<&OsStr>,
-    role: Option<&OsStr>,
-    the_type: Option<&OsStr>,
-    range: Option<&OsStr>,
-    command: &OsStr,
-) -> Result<OpaqueSecurityContext> {
-    use OpaqueSecurityContext as OSC;
-    type SetNewValueProc = fn(&OSC, &CStr) -> selinux::errors::Result<()>;
-
-    if selinux::kernel_support() == selinux::KernelSupport::Unsupported {
-        return Err(Error::SELinuxNotEnabled);
-    }
-
-    let osc = get_initial_custom_opaque_context(compute_transition_context, command)?;
-
-    let list: &[(Option<&OsStr>, SetNewValueProc, &'static str)] = &[
-        (user, OSC::set_user, "Setting security context user"),
-        (role, OSC::set_role, "Setting security context role"),
-        (the_type, OSC::set_type, "Setting security context type"),
-        (range, OSC::set_range, "Setting security context range"),
-    ];
-
-    for &(new_value, method, op) in list {
-        if let Some(new_value) = new_value {
-            let c_new_value = os_str_to_c_string(new_value)?;
-            method(&osc, &c_new_value).map_err(|r| Error::from_selinux(op, r))?;
-        }
-    }
-    Ok(osc)
-}
-
-/// The actual return type of this function should be `UResult<!>`.
-/// However, until the *never* type is stabilized, one way to indicate to the
-/// compiler the only valid return type is to say "if this returns, it will
-/// always return an error".
-fn execute_command(command: &OsStr, arguments: &[OsString]) -> UResult<()> {
-    let c_command = os_str_to_c_string(command).map_err(RunconError::new)?;
-
-    let argv_storage: Vec<CString> = arguments
-        .iter()
-        .map(AsRef::as_ref)
-        .map(os_str_to_c_string)
-        .collect::<Result<_>>()
-        .map_err(RunconError::new)?;
-
-    let mut argv: Vec<*const c_char> = Vec::with_capacity(arguments.len().saturating_add(2));
-    argv.push(c_command.as_ptr());
-    argv.extend(argv_storage.iter().map(AsRef::as_ref).map(CStr::as_ptr));
-    argv.push(ptr::null());
-
-    unsafe { libc::execvp(c_command.as_ptr(), argv.as_ptr()) };
-
-    let err = io::Error::last_os_error();
-    let exit_status = if err.kind() == io::ErrorKind::NotFound {
-        error_exit_status::NOT_FOUND
-    } else {
-        error_exit_status::COULD_NOT_EXECUTE
-    };
-
-    let err = Error::from_io1("Executing command", command, err);
-    Err(RunconError::with_code(exit_status, err).into())
-}
-
-fn os_str_to_c_string(s: &OsStr) -> Result<CString> {
-    CString::new(s.as_bytes())
-        .map_err(|_r| Error::from_io("CString::new()", io::ErrorKind::InvalidInput.into()))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_seq/error.rs.html b/src/uu_seq/error.rs.html deleted file mode 100644 index eb0ba8b29..000000000 --- a/src/uu_seq/error.rs.html +++ /dev/null @@ -1,144 +0,0 @@ -error.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-// spell-checker:ignore numberparse argtype
-//! Errors returned by seq.
-use std::error::Error;
-use std::fmt::Display;
-
-use uucore::display::Quotable;
-use uucore::error::UError;
-
-use crate::numberparse::ParseNumberError;
-
-#[derive(Debug)]
-pub enum SeqError {
-    /// An error parsing the input arguments.
-    ///
-    /// The parameters are the [`String`] argument as read from the
-    /// command line and the underlying parsing error itself.
-    ParseError(String, ParseNumberError),
-
-    /// The increment argument was zero, which is not allowed.
-    ///
-    /// The parameter is the increment argument as a [`String`] as read
-    /// from the command line.
-    ZeroIncrement(String),
-}
-
-impl SeqError {
-    /// The [`String`] argument as read from the command-line.
-    fn arg(&self) -> &str {
-        match self {
-            SeqError::ParseError(s, _) => s,
-            SeqError::ZeroIncrement(s) => s,
-        }
-    }
-
-    /// The type of argument that is causing the error.
-    fn argtype(&self) -> &str {
-        match self {
-            SeqError::ParseError(_, e) => match e {
-                ParseNumberError::Float => "floating point",
-                ParseNumberError::Nan => "'not-a-number'",
-                ParseNumberError::Hex => "hexadecimal",
-            },
-            SeqError::ZeroIncrement(_) => "Zero increment",
-        }
-    }
-}
-impl UError for SeqError {
-    /// Always return 1.
-    fn code(&self) -> i32 {
-        1
-    }
-}
-
-impl Error for SeqError {}
-
-impl Display for SeqError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        write!(
-            f,
-            "invalid {} argument: {}\nTry '{} --help' for more information.",
-            self.argtype(),
-            self.arg().quote(),
-            uucore::execution_phrase(),
-        )
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_seq/extendedbigdecimal.rs.html b/src/uu_seq/extendedbigdecimal.rs.html deleted file mode 100644 index 0a8738fb2..000000000 --- a/src/uu_seq/extendedbigdecimal.rs.html +++ /dev/null @@ -1,584 +0,0 @@ -extendedbigdecimal.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-
// spell-checker:ignore bigdecimal extendedbigdecimal extendedbigint
-//! An arbitrary precision float that can also represent infinity, NaN, etc.
-//!
-//! The finite values are stored as [`BigDecimal`] instances. Because
-//! the `bigdecimal` library does not represent infinity, NaN, etc., we
-//! need to represent them explicitly ourselves. The
-//! [`ExtendedBigDecimal`] enumeration does that.
-//!
-//! # Examples
-//!
-//! Addition works for [`ExtendedBigDecimal`] as it does for floats. For
-//! example, adding infinity to any finite value results in infinity:
-//!
-//! ```rust,ignore
-//! let summand1 = ExtendedBigDecimal::BigDecimal(BigDecimal::zero());
-//! let summand2 = ExtendedBigDecimal::Infinity;
-//! assert_eq!(summand1 + summand2, ExtendedBigDecimal::Infinity);
-//! ```
-use std::cmp::Ordering;
-use std::fmt::Display;
-use std::ops::Add;
-
-use bigdecimal::BigDecimal;
-use num_bigint::BigInt;
-use num_bigint::ToBigInt;
-use num_traits::One;
-use num_traits::Zero;
-
-use crate::extendedbigint::ExtendedBigInt;
-
-#[derive(Debug, Clone)]
-pub enum ExtendedBigDecimal {
-    /// Arbitrary precision floating point number.
-    BigDecimal(BigDecimal),
-
-    /// Floating point positive infinity.
-    ///
-    /// This is represented as its own enumeration member instead of as
-    /// a [`BigDecimal`] because the `bigdecimal` library does not
-    /// support infinity, see [here][0].
-    ///
-    /// [0]: https://github.com/akubera/bigdecimal-rs/issues/67
-    Infinity,
-
-    /// Floating point negative infinity.
-    ///
-    /// This is represented as its own enumeration member instead of as
-    /// a [`BigDecimal`] because the `bigdecimal` library does not
-    /// support infinity, see [here][0].
-    ///
-    /// [0]: https://github.com/akubera/bigdecimal-rs/issues/67
-    MinusInfinity,
-
-    /// Floating point negative zero.
-    ///
-    /// This is represented as its own enumeration member instead of as
-    /// a [`BigDecimal`] because the `bigdecimal` library does not
-    /// support negative zero.
-    MinusZero,
-
-    /// Floating point NaN.
-    ///
-    /// This is represented as its own enumeration member instead of as
-    /// a [`BigDecimal`] because the `bigdecimal` library does not
-    /// support NaN, see [here][0].
-    ///
-    /// [0]: https://github.com/akubera/bigdecimal-rs/issues/67
-    Nan,
-}
-
-/// The smallest integer greater than or equal to this number.
-fn ceil(x: BigDecimal) -> BigInt {
-    if x.is_integer() {
-        // Unwrapping the Option because it always returns Some
-        x.to_bigint().unwrap()
-    } else {
-        (x + BigDecimal::one().half()).round(0).to_bigint().unwrap()
-    }
-}
-
-/// The largest integer less than or equal to this number.
-fn floor(x: BigDecimal) -> BigInt {
-    if x.is_integer() {
-        // Unwrapping the Option because it always returns Some
-        x.to_bigint().unwrap()
-    } else {
-        (x - BigDecimal::one().half()).round(0).to_bigint().unwrap()
-    }
-}
-
-impl ExtendedBigDecimal {
-    /// The smallest integer greater than or equal to this number.
-    pub fn ceil(self) -> ExtendedBigInt {
-        match self {
-            ExtendedBigDecimal::BigDecimal(x) => ExtendedBigInt::BigInt(ceil(x)),
-            other => From::from(other),
-        }
-    }
-
-    /// The largest integer less than or equal to this number.
-    pub fn floor(self) -> ExtendedBigInt {
-        match self {
-            ExtendedBigDecimal::BigDecimal(x) => ExtendedBigInt::BigInt(floor(x)),
-            other => From::from(other),
-        }
-    }
-}
-
-impl From<ExtendedBigInt> for ExtendedBigDecimal {
-    fn from(big_int: ExtendedBigInt) -> Self {
-        match big_int {
-            ExtendedBigInt::BigInt(n) => Self::BigDecimal(BigDecimal::from(n)),
-            ExtendedBigInt::Infinity => ExtendedBigDecimal::Infinity,
-            ExtendedBigInt::MinusInfinity => ExtendedBigDecimal::MinusInfinity,
-            ExtendedBigInt::MinusZero => ExtendedBigDecimal::MinusZero,
-            ExtendedBigInt::Nan => ExtendedBigDecimal::Nan,
-        }
-    }
-}
-
-impl Display for ExtendedBigDecimal {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            ExtendedBigDecimal::BigDecimal(x) => {
-                let (n, p) = x.as_bigint_and_exponent();
-                match p {
-                    0 => ExtendedBigDecimal::BigDecimal(BigDecimal::new(n * 10, 1)).fmt(f),
-                    _ => x.fmt(f),
-                }
-            }
-            ExtendedBigDecimal::Infinity => f32::INFINITY.fmt(f),
-            ExtendedBigDecimal::MinusInfinity => f32::NEG_INFINITY.fmt(f),
-            ExtendedBigDecimal::MinusZero => {
-                // FIXME In Rust version 1.53.0 and later, the display
-                // of floats was updated to allow displaying negative
-                // zero. See
-                // https://github.com/rust-lang/rust/pull/78618. Currently,
-                // this just formats "0.0".
-                (0.0f32).fmt(f)
-            }
-            ExtendedBigDecimal::Nan => "nan".fmt(f),
-        }
-    }
-}
-
-impl Zero for ExtendedBigDecimal {
-    fn zero() -> Self {
-        ExtendedBigDecimal::BigDecimal(BigDecimal::zero())
-    }
-    fn is_zero(&self) -> bool {
-        match self {
-            Self::BigDecimal(n) => n.is_zero(),
-            Self::MinusZero => true,
-            _ => false,
-        }
-    }
-}
-
-impl Add for ExtendedBigDecimal {
-    type Output = Self;
-
-    fn add(self, other: Self) -> Self {
-        match (self, other) {
-            (Self::BigDecimal(m), Self::BigDecimal(n)) => Self::BigDecimal(m.add(n)),
-            (Self::BigDecimal(_), Self::MinusInfinity) => Self::MinusInfinity,
-            (Self::BigDecimal(_), Self::Infinity) => Self::Infinity,
-            (Self::BigDecimal(_), Self::Nan) => Self::Nan,
-            (Self::BigDecimal(m), Self::MinusZero) => Self::BigDecimal(m),
-            (Self::Infinity, Self::BigDecimal(_)) => Self::Infinity,
-            (Self::Infinity, Self::Infinity) => Self::Infinity,
-            (Self::Infinity, Self::MinusZero) => Self::Infinity,
-            (Self::Infinity, Self::MinusInfinity) => Self::Nan,
-            (Self::Infinity, Self::Nan) => Self::Nan,
-            (Self::MinusInfinity, Self::BigDecimal(_)) => Self::MinusInfinity,
-            (Self::MinusInfinity, Self::MinusInfinity) => Self::MinusInfinity,
-            (Self::MinusInfinity, Self::MinusZero) => Self::MinusInfinity,
-            (Self::MinusInfinity, Self::Infinity) => Self::Nan,
-            (Self::MinusInfinity, Self::Nan) => Self::Nan,
-            (Self::Nan, _) => Self::Nan,
-            (Self::MinusZero, other) => other,
-        }
-    }
-}
-
-impl PartialEq for ExtendedBigDecimal {
-    fn eq(&self, other: &Self) -> bool {
-        match (self, other) {
-            (Self::BigDecimal(m), Self::BigDecimal(n)) => m.eq(n),
-            (Self::BigDecimal(_), Self::MinusInfinity) => false,
-            (Self::BigDecimal(_), Self::Infinity) => false,
-            (Self::BigDecimal(_), Self::Nan) => false,
-            (Self::BigDecimal(_), Self::MinusZero) => false,
-            (Self::Infinity, Self::BigDecimal(_)) => false,
-            (Self::Infinity, Self::Infinity) => true,
-            (Self::Infinity, Self::MinusZero) => false,
-            (Self::Infinity, Self::MinusInfinity) => false,
-            (Self::Infinity, Self::Nan) => false,
-            (Self::MinusInfinity, Self::BigDecimal(_)) => false,
-            (Self::MinusInfinity, Self::Infinity) => false,
-            (Self::MinusInfinity, Self::MinusZero) => false,
-            (Self::MinusInfinity, Self::MinusInfinity) => true,
-            (Self::MinusInfinity, Self::Nan) => false,
-            (Self::Nan, _) => false,
-            (Self::MinusZero, Self::BigDecimal(_)) => false,
-            (Self::MinusZero, Self::Infinity) => false,
-            (Self::MinusZero, Self::MinusZero) => true,
-            (Self::MinusZero, Self::MinusInfinity) => false,
-            (Self::MinusZero, Self::Nan) => false,
-        }
-    }
-}
-
-impl PartialOrd for ExtendedBigDecimal {
-    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
-        match (self, other) {
-            (Self::BigDecimal(m), Self::BigDecimal(n)) => m.partial_cmp(n),
-            (Self::BigDecimal(_), Self::MinusInfinity) => Some(Ordering::Greater),
-            (Self::BigDecimal(_), Self::Infinity) => Some(Ordering::Less),
-            (Self::BigDecimal(_), Self::Nan) => None,
-            (Self::BigDecimal(m), Self::MinusZero) => m.partial_cmp(&BigDecimal::zero()),
-            (Self::Infinity, Self::BigDecimal(_)) => Some(Ordering::Greater),
-            (Self::Infinity, Self::Infinity) => Some(Ordering::Equal),
-            (Self::Infinity, Self::MinusZero) => Some(Ordering::Greater),
-            (Self::Infinity, Self::MinusInfinity) => Some(Ordering::Greater),
-            (Self::Infinity, Self::Nan) => None,
-            (Self::MinusInfinity, Self::BigDecimal(_)) => Some(Ordering::Less),
-            (Self::MinusInfinity, Self::Infinity) => Some(Ordering::Less),
-            (Self::MinusInfinity, Self::MinusZero) => Some(Ordering::Less),
-            (Self::MinusInfinity, Self::MinusInfinity) => Some(Ordering::Equal),
-            (Self::MinusInfinity, Self::Nan) => None,
-            (Self::Nan, _) => None,
-            (Self::MinusZero, Self::BigDecimal(n)) => BigDecimal::zero().partial_cmp(n),
-            (Self::MinusZero, Self::Infinity) => Some(Ordering::Less),
-            (Self::MinusZero, Self::MinusZero) => Some(Ordering::Equal),
-            (Self::MinusZero, Self::MinusInfinity) => Some(Ordering::Greater),
-            (Self::MinusZero, Self::Nan) => None,
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use bigdecimal::BigDecimal;
-    use num_traits::Zero;
-
-    use crate::extendedbigdecimal::ExtendedBigDecimal;
-
-    #[test]
-    fn test_addition_infinity() {
-        let summand1 = ExtendedBigDecimal::BigDecimal(BigDecimal::zero());
-        let summand2 = ExtendedBigDecimal::Infinity;
-        assert_eq!(summand1 + summand2, ExtendedBigDecimal::Infinity);
-    }
-
-    #[test]
-    fn test_addition_minus_infinity() {
-        let summand1 = ExtendedBigDecimal::BigDecimal(BigDecimal::zero());
-        let summand2 = ExtendedBigDecimal::MinusInfinity;
-        assert_eq!(summand1 + summand2, ExtendedBigDecimal::MinusInfinity);
-    }
-
-    #[test]
-    fn test_addition_nan() {
-        let summand1 = ExtendedBigDecimal::BigDecimal(BigDecimal::zero());
-        let summand2 = ExtendedBigDecimal::Nan;
-        let sum = summand1 + summand2;
-        match sum {
-            ExtendedBigDecimal::Nan => (),
-            _ => unreachable!(),
-        }
-    }
-
-    #[test]
-    fn test_display() {
-        assert_eq!(
-            format!("{}", ExtendedBigDecimal::BigDecimal(BigDecimal::zero())),
-            "0.0"
-        );
-        assert_eq!(format!("{}", ExtendedBigDecimal::Infinity), "inf");
-        assert_eq!(format!("{}", ExtendedBigDecimal::MinusInfinity), "-inf");
-        assert_eq!(format!("{}", ExtendedBigDecimal::Nan), "nan");
-        // FIXME In Rust version 1.53.0 and later, the display of floats
-        // was updated to allow displaying negative zero. Until then, we
-        // just display `MinusZero` as "0.0".
-        //
-        //     assert_eq!(format!("{}", ExtendedBigDecimal::MinusZero), "-0.0");
-        //
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_seq/extendedbigint.rs.html b/src/uu_seq/extendedbigint.rs.html deleted file mode 100644 index 383fb2dcd..000000000 --- a/src/uu_seq/extendedbigint.rs.html +++ /dev/null @@ -1,440 +0,0 @@ -extendedbigint.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-
// spell-checker:ignore bigint extendedbigint extendedbigdecimal
-//! An arbitrary precision integer that can also represent infinity, NaN, etc.
-//!
-//! Usually infinity, NaN, and negative zero are only represented for
-//! floating point numbers. The [`ExtendedBigInt`] enumeration provides
-//! a representation of those things with the set of integers. The
-//! finite values are stored as [`BigInt`] instances.
-//!
-//! # Examples
-//!
-//! Addition works for [`ExtendedBigInt`] as it does for floats. For
-//! example, adding infinity to any finite value results in infinity:
-//!
-//! ```rust,ignore
-//! let summand1 = ExtendedBigInt::BigInt(BigInt::zero());
-//! let summand2 = ExtendedBigInt::Infinity;
-//! assert_eq!(summand1 + summand2, ExtendedBigInt::Infinity);
-//! ```
-use std::cmp::Ordering;
-use std::fmt::Display;
-use std::ops::Add;
-
-use num_bigint::BigInt;
-use num_bigint::ToBigInt;
-use num_traits::One;
-use num_traits::Zero;
-
-use crate::extendedbigdecimal::ExtendedBigDecimal;
-
-#[derive(Debug, Clone)]
-pub enum ExtendedBigInt {
-    BigInt(BigInt),
-    Infinity,
-    MinusInfinity,
-    MinusZero,
-    Nan,
-}
-
-impl ExtendedBigInt {
-    /// The integer number one.
-    pub fn one() -> Self {
-        // We would like to implement `num_traits::One`, but it requires
-        // a multiplication implementation, and we don't want to
-        // implement that here.
-        ExtendedBigInt::BigInt(BigInt::one())
-    }
-}
-
-impl From<ExtendedBigDecimal> for ExtendedBigInt {
-    fn from(big_decimal: ExtendedBigDecimal) -> Self {
-        match big_decimal {
-            // TODO When can this fail?
-            ExtendedBigDecimal::BigDecimal(x) => Self::BigInt(x.to_bigint().unwrap()),
-            ExtendedBigDecimal::Infinity => ExtendedBigInt::Infinity,
-            ExtendedBigDecimal::MinusInfinity => ExtendedBigInt::MinusInfinity,
-            ExtendedBigDecimal::MinusZero => ExtendedBigInt::MinusZero,
-            ExtendedBigDecimal::Nan => ExtendedBigInt::Nan,
-        }
-    }
-}
-
-impl Display for ExtendedBigInt {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            ExtendedBigInt::BigInt(n) => n.fmt(f),
-            ExtendedBigInt::Infinity => f32::INFINITY.fmt(f),
-            ExtendedBigInt::MinusInfinity => f32::NEG_INFINITY.fmt(f),
-            ExtendedBigInt::MinusZero => {
-                // FIXME Come up with a way of formatting this with a
-                // "-" prefix.
-                0.fmt(f)
-            }
-            ExtendedBigInt::Nan => "nan".fmt(f),
-        }
-    }
-}
-
-impl Zero for ExtendedBigInt {
-    fn zero() -> Self {
-        ExtendedBigInt::BigInt(BigInt::zero())
-    }
-    fn is_zero(&self) -> bool {
-        match self {
-            Self::BigInt(n) => n.is_zero(),
-            Self::MinusZero => true,
-            _ => false,
-        }
-    }
-}
-
-impl Add for ExtendedBigInt {
-    type Output = Self;
-
-    fn add(self, other: Self) -> Self {
-        match (self, other) {
-            (Self::BigInt(m), Self::BigInt(n)) => Self::BigInt(m.add(n)),
-            (Self::BigInt(_), Self::MinusInfinity) => Self::MinusInfinity,
-            (Self::BigInt(_), Self::Infinity) => Self::Infinity,
-            (Self::BigInt(_), Self::Nan) => Self::Nan,
-            (Self::BigInt(m), Self::MinusZero) => Self::BigInt(m),
-            (Self::Infinity, Self::BigInt(_)) => Self::Infinity,
-            (Self::Infinity, Self::Infinity) => Self::Infinity,
-            (Self::Infinity, Self::MinusZero) => Self::Infinity,
-            (Self::Infinity, Self::MinusInfinity) => Self::Nan,
-            (Self::Infinity, Self::Nan) => Self::Nan,
-            (Self::MinusInfinity, Self::BigInt(_)) => Self::MinusInfinity,
-            (Self::MinusInfinity, Self::MinusInfinity) => Self::MinusInfinity,
-            (Self::MinusInfinity, Self::MinusZero) => Self::MinusInfinity,
-            (Self::MinusInfinity, Self::Infinity) => Self::Nan,
-            (Self::MinusInfinity, Self::Nan) => Self::Nan,
-            (Self::Nan, _) => Self::Nan,
-            (Self::MinusZero, other) => other,
-        }
-    }
-}
-
-impl PartialEq for ExtendedBigInt {
-    fn eq(&self, other: &Self) -> bool {
-        match (self, other) {
-            (Self::BigInt(m), Self::BigInt(n)) => m.eq(n),
-            (Self::BigInt(_), Self::MinusInfinity) => false,
-            (Self::BigInt(_), Self::Infinity) => false,
-            (Self::BigInt(_), Self::Nan) => false,
-            (Self::BigInt(_), Self::MinusZero) => false,
-            (Self::Infinity, Self::BigInt(_)) => false,
-            (Self::Infinity, Self::Infinity) => true,
-            (Self::Infinity, Self::MinusZero) => false,
-            (Self::Infinity, Self::MinusInfinity) => false,
-            (Self::Infinity, Self::Nan) => false,
-            (Self::MinusInfinity, Self::BigInt(_)) => false,
-            (Self::MinusInfinity, Self::Infinity) => false,
-            (Self::MinusInfinity, Self::MinusZero) => false,
-            (Self::MinusInfinity, Self::MinusInfinity) => true,
-            (Self::MinusInfinity, Self::Nan) => false,
-            (Self::Nan, _) => false,
-            (Self::MinusZero, Self::BigInt(_)) => false,
-            (Self::MinusZero, Self::Infinity) => false,
-            (Self::MinusZero, Self::MinusZero) => true,
-            (Self::MinusZero, Self::MinusInfinity) => false,
-            (Self::MinusZero, Self::Nan) => false,
-        }
-    }
-}
-
-impl PartialOrd for ExtendedBigInt {
-    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
-        match (self, other) {
-            (Self::BigInt(m), Self::BigInt(n)) => m.partial_cmp(n),
-            (Self::BigInt(_), Self::MinusInfinity) => Some(Ordering::Greater),
-            (Self::BigInt(_), Self::Infinity) => Some(Ordering::Less),
-            (Self::BigInt(_), Self::Nan) => None,
-            (Self::BigInt(m), Self::MinusZero) => m.partial_cmp(&BigInt::zero()),
-            (Self::Infinity, Self::BigInt(_)) => Some(Ordering::Greater),
-            (Self::Infinity, Self::Infinity) => Some(Ordering::Equal),
-            (Self::Infinity, Self::MinusZero) => Some(Ordering::Greater),
-            (Self::Infinity, Self::MinusInfinity) => Some(Ordering::Greater),
-            (Self::Infinity, Self::Nan) => None,
-            (Self::MinusInfinity, Self::BigInt(_)) => Some(Ordering::Less),
-            (Self::MinusInfinity, Self::Infinity) => Some(Ordering::Less),
-            (Self::MinusInfinity, Self::MinusZero) => Some(Ordering::Less),
-            (Self::MinusInfinity, Self::MinusInfinity) => Some(Ordering::Equal),
-            (Self::MinusInfinity, Self::Nan) => None,
-            (Self::Nan, _) => None,
-            (Self::MinusZero, Self::BigInt(n)) => BigInt::zero().partial_cmp(n),
-            (Self::MinusZero, Self::Infinity) => Some(Ordering::Less),
-            (Self::MinusZero, Self::MinusZero) => Some(Ordering::Equal),
-            (Self::MinusZero, Self::MinusInfinity) => Some(Ordering::Greater),
-            (Self::MinusZero, Self::Nan) => None,
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use num_bigint::BigInt;
-    use num_traits::Zero;
-
-    use crate::extendedbigint::ExtendedBigInt;
-
-    #[test]
-    fn test_addition_infinity() {
-        let summand1 = ExtendedBigInt::BigInt(BigInt::zero());
-        let summand2 = ExtendedBigInt::Infinity;
-        assert_eq!(summand1 + summand2, ExtendedBigInt::Infinity);
-    }
-
-    #[test]
-    fn test_addition_minus_infinity() {
-        let summand1 = ExtendedBigInt::BigInt(BigInt::zero());
-        let summand2 = ExtendedBigInt::MinusInfinity;
-        assert_eq!(summand1 + summand2, ExtendedBigInt::MinusInfinity);
-    }
-
-    #[test]
-    fn test_addition_nan() {
-        let summand1 = ExtendedBigInt::BigInt(BigInt::zero());
-        let summand2 = ExtendedBigInt::Nan;
-        let sum = summand1 + summand2;
-        match sum {
-            ExtendedBigInt::Nan => (),
-            _ => unreachable!(),
-        }
-    }
-
-    #[test]
-    fn test_display() {
-        assert_eq!(format!("{}", ExtendedBigInt::BigInt(BigInt::zero())), "0");
-        assert_eq!(format!("{}", ExtendedBigInt::Infinity), "inf");
-        assert_eq!(format!("{}", ExtendedBigInt::MinusInfinity), "-inf");
-        assert_eq!(format!("{}", ExtendedBigInt::Nan), "nan");
-        // FIXME Come up with a way of displaying negative zero as
-        // "-0". Currently it displays as just "0".
-        //
-        //     assert_eq!(format!("{}", ExtendedBigInt::MinusZero), "-0");
-        //
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_seq/number.rs.html b/src/uu_seq/number.rs.html deleted file mode 100644 index 38826f543..000000000 --- a/src/uu_seq/number.rs.html +++ /dev/null @@ -1,242 +0,0 @@ -number.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-
// spell-checker:ignore extendedbigdecimal extendedbigint
-//! A type to represent the possible start, increment, and end values for seq.
-//!
-//! The [`Number`] enumeration represents the possible values for the
-//! start, increment, and end values for `seq`. These may be integers,
-//! floating point numbers, negative zero, etc. A [`Number`] can be
-//! parsed from a string by calling [`parse`].
-use num_traits::Zero;
-
-use crate::extendedbigdecimal::ExtendedBigDecimal;
-use crate::extendedbigint::ExtendedBigInt;
-
-/// An integral or floating point number.
-#[derive(Debug, PartialEq)]
-pub enum Number {
-    Int(ExtendedBigInt),
-    Float(ExtendedBigDecimal),
-}
-
-impl Number {
-    /// Decide whether this number is zero (either positive or negative).
-    pub fn is_zero(&self) -> bool {
-        // We would like to implement `num_traits::Zero`, but it
-        // requires an addition implementation, and we don't want to
-        // implement that here.
-        match self {
-            Number::Int(n) => n.is_zero(),
-            Number::Float(x) => x.is_zero(),
-        }
-    }
-
-    /// Convert this number into an `ExtendedBigDecimal`.
-    pub fn into_extended_big_decimal(self) -> ExtendedBigDecimal {
-        match self {
-            Number::Int(n) => ExtendedBigDecimal::from(n),
-            Number::Float(x) => x,
-        }
-    }
-
-    /// The integer number one.
-    pub fn one() -> Self {
-        // We would like to implement `num_traits::One`, but it requires
-        // a multiplication implementation, and we don't want to
-        // implement that here.
-        Number::Int(ExtendedBigInt::one())
-    }
-
-    /// Round this number towards the given other number.
-    ///
-    /// If `other` is greater, then round up. If `other` is smaller,
-    /// then round down.
-    pub fn round_towards(self, other: &ExtendedBigInt) -> ExtendedBigInt {
-        match self {
-            // If this number is already an integer, it is already
-            // rounded to the nearest integer in the direction of
-            // `other`.
-            Number::Int(num) => num,
-            // Otherwise, if this number is a float, we need to decide
-            // whether `other` is larger or smaller than it, and thus
-            // whether to round up or round down, respectively.
-            Number::Float(num) => {
-                let other: ExtendedBigDecimal = From::from(other.clone());
-                if other > num {
-                    num.ceil()
-                } else {
-                    // If they are equal, then `self` is already an
-                    // integer, so calling `floor()` does no harm and
-                    // will just return that integer anyway.
-                    num.floor()
-                }
-            }
-        }
-    }
-}
-
-/// A number with a specified number of integer and fractional digits.
-///
-/// This struct can be used to represent a number along with information
-/// on how many significant digits to use when displaying the number.
-/// The [`num_integral_digits`] field also includes the width needed to
-/// display the "-" character for a negative number.
-///
-/// You can get an instance of this struct by calling [`str::parse`].
-#[derive(Debug)]
-pub struct PreciseNumber {
-    pub number: Number,
-    pub num_integral_digits: usize,
-    pub num_fractional_digits: usize,
-}
-
-impl PreciseNumber {
-    pub fn new(
-        number: Number,
-        num_integral_digits: usize,
-        num_fractional_digits: usize,
-    ) -> PreciseNumber {
-        PreciseNumber {
-            number,
-            num_integral_digits,
-            num_fractional_digits,
-        }
-    }
-
-    /// The integer number one.
-    pub fn one() -> Self {
-        // We would like to implement `num_traits::One`, but it requires
-        // a multiplication implementation, and we don't want to
-        // implement that here.
-        PreciseNumber::new(Number::one(), 1, 0)
-    }
-
-    /// Decide whether this number is zero (either positive or negative).
-    pub fn is_zero(&self) -> bool {
-        // We would like to implement `num_traits::Zero`, but it
-        // requires an addition implementation, and we don't want to
-        // implement that here.
-        self.number.is_zero()
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_seq/numberparse.rs.html b/src/uu_seq/numberparse.rs.html deleted file mode 100644 index 960fc75f4..000000000 --- a/src/uu_seq/numberparse.rs.html +++ /dev/null @@ -1,1240 +0,0 @@ -numberparse.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-
// spell-checker:ignore extendedbigdecimal extendedbigint bigdecimal numberparse
-//! Parsing numbers for use in `seq`.
-//!
-//! This module provides an implementation of [`FromStr`] for the
-//! [`PreciseNumber`] struct.
-use std::convert::TryInto;
-use std::str::FromStr;
-
-use bigdecimal::BigDecimal;
-use num_bigint::BigInt;
-use num_bigint::Sign;
-use num_traits::Num;
-use num_traits::Zero;
-
-use crate::extendedbigdecimal::ExtendedBigDecimal;
-use crate::extendedbigint::ExtendedBigInt;
-use crate::number::Number;
-use crate::number::PreciseNumber;
-
-/// An error returned when parsing a number fails.
-#[derive(Debug, PartialEq)]
-pub enum ParseNumberError {
-    Float,
-    Nan,
-    Hex,
-}
-
-/// Decide whether a given string and its parsed `BigInt` is negative zero.
-fn is_minus_zero_int(s: &str, n: &BigInt) -> bool {
-    s.starts_with('-') && n == &BigInt::zero()
-}
-
-/// Decide whether a given string and its parsed `BigDecimal` is negative zero.
-fn is_minus_zero_float(s: &str, x: &BigDecimal) -> bool {
-    s.starts_with('-') && x == &BigDecimal::zero()
-}
-
-/// Parse a number with neither a decimal point nor an exponent.
-///
-/// # Errors
-///
-/// This function returns an error if the input string is a variant of
-/// "NaN" or if no [`BigInt`] could be parsed from the string.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// let actual = "0".parse::<Number>().unwrap().number;
-/// let expected = Number::BigInt(BigInt::zero());
-/// assert_eq!(actual, expected);
-/// ```
-fn parse_no_decimal_no_exponent(s: &str) -> Result<PreciseNumber, ParseNumberError> {
-    match s.parse::<BigInt>() {
-        Ok(n) => {
-            // If `s` is '-0', then `parse()` returns `BigInt::zero()`,
-            // but we need to return `Number::MinusZeroInt` instead.
-            if is_minus_zero_int(s, &n) {
-                Ok(PreciseNumber::new(
-                    Number::Int(ExtendedBigInt::MinusZero),
-                    s.len(),
-                    0,
-                ))
-            } else {
-                Ok(PreciseNumber::new(
-                    Number::Int(ExtendedBigInt::BigInt(n)),
-                    s.len(),
-                    0,
-                ))
-            }
-        }
-        Err(_) => {
-            // Possibly "NaN" or "inf".
-            //
-            // TODO In Rust v1.53.0, this change
-            // https://github.com/rust-lang/rust/pull/78618 improves the
-            // parsing of floats to include being able to parse "NaN"
-            // and "inf". So when the minimum version of this crate is
-            // increased to 1.53.0, we should just use the built-in
-            // `f32` parsing instead.
-            if s.eq_ignore_ascii_case("inf") {
-                Ok(PreciseNumber::new(
-                    Number::Float(ExtendedBigDecimal::Infinity),
-                    0,
-                    0,
-                ))
-            } else if s.eq_ignore_ascii_case("-inf") {
-                Ok(PreciseNumber::new(
-                    Number::Float(ExtendedBigDecimal::MinusInfinity),
-                    0,
-                    0,
-                ))
-            } else if s.eq_ignore_ascii_case("nan") || s.eq_ignore_ascii_case("-nan") {
-                Err(ParseNumberError::Nan)
-            } else {
-                Err(ParseNumberError::Float)
-            }
-        }
-    }
-}
-
-/// Parse a number with an exponent but no decimal point.
-///
-/// # Errors
-///
-/// This function returns an error if `s` is not a valid number.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// let actual = "1e2".parse::<Number>().unwrap().number;
-/// let expected = "100".parse::<BigInt>().unwrap();
-/// assert_eq!(actual, expected);
-/// ```
-fn parse_exponent_no_decimal(s: &str, j: usize) -> Result<PreciseNumber, ParseNumberError> {
-    let exponent: i64 = s[j + 1..].parse().map_err(|_| ParseNumberError::Float)?;
-    // If the exponent is strictly less than zero, then the number
-    // should be treated as a floating point number that will be
-    // displayed in decimal notation. For example, "1e-2" will be
-    // displayed as "0.01", but "1e2" will be displayed as "100",
-    // without a decimal point.
-    let x: BigDecimal = s.parse().map_err(|_| ParseNumberError::Float)?;
-    let num_integral_digits = if is_minus_zero_float(s, &x) {
-        2
-    } else {
-        let total = j as i64 + exponent;
-        let result = if total < 1 {
-            1
-        } else {
-            total.try_into().unwrap()
-        };
-        if x.sign() == Sign::Minus {
-            result + 1
-        } else {
-            result
-        }
-    };
-    let num_fractional_digits = if exponent < 0 { -exponent as usize } else { 0 };
-
-    if exponent < 0 {
-        if is_minus_zero_float(s, &x) {
-            Ok(PreciseNumber::new(
-                Number::Float(ExtendedBigDecimal::MinusZero),
-                num_integral_digits,
-                num_fractional_digits,
-            ))
-        } else {
-            Ok(PreciseNumber::new(
-                Number::Float(ExtendedBigDecimal::BigDecimal(x)),
-                num_integral_digits,
-                num_fractional_digits,
-            ))
-        }
-    } else {
-        let zeros = "0".repeat(exponent.try_into().unwrap());
-        let expanded = [&s[0..j], &zeros].concat();
-        parse_no_decimal_no_exponent(&expanded)
-    }
-}
-
-/// Parse a number with a decimal point but no exponent.
-///
-/// # Errors
-///
-/// This function returns an error if `s` is not a valid number.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// let actual = "1.2".parse::<Number>().unwrap().number;
-/// let expected = "1.2".parse::<BigDecimal>().unwrap();
-/// assert_eq!(actual, expected);
-/// ```
-fn parse_decimal_no_exponent(s: &str, i: usize) -> Result<PreciseNumber, ParseNumberError> {
-    let x: BigDecimal = s.parse().map_err(|_| ParseNumberError::Float)?;
-
-    // The number of integral digits is the number of chars until the period.
-    //
-    // This includes the negative sign if there is one. Also, it is
-    // possible that a number is expressed as "-.123" instead of
-    // "-0.123", but when we display the number we want it to include
-    // the leading 0.
-    let num_integral_digits = if s.starts_with("-.") { i + 1 } else { i };
-    let num_fractional_digits = s.len() - (i + 1);
-    if is_minus_zero_float(s, &x) {
-        Ok(PreciseNumber::new(
-            Number::Float(ExtendedBigDecimal::MinusZero),
-            num_integral_digits,
-            num_fractional_digits,
-        ))
-    } else {
-        Ok(PreciseNumber::new(
-            Number::Float(ExtendedBigDecimal::BigDecimal(x)),
-            num_integral_digits,
-            num_fractional_digits,
-        ))
-    }
-}
-
-/// Parse a number with both a decimal point and an exponent.
-///
-/// # Errors
-///
-/// This function returns an error if `s` is not a valid number.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// let actual = "1.2e3".parse::<Number>().unwrap().number;
-/// let expected = "1200".parse::<BigInt>().unwrap();
-/// assert_eq!(actual, expected);
-/// ```
-fn parse_decimal_and_exponent(
-    s: &str,
-    i: usize,
-    j: usize,
-) -> Result<PreciseNumber, ParseNumberError> {
-    // Because of the match guard, this subtraction will not underflow.
-    let num_digits_between_decimal_point_and_e = (j - (i + 1)) as i64;
-    let exponent: i64 = s[j + 1..].parse().map_err(|_| ParseNumberError::Float)?;
-    let val: BigDecimal = s.parse().map_err(|_| ParseNumberError::Float)?;
-
-    let num_integral_digits = {
-        let minimum: usize = {
-            let integral_part: f64 = s[..j].parse().map_err(|_| ParseNumberError::Float)?;
-            if integral_part.is_sign_negative() {
-                2
-            } else {
-                1
-            }
-        };
-        // Special case: if the string is "-.1e2", we need to treat it
-        // as if it were "-0.1e2".
-        let total = if s.starts_with("-.") {
-            i as i64 + exponent + 1
-        } else {
-            i as i64 + exponent
-        };
-        if total < minimum as i64 {
-            minimum
-        } else {
-            total.try_into().unwrap()
-        }
-    };
-
-    let num_fractional_digits = if num_digits_between_decimal_point_and_e < exponent {
-        0
-    } else {
-        (num_digits_between_decimal_point_and_e - exponent)
-            .try_into()
-            .unwrap()
-    };
-
-    if num_digits_between_decimal_point_and_e <= exponent {
-        if is_minus_zero_float(s, &val) {
-            Ok(PreciseNumber::new(
-                Number::Int(ExtendedBigInt::MinusZero),
-                num_integral_digits,
-                num_fractional_digits,
-            ))
-        } else {
-            let zeros: String = "0".repeat(
-                (exponent - num_digits_between_decimal_point_and_e)
-                    .try_into()
-                    .unwrap(),
-            );
-            let expanded = [&s[0..i], &s[i + 1..j], &zeros].concat();
-            let n = expanded
-                .parse::<BigInt>()
-                .map_err(|_| ParseNumberError::Float)?;
-            Ok(PreciseNumber::new(
-                Number::Int(ExtendedBigInt::BigInt(n)),
-                num_integral_digits,
-                num_fractional_digits,
-            ))
-        }
-    } else if is_minus_zero_float(s, &val) {
-        Ok(PreciseNumber::new(
-            Number::Float(ExtendedBigDecimal::MinusZero),
-            num_integral_digits,
-            num_fractional_digits,
-        ))
-    } else {
-        Ok(PreciseNumber::new(
-            Number::Float(ExtendedBigDecimal::BigDecimal(val)),
-            num_integral_digits,
-            num_fractional_digits,
-        ))
-    }
-}
-
-/// Parse a hexadecimal integer from a string.
-///
-/// # Errors
-///
-/// This function returns an error if no [`BigInt`] could be parsed from
-/// the string.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// let actual = "0x0".parse::<Number>().unwrap().number;
-/// let expected = Number::BigInt(BigInt::zero());
-/// assert_eq!(actual, expected);
-/// ```
-fn parse_hexadecimal(s: &str) -> Result<PreciseNumber, ParseNumberError> {
-    let (is_neg, s) = if s.starts_with('-') {
-        (true, &s[3..])
-    } else {
-        (false, &s[2..])
-    };
-
-    if s.starts_with('-') || s.starts_with('+') {
-        // Even though this is more like an invalid hexadecimal number,
-        // GNU reports this as an invalid floating point number, so we
-        // use `ParseNumberError::Float` to match that behavior.
-        return Err(ParseNumberError::Float);
-    }
-
-    let num = BigInt::from_str_radix(s, 16).map_err(|_| ParseNumberError::Hex)?;
-
-    match (is_neg, num == BigInt::zero()) {
-        (true, true) => Ok(PreciseNumber::new(
-            Number::Int(ExtendedBigInt::MinusZero),
-            2,
-            0,
-        )),
-        (true, false) => Ok(PreciseNumber::new(
-            Number::Int(ExtendedBigInt::BigInt(-num)),
-            0,
-            0,
-        )),
-        (false, _) => Ok(PreciseNumber::new(
-            Number::Int(ExtendedBigInt::BigInt(num)),
-            0,
-            0,
-        )),
-    }
-}
-
-impl FromStr for PreciseNumber {
-    type Err = ParseNumberError;
-    fn from_str(mut s: &str) -> Result<Self, Self::Err> {
-        // Trim leading whitespace.
-        s = s.trim_start();
-
-        // Trim a single leading "+" character.
-        if s.starts_with('+') {
-            s = &s[1..];
-        }
-
-        // Check if the string seems to be in hexadecimal format.
-        //
-        // May be 0x123 or -0x123, so the index `i` may be either 0 or 1.
-        if let Some(i) = s.to_lowercase().find("0x") {
-            if i <= 1 {
-                return parse_hexadecimal(s);
-            }
-        }
-
-        // Find the decimal point and the exponent symbol. Parse the
-        // number differently depending on its form. This is important
-        // because the form of the input dictates how the output will be
-        // presented.
-        match (s.find('.'), s.find('e')) {
-            // For example, "123456" or "inf".
-            (None, None) => parse_no_decimal_no_exponent(s),
-            // For example, "123e456" or "1e-2".
-            (None, Some(j)) => parse_exponent_no_decimal(s, j),
-            // For example, "123.456".
-            (Some(i), None) => parse_decimal_no_exponent(s, i),
-            // For example, "123.456e789".
-            (Some(i), Some(j)) if i < j => parse_decimal_and_exponent(s, i, j),
-            // For example, "1e2.3" or "1.2.3".
-            _ => Err(ParseNumberError::Float),
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use bigdecimal::BigDecimal;
-    use num_bigint::BigInt;
-    use num_traits::Zero;
-
-    use crate::extendedbigdecimal::ExtendedBigDecimal;
-    use crate::extendedbigint::ExtendedBigInt;
-    use crate::number::Number;
-    use crate::number::PreciseNumber;
-    use crate::numberparse::ParseNumberError;
-
-    /// Convenience function for parsing a [`Number`] and unwrapping.
-    fn parse(s: &str) -> Number {
-        s.parse::<PreciseNumber>().unwrap().number
-    }
-
-    /// Convenience function for getting the number of integral digits.
-    fn num_integral_digits(s: &str) -> usize {
-        s.parse::<PreciseNumber>().unwrap().num_integral_digits
-    }
-
-    /// Convenience function for getting the number of fractional digits.
-    fn num_fractional_digits(s: &str) -> usize {
-        s.parse::<PreciseNumber>().unwrap().num_fractional_digits
-    }
-
-    #[test]
-    fn test_parse_minus_zero_int() {
-        assert_eq!(parse("-0e0"), Number::Int(ExtendedBigInt::MinusZero));
-        assert_eq!(parse("-0e-0"), Number::Int(ExtendedBigInt::MinusZero));
-        assert_eq!(parse("-0e1"), Number::Int(ExtendedBigInt::MinusZero));
-        assert_eq!(parse("-0e+1"), Number::Int(ExtendedBigInt::MinusZero));
-        assert_eq!(parse("-0.0e1"), Number::Int(ExtendedBigInt::MinusZero));
-        assert_eq!(parse("-0x0"), Number::Int(ExtendedBigInt::MinusZero));
-    }
-
-    #[test]
-    fn test_parse_minus_zero_float() {
-        assert_eq!(parse("-0.0"), Number::Float(ExtendedBigDecimal::MinusZero));
-        assert_eq!(parse("-0e-1"), Number::Float(ExtendedBigDecimal::MinusZero));
-        assert_eq!(
-            parse("-0.0e-1"),
-            Number::Float(ExtendedBigDecimal::MinusZero)
-        );
-    }
-
-    #[test]
-    fn test_parse_big_int() {
-        assert_eq!(parse("0"), Number::Int(ExtendedBigInt::zero()));
-        assert_eq!(parse("0.1e1"), Number::Int(ExtendedBigInt::one()));
-        assert_eq!(
-            parse("1.0e1"),
-            Number::Int(ExtendedBigInt::BigInt("10".parse::<BigInt>().unwrap()))
-        );
-    }
-
-    #[test]
-    fn test_parse_hexadecimal_big_int() {
-        assert_eq!(parse("0x0"), Number::Int(ExtendedBigInt::zero()));
-        assert_eq!(
-            parse("0x10"),
-            Number::Int(ExtendedBigInt::BigInt("16".parse::<BigInt>().unwrap()))
-        );
-    }
-
-    #[test]
-    fn test_parse_big_decimal() {
-        assert_eq!(
-            parse("0.0"),
-            Number::Float(ExtendedBigDecimal::BigDecimal(
-                "0.0".parse::<BigDecimal>().unwrap()
-            ))
-        );
-        assert_eq!(
-            parse(".0"),
-            Number::Float(ExtendedBigDecimal::BigDecimal(
-                "0.0".parse::<BigDecimal>().unwrap()
-            ))
-        );
-        assert_eq!(
-            parse("1.0"),
-            Number::Float(ExtendedBigDecimal::BigDecimal(
-                "1.0".parse::<BigDecimal>().unwrap()
-            ))
-        );
-        assert_eq!(
-            parse("10e-1"),
-            Number::Float(ExtendedBigDecimal::BigDecimal(
-                "1.0".parse::<BigDecimal>().unwrap()
-            ))
-        );
-        assert_eq!(
-            parse("-1e-3"),
-            Number::Float(ExtendedBigDecimal::BigDecimal(
-                "-0.001".parse::<BigDecimal>().unwrap()
-            ))
-        );
-    }
-
-    #[test]
-    fn test_parse_inf() {
-        assert_eq!(parse("inf"), Number::Float(ExtendedBigDecimal::Infinity));
-        assert_eq!(parse("+inf"), Number::Float(ExtendedBigDecimal::Infinity));
-        assert_eq!(
-            parse("-inf"),
-            Number::Float(ExtendedBigDecimal::MinusInfinity)
-        );
-    }
-
-    #[test]
-    fn test_parse_invalid_float() {
-        assert_eq!(
-            "1.2.3".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Float
-        );
-        assert_eq!(
-            "1e2e3".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Float
-        );
-        assert_eq!(
-            "1e2.3".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Float
-        );
-        assert_eq!(
-            "-+-1".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Float
-        );
-    }
-
-    #[test]
-    fn test_parse_invalid_hex() {
-        assert_eq!(
-            "0xg".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Hex
-        );
-    }
-
-    #[test]
-    fn test_parse_invalid_nan() {
-        assert_eq!(
-            "nan".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Nan
-        );
-        assert_eq!(
-            "NAN".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Nan
-        );
-        assert_eq!(
-            "NaN".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Nan
-        );
-        assert_eq!(
-            "nAn".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Nan
-        );
-        assert_eq!(
-            "-nan".parse::<PreciseNumber>().unwrap_err(),
-            ParseNumberError::Nan
-        );
-    }
-
-    #[test]
-    fn test_num_integral_digits() {
-        // no decimal, no exponent
-        assert_eq!(num_integral_digits("123"), 3);
-        // decimal, no exponent
-        assert_eq!(num_integral_digits("123.45"), 3);
-        assert_eq!(num_integral_digits("-0.1"), 2);
-        assert_eq!(num_integral_digits("-.1"), 2);
-        // exponent, no decimal
-        assert_eq!(num_integral_digits("123e4"), 3 + 4);
-        assert_eq!(num_integral_digits("123e-4"), 1);
-        assert_eq!(num_integral_digits("-1e-3"), 2);
-        // decimal and exponent
-        assert_eq!(num_integral_digits("123.45e6"), 3 + 6);
-        assert_eq!(num_integral_digits("123.45e-6"), 1);
-        assert_eq!(num_integral_digits("123.45e-1"), 2);
-        assert_eq!(num_integral_digits("-0.1e0"), 2);
-        assert_eq!(num_integral_digits("-0.1e2"), 4);
-        assert_eq!(num_integral_digits("-.1e0"), 2);
-        assert_eq!(num_integral_digits("-.1e2"), 4);
-        assert_eq!(num_integral_digits("-1.e-3"), 2);
-        assert_eq!(num_integral_digits("-1.0e-4"), 2);
-        // minus zero int
-        assert_eq!(num_integral_digits("-0e0"), 2);
-        assert_eq!(num_integral_digits("-0e-0"), 2);
-        assert_eq!(num_integral_digits("-0e1"), 3);
-        assert_eq!(num_integral_digits("-0e+1"), 3);
-        assert_eq!(num_integral_digits("-0.0e1"), 3);
-        // minus zero float
-        assert_eq!(num_integral_digits("-0.0"), 2);
-        assert_eq!(num_integral_digits("-0e-1"), 2);
-        assert_eq!(num_integral_digits("-0.0e-1"), 2);
-
-        // TODO In GNU `seq`, the `-w` option does not seem to work with
-        // hexadecimal arguments. In order to match that behavior, we
-        // report the number of integral digits as zero for hexadecimal
-        // inputs.
-        assert_eq!(num_integral_digits("0xff"), 0);
-    }
-
-    #[test]
-    fn test_num_fractional_digits() {
-        // no decimal, no exponent
-        assert_eq!(num_fractional_digits("123"), 0);
-        assert_eq!(num_fractional_digits("0xff"), 0);
-        // decimal, no exponent
-        assert_eq!(num_fractional_digits("123.45"), 2);
-        assert_eq!(num_fractional_digits("-0.1"), 1);
-        assert_eq!(num_fractional_digits("-.1"), 1);
-        // exponent, no decimal
-        assert_eq!(num_fractional_digits("123e4"), 0);
-        assert_eq!(num_fractional_digits("123e-4"), 4);
-        assert_eq!(num_fractional_digits("123e-1"), 1);
-        assert_eq!(num_fractional_digits("-1e-3"), 3);
-        // decimal and exponent
-        assert_eq!(num_fractional_digits("123.45e6"), 0);
-        assert_eq!(num_fractional_digits("123.45e1"), 1);
-        assert_eq!(num_fractional_digits("123.45e-6"), 8);
-        assert_eq!(num_fractional_digits("123.45e-1"), 3);
-        assert_eq!(num_fractional_digits("-0.1e0"), 1);
-        assert_eq!(num_fractional_digits("-0.1e2"), 0);
-        assert_eq!(num_fractional_digits("-.1e0"), 1);
-        assert_eq!(num_fractional_digits("-.1e2"), 0);
-        assert_eq!(num_fractional_digits("-1.e-3"), 3);
-        assert_eq!(num_fractional_digits("-1.0e-4"), 5);
-        // minus zero int
-        assert_eq!(num_fractional_digits("-0e0"), 0);
-        assert_eq!(num_fractional_digits("-0e-0"), 0);
-        assert_eq!(num_fractional_digits("-0e1"), 0);
-        assert_eq!(num_fractional_digits("-0e+1"), 0);
-        assert_eq!(num_fractional_digits("-0.0e1"), 0);
-        // minus zero float
-        assert_eq!(num_fractional_digits("-0.0"), 1);
-        assert_eq!(num_fractional_digits("-0e-1"), 1);
-        assert_eq!(num_fractional_digits("-0.0e-1"), 2);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_seq/seq.rs.html b/src/uu_seq/seq.rs.html deleted file mode 100644 index 6232fe6b2..000000000 --- a/src/uu_seq/seq.rs.html +++ /dev/null @@ -1,756 +0,0 @@ -seq.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-// TODO: Support -f flag
-// spell-checker:ignore (ToDO) istr chiter argptr ilen extendedbigdecimal extendedbigint numberparse
-use std::io::{stdout, ErrorKind, Write};
-
-use clap::{crate_version, App, AppSettings, Arg};
-use num_traits::Zero;
-
-use uucore::error::FromIo;
-use uucore::error::UResult;
-use uucore::memo::Memo;
-
-mod error;
-mod extendedbigdecimal;
-mod extendedbigint;
-mod number;
-mod numberparse;
-use crate::error::SeqError;
-use crate::extendedbigdecimal::ExtendedBigDecimal;
-use crate::extendedbigint::ExtendedBigInt;
-use crate::number::Number;
-use crate::number::PreciseNumber;
-
-static ABOUT: &str = "Display numbers from FIRST to LAST, in steps of INCREMENT.";
-static OPT_SEPARATOR: &str = "separator";
-static OPT_TERMINATOR: &str = "terminator";
-static OPT_WIDTHS: &str = "widths";
-static OPT_FORMAT: &str = "format";
-
-static ARG_NUMBERS: &str = "numbers";
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... LAST
-    {0} [OPTION]... FIRST LAST
-    {0} [OPTION]... FIRST INCREMENT LAST",
-        uucore::execution_phrase()
-    )
-}
-#[derive(Clone)]
-struct SeqOptions<'a> {
-    separator: String,
-    terminator: String,
-    widths: bool,
-    format: Option<&'a str>,
-}
-
-/// A range of integers.
-///
-/// The elements are (first, increment, last).
-type RangeInt = (ExtendedBigInt, ExtendedBigInt, ExtendedBigInt);
-
-/// A range of floats.
-///
-/// The elements are (first, increment, last).
-type RangeFloat = (ExtendedBigDecimal, ExtendedBigDecimal, ExtendedBigDecimal);
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let numbers = matches.values_of(ARG_NUMBERS).unwrap().collect::<Vec<_>>();
-
-    let options = SeqOptions {
-        separator: matches.value_of(OPT_SEPARATOR).unwrap_or("\n").to_string(),
-        terminator: matches.value_of(OPT_TERMINATOR).unwrap_or("\n").to_string(),
-        widths: matches.is_present(OPT_WIDTHS),
-        format: matches.value_of(OPT_FORMAT),
-    };
-
-    let first = if numbers.len() > 1 {
-        match numbers[0].parse() {
-            Ok(num) => num,
-            Err(e) => return Err(SeqError::ParseError(numbers[0].to_string(), e).into()),
-        }
-    } else {
-        PreciseNumber::one()
-    };
-    let increment = if numbers.len() > 2 {
-        match numbers[1].parse() {
-            Ok(num) => num,
-            Err(e) => return Err(SeqError::ParseError(numbers[1].to_string(), e).into()),
-        }
-    } else {
-        PreciseNumber::one()
-    };
-    if increment.is_zero() {
-        return Err(SeqError::ZeroIncrement(numbers[1].to_string()).into());
-    }
-    let last: PreciseNumber = {
-        // We are guaranteed that `numbers.len()` is greater than zero
-        // and at most three because of the argument specification in
-        // `uu_app()`.
-        let n: usize = numbers.len();
-        match numbers[n - 1].parse() {
-            Ok(num) => num,
-            Err(e) => return Err(SeqError::ParseError(numbers[n - 1].to_string(), e).into()),
-        }
-    };
-
-    let padding = first
-        .num_integral_digits
-        .max(increment.num_integral_digits)
-        .max(last.num_integral_digits);
-    let largest_dec = first
-        .num_fractional_digits
-        .max(increment.num_fractional_digits);
-
-    let result = match (first.number, increment.number, last.number) {
-        (Number::Int(first), Number::Int(increment), last) => {
-            let last = last.round_towards(&first);
-            print_seq_integers(
-                (first, increment, last),
-                options.separator,
-                options.terminator,
-                options.widths,
-                padding,
-                options.format,
-            )
-        }
-        (first, increment, last) => print_seq(
-            (
-                first.into_extended_big_decimal(),
-                increment.into_extended_big_decimal(),
-                last.into_extended_big_decimal(),
-            ),
-            largest_dec,
-            options.separator,
-            options.terminator,
-            options.widths,
-            padding,
-            options.format,
-        ),
-    };
-    match result {
-        Ok(_) => Ok(()),
-        Err(err) if err.kind() == ErrorKind::BrokenPipe => Ok(()),
-        Err(e) => Err(e.map_err_context(|| "write error".into())),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .setting(AppSettings::TrailingVarArg)
-        .setting(AppSettings::AllowHyphenValues)
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_SEPARATOR)
-                .short('s')
-                .long("separator")
-                .help("Separator character (defaults to \\n)")
-                .takes_value(true)
-                .number_of_values(1),
-        )
-        .arg(
-            Arg::new(OPT_TERMINATOR)
-                .short('t')
-                .long("terminator")
-                .help("Terminator character (defaults to \\n)")
-                .takes_value(true)
-                .number_of_values(1),
-        )
-        .arg(
-            Arg::new(OPT_WIDTHS)
-                .short('w')
-                .long("widths")
-                .help("Equalize widths of all numbers by padding with zeros"),
-        )
-        .arg(
-            Arg::new(OPT_FORMAT)
-                .short('f')
-                .long(OPT_FORMAT)
-                .help("use printf style floating-point FORMAT")
-                .takes_value(true)
-                .number_of_values(1),
-        )
-        .arg(
-            Arg::new(ARG_NUMBERS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .max_values(3)
-                .required(true),
-        )
-}
-
-fn done_printing<T: Zero + PartialOrd>(next: &T, increment: &T, last: &T) -> bool {
-    if increment >= &T::zero() {
-        next > last
-    } else {
-        next < last
-    }
-}
-
-/// Write a big decimal formatted according to the given parameters.
-///
-/// This method is an adapter to support displaying negative zero on
-/// Rust versions earlier than 1.53.0. After that version, we should be
-/// able to display negative zero using the default formatting provided
-/// by `-0.0f32`, for example.
-fn write_value_float(
-    writer: &mut impl Write,
-    value: &ExtendedBigDecimal,
-    width: usize,
-    precision: usize,
-    is_first_iteration: bool,
-) -> std::io::Result<()> {
-    let value_as_str = if *value == ExtendedBigDecimal::MinusZero && is_first_iteration {
-        format!(
-            "-{value:>0width$.precision$}",
-            value = value,
-            width = if width > 0 { width - 1 } else { width },
-            precision = precision,
-        )
-    } else if *value == ExtendedBigDecimal::Infinity || *value == ExtendedBigDecimal::MinusInfinity
-    {
-        format!(
-            "{value:>width$.precision$}",
-            value = value,
-            width = width,
-            precision = precision,
-        )
-    } else {
-        format!(
-            "{value:>0width$.precision$}",
-            value = value,
-            width = width,
-            precision = precision,
-        )
-    };
-    write!(writer, "{}", value_as_str)
-}
-
-/// Write a big int formatted according to the given parameters.
-fn write_value_int(
-    writer: &mut impl Write,
-    value: &ExtendedBigInt,
-    width: usize,
-    pad: bool,
-    is_first_iteration: bool,
-) -> std::io::Result<()> {
-    let value_as_str = if pad {
-        if *value == ExtendedBigInt::MinusZero && is_first_iteration {
-            format!("-{value:>0width$}", value = value, width = width - 1,)
-        } else {
-            format!("{value:>0width$}", value = value, width = width,)
-        }
-    } else if *value == ExtendedBigInt::MinusZero && is_first_iteration {
-        format!("-{}", value)
-    } else {
-        format!("{}", value)
-    };
-    write!(writer, "{}", value_as_str)
-}
-
-// TODO `print_seq()` and `print_seq_integers()` are nearly identical,
-// they could be refactored into a single more general function.
-
-/// Floating point based code path
-fn print_seq(
-    range: RangeFloat,
-    largest_dec: usize,
-    separator: String,
-    terminator: String,
-    pad: bool,
-    padding: usize,
-    format: Option<&str>,
-) -> std::io::Result<()> {
-    let stdout = stdout();
-    let mut stdout = stdout.lock();
-    let (first, increment, last) = range;
-    let mut value = first;
-    let padding = if pad { padding + 1 + largest_dec } else { 0 };
-    let mut is_first_iteration = true;
-    while !done_printing(&value, &increment, &last) {
-        if !is_first_iteration {
-            write!(stdout, "{}", separator)?;
-        }
-        // If there was an argument `-f FORMAT`, then use that format
-        // template instead of the default formatting strategy.
-        //
-        // The `Memo::run_all()` function takes in the template and
-        // the current value and writes the result to `stdout`.
-        //
-        // TODO The `run_all()` method takes a string as its second
-        // parameter but we have an `ExtendedBigDecimal`. In order to
-        // satisfy the signature of the function, we convert the
-        // `ExtendedBigDecimal` into a string. The `Memo::run_all()`
-        // logic will subsequently parse that string into something
-        // similar to an `ExtendedBigDecimal` again before rendering
-        // it as a string and ultimately writing to `stdout`. We
-        // shouldn't have to do so much converting back and forth via
-        // strings.
-        match format {
-            Some(f) => {
-                let s = format!("{}", value);
-                Memo::run_all(f, &[s]);
-            }
-            None => write_value_float(
-                &mut stdout,
-                &value,
-                padding,
-                largest_dec,
-                is_first_iteration,
-            )?,
-        }
-        // TODO Implement augmenting addition.
-        value = value + increment.clone();
-        is_first_iteration = false;
-    }
-    if !is_first_iteration {
-        write!(stdout, "{}", terminator)?;
-    }
-    stdout.flush()?;
-    Ok(())
-}
-
-/// Print an integer sequence.
-///
-/// This function prints a sequence of integers defined by `range`,
-/// which defines the first integer, last integer, and increment of the
-/// range. The `separator` is inserted between each integer and
-/// `terminator` is inserted at the end.
-///
-/// The `pad` parameter indicates whether to pad numbers to the width
-/// given in `padding`.
-///
-/// If `is_first_minus_zero` is `true`, then the `first` parameter is
-/// printed as if it were negative zero, even though no such number
-/// exists as an integer (negative zero only exists for floating point
-/// numbers). Only set this to `true` if `first` is actually zero.
-fn print_seq_integers(
-    range: RangeInt,
-    separator: String,
-    terminator: String,
-    pad: bool,
-    padding: usize,
-    format: Option<&str>,
-) -> std::io::Result<()> {
-    let stdout = stdout();
-    let mut stdout = stdout.lock();
-    let (first, increment, last) = range;
-    let mut value = first;
-    let mut is_first_iteration = true;
-    while !done_printing(&value, &increment, &last) {
-        if !is_first_iteration {
-            write!(stdout, "{}", separator)?;
-        }
-        // If there was an argument `-f FORMAT`, then use that format
-        // template instead of the default formatting strategy.
-        //
-        // The `Memo::run_all()` function takes in the template and
-        // the current value and writes the result to `stdout`.
-        //
-        // TODO See similar comment about formatting in `print_seq()`.
-        match format {
-            Some(f) => {
-                let s = format!("{}", value);
-                Memo::run_all(f, &[s]);
-            }
-            None => write_value_int(&mut stdout, &value, padding, pad, is_first_iteration)?,
-        }
-        // TODO Implement augmenting addition.
-        value = value + increment.clone();
-        is_first_iteration = false;
-    }
-
-    if !is_first_iteration {
-        write!(stdout, "{}", terminator)?;
-    }
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_shred/shred.rs.html b/src/uu_shred/shred.rs.html deleted file mode 100644 index 06309f1d2..000000000 --- a/src/uu_shred/shred.rs.html +++ /dev/null @@ -1,1318 +0,0 @@ -shred.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) Michael Rosenberg <42micro@gmail.com>
-// * (c) Fort <forticulous@gmail.com>
-// *
-// * For the full copyright and license information, please view the LICENSE
-// * file that was distributed with this source code.
-
-// spell-checker:ignore (words) writeback wipesync
-
-use clap::{crate_version, App, Arg};
-use rand::prelude::SliceRandom;
-use rand::Rng;
-use std::cell::{Cell, RefCell};
-use std::fs;
-use std::fs::{File, OpenOptions};
-use std::io;
-use std::io::prelude::*;
-use std::io::SeekFrom;
-use std::path::{Path, PathBuf};
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
-use uucore::{util_name, InvalidEncodingHandling};
-
-#[macro_use]
-extern crate uucore;
-
-const BLOCK_SIZE: usize = 512;
-const NAME_CHARSET: &[u8] = b"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.";
-
-// Patterns as shown in the GNU coreutils shred implementation
-const PATTERNS: [&[u8]; 22] = [
-    b"\x00",
-    b"\xFF",
-    b"\x55",
-    b"\xAA",
-    b"\x24\x92\x49",
-    b"\x49\x24\x92",
-    b"\x6D\xB6\xDB",
-    b"\x92\x49\x24",
-    b"\xB6\xDB\x6D",
-    b"\xDB\x6D\xB6",
-    b"\x11",
-    b"\x22",
-    b"\x33",
-    b"\x44",
-    b"\x66",
-    b"\x77",
-    b"\x88",
-    b"\x99",
-    b"\xBB",
-    b"\xCC",
-    b"\xDD",
-    b"\xEE",
-];
-
-#[derive(Clone, Copy)]
-enum PassType<'a> {
-    Pattern(&'a [u8]),
-    Random,
-}
-
-// Used to generate all possible filenames of a certain length using NAME_CHARSET as an alphabet
-struct FilenameGenerator {
-    name_len: usize,
-    name_charset_indices: RefCell<Vec<usize>>, // Store the indices of the letters of our filename in NAME_CHARSET
-    exhausted: Cell<bool>,
-}
-
-impl FilenameGenerator {
-    fn new(name_len: usize) -> FilenameGenerator {
-        let indices: Vec<usize> = vec![0; name_len];
-        FilenameGenerator {
-            name_len,
-            name_charset_indices: RefCell::new(indices),
-            exhausted: Cell::new(false),
-        }
-    }
-}
-
-impl Iterator for FilenameGenerator {
-    type Item = String;
-
-    fn next(&mut self) -> Option<String> {
-        if self.exhausted.get() {
-            return None;
-        }
-
-        let mut name_charset_indices = self.name_charset_indices.borrow_mut();
-
-        // Make the return value, then increment
-        let mut ret = String::new();
-        for i in name_charset_indices.iter() {
-            let c = char::from(NAME_CHARSET[*i]);
-            ret.push(c);
-        }
-
-        if name_charset_indices[0] == NAME_CHARSET.len() - 1 {
-            self.exhausted.set(true)
-        }
-        // Now increment the least significant index
-        for i in (0..self.name_len).rev() {
-            if name_charset_indices[i] == NAME_CHARSET.len() - 1 {
-                name_charset_indices[i] = 0; // Carry the 1
-                continue;
-            } else {
-                name_charset_indices[i] += 1;
-                break;
-            }
-        }
-
-        Some(ret)
-    }
-}
-
-// Used to generate blocks of bytes of size <= BLOCK_SIZE based on either a give pattern
-// or randomness
-struct BytesGenerator<'a> {
-    total_bytes: u64,
-    bytes_generated: Cell<u64>,
-    block_size: usize,
-    exact: bool, // if false, every block's size is block_size
-    gen_type: PassType<'a>,
-    rng: Option<RefCell<rand::rngs::ThreadRng>>,
-    bytes: [u8; BLOCK_SIZE],
-}
-
-impl<'a> BytesGenerator<'a> {
-    fn new(total_bytes: u64, gen_type: PassType<'a>, exact: bool) -> BytesGenerator {
-        let rng = match gen_type {
-            PassType::Random => Some(RefCell::new(rand::thread_rng())),
-            _ => None,
-        };
-
-        let bytes = [0; BLOCK_SIZE];
-
-        BytesGenerator {
-            total_bytes,
-            bytes_generated: Cell::new(0u64),
-            block_size: BLOCK_SIZE,
-            exact,
-            gen_type,
-            rng,
-            bytes,
-        }
-    }
-
-    pub fn reset(&mut self, total_bytes: u64, gen_type: PassType<'a>) {
-        if let PassType::Random = gen_type {
-            if self.rng.is_none() {
-                self.rng = Some(RefCell::new(rand::thread_rng()));
-            }
-        }
-
-        self.total_bytes = total_bytes;
-        self.gen_type = gen_type;
-
-        self.bytes_generated.set(0);
-    }
-
-    pub fn next(&mut self) -> Option<&[u8]> {
-        // We go over the total_bytes limit when !self.exact and total_bytes isn't a multiple
-        // of self.block_size
-        if self.bytes_generated.get() >= self.total_bytes {
-            return None;
-        }
-
-        let this_block_size = if !self.exact {
-            self.block_size
-        } else {
-            let bytes_left = self.total_bytes - self.bytes_generated.get();
-            if bytes_left >= self.block_size as u64 {
-                self.block_size
-            } else {
-                (bytes_left % self.block_size as u64) as usize
-            }
-        };
-
-        let bytes = &mut self.bytes[..this_block_size];
-
-        match self.gen_type {
-            PassType::Random => {
-                let mut rng = self.rng.as_ref().unwrap().borrow_mut();
-                rng.fill(bytes);
-            }
-            PassType::Pattern(pattern) => {
-                let skip = if self.bytes_generated.get() == 0 {
-                    0
-                } else {
-                    (pattern.len() as u64 % self.bytes_generated.get()) as usize
-                };
-
-                // Copy the pattern in chunks rather than simply one byte at a time
-                let mut i = 0;
-                while i < this_block_size {
-                    let start = (i + skip) % pattern.len();
-                    let end = (this_block_size - i).min(pattern.len());
-                    let len = end - start;
-
-                    bytes[i..i + len].copy_from_slice(&pattern[start..end]);
-
-                    i += len;
-                }
-            }
-        };
-
-        let new_bytes_generated = self.bytes_generated.get() + this_block_size as u64;
-        self.bytes_generated.set(new_bytes_generated);
-
-        Some(bytes)
-    }
-}
-
-static ABOUT: &str = "Overwrite the specified FILE(s) repeatedly, in order to make it harder\n\
-for even very expensive hardware probing to recover the data.
-";
-
-fn usage() -> String {
-    format!("{} [OPTION]... FILE...", uucore::execution_phrase())
-}
-
-static AFTER_HELP: &str =
-    "Delete FILE(s) if --remove (-u) is specified.  The default is not to remove\n\
-     the files because it is common to operate on device files like /dev/hda,\n\
-     and those files usually should not be removed.\n\
-     \n\
-     CAUTION: Note that shred relies on a very important assumption:\n\
-     that the file system overwrites data in place.  This is the traditional\n\
-     way to do things, but many modern file system designs do not satisfy this\n\
-     assumption.  The following are examples of file systems on which shred is\n\
-     not effective, or is not guaranteed to be effective in all file system modes:\n\
-     \n\
-     * log-structured or journal file systems, such as those supplied with\n\
-     AIX and Solaris (and JFS, ReiserFS, XFS, Ext3, etc.)\n\
-     \n\
-     * file systems that write redundant data and carry on even if some writes\n\
-     fail, such as RAID-based file systems\n\
-     \n\
-     * file systems that make snapshots, such as Network Appliance's NFS server\n\
-     \n\
-     * file systems that cache in temporary locations, such as NFS\n\
-     version 3 clients\n\
-     \n\
-     * compressed file systems\n\
-     \n\
-     In the case of ext3 file systems, the above disclaimer applies\n\
-     and shred is thus of limited effectiveness) only in data=journal mode,\n\
-     which journals file data in addition to just metadata.  In both the\n\
-     data=ordered (default) and data=writeback modes, shred works as usual.\n\
-     Ext3 journal modes can be changed by adding the data=something option\n\
-     to the mount options for a particular file system in the /etc/fstab file,\n\
-     as documented in the mount man page (man mount).\n\
-     \n\
-     In addition, file system backups and remote mirrors may contain copies\n\
-     of the file that cannot be removed, and that will allow a shredded file\n\
-     to be recovered later.\n\
-     ";
-
-pub mod options {
-    pub const FORCE: &str = "force";
-    pub const FILE: &str = "file";
-    pub const ITERATIONS: &str = "iterations";
-    pub const SIZE: &str = "size";
-    pub const REMOVE: &str = "remove";
-    pub const VERBOSE: &str = "verbose";
-    pub const EXACT: &str = "exact";
-    pub const ZERO: &str = "zero";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let usage = usage();
-
-    let app = uu_app().override_usage(&usage[..]);
-
-    let matches = app.get_matches_from(args);
-
-    if !matches.is_present(options::FILE) {
-        return Err(UUsageError::new(1, "missing file operand"));
-    }
-
-    let iterations = match matches.value_of(options::ITERATIONS) {
-        Some(s) => match s.parse::<usize>() {
-            Ok(u) => u,
-            Err(_) => {
-                return Err(USimpleError::new(
-                    1,
-                    format!("invalid number of passes: {}", s.quote()),
-                ))
-            }
-        },
-        None => unreachable!(),
-    };
-
-    // TODO: implement --remove HOW
-    //       The optional HOW parameter indicates how to remove a directory entry:
-    //         - 'unlink' => use a standard unlink call.
-    //         - 'wipe' => also first obfuscate bytes in the name.
-    //         - 'wipesync' => also sync each obfuscated byte to disk.
-    //       The default mode is 'wipesync', but note it can be expensive.
-
-    // TODO: implement --random-source
-
-    let force = matches.is_present(options::FORCE);
-    let remove = matches.is_present(options::REMOVE);
-    let size_arg = matches.value_of(options::SIZE).map(|s| s.to_string());
-    let size = get_size(size_arg);
-    let exact = matches.is_present(options::EXACT) && size.is_none(); // if -s is given, ignore -x
-    let zero = matches.is_present(options::ZERO);
-    let verbose = matches.is_present(options::VERBOSE);
-
-    for path_str in matches.values_of(options::FILE).unwrap() {
-        show_if_err!(wipe_file(
-            path_str, iterations, remove, size, exact, zero, verbose, force,
-        ));
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(AFTER_HELP)
-        .arg(
-            Arg::new(options::FORCE)
-                .long(options::FORCE)
-                .short('f')
-                .help("change permissions to allow writing if necessary"),
-        )
-        .arg(
-            Arg::new(options::ITERATIONS)
-                .long(options::ITERATIONS)
-                .short('n')
-                .help("overwrite N times instead of the default (3)")
-                .value_name("NUMBER")
-                .default_value("3"),
-        )
-        .arg(
-            Arg::new(options::SIZE)
-                .long(options::SIZE)
-                .short('s')
-                .takes_value(true)
-                .value_name("N")
-                .help("shred this many bytes (suffixes like K, M, G accepted)"),
-        )
-        .arg(
-            Arg::new(options::REMOVE)
-                .short('u')
-                .long(options::REMOVE)
-                .help("truncate and remove file after overwriting;  See below"),
-        )
-        .arg(
-            Arg::new(options::VERBOSE)
-                .long(options::VERBOSE)
-                .short('v')
-                .help("show progress"),
-        )
-        .arg(
-            Arg::new(options::EXACT)
-                .long(options::EXACT)
-                .short('x')
-                .help(
-                    "do not round file sizes up to the next full block;\n\
-                     this is the default for non-regular files",
-                ),
-        )
-        .arg(
-            Arg::new(options::ZERO)
-                .long(options::ZERO)
-                .short('z')
-                .help("add a final overwrite with zeros to hide shredding"),
-        )
-        // Positional arguments
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-// TODO: Add support for all postfixes here up to and including EiB
-//       http://www.gnu.org/software/coreutils/manual/coreutils.html#Block-size
-fn get_size(size_str_opt: Option<String>) -> Option<u64> {
-    size_str_opt.as_ref()?;
-
-    let mut size_str = size_str_opt.as_ref().unwrap().clone();
-    // Immutably look at last character of size string
-    let unit = match size_str.chars().last().unwrap() {
-        'K' => {
-            size_str.pop();
-            1024u64
-        }
-        'M' => {
-            size_str.pop();
-            (1024 * 1024) as u64
-        }
-        'G' => {
-            size_str.pop();
-            (1024 * 1024 * 1024) as u64
-        }
-        _ => 1u64,
-    };
-
-    let coefficient = match size_str.parse::<u64>() {
-        Ok(u) => u,
-        Err(_) => {
-            println!(
-                "{}: {}: Invalid file size",
-                util_name(),
-                size_str_opt.unwrap().maybe_quote()
-            );
-            std::process::exit(1);
-        }
-    };
-
-    Some(coefficient * unit)
-}
-
-fn pass_name(pass_type: PassType) -> String {
-    match pass_type {
-        PassType::Random => String::from("random"),
-        PassType::Pattern(bytes) => {
-            let mut s: String = String::new();
-            while s.len() < 6 {
-                for b in bytes {
-                    let readable: String = format!("{:x}", b);
-                    s.push_str(&readable);
-                }
-            }
-            s
-        }
-    }
-}
-
-#[allow(clippy::too_many_arguments)]
-fn wipe_file(
-    path_str: &str,
-    n_passes: usize,
-    remove: bool,
-    size: Option<u64>,
-    exact: bool,
-    zero: bool,
-    verbose: bool,
-    force: bool,
-) -> UResult<()> {
-    // Get these potential errors out of the way first
-    let path: &Path = Path::new(path_str);
-    if !path.exists() {
-        return Err(USimpleError::new(
-            1,
-            format!("{}: No such file or directory", path.maybe_quote()),
-        ));
-    }
-    if !path.is_file() {
-        return Err(USimpleError::new(
-            1,
-            format!("{}: Not a file", path.maybe_quote()),
-        ));
-    }
-
-    // If force is true, set file permissions to not-readonly.
-    if force {
-        let metadata = fs::metadata(path).map_err_context(String::new)?;
-        let mut perms = metadata.permissions();
-        perms.set_readonly(false);
-        fs::set_permissions(path, perms).map_err_context(String::new)?;
-    }
-
-    // Fill up our pass sequence
-    let mut pass_sequence: Vec<PassType> = Vec::new();
-
-    if n_passes <= 3 {
-        // Only random passes if n_passes <= 3
-        for _ in 0..n_passes {
-            pass_sequence.push(PassType::Random)
-        }
-    }
-    // First fill it with Patterns, shuffle it, then evenly distribute Random
-    else {
-        let n_full_arrays = n_passes / PATTERNS.len(); // How many times can we go through all the patterns?
-        let remainder = n_passes % PATTERNS.len(); // How many do we get through on our last time through?
-
-        for _ in 0..n_full_arrays {
-            for p in &PATTERNS {
-                pass_sequence.push(PassType::Pattern(*p));
-            }
-        }
-        for pattern in PATTERNS.iter().take(remainder) {
-            pass_sequence.push(PassType::Pattern(pattern));
-        }
-        let mut rng = rand::thread_rng();
-        pass_sequence.shuffle(&mut rng); // randomize the order of application
-
-        let n_random = 3 + n_passes / 10; // Minimum 3 random passes; ratio of 10 after
-                                          // Evenly space random passes; ensures one at the beginning and end
-        for i in 0..n_random {
-            pass_sequence[i * (n_passes - 1) / (n_random - 1)] = PassType::Random;
-        }
-    }
-
-    // --zero specifies whether we want one final pass of 0x00 on our file
-    if zero {
-        pass_sequence.push(PassType::Pattern(b"\x00"));
-    }
-
-    {
-        let total_passes: usize = pass_sequence.len();
-        let mut file: File = OpenOptions::new()
-            .write(true)
-            .truncate(false)
-            .open(path)
-            .map_err_context(|| format!("{}: failed to open for writing", path.maybe_quote()))?;
-
-        // NOTE: it does not really matter what we set for total_bytes and gen_type here, so just
-        //       use bogus values
-        let mut generator = BytesGenerator::new(0, PassType::Pattern(&[]), exact);
-
-        for (i, pass_type) in pass_sequence.iter().enumerate() {
-            if verbose {
-                let pass_name: String = pass_name(*pass_type);
-                if total_passes.to_string().len() == 1 {
-                    println!(
-                        "{}: {}: pass {}/{} ({})... ",
-                        util_name(),
-                        path.maybe_quote(),
-                        i + 1,
-                        total_passes,
-                        pass_name
-                    );
-                } else {
-                    println!(
-                        "{}: {}: pass {:2.0}/{:2.0} ({})... ",
-                        util_name(),
-                        path.maybe_quote(),
-                        i + 1,
-                        total_passes,
-                        pass_name
-                    );
-                }
-            }
-            // size is an optional argument for exactly how many bytes we want to shred
-            show_if_err!(do_pass(&mut file, path, &mut generator, *pass_type, size)
-                .map_err_context(|| format!("{}: File write pass failed", path.maybe_quote())));
-            // Ignore failed writes; just keep trying
-        }
-    }
-
-    if remove {
-        do_remove(path, path_str, verbose)
-            .map_err_context(|| format!("{}: failed to remove file", path.maybe_quote()))?;
-    }
-    Ok(())
-}
-
-fn do_pass<'a>(
-    file: &mut File,
-    path: &Path,
-    generator: &mut BytesGenerator<'a>,
-    generator_type: PassType<'a>,
-    given_file_size: Option<u64>,
-) -> Result<(), io::Error> {
-    file.seek(SeekFrom::Start(0))?;
-
-    // Use the given size or the whole file if not specified
-    let size: u64 = given_file_size.unwrap_or(get_file_size(path)?);
-
-    generator.reset(size, generator_type);
-
-    while let Some(block) = generator.next() {
-        file.write_all(block)?;
-    }
-
-    file.sync_data()?;
-
-    Ok(())
-}
-
-fn get_file_size(path: &Path) -> Result<u64, io::Error> {
-    let size: u64 = fs::metadata(path)?.len();
-
-    Ok(size)
-}
-
-// Repeatedly renames the file with strings of decreasing length (most likely all 0s)
-// Return the path of the file after its last renaming or None if error
-fn wipe_name(orig_path: &Path, verbose: bool) -> Option<PathBuf> {
-    let file_name_len: usize = orig_path.file_name().unwrap().to_str().unwrap().len();
-
-    let mut last_path: PathBuf = PathBuf::from(orig_path);
-
-    for length in (1..=file_name_len).rev() {
-        for name in FilenameGenerator::new(length) {
-            let new_path: PathBuf = orig_path.with_file_name(name);
-            // We don't want the filename to already exist (don't overwrite)
-            // If it does, find another name that doesn't
-            if new_path.exists() {
-                continue;
-            }
-            match fs::rename(&last_path, &new_path) {
-                Ok(()) => {
-                    if verbose {
-                        println!(
-                            "{}: {}: renamed to {}",
-                            util_name(),
-                            last_path.maybe_quote(),
-                            new_path.quote()
-                        );
-                    }
-
-                    // Sync every file rename
-                    {
-                        let new_file: File = File::open(new_path.clone())
-                            .expect("Failed to open renamed file for syncing");
-                        new_file.sync_all().expect("Failed to sync renamed file");
-                    }
-
-                    last_path = new_path;
-                    break;
-                }
-                Err(e) => {
-                    println!(
-                        "{}: {}: Couldn't rename to {}: {}",
-                        util_name(),
-                        last_path.maybe_quote(),
-                        new_path.quote(),
-                        e
-                    );
-                    return None;
-                }
-            }
-        } // If every possible filename already exists, just reduce the length and try again
-    }
-
-    Some(last_path)
-}
-
-fn do_remove(path: &Path, orig_filename: &str, verbose: bool) -> Result<(), io::Error> {
-    if verbose {
-        println!("{}: {}: removing", util_name(), orig_filename.maybe_quote());
-    }
-
-    let renamed_path: Option<PathBuf> = wipe_name(path, verbose);
-    if let Some(rp) = renamed_path {
-        fs::remove_file(rp)?;
-    }
-
-    if verbose {
-        println!("{}: {}: removed", util_name(), orig_filename.maybe_quote());
-    }
-
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_shuf/rand_read_adapter.rs.html b/src/uu_shuf/rand_read_adapter.rs.html deleted file mode 100644 index dd7711a7c..000000000 --- a/src/uu_shuf/rand_read_adapter.rs.html +++ /dev/null @@ -1,292 +0,0 @@ -rand_read_adapter.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-
// Copyright 2018 Developers of the Rand project.
-// Copyright 2013 The Rust Project Developers.
-//
-// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
-// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
-// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your
-// option. This file may not be copied, modified, or distributed
-// except according to those terms.
-
-//! A wrapper around any Read to treat it as an RNG.
-
-use std::fmt;
-use std::io::Read;
-
-use rand_core::{impls, Error, RngCore};
-
-/// An RNG that reads random bytes straight from any type supporting
-/// [`std::io::Read`], for example files.
-///
-/// This will work best with an infinite reader, but that is not required.
-///
-/// This can be used with `/dev/urandom` on Unix but it is recommended to use
-/// [`OsRng`] instead.
-///
-/// # Panics
-///
-/// `ReadRng` uses [`std::io::Read::read_exact`], which retries on interrupts.
-/// All other errors from the underlying reader, including when it does not
-/// have enough data, will only be reported through [`try_fill_bytes`].
-/// The other [`RngCore`] methods will panic in case of an error.
-///
-/// [`OsRng`]: crate::rngs::OsRng
-/// [`try_fill_bytes`]: RngCore::try_fill_bytes
-#[derive(Debug)]
-pub struct ReadRng<R> {
-    reader: R,
-}
-
-impl<R: Read> ReadRng<R> {
-    /// Create a new `ReadRng` from a `Read`.
-    pub fn new(r: R) -> ReadRng<R> {
-        ReadRng { reader: r }
-    }
-}
-
-impl<R: Read> RngCore for ReadRng<R> {
-    fn next_u32(&mut self) -> u32 {
-        impls::next_u32_via_fill(self)
-    }
-
-    fn next_u64(&mut self) -> u64 {
-        impls::next_u64_via_fill(self)
-    }
-
-    fn fill_bytes(&mut self, dest: &mut [u8]) {
-        self.try_fill_bytes(dest).unwrap_or_else(|err| {
-            panic!(
-                "reading random bytes from Read implementation failed; error: {}",
-                err
-            )
-        });
-    }
-
-    fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
-        if dest.is_empty() {
-            return Ok(());
-        }
-        // Use `std::io::read_exact`, which retries on `ErrorKind::Interrupted`.
-        self.reader
-            .read_exact(dest)
-            .map_err(|e| Error::new(ReadError(e)))
-    }
-}
-
-/// `ReadRng` error type
-#[derive(Debug)]
-pub struct ReadError(std::io::Error);
-
-impl fmt::Display for ReadError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        write!(f, "ReadError: {}", self.0)
-    }
-}
-
-impl std::error::Error for ReadError {
-    fn source(&self) -> Option<&(dyn std::error::Error + 'static)> {
-        Some(&self.0)
-    }
-}
-
-#[cfg(test)]
-mod test {
-    use std::println;
-
-    use super::ReadRng;
-    use rand::RngCore;
-
-    #[test]
-    fn test_reader_rng_u64() {
-        // transmute from the target to avoid endianness concerns.
-        #[rustfmt::skip]
-        let v = [0u8, 0, 0, 0, 0, 0, 0, 1,
-                 0,   4, 0, 0, 3, 0, 0, 2,
-                 5,   0, 0, 0, 0, 0, 0, 0];
-        let mut rng = ReadRng::new(&v[..]);
-
-        assert_eq!(rng.next_u64(), 1 << 56);
-        assert_eq!(rng.next_u64(), (2 << 56) + (3 << 32) + (4 << 8));
-        assert_eq!(rng.next_u64(), 5);
-    }
-
-    #[test]
-    fn test_reader_rng_u32() {
-        let v = [0u8, 0, 0, 1, 0, 0, 2, 0, 3, 0, 0, 0];
-        let mut rng = ReadRng::new(&v[..]);
-
-        assert_eq!(rng.next_u32(), 1 << 24);
-        assert_eq!(rng.next_u32(), 2 << 16);
-        assert_eq!(rng.next_u32(), 3);
-    }
-
-    #[test]
-    fn test_reader_rng_fill_bytes() {
-        let v = [1u8, 2, 3, 4, 5, 6, 7, 8];
-        let mut w = [0u8; 8];
-
-        let mut rng = ReadRng::new(&v[..]);
-        rng.fill_bytes(&mut w);
-
-        assert!(v == w);
-    }
-
-    #[test]
-    fn test_reader_rng_insufficient_bytes() {
-        let v = [1u8, 2, 3, 4, 5, 6, 7, 8];
-        let mut w = [0u8; 9];
-
-        let mut rng = ReadRng::new(&v[..]);
-
-        let result = rng.try_fill_bytes(&mut w);
-        assert!(result.is_err());
-        println!("Error: {}", result.unwrap_err());
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_shuf/shuf.rs.html b/src/uu_shuf/shuf.rs.html deleted file mode 100644 index 6f7c23aa1..000000000 --- a/src/uu_shuf/shuf.rs.html +++ /dev/null @@ -1,640 +0,0 @@ -shuf.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) cmdline evec seps rvec fdata
-
-use clap::{crate_version, App, Arg};
-use rand::Rng;
-use std::fs::File;
-use std::io::{stdin, stdout, BufReader, BufWriter, Read, Write};
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-mod rand_read_adapter;
-
-enum Mode {
-    Default(String),
-    Echo(Vec<String>),
-    InputRange((usize, usize)),
-}
-
-static NAME: &str = "shuf";
-static USAGE: &str = r#"shuf [OPTION]... [FILE]
-  or:  shuf -e [OPTION]... [ARG]...
-  or:  shuf -i LO-HI [OPTION]...
-Write a random permutation of the input lines to standard output.
-
-With no FILE, or when FILE is -, read standard input.
-"#;
-static TEMPLATE: &str = "Usage: {usage}\nMandatory arguments to long options are mandatory for short options too.\n{options}";
-
-struct Options {
-    head_count: usize,
-    output: Option<String>,
-    random_source: Option<String>,
-    repeat: bool,
-    sep: u8,
-}
-
-mod options {
-    pub static ECHO: &str = "echo";
-    pub static INPUT_RANGE: &str = "input-range";
-    pub static HEAD_COUNT: &str = "head-count";
-    pub static OUTPUT: &str = "output";
-    pub static RANDOM_SOURCE: &str = "random-source";
-    pub static REPEAT: &str = "repeat";
-    pub static ZERO_TERMINATED: &str = "zero-terminated";
-    pub static FILE: &str = "file";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let mode = if let Some(args) = matches.values_of(options::ECHO) {
-        Mode::Echo(args.map(String::from).collect())
-    } else if let Some(range) = matches.value_of(options::INPUT_RANGE) {
-        match parse_range(range) {
-            Ok(m) => Mode::InputRange(m),
-            Err(msg) => {
-                return Err(USimpleError::new(1, msg));
-            }
-        }
-    } else {
-        Mode::Default(matches.value_of(options::FILE).unwrap_or("-").to_string())
-    };
-
-    let options = Options {
-        head_count: match matches.value_of(options::HEAD_COUNT) {
-            Some(count) => match count.parse::<usize>() {
-                Ok(val) => val,
-                Err(_) => {
-                    return Err(USimpleError::new(
-                        1,
-                        format!("invalid line count: {}", count.quote()),
-                    ));
-                }
-            },
-            None => std::usize::MAX,
-        },
-        output: matches.value_of(options::OUTPUT).map(String::from),
-        random_source: matches.value_of(options::RANDOM_SOURCE).map(String::from),
-        repeat: matches.is_present(options::REPEAT),
-        sep: if matches.is_present(options::ZERO_TERMINATED) {
-            0x00_u8
-        } else {
-            0x0a_u8
-        },
-    };
-
-    match mode {
-        Mode::Echo(args) => {
-            let mut evec = args.iter().map(String::as_bytes).collect::<Vec<_>>();
-            find_seps(&mut evec, options.sep);
-            shuf_bytes(&mut evec, options)?;
-        }
-        Mode::InputRange((b, e)) => {
-            let rvec = (b..e).map(|x| format!("{}", x)).collect::<Vec<String>>();
-            let mut rvec = rvec.iter().map(String::as_bytes).collect::<Vec<&[u8]>>();
-            shuf_bytes(&mut rvec, options)?;
-        }
-        Mode::Default(filename) => {
-            let fdata = read_input_file(&filename)?;
-            let mut fdata = vec![&fdata[..]];
-            find_seps(&mut fdata, options.sep);
-            shuf_bytes(&mut fdata, options)?;
-        }
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .help_template(TEMPLATE)
-        .override_usage(USAGE)
-        .arg(
-            Arg::new(options::ECHO)
-                .short('e')
-                .long(options::ECHO)
-                .takes_value(true)
-                .value_name("ARG")
-                .help("treat each ARG as an input line")
-                .multiple_occurrences(true)
-                .use_delimiter(false)
-                .min_values(0)
-                .conflicts_with(options::INPUT_RANGE),
-        )
-        .arg(
-            Arg::new(options::INPUT_RANGE)
-                .short('i')
-                .long(options::INPUT_RANGE)
-                .takes_value(true)
-                .value_name("LO-HI")
-                .help("treat each number LO through HI as an input line")
-                .conflicts_with(options::FILE),
-        )
-        .arg(
-            Arg::new(options::HEAD_COUNT)
-                .short('n')
-                .long(options::HEAD_COUNT)
-                .takes_value(true)
-                .value_name("COUNT")
-                .help("output at most COUNT lines"),
-        )
-        .arg(
-            Arg::new(options::OUTPUT)
-                .short('o')
-                .long(options::OUTPUT)
-                .takes_value(true)
-                .value_name("FILE")
-                .help("write result to FILE instead of standard output"),
-        )
-        .arg(
-            Arg::new(options::RANDOM_SOURCE)
-                .long(options::RANDOM_SOURCE)
-                .takes_value(true)
-                .value_name("FILE")
-                .help("get random bytes from FILE"),
-        )
-        .arg(
-            Arg::new(options::REPEAT)
-                .short('r')
-                .long(options::REPEAT)
-                .help("output lines can be repeated"),
-        )
-        .arg(
-            Arg::new(options::ZERO_TERMINATED)
-                .short('z')
-                .long(options::ZERO_TERMINATED)
-                .help("line delimiter is NUL, not newline"),
-        )
-        .arg(Arg::new(options::FILE).takes_value(true))
-}
-
-fn read_input_file(filename: &str) -> UResult<Vec<u8>> {
-    let mut file = BufReader::new(if filename == "-" {
-        Box::new(stdin()) as Box<dyn Read>
-    } else {
-        let file = File::open(filename)
-            .map_err_context(|| format!("failed to open {}", filename.quote()))?;
-        Box::new(file) as Box<dyn Read>
-    });
-
-    let mut data = Vec::new();
-    file.read_to_end(&mut data)
-        .map_err_context(|| format!("failed reading {}", filename.quote()))?;
-
-    Ok(data)
-}
-
-fn find_seps(data: &mut Vec<&[u8]>, sep: u8) {
-    // need to use for loop so we don't borrow the vector as we modify it in place
-    // basic idea:
-    // * We don't care about the order of the result. This lets us slice the slices
-    //   without making a new vector.
-    // * Starting from the end of the vector, we examine each element.
-    // * If that element contains the separator, we remove it from the vector,
-    //   and then sub-slice it into slices that do not contain the separator.
-    // * We maintain the invariant throughout that each element in the vector past
-    //   the ith element does not have any separators remaining.
-    for i in (0..data.len()).rev() {
-        if data[i].contains(&sep) {
-            let this = data.swap_remove(i);
-            let mut p = 0;
-            let mut i = 1;
-            loop {
-                if i == this.len() {
-                    break;
-                }
-
-                if this[i] == sep {
-                    data.push(&this[p..i]);
-                    p = i + 1;
-                }
-                i += 1;
-            }
-            if p < this.len() {
-                data.push(&this[p..i]);
-            }
-        }
-    }
-}
-
-fn shuf_bytes(input: &mut Vec<&[u8]>, opts: Options) -> UResult<()> {
-    let mut output = BufWriter::new(match opts.output {
-        None => Box::new(stdout()) as Box<dyn Write>,
-        Some(s) => {
-            let file = File::create(&s[..])
-                .map_err_context(|| format!("failed to open {} for writing", s.quote()))?;
-            Box::new(file) as Box<dyn Write>
-        }
-    });
-
-    let mut rng = match opts.random_source {
-        Some(r) => {
-            let file = File::open(&r[..])
-                .map_err_context(|| format!("failed to open random source {}", r.quote()))?;
-            WrappedRng::RngFile(rand_read_adapter::ReadRng::new(file))
-        }
-        None => WrappedRng::RngDefault(rand::thread_rng()),
-    };
-
-    // we're generating a random usize. To keep things fair, we take this number mod ceil(log2(length+1))
-    let mut len_mod = 1;
-    let mut len = input.len();
-    while len > 0 {
-        len >>= 1;
-        len_mod <<= 1;
-    }
-
-    let mut count = opts.head_count;
-    while count > 0 && !input.is_empty() {
-        let mut r = input.len();
-        while r >= input.len() {
-            r = rng.next_usize() % len_mod;
-        }
-
-        // write the randomly chosen value and the separator
-        output
-            .write_all(input[r])
-            .map_err_context(|| "write failed".to_string())?;
-        output
-            .write_all(&[opts.sep])
-            .map_err_context(|| "write failed".to_string())?;
-
-        // if we do not allow repeats, remove the chosen value from the input vector
-        if !opts.repeat {
-            // shrink the mask if we will drop below a power of 2
-            if input.len() % 2 == 0 && len_mod > 2 {
-                len_mod >>= 1;
-            }
-            input.swap_remove(r);
-        }
-
-        count -= 1;
-    }
-    Ok(())
-}
-
-fn parse_range(input_range: &str) -> Result<(usize, usize), String> {
-    let split: Vec<&str> = input_range.split('-').collect();
-    if split.len() != 2 {
-        Err(format!("invalid input range: {}", input_range.quote()))
-    } else {
-        let begin = split[0]
-            .parse::<usize>()
-            .map_err(|_| format!("invalid input range: {}", split[0].quote()))?;
-        let end = split[1]
-            .parse::<usize>()
-            .map_err(|_| format!("invalid input range: {}", split[1].quote()))?;
-        Ok((begin, end + 1))
-    }
-}
-
-enum WrappedRng {
-    RngFile(rand_read_adapter::ReadRng<File>),
-    RngDefault(rand::rngs::ThreadRng),
-}
-
-impl WrappedRng {
-    fn next_usize(&mut self) -> usize {
-        match *self {
-            WrappedRng::RngFile(ref mut r) => r.gen(),
-            WrappedRng::RngDefault(ref mut r) => r.gen(),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sleep/sleep.rs.html b/src/uu_sleep/sleep.rs.html deleted file mode 100644 index 25eb32ab2..000000000 --- a/src/uu_sleep/sleep.rs.html +++ /dev/null @@ -1,152 +0,0 @@ -sleep.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use std::thread;
-use std::time::Duration;
-
-use uucore::error::{UResult, USimpleError};
-
-use clap::{crate_version, App, Arg};
-
-static ABOUT: &str = "Pause for NUMBER seconds.";
-static LONG_HELP: &str = "Pause for NUMBER seconds.  SUFFIX may be 's' for seconds (the default),
-'m' for minutes, 'h' for hours or 'd' for days.  Unlike most implementations
-that require NUMBER be an integer, here NUMBER may be an arbitrary floating
-point number.  Given two or more arguments, pause for the amount of time
-specified by the sum of their values.";
-
-mod options {
-    pub const NUMBER: &str = "NUMBER";
-}
-
-fn usage() -> String {
-    format!(
-        "{0} {1}[SUFFIX]... \n    {0} OPTION",
-        uucore::execution_phrase(),
-        options::NUMBER
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    if let Some(values) = matches.values_of(options::NUMBER) {
-        let numbers = values.collect();
-        return sleep(numbers);
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(LONG_HELP)
-        .arg(
-            Arg::new(options::NUMBER)
-                .help("pause for NUMBER seconds")
-                .value_name(options::NUMBER)
-                .index(1)
-                .multiple_occurrences(true)
-                .required(true),
-        )
-}
-
-fn sleep(args: Vec<&str>) -> UResult<()> {
-    let sleep_dur =
-        args.iter().try_fold(
-            Duration::new(0, 0),
-            |result, arg| match uucore::parse_time::from_str(&arg[..]) {
-                Ok(m) => Ok(m + result),
-                Err(f) => Err(USimpleError::new(1, f)),
-            },
-        )?;
-    thread::sleep(sleep_dur);
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/check.rs.html b/src/uu_sort/check.rs.html deleted file mode 100644 index 43b58c4a7..000000000 --- a/src/uu_sort/check.rs.html +++ /dev/null @@ -1,264 +0,0 @@ -check.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Debertol <michael.debertol..AT..gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-//! Check if a file is ordered
-
-use crate::{
-    chunks::{self, Chunk, RecycledChunk},
-    compare_by, open, GlobalSettings, SortError,
-};
-use itertools::Itertools;
-use std::{
-    cmp::Ordering,
-    ffi::OsStr,
-    io::Read,
-    iter,
-    sync::mpsc::{sync_channel, Receiver, SyncSender},
-    thread,
-};
-use uucore::error::UResult;
-
-/// Check if the file at `path` is ordered.
-///
-/// # Returns
-///
-/// The code we should exit with.
-pub fn check(path: &OsStr, settings: &GlobalSettings) -> UResult<()> {
-    let max_allowed_cmp = if settings.unique {
-        // If `unique` is enabled, the previous line must compare _less_ to the next one.
-        Ordering::Less
-    } else {
-        // Otherwise, the line previous line must compare _less or equal_ to the next one.
-        Ordering::Equal
-    };
-    let file = open(path)?;
-    let (recycled_sender, recycled_receiver) = sync_channel(2);
-    let (loaded_sender, loaded_receiver) = sync_channel(2);
-    thread::spawn({
-        let settings = settings.clone();
-        move || reader(file, recycled_receiver, loaded_sender, &settings)
-    });
-    for _ in 0..2 {
-        let _ = recycled_sender.send(RecycledChunk::new(if settings.buffer_size < 100 * 1024 {
-            // when the buffer size is smaller than 100KiB we choose it instead of the default.
-            // this improves testability.
-            settings.buffer_size
-        } else {
-            100 * 1024
-        }));
-    }
-
-    let mut prev_chunk: Option<Chunk> = None;
-    let mut line_idx = 0;
-    for chunk in loaded_receiver.iter() {
-        line_idx += 1;
-        if let Some(prev_chunk) = prev_chunk.take() {
-            // Check if the first element of the new chunk is greater than the last
-            // element from the previous chunk
-            let prev_last = prev_chunk.lines().last().unwrap();
-            let new_first = chunk.lines().first().unwrap();
-
-            if compare_by(
-                prev_last,
-                new_first,
-                settings,
-                prev_chunk.line_data(),
-                chunk.line_data(),
-            ) > max_allowed_cmp
-            {
-                return Err(SortError::Disorder {
-                    file: path.to_owned(),
-                    line_number: line_idx,
-                    line: new_first.line.to_owned(),
-                    silent: settings.check_silent,
-                }
-                .into());
-            }
-            let _ = recycled_sender.send(prev_chunk.recycle());
-        }
-
-        for (a, b) in chunk.lines().iter().tuple_windows() {
-            line_idx += 1;
-            if compare_by(a, b, settings, chunk.line_data(), chunk.line_data()) > max_allowed_cmp {
-                return Err(SortError::Disorder {
-                    file: path.to_owned(),
-                    line_number: line_idx,
-                    line: b.line.to_owned(),
-                    silent: settings.check_silent,
-                }
-                .into());
-            }
-        }
-
-        prev_chunk = Some(chunk);
-    }
-    Ok(())
-}
-
-/// The function running on the reader thread.
-fn reader(
-    mut file: Box<dyn Read + Send>,
-    receiver: Receiver<RecycledChunk>,
-    sender: SyncSender<Chunk>,
-    settings: &GlobalSettings,
-) -> UResult<()> {
-    let mut carry_over = vec![];
-    for recycled_chunk in receiver.iter() {
-        let should_continue = chunks::read(
-            &sender,
-            recycled_chunk,
-            None,
-            &mut carry_over,
-            &mut file,
-            &mut iter::empty(),
-            if settings.zero_terminated {
-                b'\0'
-            } else {
-                b'\n'
-            },
-            settings,
-        )?;
-        if !should_continue {
-            break;
-        }
-    }
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/chunks.rs.html b/src/uu_sort/chunks.rs.html deleted file mode 100644 index 350b60e47..000000000 --- a/src/uu_sort/chunks.rs.html +++ /dev/null @@ -1,640 +0,0 @@ -chunks.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Debertol <michael.debertol..AT..gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-//! Utilities for reading files as chunks.
-
-use std::{
-    io::{ErrorKind, Read},
-    sync::mpsc::SyncSender,
-};
-
-use memchr::memchr_iter;
-use ouroboros::self_referencing;
-use uucore::error::{UResult, USimpleError};
-
-use crate::{numeric_str_cmp::NumInfo, GeneralF64ParseResult, GlobalSettings, Line, SortError};
-
-/// The chunk that is passed around between threads.
-/// `lines` consist of slices into `buffer`.
-#[self_referencing(pub_extras)]
-#[derive(Debug)]
-pub struct Chunk {
-    pub buffer: Vec<u8>,
-    #[borrows(buffer)]
-    #[covariant]
-    pub contents: ChunkContents<'this>,
-}
-
-#[derive(Debug)]
-pub struct ChunkContents<'a> {
-    pub lines: Vec<Line<'a>>,
-    pub line_data: LineData<'a>,
-}
-
-#[derive(Debug)]
-pub struct LineData<'a> {
-    pub selections: Vec<&'a str>,
-    pub num_infos: Vec<NumInfo>,
-    pub parsed_floats: Vec<GeneralF64ParseResult>,
-}
-
-impl Chunk {
-    /// Destroy this chunk and return its components to be reused.
-    pub fn recycle(mut self) -> RecycledChunk {
-        let recycled_contents = self.with_contents_mut(|contents| {
-            contents.lines.clear();
-            contents.line_data.selections.clear();
-            contents.line_data.num_infos.clear();
-            contents.line_data.parsed_floats.clear();
-            let lines = unsafe {
-                // SAFETY: It is safe to (temporarily) transmute to a vector of lines with a longer lifetime,
-                // because the vector is empty.
-                // Transmuting is necessary to make recycling possible. See https://github.com/rust-lang/rfcs/pull/2802
-                // for a rfc to make this unnecessary. Its example is similar to the code here.
-                std::mem::transmute::<Vec<Line<'_>>, Vec<Line<'static>>>(std::mem::take(
-                    &mut contents.lines,
-                ))
-            };
-            let selections = unsafe {
-                // SAFETY: (same as above) It is safe to (temporarily) transmute to a vector of &str with a longer lifetime,
-                // because the vector is empty.
-                std::mem::transmute::<Vec<&'_ str>, Vec<&'static str>>(std::mem::take(
-                    &mut contents.line_data.selections,
-                ))
-            };
-            (
-                lines,
-                selections,
-                std::mem::take(&mut contents.line_data.num_infos),
-                std::mem::take(&mut contents.line_data.parsed_floats),
-            )
-        });
-        RecycledChunk {
-            lines: recycled_contents.0,
-            selections: recycled_contents.1,
-            num_infos: recycled_contents.2,
-            parsed_floats: recycled_contents.3,
-            buffer: self.into_heads().buffer,
-        }
-    }
-
-    pub fn lines(&self) -> &Vec<Line> {
-        &self.borrow_contents().lines
-    }
-    pub fn line_data(&self) -> &LineData {
-        &self.borrow_contents().line_data
-    }
-}
-
-pub struct RecycledChunk {
-    lines: Vec<Line<'static>>,
-    selections: Vec<&'static str>,
-    num_infos: Vec<NumInfo>,
-    parsed_floats: Vec<GeneralF64ParseResult>,
-    buffer: Vec<u8>,
-}
-
-impl RecycledChunk {
-    pub fn new(capacity: usize) -> Self {
-        RecycledChunk {
-            lines: Vec::new(),
-            selections: Vec::new(),
-            num_infos: Vec::new(),
-            parsed_floats: Vec::new(),
-            buffer: vec![0; capacity],
-        }
-    }
-}
-
-/// Read a chunk, parse lines and send them.
-///
-/// No empty chunk will be sent. If we reach the end of the input, `false` is returned.
-/// However, if this function returns `true`, it is not guaranteed that there is still
-/// input left: If the input fits _exactly_ into a buffer, we will only notice that there's
-/// nothing more to read at the next invocation. In case there is no input left, nothing will
-/// be sent.
-///
-/// # Arguments
-///
-/// (see also `read_to_chunk` for a more detailed documentation)
-///
-/// * `sender`: The sender to send the lines to the sorter.
-/// * `recycled_chunk`: The recycled chunk, as returned by `Chunk::recycle`.
-///   (i.e. `buffer.len()` should be equal to `buffer.capacity()`)
-/// * `max_buffer_size`: How big `buffer` can be.
-/// * `carry_over`: The bytes that must be carried over in between invocations.
-/// * `file`: The current file.
-/// * `next_files`: What `file` should be updated to next.
-/// * `separator`: The line separator.
-/// * `settings`: The global settings.
-#[allow(clippy::too_many_arguments)]
-pub fn read<T: Read>(
-    sender: &SyncSender<Chunk>,
-    recycled_chunk: RecycledChunk,
-    max_buffer_size: Option<usize>,
-    carry_over: &mut Vec<u8>,
-    file: &mut T,
-    next_files: &mut impl Iterator<Item = UResult<T>>,
-    separator: u8,
-    settings: &GlobalSettings,
-) -> UResult<bool> {
-    let RecycledChunk {
-        lines,
-        selections,
-        num_infos,
-        parsed_floats,
-        mut buffer,
-    } = recycled_chunk;
-    if buffer.len() < carry_over.len() {
-        buffer.resize(carry_over.len() + 10 * 1024, 0);
-    }
-    buffer[..carry_over.len()].copy_from_slice(carry_over);
-    let (read, should_continue) = read_to_buffer(
-        file,
-        next_files,
-        &mut buffer,
-        max_buffer_size,
-        carry_over.len(),
-        separator,
-    )?;
-    carry_over.clear();
-    carry_over.extend_from_slice(&buffer[read..]);
-
-    if read != 0 {
-        let payload: UResult<Chunk> = Chunk::try_new(buffer, |buffer| {
-            let selections = unsafe {
-                // SAFETY: It is safe to transmute to an empty vector of selections with shorter lifetime.
-                // It was only temporarily transmuted to a Vec<Line<'static>> to make recycling possible.
-                std::mem::transmute::<Vec<&'static str>, Vec<&'_ str>>(selections)
-            };
-            let mut lines = unsafe {
-                // SAFETY: (same as above) It is safe to transmute to a vector of lines with shorter lifetime,
-                // because it was only temporarily transmuted to a Vec<Line<'static>> to make recycling possible.
-                std::mem::transmute::<Vec<Line<'static>>, Vec<Line<'_>>>(lines)
-            };
-            let read = std::str::from_utf8(&buffer[..read])
-                .map_err(|error| SortError::Uft8Error { error })?;
-            let mut line_data = LineData {
-                selections,
-                num_infos,
-                parsed_floats,
-            };
-            parse_lines(read, &mut lines, &mut line_data, separator, settings);
-            Ok(ChunkContents { lines, line_data })
-        });
-        sender.send(payload?).unwrap();
-    }
-    Ok(should_continue)
-}
-
-/// Split `read` into `Line`s, and add them to `lines`.
-fn parse_lines<'a>(
-    read: &'a str,
-    lines: &mut Vec<Line<'a>>,
-    line_data: &mut LineData<'a>,
-    separator: u8,
-    settings: &GlobalSettings,
-) {
-    let read = read.strip_suffix(separator as char).unwrap_or(read);
-
-    assert!(lines.is_empty());
-    assert!(line_data.selections.is_empty());
-    assert!(line_data.num_infos.is_empty());
-    assert!(line_data.parsed_floats.is_empty());
-    let mut token_buffer = vec![];
-    lines.extend(
-        read.split(separator as char)
-            .enumerate()
-            .map(|(index, line)| Line::create(line, index, line_data, &mut token_buffer, settings)),
-    );
-}
-
-/// Read from `file` into `buffer`.
-///
-/// This function makes sure that at least two lines are read (unless we reach EOF and there's no next file),
-/// growing the buffer if necessary.
-/// The last line is likely to not have been fully read into the buffer. Its bytes must be copied to
-/// the front of the buffer for the next invocation so that it can be continued to be read
-/// (see the return values and `start_offset`).
-///
-/// # Arguments
-///
-/// * `file`: The file to start reading from.
-/// * `next_files`: When `file` reaches EOF, it is updated to `next_files.next()` if that is `Some`,
-///    and this function continues reading.
-/// * `buffer`: The buffer that is filled with bytes. Its contents will mostly be overwritten (see `start_offset`
-///   as well). It will be grown up to `max_buffer_size` if necessary, but it will always grow to read at least two lines.
-/// * `max_buffer_size`: Grow the buffer to at most this length. If None, the buffer will not grow, unless needed to read at least two lines.
-/// * `start_offset`: The amount of bytes at the start of `buffer` that were carried over
-///    from the previous read and should not be overwritten.
-/// * `separator`: The byte that separates lines.
-///
-/// # Returns
-///
-/// * The amount of bytes in `buffer` that can now be interpreted as lines.
-///   The remaining bytes must be copied to the start of the buffer for the next invocation,
-///   if another invocation is necessary, which is determined by the other return value.
-/// * Whether this function should be called again.
-fn read_to_buffer<T: Read>(
-    file: &mut T,
-    next_files: &mut impl Iterator<Item = UResult<T>>,
-    buffer: &mut Vec<u8>,
-    max_buffer_size: Option<usize>,
-    start_offset: usize,
-    separator: u8,
-) -> UResult<(usize, bool)> {
-    let mut read_target = &mut buffer[start_offset..];
-    let mut last_file_target_size = read_target.len();
-    loop {
-        match file.read(read_target) {
-            Ok(0) => {
-                if read_target.is_empty() {
-                    // chunk is full
-                    if let Some(max_buffer_size) = max_buffer_size {
-                        if max_buffer_size > buffer.len() {
-                            // we can grow the buffer
-                            let prev_len = buffer.len();
-                            if buffer.len() < max_buffer_size / 2 {
-                                buffer.resize(buffer.len() * 2, 0);
-                            } else {
-                                buffer.resize(max_buffer_size, 0);
-                            }
-                            read_target = &mut buffer[prev_len..];
-                            continue;
-                        }
-                    }
-                    let mut sep_iter = memchr_iter(separator, buffer).rev();
-                    let last_line_end = sep_iter.next();
-                    if sep_iter.next().is_some() {
-                        // We read enough lines.
-                        let end = last_line_end.unwrap();
-                        // We want to include the separator here, because it shouldn't be carried over.
-                        return Ok((end + 1, true));
-                    } else {
-                        // We need to read more lines
-                        let len = buffer.len();
-                        // resize the vector to 10 KB more
-                        buffer.resize(len + 1024 * 10, 0);
-                        read_target = &mut buffer[len..];
-                    }
-                } else {
-                    // This file has been fully read.
-                    let mut leftover_len = read_target.len();
-                    if last_file_target_size != leftover_len {
-                        // The file was not empty.
-                        let read_len = buffer.len() - leftover_len;
-                        if buffer[read_len - 1] != separator {
-                            // The file did not end with a separator. We have to insert one.
-                            buffer[read_len] = separator;
-                            leftover_len -= 1;
-                        }
-                        let read_len = buffer.len() - leftover_len;
-                        read_target = &mut buffer[read_len..];
-                    }
-                    if let Some(next_file) = next_files.next() {
-                        // There is another file.
-                        last_file_target_size = leftover_len;
-                        *file = next_file?;
-                    } else {
-                        // This was the last file.
-                        let read_len = buffer.len() - leftover_len;
-                        return Ok((read_len, false));
-                    }
-                }
-            }
-            Ok(n) => {
-                read_target = &mut read_target[n..];
-            }
-            Err(e) if e.kind() == ErrorKind::Interrupted => {
-                // retry
-            }
-            Err(e) => return Err(USimpleError::new(2, e.to_string())),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/custom_str_cmp.rs.html b/src/uu_sort/custom_str_cmp.rs.html deleted file mode 100644 index 43c49bfaf..000000000 --- a/src/uu_sort/custom_str_cmp.rs.html +++ /dev/null @@ -1,132 +0,0 @@ -custom_str_cmp.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Debertol <michael.debertol..AT..gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-//! Custom string comparisons.
-//!
-//! The goal is to compare strings without transforming them first (i.e. not allocating new strings)
-
-use std::cmp::Ordering;
-
-fn filter_char(c: char, ignore_non_printing: bool, ignore_non_dictionary: bool) -> bool {
-    if ignore_non_dictionary && !(c.is_ascii_alphanumeric() || c.is_ascii_whitespace()) {
-        return false;
-    }
-    if ignore_non_printing && (c.is_ascii_control() || !c.is_ascii()) {
-        return false;
-    }
-    true
-}
-
-fn cmp_chars(a: char, b: char, ignore_case: bool) -> Ordering {
-    if ignore_case {
-        a.to_ascii_uppercase().cmp(&b.to_ascii_uppercase())
-    } else {
-        a.cmp(&b)
-    }
-}
-
-pub fn custom_str_cmp(
-    a: &str,
-    b: &str,
-    ignore_non_printing: bool,
-    ignore_non_dictionary: bool,
-    ignore_case: bool,
-) -> Ordering {
-    if !(ignore_case || ignore_non_dictionary || ignore_non_printing) {
-        // There are no custom settings. Fall back to the default strcmp, which is faster.
-        return a.cmp(b);
-    }
-    let mut a_chars = a
-        .chars()
-        .filter(|&c| filter_char(c, ignore_non_printing, ignore_non_dictionary));
-    let mut b_chars = b
-        .chars()
-        .filter(|&c| filter_char(c, ignore_non_printing, ignore_non_dictionary));
-    loop {
-        let a_char = a_chars.next();
-        let b_char = b_chars.next();
-        match (a_char, b_char) {
-            (None, None) => return Ordering::Equal,
-            (Some(_), None) => return Ordering::Greater,
-            (None, Some(_)) => return Ordering::Less,
-            (Some(a_char), Some(b_char)) => {
-                let ordering = cmp_chars(a_char, b_char, ignore_case);
-                if ordering != Ordering::Equal {
-                    return ordering;
-                }
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/ext_sort.rs.html b/src/uu_sort/ext_sort.rs.html deleted file mode 100644 index 45c0b4440..000000000 --- a/src/uu_sort/ext_sort.rs.html +++ /dev/null @@ -1,576 +0,0 @@ -ext_sort.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Debertol <michael.debertol..AT..gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-//! Sort big files by using auxiliary files for storing intermediate chunks.
-//!
-//! Files are read into chunks of memory which are then sorted individually and
-//! written to temporary files. There are two threads: One sorter, and one reader/writer.
-//! The buffers for the individual chunks are recycled. There are two buffers.
-
-use std::cmp::Ordering;
-use std::fs::File;
-use std::io::Write;
-use std::path::PathBuf;
-use std::{
-    io::Read,
-    sync::mpsc::{Receiver, SyncSender},
-    thread,
-};
-
-use itertools::Itertools;
-use uucore::error::UResult;
-
-use crate::chunks::RecycledChunk;
-use crate::merge::ClosedTmpFile;
-use crate::merge::WriteableCompressedTmpFile;
-use crate::merge::WriteablePlainTmpFile;
-use crate::merge::WriteableTmpFile;
-use crate::tmp_dir::TmpDirWrapper;
-use crate::Output;
-use crate::{
-    chunks::{self, Chunk},
-    compare_by, merge, sort_by, GlobalSettings,
-};
-use crate::{print_sorted, Line};
-
-const START_BUFFER_SIZE: usize = 8_000;
-
-/// Sort files by using auxiliary files for storing intermediate chunks (if needed), and output the result.
-pub fn ext_sort(
-    files: &mut impl Iterator<Item = UResult<Box<dyn Read + Send>>>,
-    settings: &GlobalSettings,
-    output: Output,
-    tmp_dir: &mut TmpDirWrapper,
-) -> UResult<()> {
-    let (sorted_sender, sorted_receiver) = std::sync::mpsc::sync_channel(1);
-    let (recycled_sender, recycled_receiver) = std::sync::mpsc::sync_channel(1);
-    thread::spawn({
-        let settings = settings.clone();
-        move || sorter(recycled_receiver, sorted_sender, settings)
-    });
-    if settings.compress_prog.is_some() {
-        reader_writer::<_, WriteableCompressedTmpFile>(
-            files,
-            settings,
-            sorted_receiver,
-            recycled_sender,
-            output,
-            tmp_dir,
-        )
-    } else {
-        reader_writer::<_, WriteablePlainTmpFile>(
-            files,
-            settings,
-            sorted_receiver,
-            recycled_sender,
-            output,
-            tmp_dir,
-        )
-    }
-}
-
-fn reader_writer<
-    F: Iterator<Item = UResult<Box<dyn Read + Send>>>,
-    Tmp: WriteableTmpFile + 'static,
->(
-    files: F,
-    settings: &GlobalSettings,
-    receiver: Receiver<Chunk>,
-    sender: SyncSender<Chunk>,
-    output: Output,
-    tmp_dir: &mut TmpDirWrapper,
-) -> UResult<()> {
-    let separator = if settings.zero_terminated {
-        b'\0'
-    } else {
-        b'\n'
-    };
-
-    // Heuristically chosen: Dividing by 10 seems to keep our memory usage roughly
-    // around settings.buffer_size as a whole.
-    let buffer_size = settings.buffer_size / 10;
-    let read_result: ReadResult<Tmp> = read_write_loop(
-        files,
-        tmp_dir,
-        separator,
-        buffer_size,
-        settings,
-        receiver,
-        sender,
-    )?;
-    match read_result {
-        ReadResult::WroteChunksToFile { tmp_files } => {
-            let merger = merge::merge_with_file_limit::<_, _, Tmp>(
-                tmp_files.into_iter().map(|c| c.reopen()),
-                settings,
-                tmp_dir,
-            )?;
-            merger.write_all(settings, output)?;
-        }
-        ReadResult::SortedSingleChunk(chunk) => {
-            if settings.unique {
-                print_sorted(
-                    chunk.lines().iter().dedup_by(|a, b| {
-                        compare_by(a, b, settings, chunk.line_data(), chunk.line_data())
-                            == Ordering::Equal
-                    }),
-                    settings,
-                    output,
-                );
-            } else {
-                print_sorted(chunk.lines().iter(), settings, output);
-            }
-        }
-        ReadResult::SortedTwoChunks([a, b]) => {
-            let merged_iter = a.lines().iter().map(|line| (line, &a)).merge_by(
-                b.lines().iter().map(|line| (line, &b)),
-                |(line_a, a), (line_b, b)| {
-                    compare_by(line_a, line_b, settings, a.line_data(), b.line_data())
-                        != Ordering::Greater
-                },
-            );
-            if settings.unique {
-                print_sorted(
-                    merged_iter
-                        .dedup_by(|(line_a, a), (line_b, b)| {
-                            compare_by(line_a, line_b, settings, a.line_data(), b.line_data())
-                                == Ordering::Equal
-                        })
-                        .map(|(line, _)| line),
-                    settings,
-                    output,
-                );
-            } else {
-                print_sorted(merged_iter.map(|(line, _)| line), settings, output);
-            }
-        }
-        ReadResult::EmptyInput => {
-            // don't output anything
-        }
-    }
-    Ok(())
-}
-
-/// The function that is executed on the sorter thread.
-fn sorter(receiver: Receiver<Chunk>, sender: SyncSender<Chunk>, settings: GlobalSettings) {
-    while let Ok(mut payload) = receiver.recv() {
-        payload.with_contents_mut(|contents| {
-            sort_by(&mut contents.lines, &settings, &contents.line_data)
-        });
-        if sender.send(payload).is_err() {
-            // The receiver has gone away, likely because the other thread hit an error.
-            // We stop silently because the actual error is printed by the other thread.
-            return;
-        }
-    }
-}
-
-/// Describes how we read the chunks from the input.
-enum ReadResult<I: WriteableTmpFile> {
-    /// The input was empty. Nothing was read.
-    EmptyInput,
-    /// The input fits into a single Chunk, which was kept in memory.
-    SortedSingleChunk(Chunk),
-    /// The input fits into two chunks, which were kept in memory.
-    SortedTwoChunks([Chunk; 2]),
-    /// The input was read into multiple chunks, which were written to auxiliary files.
-    WroteChunksToFile { tmp_files: Vec<I::Closed> },
-}
-/// The function that is executed on the reader/writer thread.
-fn read_write_loop<I: WriteableTmpFile>(
-    mut files: impl Iterator<Item = UResult<Box<dyn Read + Send>>>,
-    tmp_dir: &mut TmpDirWrapper,
-    separator: u8,
-    buffer_size: usize,
-    settings: &GlobalSettings,
-    receiver: Receiver<Chunk>,
-    sender: SyncSender<Chunk>,
-) -> UResult<ReadResult<I>> {
-    let mut file = files.next().unwrap()?;
-
-    let mut carry_over = vec![];
-    // kick things off with two reads
-    for _ in 0..2 {
-        let should_continue = chunks::read(
-            &sender,
-            RecycledChunk::new(if START_BUFFER_SIZE < buffer_size {
-                START_BUFFER_SIZE
-            } else {
-                buffer_size
-            }),
-            Some(buffer_size),
-            &mut carry_over,
-            &mut file,
-            &mut files,
-            separator,
-            settings,
-        )?;
-
-        if !should_continue {
-            drop(sender);
-            // We have already read the whole input. Since we are in our first two reads,
-            // this means that we can fit the whole input into memory. Bypass writing below and
-            // handle this case in a more straightforward way.
-            return Ok(if let Ok(first_chunk) = receiver.recv() {
-                if let Ok(second_chunk) = receiver.recv() {
-                    ReadResult::SortedTwoChunks([first_chunk, second_chunk])
-                } else {
-                    ReadResult::SortedSingleChunk(first_chunk)
-                }
-            } else {
-                ReadResult::EmptyInput
-            });
-        }
-    }
-
-    let mut sender_option = Some(sender);
-    let mut tmp_files = vec![];
-    loop {
-        let mut chunk = match receiver.recv() {
-            Ok(it) => it,
-            _ => {
-                return Ok(ReadResult::WroteChunksToFile { tmp_files });
-            }
-        };
-
-        let tmp_file = write::<I>(
-            &mut chunk,
-            tmp_dir.next_file()?,
-            settings.compress_prog.as_deref(),
-            separator,
-        )?;
-        tmp_files.push(tmp_file);
-
-        let recycled_chunk = chunk.recycle();
-
-        if let Some(sender) = &sender_option {
-            let should_continue = chunks::read(
-                sender,
-                recycled_chunk,
-                None,
-                &mut carry_over,
-                &mut file,
-                &mut files,
-                separator,
-                settings,
-            )?;
-            if !should_continue {
-                sender_option = None;
-            }
-        }
-    }
-}
-
-/// Write the lines in `chunk` to `file`, separated by `separator`.
-/// `compress_prog` is used to optionally compress file contents.
-fn write<I: WriteableTmpFile>(
-    chunk: &mut Chunk,
-    file: (File, PathBuf),
-    compress_prog: Option<&str>,
-    separator: u8,
-) -> UResult<I::Closed> {
-    let mut tmp_file = I::create(file, compress_prog)?;
-    write_lines(chunk.lines(), tmp_file.as_write(), separator);
-    tmp_file.finished_writing()
-}
-
-fn write_lines<'a, T: Write>(lines: &[Line<'a>], writer: &mut T, separator: u8) {
-    for s in lines {
-        writer.write_all(s.line.as_bytes()).unwrap();
-        writer.write_all(&[separator]).unwrap();
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/merge.rs.html b/src/uu_sort/merge.rs.html deleted file mode 100644 index fb0e2d2c2..000000000 --- a/src/uu_sort/merge.rs.html +++ /dev/null @@ -1,1114 +0,0 @@ -merge.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-
//! Merge already sorted files.
-//!
-//! We achieve performance by splitting the tasks of sorting and writing, and reading and parsing between two threads.
-//! The threads communicate over channels. There's one channel per file in the direction reader -> sorter, but only
-//! one channel from the sorter back to the reader. The channels to the sorter are used to send the read chunks.
-//! The sorter reads the next chunk from the channel whenever it needs the next chunk after running out of lines
-//! from the previous read of the file. The channel back from the sorter to the reader has two purposes: To allow the reader
-//! to reuse memory allocations and to tell the reader which file to read from next.
-
-use std::{
-    cmp::Ordering,
-    ffi::OsString,
-    fs::{self, File},
-    io::{BufWriter, Read, Write},
-    iter,
-    path::{Path, PathBuf},
-    process::{Child, ChildStdin, ChildStdout, Command, Stdio},
-    rc::Rc,
-    sync::mpsc::{channel, sync_channel, Receiver, Sender, SyncSender},
-    thread::{self, JoinHandle},
-};
-
-use compare::Compare;
-use itertools::Itertools;
-use uucore::error::UResult;
-
-use crate::{
-    chunks::{self, Chunk, RecycledChunk},
-    compare_by, open,
-    tmp_dir::TmpDirWrapper,
-    GlobalSettings, Output, SortError,
-};
-
-/// If the output file occurs in the input files as well, copy the contents of the output file
-/// and replace its occurrences in the inputs with that copy.
-fn replace_output_file_in_input_files(
-    files: &mut [OsString],
-    output: Option<&str>,
-    tmp_dir: &mut TmpDirWrapper,
-) -> UResult<()> {
-    let mut copy: Option<PathBuf> = None;
-    if let Some(Ok(output_path)) = output.map(|path| Path::new(path).canonicalize()) {
-        for file in files {
-            if let Ok(file_path) = Path::new(file).canonicalize() {
-                if file_path == output_path {
-                    if let Some(copy) = &copy {
-                        *file = copy.clone().into_os_string();
-                    } else {
-                        let (_file, copy_path) = tmp_dir.next_file()?;
-                        std::fs::copy(file_path, &copy_path)
-                            .map_err(|error| SortError::OpenTmpFileFailed { error })?;
-                        *file = copy_path.clone().into_os_string();
-                        copy = Some(copy_path)
-                    }
-                }
-            }
-        }
-    }
-    Ok(())
-}
-
-/// Merge pre-sorted `Box<dyn Read>`s.
-///
-/// If `settings.merge_batch_size` is greater than the length of `files`, intermediate files will be used.
-/// If `settings.compress_prog` is `Some`, intermediate files will be compressed with it.
-pub fn merge<'a>(
-    files: &mut [OsString],
-    settings: &'a GlobalSettings,
-    output: Option<&str>,
-    tmp_dir: &mut TmpDirWrapper,
-) -> UResult<FileMerger<'a>> {
-    replace_output_file_in_input_files(files, output, tmp_dir)?;
-    if settings.compress_prog.is_none() {
-        merge_with_file_limit::<_, _, WriteablePlainTmpFile>(
-            files
-                .iter()
-                .map(|file| open(file).map(|file| PlainMergeInput { inner: file })),
-            settings,
-            tmp_dir,
-        )
-    } else {
-        merge_with_file_limit::<_, _, WriteableCompressedTmpFile>(
-            files
-                .iter()
-                .map(|file| open(file).map(|file| PlainMergeInput { inner: file })),
-            settings,
-            tmp_dir,
-        )
-    }
-}
-
-// Merge already sorted `MergeInput`s.
-pub fn merge_with_file_limit<
-    'a,
-    M: MergeInput + 'static,
-    F: ExactSizeIterator<Item = UResult<M>>,
-    Tmp: WriteableTmpFile + 'static,
->(
-    files: F,
-    settings: &'a GlobalSettings,
-    tmp_dir: &mut TmpDirWrapper,
-) -> UResult<FileMerger<'a>> {
-    if files.len() > settings.merge_batch_size {
-        let mut remaining_files = files.len();
-        let batches = files.chunks(settings.merge_batch_size);
-        let mut batches = batches.into_iter();
-        let mut temporary_files = vec![];
-        while remaining_files != 0 {
-            // Work around the fact that `Chunks` is not an `ExactSizeIterator`.
-            remaining_files = remaining_files.saturating_sub(settings.merge_batch_size);
-            let merger = merge_without_limit(batches.next().unwrap(), settings)?;
-            let mut tmp_file =
-                Tmp::create(tmp_dir.next_file()?, settings.compress_prog.as_deref())?;
-            merger.write_all_to(settings, tmp_file.as_write())?;
-            temporary_files.push(tmp_file.finished_writing()?);
-        }
-        assert!(batches.next().is_none());
-        merge_with_file_limit::<_, _, Tmp>(
-            temporary_files
-                .into_iter()
-                .map(Box::new(|c: Tmp::Closed| c.reopen())
-                    as Box<
-                        dyn FnMut(Tmp::Closed) -> UResult<<Tmp::Closed as ClosedTmpFile>::Reopened>,
-                    >),
-            settings,
-            tmp_dir,
-        )
-    } else {
-        merge_without_limit(files, settings)
-    }
-}
-
-/// Merge files without limiting how many files are concurrently open.
-///
-/// It is the responsibility of the caller to ensure that `files` yields only
-/// as many files as we are allowed to open concurrently.
-fn merge_without_limit<M: MergeInput + 'static, F: Iterator<Item = UResult<M>>>(
-    files: F,
-    settings: &GlobalSettings,
-) -> UResult<FileMerger> {
-    let (request_sender, request_receiver) = channel();
-    let mut reader_files = Vec::with_capacity(files.size_hint().0);
-    let mut loaded_receivers = Vec::with_capacity(files.size_hint().0);
-    for (file_number, file) in files.enumerate() {
-        let (sender, receiver) = sync_channel(2);
-        loaded_receivers.push(receiver);
-        reader_files.push(Some(ReaderFile {
-            file: file?,
-            sender,
-            carry_over: vec![],
-        }));
-        // Send the initial chunk to trigger a read for each file
-        request_sender
-            .send((file_number, RecycledChunk::new(8 * 1024)))
-            .unwrap();
-    }
-
-    // Send the second chunk for each file
-    for file_number in 0..reader_files.len() {
-        request_sender
-            .send((file_number, RecycledChunk::new(8 * 1024)))
-            .unwrap();
-    }
-
-    let reader_join_handle = thread::spawn({
-        let settings = settings.clone();
-        move || {
-            reader(
-                request_receiver,
-                &mut reader_files,
-                &settings,
-                if settings.zero_terminated {
-                    b'\0'
-                } else {
-                    b'\n'
-                },
-            )
-        }
-    });
-
-    let mut mergeable_files = vec![];
-
-    for (file_number, receiver) in loaded_receivers.into_iter().enumerate() {
-        if let Ok(chunk) = receiver.recv() {
-            mergeable_files.push(MergeableFile {
-                current_chunk: Rc::new(chunk),
-                file_number,
-                line_idx: 0,
-                receiver,
-            })
-        }
-    }
-
-    Ok(FileMerger {
-        heap: binary_heap_plus::BinaryHeap::from_vec_cmp(
-            mergeable_files,
-            FileComparator { settings },
-        ),
-        request_sender,
-        prev: None,
-        reader_join_handle,
-    })
-}
-/// The struct on the reader thread representing an input file
-struct ReaderFile<M: MergeInput> {
-    file: M,
-    sender: SyncSender<Chunk>,
-    carry_over: Vec<u8>,
-}
-
-/// The function running on the reader thread.
-fn reader(
-    recycled_receiver: Receiver<(usize, RecycledChunk)>,
-    files: &mut [Option<ReaderFile<impl MergeInput>>],
-    settings: &GlobalSettings,
-    separator: u8,
-) -> UResult<()> {
-    for (file_idx, recycled_chunk) in recycled_receiver.iter() {
-        if let Some(ReaderFile {
-            file,
-            sender,
-            carry_over,
-        }) = &mut files[file_idx]
-        {
-            let should_continue = chunks::read(
-                sender,
-                recycled_chunk,
-                None,
-                carry_over,
-                file.as_read(),
-                &mut iter::empty(),
-                separator,
-                settings,
-            )?;
-            if !should_continue {
-                // Remove the file from the list by replacing it with `None`.
-                let ReaderFile { file, .. } = files[file_idx].take().unwrap();
-                // Depending on the kind of the `MergeInput`, this may delete the file:
-                file.finished_reading()?;
-            }
-        }
-    }
-    Ok(())
-}
-/// The struct on the main thread representing an input file
-pub struct MergeableFile {
-    current_chunk: Rc<Chunk>,
-    line_idx: usize,
-    receiver: Receiver<Chunk>,
-    file_number: usize,
-}
-
-/// A struct to keep track of the previous line we encountered.
-///
-/// This is required for deduplication purposes.
-struct PreviousLine {
-    chunk: Rc<Chunk>,
-    line_idx: usize,
-    file_number: usize,
-}
-
-/// Merges files together. This is **not** an iterator because of lifetime problems.
-pub struct FileMerger<'a> {
-    heap: binary_heap_plus::BinaryHeap<MergeableFile, FileComparator<'a>>,
-    request_sender: Sender<(usize, RecycledChunk)>,
-    prev: Option<PreviousLine>,
-    reader_join_handle: JoinHandle<UResult<()>>,
-}
-
-impl<'a> FileMerger<'a> {
-    /// Write the merged contents to the output file.
-    pub fn write_all(self, settings: &GlobalSettings, output: Output) -> UResult<()> {
-        let mut out = output.into_write();
-        self.write_all_to(settings, &mut out)
-    }
-
-    pub fn write_all_to(mut self, settings: &GlobalSettings, out: &mut impl Write) -> UResult<()> {
-        while self.write_next(settings, out) {}
-        drop(self.request_sender);
-        self.reader_join_handle.join().unwrap()
-    }
-
-    fn write_next(&mut self, settings: &GlobalSettings, out: &mut impl Write) -> bool {
-        if let Some(file) = self.heap.peek() {
-            let prev = self.prev.replace(PreviousLine {
-                chunk: file.current_chunk.clone(),
-                line_idx: file.line_idx,
-                file_number: file.file_number,
-            });
-
-            file.current_chunk.with_contents(|contents| {
-                let current_line = &contents.lines[file.line_idx];
-                if settings.unique {
-                    if let Some(prev) = &prev {
-                        let cmp = compare_by(
-                            &prev.chunk.lines()[prev.line_idx],
-                            current_line,
-                            settings,
-                            prev.chunk.line_data(),
-                            file.current_chunk.line_data(),
-                        );
-                        if cmp == Ordering::Equal {
-                            return;
-                        }
-                    }
-                }
-                current_line.print(out, settings);
-            });
-
-            let was_last_line_for_file = file.current_chunk.lines().len() == file.line_idx + 1;
-
-            if was_last_line_for_file {
-                if let Ok(next_chunk) = file.receiver.recv() {
-                    let mut file = self.heap.peek_mut().unwrap();
-                    file.current_chunk = Rc::new(next_chunk);
-                    file.line_idx = 0;
-                } else {
-                    self.heap.pop();
-                }
-            } else {
-                // This will cause the comparison to use a different line and the heap to readjust.
-                self.heap.peek_mut().unwrap().line_idx += 1;
-            }
-
-            if let Some(prev) = prev {
-                if let Ok(prev_chunk) = Rc::try_unwrap(prev.chunk) {
-                    // If nothing is referencing the previous chunk anymore, this means that the previous line
-                    // was the last line of the chunk. We can recycle the chunk.
-                    self.request_sender
-                        .send((prev.file_number, prev_chunk.recycle()))
-                        .ok();
-                }
-            }
-        }
-        !self.heap.is_empty()
-    }
-}
-
-/// Compares files by their current line.
-struct FileComparator<'a> {
-    settings: &'a GlobalSettings,
-}
-
-impl<'a> Compare<MergeableFile> for FileComparator<'a> {
-    fn compare(&self, a: &MergeableFile, b: &MergeableFile) -> Ordering {
-        let mut cmp = compare_by(
-            &a.current_chunk.lines()[a.line_idx],
-            &b.current_chunk.lines()[b.line_idx],
-            self.settings,
-            a.current_chunk.line_data(),
-            b.current_chunk.line_data(),
-        );
-        if cmp == Ordering::Equal {
-            // To make sorting stable, we need to consider the file number as well,
-            // as lines from a file with a lower number are to be considered "earlier".
-            cmp = a.file_number.cmp(&b.file_number);
-        }
-        // BinaryHeap is a max heap. We use it as a min heap, so we need to reverse the ordering.
-        cmp.reverse()
-    }
-}
-
-// Wait for the child to exit and check its exit code.
-fn check_child_success(mut child: Child, program: &str) -> UResult<()> {
-    if !matches!(
-        child.wait().map(|e| e.code()),
-        Ok(Some(0)) | Ok(None) | Err(_)
-    ) {
-        Err(SortError::CompressProgTerminatedAbnormally {
-            prog: program.to_owned(),
-        }
-        .into())
-    } else {
-        Ok(())
-    }
-}
-
-/// A temporary file that can be written to.
-pub trait WriteableTmpFile: Sized {
-    type Closed: ClosedTmpFile;
-    type InnerWrite: Write;
-    fn create(file: (File, PathBuf), compress_prog: Option<&str>) -> UResult<Self>;
-    /// Closes the temporary file.
-    fn finished_writing(self) -> UResult<Self::Closed>;
-    fn as_write(&mut self) -> &mut Self::InnerWrite;
-}
-/// A temporary file that is (temporarily) closed, but can be reopened.
-pub trait ClosedTmpFile {
-    type Reopened: MergeInput;
-    /// Reopens the temporary file.
-    fn reopen(self) -> UResult<Self::Reopened>;
-}
-/// A pre-sorted input for merging.
-pub trait MergeInput: Send {
-    type InnerRead: Read;
-    /// Cleans this `MergeInput` up.
-    /// Implementations may delete the backing file.
-    fn finished_reading(self) -> UResult<()>;
-    fn as_read(&mut self) -> &mut Self::InnerRead;
-}
-
-pub struct WriteablePlainTmpFile {
-    path: PathBuf,
-    file: BufWriter<File>,
-}
-pub struct ClosedPlainTmpFile {
-    path: PathBuf,
-}
-pub struct PlainTmpMergeInput {
-    path: PathBuf,
-    file: File,
-}
-impl WriteableTmpFile for WriteablePlainTmpFile {
-    type Closed = ClosedPlainTmpFile;
-    type InnerWrite = BufWriter<File>;
-
-    fn create((file, path): (File, PathBuf), _: Option<&str>) -> UResult<Self> {
-        Ok(WriteablePlainTmpFile {
-            file: BufWriter::new(file),
-            path,
-        })
-    }
-
-    fn finished_writing(self) -> UResult<Self::Closed> {
-        Ok(ClosedPlainTmpFile { path: self.path })
-    }
-
-    fn as_write(&mut self) -> &mut Self::InnerWrite {
-        &mut self.file
-    }
-}
-impl ClosedTmpFile for ClosedPlainTmpFile {
-    type Reopened = PlainTmpMergeInput;
-    fn reopen(self) -> UResult<Self::Reopened> {
-        Ok(PlainTmpMergeInput {
-            file: File::open(&self.path).map_err(|error| SortError::OpenTmpFileFailed { error })?,
-            path: self.path,
-        })
-    }
-}
-impl MergeInput for PlainTmpMergeInput {
-    type InnerRead = File;
-
-    fn finished_reading(self) -> UResult<()> {
-        // we ignore failures to delete the temporary file,
-        // because there is a race at the end of the execution and the whole
-        // temporary directory might already be gone.
-        let _ = fs::remove_file(self.path);
-        Ok(())
-    }
-
-    fn as_read(&mut self) -> &mut Self::InnerRead {
-        &mut self.file
-    }
-}
-
-pub struct WriteableCompressedTmpFile {
-    path: PathBuf,
-    compress_prog: String,
-    child: Child,
-    child_stdin: BufWriter<ChildStdin>,
-}
-pub struct ClosedCompressedTmpFile {
-    path: PathBuf,
-    compress_prog: String,
-}
-pub struct CompressedTmpMergeInput {
-    path: PathBuf,
-    compress_prog: String,
-    child: Child,
-    child_stdout: ChildStdout,
-}
-impl WriteableTmpFile for WriteableCompressedTmpFile {
-    type Closed = ClosedCompressedTmpFile;
-    type InnerWrite = BufWriter<ChildStdin>;
-
-    fn create((file, path): (File, PathBuf), compress_prog: Option<&str>) -> UResult<Self> {
-        let compress_prog = compress_prog.unwrap();
-        let mut command = Command::new(compress_prog);
-        command.stdin(Stdio::piped()).stdout(file);
-        let mut child = command
-            .spawn()
-            .map_err(|err| SortError::CompressProgExecutionFailed {
-                code: err.raw_os_error().unwrap(),
-            })?;
-        let child_stdin = child.stdin.take().unwrap();
-        Ok(WriteableCompressedTmpFile {
-            path,
-            compress_prog: compress_prog.to_owned(),
-            child,
-            child_stdin: BufWriter::new(child_stdin),
-        })
-    }
-
-    fn finished_writing(self) -> UResult<Self::Closed> {
-        drop(self.child_stdin);
-        check_child_success(self.child, &self.compress_prog)?;
-        Ok(ClosedCompressedTmpFile {
-            path: self.path,
-            compress_prog: self.compress_prog,
-        })
-    }
-
-    fn as_write(&mut self) -> &mut Self::InnerWrite {
-        &mut self.child_stdin
-    }
-}
-impl ClosedTmpFile for ClosedCompressedTmpFile {
-    type Reopened = CompressedTmpMergeInput;
-
-    fn reopen(self) -> UResult<Self::Reopened> {
-        let mut command = Command::new(&self.compress_prog);
-        let file = File::open(&self.path).unwrap();
-        command.stdin(file).stdout(Stdio::piped()).arg("-d");
-        let mut child = command
-            .spawn()
-            .map_err(|err| SortError::CompressProgExecutionFailed {
-                code: err.raw_os_error().unwrap(),
-            })?;
-        let child_stdout = child.stdout.take().unwrap();
-        Ok(CompressedTmpMergeInput {
-            path: self.path,
-            compress_prog: self.compress_prog,
-            child,
-            child_stdout,
-        })
-    }
-}
-impl MergeInput for CompressedTmpMergeInput {
-    type InnerRead = ChildStdout;
-
-    fn finished_reading(self) -> UResult<()> {
-        drop(self.child_stdout);
-        check_child_success(self.child, &self.compress_prog)?;
-        let _ = fs::remove_file(self.path);
-        Ok(())
-    }
-
-    fn as_read(&mut self) -> &mut Self::InnerRead {
-        &mut self.child_stdout
-    }
-}
-
-pub struct PlainMergeInput<R: Read + Send> {
-    inner: R,
-}
-impl<R: Read + Send> MergeInput for PlainMergeInput<R> {
-    type InnerRead = R;
-    fn finished_reading(self) -> UResult<()> {
-        Ok(())
-    }
-    fn as_read(&mut self) -> &mut Self::InnerRead {
-        &mut self.inner
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/numeric_str_cmp.rs.html b/src/uu_sort/numeric_str_cmp.rs.html deleted file mode 100644 index 95e159b0d..000000000 --- a/src/uu_sort/numeric_str_cmp.rs.html +++ /dev/null @@ -1,1014 +0,0 @@ -numeric_str_cmp.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Debertol <michael.debertol..AT..gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-//! Fast comparison for strings representing a base 10 number without precision loss.
-//!
-//! To be able to short-circuit when comparing, [NumInfo] must be passed along with each number
-//! to [numeric_str_cmp]. [NumInfo] is generally obtained by calling [NumInfo::parse] and should be cached.
-//! It is allowed to arbitrarily modify the exponent afterwards, which is equivalent to shifting the decimal point.
-//!
-//! More specifically, exponent can be understood so that the original number is in (1..10)*10^exponent.
-//! From that follows the constraints of this algorithm: It is able to compare numbers in ±(1*10^[i64::MIN]..10*10^[i64::MAX]).
-
-use std::{cmp::Ordering, ops::Range};
-
-#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Clone)]
-enum Sign {
-    Negative,
-    Positive,
-}
-
-#[derive(Debug, PartialEq, Clone)]
-pub struct NumInfo {
-    exponent: i64,
-    sign: Sign,
-}
-#[derive(Debug, PartialEq, Clone)]
-pub struct NumInfoParseSettings {
-    pub accept_si_units: bool,
-    pub thousands_separator: Option<char>,
-    pub decimal_pt: Option<char>,
-}
-
-impl Default for NumInfoParseSettings {
-    fn default() -> Self {
-        Self {
-            accept_si_units: false,
-            thousands_separator: None,
-            decimal_pt: Some('.'),
-        }
-    }
-}
-
-impl NumInfo {
-    /// Parse NumInfo for this number.
-    /// Also returns the range of num that should be passed to numeric_str_cmp later.
-    ///
-    /// Leading zeros will be excluded from the returned range. If the number consists of only zeros,
-    /// an empty range (idx..idx) is returned so that idx is the char after the last zero.
-    /// If the input is not a number (which has to be treated as zero), the returned empty range
-    /// will be 0..0.
-    pub fn parse(num: &str, parse_settings: NumInfoParseSettings) -> (Self, Range<usize>) {
-        let mut exponent = -1;
-        let mut had_decimal_pt = false;
-        let mut had_digit = false;
-        let mut start = None;
-        let mut sign = Sign::Positive;
-
-        let mut first_char = true;
-
-        for (idx, char) in num.char_indices() {
-            if first_char && char.is_whitespace() {
-                continue;
-            }
-
-            if first_char && char == '-' {
-                sign = Sign::Negative;
-                first_char = false;
-                continue;
-            }
-            first_char = false;
-
-            if matches!(
-                parse_settings.thousands_separator,
-                Some(c) if c == char
-            ) {
-                continue;
-            }
-
-            if Self::is_invalid_char(char, &mut had_decimal_pt, &parse_settings) {
-                return if let Some(start) = start {
-                    let has_si_unit = parse_settings.accept_si_units
-                        && matches!(char, 'K' | 'k' | 'M' | 'G' | 'T' | 'P' | 'E' | 'Z' | 'Y');
-                    (
-                        NumInfo { exponent, sign },
-                        start..if has_si_unit { idx + 1 } else { idx },
-                    )
-                } else {
-                    (
-                        NumInfo {
-                            sign: Sign::Positive,
-                            exponent: 0,
-                        },
-                        if had_digit {
-                            // In this case there were only zeroes.
-                            // For debug output to work properly, we have to match the character after the last zero.
-                            idx..idx
-                        } else {
-                            // This was no number at all.
-                            // For debug output to work properly, we have to match 0..0.
-                            0..0
-                        },
-                    )
-                };
-            }
-            if Some(char) == parse_settings.decimal_pt {
-                continue;
-            }
-            had_digit = true;
-            if start.is_none() && char == '0' {
-                if had_decimal_pt {
-                    // We're parsing a number whose first nonzero digit is after the decimal point.
-                    exponent -= 1;
-                } else {
-                    // Skip leading zeroes
-                    continue;
-                }
-            }
-            if !had_decimal_pt {
-                exponent += 1;
-            }
-            if start.is_none() && char != '0' {
-                start = Some(idx);
-            }
-        }
-        if let Some(start) = start {
-            (NumInfo { exponent, sign }, start..num.len())
-        } else {
-            (
-                NumInfo {
-                    sign: Sign::Positive,
-                    exponent: 0,
-                },
-                if had_digit {
-                    // In this case there were only zeroes.
-                    // For debug output to work properly, we have to claim to match the end of the number.
-                    num.len()..num.len()
-                } else {
-                    // This was no number at all.
-                    // For debug output to work properly, we have to claim to match the start of the number.
-                    0..0
-                },
-            )
-        }
-    }
-
-    fn is_invalid_char(
-        c: char,
-        had_decimal_pt: &mut bool,
-        parse_settings: &NumInfoParseSettings,
-    ) -> bool {
-        if Some(c) == parse_settings.decimal_pt {
-            if *had_decimal_pt {
-                // this is a decimal pt but we already had one, so it is invalid
-                true
-            } else {
-                *had_decimal_pt = true;
-                false
-            }
-        } else {
-            !c.is_ascii_digit()
-        }
-    }
-}
-
-fn get_unit(unit: Option<char>) -> u8 {
-    if let Some(unit) = unit {
-        match unit {
-            'K' | 'k' => 1,
-            'M' => 2,
-            'G' => 3,
-            'T' => 4,
-            'P' => 5,
-            'E' => 6,
-            'Z' => 7,
-            'Y' => 8,
-            _ => 0,
-        }
-    } else {
-        0
-    }
-}
-
-/// Compare two numbers according to the rules of human numeric comparison.
-/// The SI-Unit takes precedence over the actual value (i.e. 2000M < 1G).
-pub fn human_numeric_str_cmp(
-    (a, a_info): (&str, &NumInfo),
-    (b, b_info): (&str, &NumInfo),
-) -> Ordering {
-    // 1. Sign
-    if a_info.sign != b_info.sign {
-        return a_info.sign.cmp(&b_info.sign);
-    }
-    // 2. Unit
-    let a_unit = get_unit(a.chars().next_back());
-    let b_unit = get_unit(b.chars().next_back());
-    let ordering = a_unit.cmp(&b_unit);
-    if ordering != Ordering::Equal {
-        if a_info.sign == Sign::Negative {
-            ordering.reverse()
-        } else {
-            ordering
-        }
-    } else {
-        // 3. Number
-        numeric_str_cmp((a, a_info), (b, b_info))
-    }
-}
-
-/// Compare two numbers as strings without parsing them as a number first. This should be more performant and can handle numbers more precisely.
-/// NumInfo is needed to provide a fast path for most numbers.
-#[inline(always)]
-pub fn numeric_str_cmp((a, a_info): (&str, &NumInfo), (b, b_info): (&str, &NumInfo)) -> Ordering {
-    // check for a difference in the sign
-    if a_info.sign != b_info.sign {
-        return a_info.sign.cmp(&b_info.sign);
-    }
-
-    // check for a difference in the exponent
-    let ordering = if a_info.exponent != b_info.exponent && !a.is_empty() && !b.is_empty() {
-        a_info.exponent.cmp(&b_info.exponent)
-    } else {
-        // walk the characters from the front until we find a difference
-        let mut a_chars = a.chars().filter(|c| c.is_ascii_digit());
-        let mut b_chars = b.chars().filter(|c| c.is_ascii_digit());
-        loop {
-            let a_next = a_chars.next();
-            let b_next = b_chars.next();
-            match (a_next, b_next) {
-                (None, None) => break Ordering::Equal,
-                (Some(c), None) => {
-                    break if c == '0' && a_chars.all(|c| c == '0') {
-                        Ordering::Equal
-                    } else {
-                        Ordering::Greater
-                    }
-                }
-                (None, Some(c)) => {
-                    break if c == '0' && b_chars.all(|c| c == '0') {
-                        Ordering::Equal
-                    } else {
-                        Ordering::Less
-                    }
-                }
-                (Some(a_char), Some(b_char)) => {
-                    let ord = a_char.cmp(&b_char);
-                    if ord != Ordering::Equal {
-                        break ord;
-                    }
-                }
-            }
-        }
-    };
-
-    if a_info.sign == Sign::Negative {
-        ordering.reverse()
-    } else {
-        ordering
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    fn parses_exp() {
-        let n = "1";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Positive
-                },
-                0..1
-            )
-        );
-        let n = "100";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 2,
-                    sign: Sign::Positive
-                },
-                0..3
-            )
-        );
-        let n = "1,000";
-        assert_eq!(
-            NumInfo::parse(
-                n,
-                NumInfoParseSettings {
-                    thousands_separator: Some(','),
-                    ..Default::default()
-                }
-            ),
-            (
-                NumInfo {
-                    exponent: 3,
-                    sign: Sign::Positive
-                },
-                0..5
-            )
-        );
-        let n = "1,000";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Positive
-                },
-                0..1
-            )
-        );
-        let n = "1000.00";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 3,
-                    sign: Sign::Positive
-                },
-                0..7
-            )
-        );
-    }
-    #[test]
-    fn parses_negative_exp() {
-        let n = "0.00005";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: -5,
-                    sign: Sign::Positive
-                },
-                6..7
-            )
-        );
-        let n = "00000.00005";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: -5,
-                    sign: Sign::Positive
-                },
-                10..11
-            )
-        );
-    }
-
-    #[test]
-    fn parses_sign() {
-        let n = "5";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Positive
-                },
-                0..1
-            )
-        );
-        let n = "-5";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Negative
-                },
-                1..2
-            )
-        );
-        let n = "    -5";
-        assert_eq!(
-            NumInfo::parse(n, Default::default()),
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Negative
-                },
-                5..6
-            )
-        );
-    }
-
-    fn test_helper(a: &str, b: &str, expected: Ordering) {
-        let (a_info, a_range) = NumInfo::parse(a, Default::default());
-        let (b_info, b_range) = NumInfo::parse(b, Default::default());
-        let ordering = numeric_str_cmp(
-            (&a[a_range.to_owned()], &a_info),
-            (&b[b_range.to_owned()], &b_info),
-        );
-        assert_eq!(ordering, expected);
-        let ordering = numeric_str_cmp((&b[b_range], &b_info), (&a[a_range], &a_info));
-        assert_eq!(ordering, expected.reverse());
-    }
-    #[test]
-    fn test_single_digit() {
-        test_helper("1", "2", Ordering::Less);
-        test_helper("0", "0", Ordering::Equal);
-    }
-    #[test]
-    fn test_minus() {
-        test_helper("-1", "-2", Ordering::Greater);
-        test_helper("-0", "-0", Ordering::Equal);
-    }
-    #[test]
-    fn test_different_len() {
-        test_helper("-20", "-100", Ordering::Greater);
-        test_helper("10.0", "2.000000", Ordering::Greater);
-    }
-    #[test]
-    fn test_decimal_digits() {
-        test_helper("20.1", "20.2", Ordering::Less);
-        test_helper("20.1", "20.15", Ordering::Less);
-        test_helper("-20.1", "+20.15", Ordering::Less);
-        test_helper("-20.1", "-20", Ordering::Less);
-    }
-    #[test]
-    fn test_trailing_zeroes() {
-        test_helper("20.00000", "20.1", Ordering::Less);
-        test_helper("20.00000", "20.0", Ordering::Equal);
-    }
-    #[test]
-    fn test_invalid_digits() {
-        test_helper("foo", "bar", Ordering::Equal);
-        test_helper("20.1", "a", Ordering::Greater);
-        test_helper("-20.1", "a", Ordering::Less);
-        test_helper("a", "0.15", Ordering::Less);
-    }
-    #[test]
-    fn test_multiple_decimal_pts() {
-        test_helper("10.0.0", "50.0.0", Ordering::Less);
-        test_helper("0.1.", "0.2.0", Ordering::Less);
-        test_helper("1.1.", "0", Ordering::Greater);
-        test_helper("1.1.", "-0", Ordering::Greater);
-    }
-    #[test]
-    fn test_leading_decimal_pts() {
-        test_helper(".0", ".0", Ordering::Equal);
-        test_helper(".1", ".0", Ordering::Greater);
-        test_helper(".02", "0", Ordering::Greater);
-    }
-    #[test]
-    fn test_leading_zeroes() {
-        test_helper("000000.0", ".0", Ordering::Equal);
-        test_helper("0.1", "0000000000000.0", Ordering::Greater);
-        test_helper("-01", "-2", Ordering::Greater);
-    }
-
-    #[test]
-    fn minus_zero() {
-        // This matches GNU sort behavior.
-        test_helper("-0", "0", Ordering::Equal);
-        test_helper("-0x", "0", Ordering::Equal);
-    }
-    #[test]
-    fn double_minus() {
-        test_helper("--1", "0", Ordering::Equal);
-    }
-    #[test]
-    fn single_minus() {
-        let info = NumInfo::parse("-", Default::default());
-        assert_eq!(
-            info,
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Positive
-                },
-                0..0
-            )
-        );
-    }
-    #[test]
-    fn invalid_with_unit() {
-        let info = NumInfo::parse(
-            "-K",
-            NumInfoParseSettings {
-                accept_si_units: true,
-                ..Default::default()
-            },
-        );
-        assert_eq!(
-            info,
-            (
-                NumInfo {
-                    exponent: 0,
-                    sign: Sign::Positive
-                },
-                0..0
-            )
-        );
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/sort.rs.html b/src/uu_sort/sort.rs.html deleted file mode 100644 index 011aa4d9f..000000000 --- a/src/uu_sort/sort.rs.html +++ /dev/null @@ -1,3958 +0,0 @@ -sort.rs - source -
   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-  11
-  12
-  13
-  14
-  15
-  16
-  17
-  18
-  19
-  20
-  21
-  22
-  23
-  24
-  25
-  26
-  27
-  28
-  29
-  30
-  31
-  32
-  33
-  34
-  35
-  36
-  37
-  38
-  39
-  40
-  41
-  42
-  43
-  44
-  45
-  46
-  47
-  48
-  49
-  50
-  51
-  52
-  53
-  54
-  55
-  56
-  57
-  58
-  59
-  60
-  61
-  62
-  63
-  64
-  65
-  66
-  67
-  68
-  69
-  70
-  71
-  72
-  73
-  74
-  75
-  76
-  77
-  78
-  79
-  80
-  81
-  82
-  83
-  84
-  85
-  86
-  87
-  88
-  89
-  90
-  91
-  92
-  93
-  94
-  95
-  96
-  97
-  98
-  99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 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
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-1018
-1019
-1020
-1021
-1022
-1023
-1024
-1025
-1026
-1027
-1028
-1029
-1030
-1031
-1032
-1033
-1034
-1035
-1036
-1037
-1038
-1039
-1040
-1041
-1042
-1043
-1044
-1045
-1046
-1047
-1048
-1049
-1050
-1051
-1052
-1053
-1054
-1055
-1056
-1057
-1058
-1059
-1060
-1061
-1062
-1063
-1064
-1065
-1066
-1067
-1068
-1069
-1070
-1071
-1072
-1073
-1074
-1075
-1076
-1077
-1078
-1079
-1080
-1081
-1082
-1083
-1084
-1085
-1086
-1087
-1088
-1089
-1090
-1091
-1092
-1093
-1094
-1095
-1096
-1097
-1098
-1099
-1100
-1101
-1102
-1103
-1104
-1105
-1106
-1107
-1108
-1109
-1110
-1111
-1112
-1113
-1114
-1115
-1116
-1117
-1118
-1119
-1120
-1121
-1122
-1123
-1124
-1125
-1126
-1127
-1128
-1129
-1130
-1131
-1132
-1133
-1134
-1135
-1136
-1137
-1138
-1139
-1140
-1141
-1142
-1143
-1144
-1145
-1146
-1147
-1148
-1149
-1150
-1151
-1152
-1153
-1154
-1155
-1156
-1157
-1158
-1159
-1160
-1161
-1162
-1163
-1164
-1165
-1166
-1167
-1168
-1169
-1170
-1171
-1172
-1173
-1174
-1175
-1176
-1177
-1178
-1179
-1180
-1181
-1182
-1183
-1184
-1185
-1186
-1187
-1188
-1189
-1190
-1191
-1192
-1193
-1194
-1195
-1196
-1197
-1198
-1199
-1200
-1201
-1202
-1203
-1204
-1205
-1206
-1207
-1208
-1209
-1210
-1211
-1212
-1213
-1214
-1215
-1216
-1217
-1218
-1219
-1220
-1221
-1222
-1223
-1224
-1225
-1226
-1227
-1228
-1229
-1230
-1231
-1232
-1233
-1234
-1235
-1236
-1237
-1238
-1239
-1240
-1241
-1242
-1243
-1244
-1245
-1246
-1247
-1248
-1249
-1250
-1251
-1252
-1253
-1254
-1255
-1256
-1257
-1258
-1259
-1260
-1261
-1262
-1263
-1264
-1265
-1266
-1267
-1268
-1269
-1270
-1271
-1272
-1273
-1274
-1275
-1276
-1277
-1278
-1279
-1280
-1281
-1282
-1283
-1284
-1285
-1286
-1287
-1288
-1289
-1290
-1291
-1292
-1293
-1294
-1295
-1296
-1297
-1298
-1299
-1300
-1301
-1302
-1303
-1304
-1305
-1306
-1307
-1308
-1309
-1310
-1311
-1312
-1313
-1314
-1315
-1316
-1317
-1318
-1319
-1320
-1321
-1322
-1323
-1324
-1325
-1326
-1327
-1328
-1329
-1330
-1331
-1332
-1333
-1334
-1335
-1336
-1337
-1338
-1339
-1340
-1341
-1342
-1343
-1344
-1345
-1346
-1347
-1348
-1349
-1350
-1351
-1352
-1353
-1354
-1355
-1356
-1357
-1358
-1359
-1360
-1361
-1362
-1363
-1364
-1365
-1366
-1367
-1368
-1369
-1370
-1371
-1372
-1373
-1374
-1375
-1376
-1377
-1378
-1379
-1380
-1381
-1382
-1383
-1384
-1385
-1386
-1387
-1388
-1389
-1390
-1391
-1392
-1393
-1394
-1395
-1396
-1397
-1398
-1399
-1400
-1401
-1402
-1403
-1404
-1405
-1406
-1407
-1408
-1409
-1410
-1411
-1412
-1413
-1414
-1415
-1416
-1417
-1418
-1419
-1420
-1421
-1422
-1423
-1424
-1425
-1426
-1427
-1428
-1429
-1430
-1431
-1432
-1433
-1434
-1435
-1436
-1437
-1438
-1439
-1440
-1441
-1442
-1443
-1444
-1445
-1446
-1447
-1448
-1449
-1450
-1451
-1452
-1453
-1454
-1455
-1456
-1457
-1458
-1459
-1460
-1461
-1462
-1463
-1464
-1465
-1466
-1467
-1468
-1469
-1470
-1471
-1472
-1473
-1474
-1475
-1476
-1477
-1478
-1479
-1480
-1481
-1482
-1483
-1484
-1485
-1486
-1487
-1488
-1489
-1490
-1491
-1492
-1493
-1494
-1495
-1496
-1497
-1498
-1499
-1500
-1501
-1502
-1503
-1504
-1505
-1506
-1507
-1508
-1509
-1510
-1511
-1512
-1513
-1514
-1515
-1516
-1517
-1518
-1519
-1520
-1521
-1522
-1523
-1524
-1525
-1526
-1527
-1528
-1529
-1530
-1531
-1532
-1533
-1534
-1535
-1536
-1537
-1538
-1539
-1540
-1541
-1542
-1543
-1544
-1545
-1546
-1547
-1548
-1549
-1550
-1551
-1552
-1553
-1554
-1555
-1556
-1557
-1558
-1559
-1560
-1561
-1562
-1563
-1564
-1565
-1566
-1567
-1568
-1569
-1570
-1571
-1572
-1573
-1574
-1575
-1576
-1577
-1578
-1579
-1580
-1581
-1582
-1583
-1584
-1585
-1586
-1587
-1588
-1589
-1590
-1591
-1592
-1593
-1594
-1595
-1596
-1597
-1598
-1599
-1600
-1601
-1602
-1603
-1604
-1605
-1606
-1607
-1608
-1609
-1610
-1611
-1612
-1613
-1614
-1615
-1616
-1617
-1618
-1619
-1620
-1621
-1622
-1623
-1624
-1625
-1626
-1627
-1628
-1629
-1630
-1631
-1632
-1633
-1634
-1635
-1636
-1637
-1638
-1639
-1640
-1641
-1642
-1643
-1644
-1645
-1646
-1647
-1648
-1649
-1650
-1651
-1652
-1653
-1654
-1655
-1656
-1657
-1658
-1659
-1660
-1661
-1662
-1663
-1664
-1665
-1666
-1667
-1668
-1669
-1670
-1671
-1672
-1673
-1674
-1675
-1676
-1677
-1678
-1679
-1680
-1681
-1682
-1683
-1684
-1685
-1686
-1687
-1688
-1689
-1690
-1691
-1692
-1693
-1694
-1695
-1696
-1697
-1698
-1699
-1700
-1701
-1702
-1703
-1704
-1705
-1706
-1707
-1708
-1709
-1710
-1711
-1712
-1713
-1714
-1715
-1716
-1717
-1718
-1719
-1720
-1721
-1722
-1723
-1724
-1725
-1726
-1727
-1728
-1729
-1730
-1731
-1732
-1733
-1734
-1735
-1736
-1737
-1738
-1739
-1740
-1741
-1742
-1743
-1744
-1745
-1746
-1747
-1748
-1749
-1750
-1751
-1752
-1753
-1754
-1755
-1756
-1757
-1758
-1759
-1760
-1761
-1762
-1763
-1764
-1765
-1766
-1767
-1768
-1769
-1770
-1771
-1772
-1773
-1774
-1775
-1776
-1777
-1778
-1779
-1780
-1781
-1782
-1783
-1784
-1785
-1786
-1787
-1788
-1789
-1790
-1791
-1792
-1793
-1794
-1795
-1796
-1797
-1798
-1799
-1800
-1801
-1802
-1803
-1804
-1805
-1806
-1807
-1808
-1809
-1810
-1811
-1812
-1813
-1814
-1815
-1816
-1817
-1818
-1819
-1820
-1821
-1822
-1823
-1824
-1825
-1826
-1827
-1828
-1829
-1830
-1831
-1832
-1833
-1834
-1835
-1836
-1837
-1838
-1839
-1840
-1841
-1842
-1843
-1844
-1845
-1846
-1847
-1848
-1849
-1850
-1851
-1852
-1853
-1854
-1855
-1856
-1857
-1858
-1859
-1860
-1861
-1862
-1863
-1864
-1865
-1866
-1867
-1868
-1869
-1870
-1871
-1872
-1873
-1874
-1875
-1876
-1877
-1878
-1879
-1880
-1881
-1882
-1883
-1884
-1885
-1886
-1887
-1888
-1889
-1890
-1891
-1892
-1893
-1894
-1895
-1896
-1897
-1898
-1899
-1900
-1901
-1902
-1903
-1904
-1905
-1906
-1907
-1908
-1909
-1910
-1911
-1912
-1913
-1914
-1915
-1916
-1917
-1918
-1919
-1920
-1921
-1922
-1923
-1924
-1925
-1926
-1927
-1928
-1929
-1930
-1931
-1932
-1933
-1934
-1935
-1936
-1937
-1938
-1939
-1940
-1941
-1942
-1943
-1944
-1945
-1946
-1947
-1948
-1949
-1950
-1951
-1952
-1953
-1954
-1955
-1956
-1957
-1958
-1959
-1960
-1961
-1962
-1963
-1964
-1965
-1966
-1967
-1968
-1969
-1970
-1971
-1972
-1973
-1974
-1975
-1976
-1977
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Michael Yin <mikeyin@mikeyin.org>
-//  * (c) Robert Swinford <robert.swinford..AT..gmail.com>
-//  * (c) Michael Debertol <michael.debertol..AT..gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// Although these links don't always seem to describe reality, check out the POSIX and GNU specs:
-// https://pubs.opengroup.org/onlinepubs/9699919799/utilities/sort.html
-// https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html
-
-// spell-checker:ignore (misc) HFKJFK Mbdfhn
-
-#[macro_use]
-extern crate uucore;
-
-mod check;
-mod chunks;
-mod custom_str_cmp;
-mod ext_sort;
-mod merge;
-mod numeric_str_cmp;
-mod tmp_dir;
-
-use chunks::LineData;
-use clap::{crate_version, App, Arg};
-use custom_str_cmp::custom_str_cmp;
-use ext_sort::ext_sort;
-use fnv::FnvHasher;
-use numeric_str_cmp::{human_numeric_str_cmp, numeric_str_cmp, NumInfo, NumInfoParseSettings};
-use rand::{thread_rng, Rng};
-use rayon::prelude::*;
-use std::cmp::Ordering;
-use std::env;
-use std::error::Error;
-use std::ffi::{OsStr, OsString};
-use std::fmt::Display;
-use std::fs::{File, OpenOptions};
-use std::hash::{Hash, Hasher};
-use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
-use std::ops::Range;
-use std::path::Path;
-use std::path::PathBuf;
-use std::str::Utf8Error;
-use unicode_width::UnicodeWidthStr;
-use uucore::display::Quotable;
-use uucore::error::{set_exit_code, strip_errno, UError, UResult, USimpleError, UUsageError};
-use uucore::parse_size::{parse_size, ParseSizeError};
-use uucore::version_cmp::version_cmp;
-use uucore::InvalidEncodingHandling;
-
-use crate::tmp_dir::TmpDirWrapper;
-
-const ABOUT: &str = "Display sorted concatenation of all FILE(s).";
-
-const LONG_HELP_KEYS: &str = "The key format is FIELD[.CHAR][OPTIONS][,FIELD[.CHAR]][OPTIONS].
-
-Fields by default are separated by the first whitespace after a non-whitespace character. Use -t to specify a custom separator.
-In the default case, whitespace is appended at the beginning of each field. Custom separators however are not included in fields.
-
-FIELD and CHAR both start at 1 (i.e. they are 1-indexed). If there is no end specified after a comma, the end will be the end of the line.
-If CHAR is set 0, it means the end of the field. CHAR defaults to 1 for the start position and to 0 for the end position.
-
-Valid options are: MbdfhnRrV. They override the global options for this key.";
-
-mod options {
-    pub mod modes {
-        pub const SORT: &str = "sort";
-
-        pub const HUMAN_NUMERIC: &str = "human-numeric-sort";
-        pub const MONTH: &str = "month-sort";
-        pub const NUMERIC: &str = "numeric-sort";
-        pub const GENERAL_NUMERIC: &str = "general-numeric-sort";
-        pub const VERSION: &str = "version-sort";
-        pub const RANDOM: &str = "random-sort";
-
-        pub const ALL_SORT_MODES: [&str; 6] = [
-            GENERAL_NUMERIC,
-            HUMAN_NUMERIC,
-            MONTH,
-            NUMERIC,
-            VERSION,
-            RANDOM,
-        ];
-    }
-
-    pub mod check {
-        pub const CHECK: &str = "check";
-        pub const CHECK_SILENT: &str = "check-silent";
-        pub const SILENT: &str = "silent";
-        pub const QUIET: &str = "quiet";
-        pub const DIAGNOSE_FIRST: &str = "diagnose-first";
-    }
-
-    pub const DICTIONARY_ORDER: &str = "dictionary-order";
-    pub const MERGE: &str = "merge";
-    pub const DEBUG: &str = "debug";
-    pub const IGNORE_CASE: &str = "ignore-case";
-    pub const IGNORE_LEADING_BLANKS: &str = "ignore-leading-blanks";
-    pub const IGNORE_NONPRINTING: &str = "ignore-nonprinting";
-    pub const OUTPUT: &str = "output";
-    pub const REVERSE: &str = "reverse";
-    pub const STABLE: &str = "stable";
-    pub const UNIQUE: &str = "unique";
-    pub const KEY: &str = "key";
-    pub const SEPARATOR: &str = "field-separator";
-    pub const ZERO_TERMINATED: &str = "zero-terminated";
-    pub const PARALLEL: &str = "parallel";
-    pub const FILES0_FROM: &str = "files0-from";
-    pub const BUF_SIZE: &str = "buffer-size";
-    pub const TMP_DIR: &str = "temporary-directory";
-    pub const COMPRESS_PROG: &str = "compress-program";
-    pub const BATCH_SIZE: &str = "batch-size";
-
-    pub const FILES: &str = "files";
-}
-
-const DECIMAL_PT: char = '.';
-
-const NEGATIVE: char = '-';
-const POSITIVE: char = '+';
-
-// Choosing a higher buffer size does not result in performance improvements
-// (at least not on my machine). TODO: In the future, we should also take the amount of
-// available memory into consideration, instead of relying on this constant only.
-const DEFAULT_BUF_SIZE: usize = 1_000_000_000; // 1 GB
-
-#[derive(Debug)]
-enum SortError {
-    Disorder {
-        file: OsString,
-        line_number: usize,
-        line: String,
-        silent: bool,
-    },
-    OpenFailed {
-        path: String,
-        error: std::io::Error,
-    },
-    ReadFailed {
-        path: PathBuf,
-        error: std::io::Error,
-    },
-    ParseKeyError {
-        key: String,
-        msg: String,
-    },
-    OpenTmpFileFailed {
-        error: std::io::Error,
-    },
-    CompressProgExecutionFailed {
-        code: i32,
-    },
-    CompressProgTerminatedAbnormally {
-        prog: String,
-    },
-    TmpDirCreationFailed,
-    Uft8Error {
-        error: Utf8Error,
-    },
-}
-
-impl Error for SortError {}
-
-impl UError for SortError {
-    fn code(&self) -> i32 {
-        match self {
-            SortError::Disorder { .. } => 1,
-            _ => 2,
-        }
-    }
-}
-
-impl Display for SortError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            SortError::Disorder {
-                file,
-                line_number,
-                line,
-                silent,
-            } => {
-                if !silent {
-                    write!(
-                        f,
-                        "{}:{}: disorder: {}",
-                        file.maybe_quote(),
-                        line_number,
-                        line
-                    )
-                } else {
-                    Ok(())
-                }
-            }
-            SortError::OpenFailed { path, error } => {
-                write!(
-                    f,
-                    "open failed: {}: {}",
-                    path.maybe_quote(),
-                    strip_errno(error)
-                )
-            }
-            SortError::ParseKeyError { key, msg } => {
-                write!(f, "failed to parse key {}: {}", key.quote(), msg)
-            }
-            SortError::ReadFailed { path, error } => {
-                write!(
-                    f,
-                    "cannot read: {}: {}",
-                    path.maybe_quote(),
-                    strip_errno(error)
-                )
-            }
-            SortError::OpenTmpFileFailed { error } => {
-                write!(f, "failed to open temporary file: {}", strip_errno(error))
-            }
-            SortError::CompressProgExecutionFailed { code } => {
-                write!(f, "couldn't execute compress program: errno {}", code)
-            }
-            SortError::CompressProgTerminatedAbnormally { prog } => {
-                write!(f, "{} terminated abnormally", prog.quote())
-            }
-            SortError::TmpDirCreationFailed => write!(f, "could not create temporary directory"),
-            SortError::Uft8Error { error } => write!(f, "{}", error),
-        }
-    }
-}
-
-#[derive(Eq, Ord, PartialEq, PartialOrd, Clone, Copy, Debug)]
-enum SortMode {
-    Numeric,
-    HumanNumeric,
-    GeneralNumeric,
-    Month,
-    Version,
-    Random,
-    Default,
-}
-
-impl SortMode {
-    fn get_short_name(&self) -> Option<char> {
-        match self {
-            SortMode::Numeric => Some('n'),
-            SortMode::HumanNumeric => Some('h'),
-            SortMode::GeneralNumeric => Some('g'),
-            SortMode::Month => Some('M'),
-            SortMode::Version => Some('V'),
-            SortMode::Random => Some('R'),
-            SortMode::Default => None,
-        }
-    }
-}
-
-pub struct Output {
-    file: Option<(String, File)>,
-}
-
-impl Output {
-    fn new(name: Option<&str>) -> UResult<Self> {
-        let file = if let Some(name) = name {
-            // This is different from `File::create()` because we don't truncate the output yet.
-            // This allows using the output file as an input file.
-            let file = OpenOptions::new()
-                .write(true)
-                .create(true)
-                .open(name)
-                .map_err(|e| SortError::OpenFailed {
-                    path: name.to_owned(),
-                    error: e,
-                })?;
-            Some((name.to_owned(), file))
-        } else {
-            None
-        };
-        Ok(Self { file })
-    }
-
-    fn into_write(self) -> BufWriter<Box<dyn Write>> {
-        BufWriter::new(match self.file {
-            Some((_name, file)) => {
-                // truncate the file
-                let _ = file.set_len(0);
-                Box::new(file)
-            }
-            None => Box::new(stdout()),
-        })
-    }
-
-    fn as_output_name(&self) -> Option<&str> {
-        match &self.file {
-            Some((name, _file)) => Some(name),
-            None => None,
-        }
-    }
-}
-
-#[derive(Clone)]
-pub struct GlobalSettings {
-    mode: SortMode,
-    debug: bool,
-    ignore_leading_blanks: bool,
-    ignore_case: bool,
-    dictionary_order: bool,
-    ignore_non_printing: bool,
-    merge: bool,
-    reverse: bool,
-    stable: bool,
-    unique: bool,
-    check: bool,
-    check_silent: bool,
-    salt: Option<[u8; 16]>,
-    selectors: Vec<FieldSelector>,
-    separator: Option<char>,
-    threads: String,
-    zero_terminated: bool,
-    buffer_size: usize,
-    compress_prog: Option<String>,
-    merge_batch_size: usize,
-    precomputed: Precomputed,
-}
-
-/// Data needed for sorting. Should be computed once before starting to sort
-/// by calling `GlobalSettings::init_precomputed`.
-#[derive(Clone, Debug)]
-struct Precomputed {
-    needs_tokens: bool,
-    num_infos_per_line: usize,
-    floats_per_line: usize,
-    selections_per_line: usize,
-}
-
-impl GlobalSettings {
-    /// Parse a SIZE string into a number of bytes.
-    /// A size string comprises an integer and an optional unit.
-    /// The unit may be k, K, m, M, g, G, t, T, P, E, Z, Y (powers of 1024), or b which is 1.
-    /// Default is K.
-    fn parse_byte_count(input: &str) -> Result<usize, ParseSizeError> {
-        // GNU sort (8.32)   valid: 1b,        k, K, m, M, g, G, t, T, P, E, Z, Y
-        // GNU sort (8.32) invalid:  b, B, 1B,                         p, e, z, y
-        const ALLOW_LIST: &[char] = &[
-            'b', 'k', 'K', 'm', 'M', 'g', 'G', 't', 'T', 'P', 'E', 'Z', 'Y',
-        ];
-        let mut size_string = input.trim().to_string();
-
-        if size_string.ends_with(|c: char| ALLOW_LIST.contains(&c) || c.is_digit(10)) {
-            // b 1, K 1024 (default)
-            if size_string.ends_with(|c: char| c.is_digit(10)) {
-                size_string.push('K');
-            } else if size_string.ends_with('b') {
-                size_string.pop();
-            }
-            parse_size(&size_string)
-        } else {
-            Err(ParseSizeError::ParseFailure("invalid suffix".to_string()))
-        }
-    }
-
-    /// Precompute some data needed for sorting.
-    /// This function **must** be called before starting to sort, and `GlobalSettings` may not be altered
-    /// afterwards.
-    fn init_precomputed(&mut self) {
-        self.precomputed.needs_tokens = self.selectors.iter().any(|s| s.needs_tokens);
-        self.precomputed.selections_per_line =
-            self.selectors.iter().filter(|s| s.needs_selection).count();
-        self.precomputed.num_infos_per_line = self
-            .selectors
-            .iter()
-            .filter(|s| matches!(s.settings.mode, SortMode::Numeric | SortMode::HumanNumeric))
-            .count();
-        self.precomputed.floats_per_line = self
-            .selectors
-            .iter()
-            .filter(|s| matches!(s.settings.mode, SortMode::GeneralNumeric))
-            .count();
-    }
-}
-
-impl Default for GlobalSettings {
-    fn default() -> GlobalSettings {
-        GlobalSettings {
-            mode: SortMode::Default,
-            debug: false,
-            ignore_leading_blanks: false,
-            ignore_case: false,
-            dictionary_order: false,
-            ignore_non_printing: false,
-            merge: false,
-            reverse: false,
-            stable: false,
-            unique: false,
-            check: false,
-            check_silent: false,
-            salt: None,
-            selectors: vec![],
-            separator: None,
-            threads: String::new(),
-            zero_terminated: false,
-            buffer_size: DEFAULT_BUF_SIZE,
-            compress_prog: None,
-            merge_batch_size: 32,
-            precomputed: Precomputed {
-                num_infos_per_line: 0,
-                floats_per_line: 0,
-                selections_per_line: 0,
-                needs_tokens: false,
-            },
-        }
-    }
-}
-
-#[derive(Clone, PartialEq, Debug)]
-struct KeySettings {
-    mode: SortMode,
-    ignore_blanks: bool,
-    ignore_case: bool,
-    dictionary_order: bool,
-    ignore_non_printing: bool,
-    reverse: bool,
-}
-
-impl KeySettings {
-    /// Checks if the supplied combination of `mode`, `ignore_non_printing` and `dictionary_order` is allowed.
-    fn check_compatibility(
-        mode: SortMode,
-        ignore_non_printing: bool,
-        dictionary_order: bool,
-    ) -> Result<(), String> {
-        if matches!(
-            mode,
-            SortMode::Numeric | SortMode::HumanNumeric | SortMode::GeneralNumeric | SortMode::Month
-        ) {
-            if dictionary_order {
-                return Err(format!(
-                    "options '-{}{}' are incompatible",
-                    'd',
-                    mode.get_short_name().unwrap()
-                ));
-            } else if ignore_non_printing {
-                return Err(format!(
-                    "options '-{}{}' are incompatible",
-                    'i',
-                    mode.get_short_name().unwrap()
-                ));
-            }
-        }
-        Ok(())
-    }
-
-    fn set_sort_mode(&mut self, mode: SortMode) -> Result<(), String> {
-        if self.mode != SortMode::Default {
-            return Err(format!(
-                "options '-{}{}' are incompatible",
-                self.mode.get_short_name().unwrap(),
-                mode.get_short_name().unwrap()
-            ));
-        }
-        Self::check_compatibility(mode, self.ignore_non_printing, self.dictionary_order)?;
-        self.mode = mode;
-        Ok(())
-    }
-
-    fn set_dictionary_order(&mut self) -> Result<(), String> {
-        Self::check_compatibility(self.mode, self.ignore_non_printing, true)?;
-        self.dictionary_order = true;
-        Ok(())
-    }
-
-    fn set_ignore_non_printing(&mut self) -> Result<(), String> {
-        Self::check_compatibility(self.mode, true, self.dictionary_order)?;
-        self.ignore_non_printing = true;
-        Ok(())
-    }
-}
-
-impl From<&GlobalSettings> for KeySettings {
-    fn from(settings: &GlobalSettings) -> Self {
-        Self {
-            mode: settings.mode,
-            ignore_blanks: settings.ignore_leading_blanks,
-            ignore_case: settings.ignore_case,
-            ignore_non_printing: settings.ignore_non_printing,
-            reverse: settings.reverse,
-            dictionary_order: settings.dictionary_order,
-        }
-    }
-}
-
-impl Default for KeySettings {
-    fn default() -> Self {
-        Self::from(&GlobalSettings::default())
-    }
-}
-enum Selection<'a> {
-    AsF64(GeneralF64ParseResult),
-    WithNumInfo(&'a str, NumInfo),
-    Str(&'a str),
-}
-
-type Field = Range<usize>;
-
-#[derive(Clone, Debug)]
-pub struct Line<'a> {
-    line: &'a str,
-    index: usize,
-}
-
-impl<'a> Line<'a> {
-    /// Creates a new `Line`.
-    ///
-    /// If additional data is needed for sorting it is added to `line_data`.
-    /// `token_buffer` allows to reuse the allocation for tokens.
-    fn create(
-        line: &'a str,
-        index: usize,
-        line_data: &mut LineData<'a>,
-        token_buffer: &mut Vec<Field>,
-        settings: &GlobalSettings,
-    ) -> Self {
-        token_buffer.clear();
-        if settings.precomputed.needs_tokens {
-            tokenize(line, settings.separator, token_buffer);
-        }
-        for (selector, selection) in settings
-            .selectors
-            .iter()
-            .map(|selector| (selector, selector.get_selection(line, token_buffer)))
-        {
-            match selection {
-                Selection::AsF64(parsed_float) => line_data.parsed_floats.push(parsed_float),
-                Selection::WithNumInfo(str, num_info) => {
-                    line_data.num_infos.push(num_info);
-                    line_data.selections.push(str);
-                }
-                Selection::Str(str) => {
-                    if selector.needs_selection {
-                        line_data.selections.push(str)
-                    }
-                }
-            }
-        }
-        Self { line, index }
-    }
-
-    fn print(&self, writer: &mut impl Write, settings: &GlobalSettings) {
-        if settings.zero_terminated && !settings.debug {
-            writer.write_all(self.line.as_bytes()).unwrap();
-            writer.write_all(b"\0").unwrap();
-        } else if !settings.debug {
-            writer.write_all(self.line.as_bytes()).unwrap();
-            writer.write_all(b"\n").unwrap();
-        } else {
-            self.print_debug(settings, writer).unwrap();
-        }
-    }
-
-    /// Writes indicators for the selections this line matched. The original line content is NOT expected
-    /// to be already printed.
-    fn print_debug(
-        &self,
-        settings: &GlobalSettings,
-        writer: &mut impl Write,
-    ) -> std::io::Result<()> {
-        // We do not consider this function performance critical, as debug output is only useful for small files,
-        // which are not a performance problem in any case. Therefore there aren't any special performance
-        // optimizations here.
-
-        let line = self.line.replace('\t', ">");
-        writeln!(writer, "{}", line)?;
-
-        let mut fields = vec![];
-        tokenize(self.line, settings.separator, &mut fields);
-        for selector in settings.selectors.iter() {
-            let mut selection = selector.get_range(self.line, Some(&fields));
-            match selector.settings.mode {
-                SortMode::Numeric | SortMode::HumanNumeric => {
-                    // find out which range is used for numeric comparisons
-                    let (_, num_range) = NumInfo::parse(
-                        &self.line[selection.clone()],
-                        NumInfoParseSettings {
-                            accept_si_units: selector.settings.mode == SortMode::HumanNumeric,
-                            ..Default::default()
-                        },
-                    );
-                    let initial_selection = selection.clone();
-
-                    // Shorten selection to num_range.
-                    selection.start += num_range.start;
-                    selection.end = selection.start + num_range.len();
-
-                    if num_range != (0..0) {
-                        // include a trailing si unit
-                        if selector.settings.mode == SortMode::HumanNumeric
-                            && self.line[selection.end..initial_selection.end]
-                                .starts_with(&['k', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'][..])
-                        {
-                            selection.end += 1;
-                        }
-
-                        // include leading zeroes, a leading minus or a leading decimal point
-                        while self.line[initial_selection.start..selection.start]
-                            .ends_with(&['-', '0', '.'][..])
-                        {
-                            selection.start -= 1;
-                        }
-                    } else {
-                        // This was not a valid number.
-                        // Report no match at the first non-whitespace character.
-                        let leading_whitespace = self.line[selection.clone()]
-                            .find(|c: char| !c.is_whitespace())
-                            .unwrap_or(0);
-                        selection.start += leading_whitespace;
-                        selection.end += leading_whitespace;
-                    }
-                }
-                SortMode::GeneralNumeric => {
-                    let initial_selection = &self.line[selection.clone()];
-
-                    let leading = get_leading_gen(initial_selection);
-
-                    // Shorten selection to leading.
-                    selection.start += leading.start;
-                    selection.end = selection.start + leading.len();
-                }
-                SortMode::Month => {
-                    let initial_selection = &self.line[selection.clone()];
-
-                    let mut month_chars = initial_selection
-                        .char_indices()
-                        .skip_while(|(_, c)| c.is_whitespace());
-
-                    let month = if month_parse(initial_selection) == Month::Unknown {
-                        // We failed to parse a month, which is equivalent to matching nothing.
-                        // Add the "no match for key" marker to the first non-whitespace character.
-                        let first_non_whitespace = month_chars.next();
-                        first_non_whitespace.map_or(
-                            initial_selection.len()..initial_selection.len(),
-                            |(idx, _)| idx..idx,
-                        )
-                    } else {
-                        // We parsed a month. Match the first three non-whitespace characters, which must be the month we parsed.
-                        month_chars.next().unwrap().0
-                            ..month_chars
-                                .nth(2)
-                                .map_or(initial_selection.len(), |(idx, _)| idx)
-                    };
-
-                    // Shorten selection to month.
-                    selection.start += month.start;
-                    selection.end = selection.start + month.len();
-                }
-                _ => {}
-            }
-
-            write!(
-                writer,
-                "{}",
-                " ".repeat(UnicodeWidthStr::width(&line[..selection.start]))
-            )?;
-
-            if selection.is_empty() {
-                writeln!(writer, "^ no match for key")?;
-            } else {
-                writeln!(
-                    writer,
-                    "{}",
-                    "_".repeat(UnicodeWidthStr::width(&line[selection]))
-                )?;
-            }
-        }
-        if settings.mode != SortMode::Random
-            && !settings.stable
-            && !settings.unique
-            && (settings.dictionary_order
-                || settings.ignore_leading_blanks
-                || settings.ignore_case
-                || settings.ignore_non_printing
-                || settings.mode != SortMode::Default
-                || settings
-                    .selectors
-                    .last()
-                    .map_or(true, |selector| selector != &Default::default()))
-        {
-            // A last resort comparator is in use, underline the whole line.
-            if self.line.is_empty() {
-                writeln!(writer, "^ no match for key")?;
-            } else {
-                writeln!(
-                    writer,
-                    "{}",
-                    "_".repeat(UnicodeWidthStr::width(line.as_str()))
-                )?;
-            }
-        }
-        Ok(())
-    }
-}
-
-/// Tokenize a line into fields. The result is stored into `token_buffer`.
-fn tokenize(line: &str, separator: Option<char>, token_buffer: &mut Vec<Field>) {
-    assert!(token_buffer.is_empty());
-    if let Some(separator) = separator {
-        tokenize_with_separator(line, separator, token_buffer)
-    } else {
-        tokenize_default(line, token_buffer)
-    }
-}
-
-/// By default fields are separated by the first whitespace after non-whitespace.
-/// Whitespace is included in fields at the start.
-/// The result is stored into `token_buffer`.
-fn tokenize_default(line: &str, token_buffer: &mut Vec<Field>) {
-    token_buffer.push(0..0);
-    // pretend that there was whitespace in front of the line
-    let mut previous_was_whitespace = true;
-    for (idx, char) in line.char_indices() {
-        if char.is_whitespace() {
-            if !previous_was_whitespace {
-                token_buffer.last_mut().unwrap().end = idx;
-                token_buffer.push(idx..0);
-            }
-            previous_was_whitespace = true;
-        } else {
-            previous_was_whitespace = false;
-        }
-    }
-    token_buffer.last_mut().unwrap().end = line.len();
-}
-
-/// Split between separators. These separators are not included in fields.
-/// The result is stored into `token_buffer`.
-fn tokenize_with_separator(line: &str, separator: char, token_buffer: &mut Vec<Field>) {
-    let separator_indices =
-        line.char_indices()
-            .filter_map(|(i, c)| if c == separator { Some(i) } else { None });
-    let mut start = 0;
-    for sep_idx in separator_indices {
-        token_buffer.push(start..sep_idx);
-        start = sep_idx + 1;
-    }
-    if start < line.len() {
-        token_buffer.push(start..line.len());
-    }
-}
-
-#[derive(Clone, PartialEq, Debug)]
-struct KeyPosition {
-    /// 1-indexed, 0 is invalid.
-    field: usize,
-    /// 1-indexed, 0 is end of field.
-    char: usize,
-    ignore_blanks: bool,
-}
-
-impl KeyPosition {
-    fn new(key: &str, default_char_index: usize, ignore_blanks: bool) -> Result<Self, String> {
-        let mut field_and_char = key.split('.');
-
-        let field = field_and_char
-            .next()
-            .ok_or_else(|| format!("invalid key {}", key.quote()))?;
-        let char = field_and_char.next();
-
-        let field = field
-            .parse()
-            .map_err(|e| format!("failed to parse field index {}: {}", field.quote(), e))?;
-        if field == 0 {
-            return Err("field index can not be 0".to_string());
-        }
-
-        let char = char.map_or(Ok(default_char_index), |char| {
-            char.parse()
-                .map_err(|e| format!("failed to parse character index {}: {}", char.quote(), e))
-        })?;
-
-        Ok(Self {
-            field,
-            char,
-            ignore_blanks,
-        })
-    }
-}
-
-impl Default for KeyPosition {
-    fn default() -> Self {
-        KeyPosition {
-            field: 1,
-            char: 1,
-            ignore_blanks: false,
-        }
-    }
-}
-
-#[derive(Clone, PartialEq, Debug, Default)]
-struct FieldSelector {
-    from: KeyPosition,
-    to: Option<KeyPosition>,
-    settings: KeySettings,
-    needs_tokens: bool,
-    // Whether this selector operates on a sub-slice of a line.
-    // Selections are therefore not needed when this selector matches the whole line
-    // or the sort mode is general-numeric.
-    needs_selection: bool,
-}
-
-impl FieldSelector {
-    /// Splits this position into the actual position and the attached options.
-    fn split_key_options(position: &str) -> (&str, &str) {
-        if let Some((options_start, _)) = position.char_indices().find(|(_, c)| c.is_alphabetic()) {
-            position.split_at(options_start)
-        } else {
-            (position, "")
-        }
-    }
-
-    fn parse(key: &str, global_settings: &GlobalSettings) -> UResult<Self> {
-        let mut from_to = key.split(',');
-        let (from, from_options) = Self::split_key_options(from_to.next().unwrap());
-        let to = from_to.next().map(Self::split_key_options);
-        let options_are_empty = from_options.is_empty() && matches!(to, None | Some((_, "")));
-
-        if options_are_empty {
-            // Inherit the global settings if there are no options attached to this key.
-            (|| {
-                // This would be ideal for a try block, I think. In the meantime this closure allows
-                // to use the `?` operator here.
-                Self::new(
-                    KeyPosition::new(from, 1, global_settings.ignore_leading_blanks)?,
-                    to.map(|(to, _)| {
-                        KeyPosition::new(to, 0, global_settings.ignore_leading_blanks)
-                    })
-                    .transpose()?,
-                    KeySettings::from(global_settings),
-                )
-            })()
-        } else {
-            // Do not inherit from `global_settings`, as there are options attached to this key.
-            Self::parse_with_options((from, from_options), to)
-        }
-        .map_err(|msg| {
-            SortError::ParseKeyError {
-                key: key.to_owned(),
-                msg,
-            }
-            .into()
-        })
-    }
-
-    fn parse_with_options(
-        (from, from_options): (&str, &str),
-        to: Option<(&str, &str)>,
-    ) -> Result<Self, String> {
-        /// Applies `options` to `key_settings`, returning if the 'b'-flag (ignore blanks) was present.
-        fn parse_key_settings(
-            options: &str,
-            key_settings: &mut KeySettings,
-        ) -> Result<bool, String> {
-            let mut ignore_blanks = false;
-            for option in options.chars() {
-                match option {
-                    'M' => key_settings.set_sort_mode(SortMode::Month)?,
-                    'b' => ignore_blanks = true,
-                    'd' => key_settings.set_dictionary_order()?,
-                    'f' => key_settings.ignore_case = true,
-                    'g' => key_settings.set_sort_mode(SortMode::GeneralNumeric)?,
-                    'h' => key_settings.set_sort_mode(SortMode::HumanNumeric)?,
-                    'i' => key_settings.set_ignore_non_printing()?,
-                    'n' => key_settings.set_sort_mode(SortMode::Numeric)?,
-                    'R' => key_settings.set_sort_mode(SortMode::Random)?,
-                    'r' => key_settings.reverse = true,
-                    'V' => key_settings.set_sort_mode(SortMode::Version)?,
-                    c => return Err(format!("invalid option: '{}'", c)),
-                }
-            }
-            Ok(ignore_blanks)
-        }
-
-        let mut key_settings = KeySettings::default();
-        let from = parse_key_settings(from_options, &mut key_settings)
-            .map(|ignore_blanks| KeyPosition::new(from, 1, ignore_blanks))??;
-        let to = if let Some((to, to_options)) = to {
-            Some(
-                parse_key_settings(to_options, &mut key_settings)
-                    .map(|ignore_blanks| KeyPosition::new(to, 0, ignore_blanks))??,
-            )
-        } else {
-            None
-        };
-        Self::new(from, to, key_settings)
-    }
-
-    fn new(
-        from: KeyPosition,
-        to: Option<KeyPosition>,
-        settings: KeySettings,
-    ) -> Result<Self, String> {
-        if from.char == 0 {
-            Err("invalid character index 0 for the start position of a field".to_string())
-        } else {
-            Ok(Self {
-                needs_selection: (from.field != 1
-                    || from.char != 1
-                    || to.is_some()
-                    || matches!(settings.mode, SortMode::Numeric | SortMode::HumanNumeric)
-                    || from.ignore_blanks)
-                    && !matches!(settings.mode, SortMode::GeneralNumeric),
-                needs_tokens: from.field != 1 || from.char == 0 || to.is_some(),
-                from,
-                to,
-                settings,
-            })
-        }
-    }
-
-    /// Get the selection that corresponds to this selector for the line.
-    /// If needs_fields returned false, tokens may be empty.
-    fn get_selection<'a>(&self, line: &'a str, tokens: &[Field]) -> Selection<'a> {
-        // `get_range` expects `None` when we don't need tokens and would get confused by an empty vector.
-        let tokens = if self.needs_tokens {
-            Some(tokens)
-        } else {
-            None
-        };
-        let mut range = &line[self.get_range(line, tokens)];
-        if self.settings.mode == SortMode::Numeric || self.settings.mode == SortMode::HumanNumeric {
-            // Parse NumInfo for this number.
-            let (info, num_range) = NumInfo::parse(
-                range,
-                NumInfoParseSettings {
-                    accept_si_units: self.settings.mode == SortMode::HumanNumeric,
-                    ..Default::default()
-                },
-            );
-            // Shorten the range to what we need to pass to numeric_str_cmp later.
-            range = &range[num_range];
-            Selection::WithNumInfo(range, info)
-        } else if self.settings.mode == SortMode::GeneralNumeric {
-            // Parse this number as f64, as this is the requirement for general numeric sorting.
-            Selection::AsF64(general_f64_parse(&range[get_leading_gen(range)]))
-        } else {
-            // This is not a numeric sort, so we don't need a NumCache.
-            Selection::Str(range)
-        }
-    }
-
-    /// Look up the range in the line that corresponds to this selector.
-    /// If needs_fields returned false, tokens must be None.
-    fn get_range<'a>(&self, line: &'a str, tokens: Option<&[Field]>) -> Range<usize> {
-        enum Resolution {
-            // The start index of the resolved character, inclusive
-            StartOfChar(usize),
-            // The end index of the resolved character, exclusive.
-            // This is only returned if the character index is 0.
-            EndOfChar(usize),
-            // The resolved character would be in front of the first character
-            TooLow,
-            // The resolved character would be after the last character
-            TooHigh,
-        }
-
-        // Get the index for this line given the KeyPosition
-        fn resolve_index(
-            line: &str,
-            tokens: Option<&[Field]>,
-            position: &KeyPosition,
-        ) -> Resolution {
-            if matches!(tokens, Some(tokens) if tokens.len() < position.field) {
-                Resolution::TooHigh
-            } else if position.char == 0 {
-                let end = tokens.unwrap()[position.field - 1].end;
-                if end == 0 {
-                    Resolution::TooLow
-                } else {
-                    Resolution::EndOfChar(end)
-                }
-            } else {
-                let mut idx = if position.field == 1 {
-                    // The first field always starts at 0.
-                    // We don't need tokens for this case.
-                    0
-                } else {
-                    tokens.unwrap()[position.field - 1].start
-                };
-                // strip blanks if needed
-                if position.ignore_blanks {
-                    idx += line[idx..]
-                        .char_indices()
-                        .find(|(_, c)| !c.is_whitespace())
-                        .map_or(line[idx..].len(), |(idx, _)| idx);
-                }
-                // apply the character index
-                idx += line[idx..]
-                    .char_indices()
-                    .nth(position.char - 1)
-                    .map_or(line[idx..].len(), |(idx, _)| idx);
-                if idx >= line.len() {
-                    Resolution::TooHigh
-                } else {
-                    Resolution::StartOfChar(idx)
-                }
-            }
-        }
-
-        match resolve_index(line, tokens, &self.from) {
-            Resolution::StartOfChar(from) => {
-                let to = self.to.as_ref().map(|to| resolve_index(line, tokens, to));
-
-                let mut range = match to {
-                    Some(Resolution::StartOfChar(mut to)) => {
-                        // We need to include the character at `to`.
-                        to += line[to..].chars().next().map_or(1, |c| c.len_utf8());
-                        from..to
-                    }
-                    Some(Resolution::EndOfChar(to)) => from..to,
-                    // If `to` was not given or the match would be after the end of the line,
-                    // match everything until the end of the line.
-                    None | Some(Resolution::TooHigh) => from..line.len(),
-                    // If `to` is before the start of the line, report no match.
-                    // This can happen if the line starts with a separator.
-                    Some(Resolution::TooLow) => 0..0,
-                };
-                if range.start > range.end {
-                    range.end = range.start;
-                }
-                range
-            }
-            Resolution::TooLow | Resolution::EndOfChar(_) => {
-                unreachable!("This should only happen if the field start index is 0, but that should already have caused an error.")
-            }
-            // While for comparisons it's only important that this is an empty slice,
-            // to produce accurate debug output we need to match an empty slice at the end of the line.
-            Resolution::TooHigh => line.len()..line.len(),
-        }
-    }
-}
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [FILE]...
-Write the sorted concatenation of all FILE(s) to standard output.
-Mandatory arguments for long options are mandatory for short options too.
-With no FILE, or when FILE is -, read standard input.",
-        uucore::execution_phrase()
-    )
-}
-
-/// Creates an `Arg` that conflicts with all other sort modes.
-fn make_sort_mode_arg<'a>(mode: &'a str, short: char, help: &'a str) -> Arg<'a> {
-    let mut arg = Arg::new(mode).short(short).long(mode).help(help);
-    for possible_mode in &options::modes::ALL_SORT_MODES {
-        if *possible_mode != mode {
-            arg = arg.conflicts_with(possible_mode);
-        }
-    }
-    arg
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-    let usage = usage();
-    let mut settings: GlobalSettings = Default::default();
-
-    let matches = match uu_app()
-        .override_usage(&usage[..])
-        .try_get_matches_from(args)
-    {
-        Ok(t) => t,
-        Err(e) => {
-            // not all clap "Errors" are because of a failure to parse arguments.
-            // "--version" also causes an Error to be returned, but we should not print to stderr
-            // nor return with a non-zero exit code in this case (we should print to stdout and return 0).
-            // This logic is similar to the code in clap, but we return 2 as the exit code in case of real failure
-            // (clap returns 1).
-            e.print().unwrap();
-            if e.use_stderr() {
-                set_exit_code(2);
-            }
-            return Ok(());
-        }
-    };
-
-    settings.debug = matches.is_present(options::DEBUG);
-
-    // check whether user specified a zero terminated list of files for input, otherwise read files from args
-    let mut files: Vec<OsString> = if matches.is_present(options::FILES0_FROM) {
-        let files0_from: Vec<OsString> = matches
-            .values_of_os(options::FILES0_FROM)
-            .map(|v| v.map(ToOwned::to_owned).collect())
-            .unwrap_or_default();
-
-        let mut files = Vec::new();
-        for path in &files0_from {
-            let reader = open(&path)?;
-            let buf_reader = BufReader::new(reader);
-            for line in buf_reader.split(b'\0').flatten() {
-                files.push(OsString::from(
-                    std::str::from_utf8(&line)
-                        .expect("Could not parse string from zero terminated input."),
-                ));
-            }
-        }
-        files
-    } else {
-        matches
-            .values_of_os(options::FILES)
-            .map(|v| v.map(ToOwned::to_owned).collect())
-            .unwrap_or_default()
-    };
-
-    settings.mode = if matches.is_present(options::modes::HUMAN_NUMERIC)
-        || matches.value_of(options::modes::SORT) == Some("human-numeric")
-    {
-        SortMode::HumanNumeric
-    } else if matches.is_present(options::modes::MONTH)
-        || matches.value_of(options::modes::SORT) == Some("month")
-    {
-        SortMode::Month
-    } else if matches.is_present(options::modes::GENERAL_NUMERIC)
-        || matches.value_of(options::modes::SORT) == Some("general-numeric")
-    {
-        SortMode::GeneralNumeric
-    } else if matches.is_present(options::modes::NUMERIC)
-        || matches.value_of(options::modes::SORT) == Some("numeric")
-    {
-        SortMode::Numeric
-    } else if matches.is_present(options::modes::VERSION)
-        || matches.value_of(options::modes::SORT) == Some("version")
-    {
-        SortMode::Version
-    } else if matches.is_present(options::modes::RANDOM)
-        || matches.value_of(options::modes::SORT) == Some("random")
-    {
-        settings.salt = Some(get_rand_string());
-        SortMode::Random
-    } else {
-        SortMode::Default
-    };
-
-    settings.dictionary_order = matches.is_present(options::DICTIONARY_ORDER);
-    settings.ignore_non_printing = matches.is_present(options::IGNORE_NONPRINTING);
-    if matches.is_present(options::PARALLEL) {
-        // "0" is default - threads = num of cores
-        settings.threads = matches
-            .value_of(options::PARALLEL)
-            .map(String::from)
-            .unwrap_or_else(|| "0".to_string());
-        env::set_var("RAYON_NUM_THREADS", &settings.threads);
-    }
-
-    settings.buffer_size =
-        matches
-            .value_of(options::BUF_SIZE)
-            .map_or(Ok(DEFAULT_BUF_SIZE), |s| {
-                GlobalSettings::parse_byte_count(s).map_err(|e| {
-                    USimpleError::new(2, format_error_message(e, s, options::BUF_SIZE))
-                })
-            })?;
-
-    let mut tmp_dir = TmpDirWrapper::new(
-        matches
-            .value_of(options::TMP_DIR)
-            .map(PathBuf::from)
-            .unwrap_or_else(env::temp_dir),
-    );
-
-    settings.compress_prog = matches.value_of(options::COMPRESS_PROG).map(String::from);
-
-    if let Some(n_merge) = matches.value_of(options::BATCH_SIZE) {
-        settings.merge_batch_size = n_merge.parse().map_err(|_| {
-            UUsageError::new(
-                2,
-                format!("invalid --batch-size argument {}", n_merge.quote()),
-            )
-        })?;
-    }
-
-    settings.zero_terminated = matches.is_present(options::ZERO_TERMINATED);
-    settings.merge = matches.is_present(options::MERGE);
-
-    settings.check = matches.is_present(options::check::CHECK);
-    if matches.is_present(options::check::CHECK_SILENT)
-        || matches!(
-            matches.value_of(options::check::CHECK),
-            Some(options::check::SILENT) | Some(options::check::QUIET)
-        )
-    {
-        settings.check_silent = true;
-        settings.check = true;
-    };
-
-    settings.ignore_case = matches.is_present(options::IGNORE_CASE);
-
-    settings.ignore_leading_blanks = matches.is_present(options::IGNORE_LEADING_BLANKS);
-
-    settings.reverse = matches.is_present(options::REVERSE);
-    settings.stable = matches.is_present(options::STABLE);
-    settings.unique = matches.is_present(options::UNIQUE);
-
-    if files.is_empty() {
-        /* if no file, default to stdin */
-        files.push("-".to_string().into());
-    } else if settings.check && files.len() != 1 {
-        return Err(UUsageError::new(
-            2,
-            format!("extra operand {} not allowed with -c", files[1].quote()),
-        ));
-    }
-
-    if let Some(arg) = matches.value_of_os(options::SEPARATOR) {
-        let mut separator = arg.to_str().ok_or_else(|| {
-            UUsageError::new(
-                2,
-                format!("separator is not valid unicode: {}", arg.quote()),
-            )
-        })?;
-        if separator == "\\0" {
-            separator = "\0";
-        }
-        // This rejects non-ASCII codepoints, but perhaps we don't have to.
-        // On the other hand GNU accepts any single byte, valid unicode or not.
-        // (Supporting multi-byte chars would require changes in tokenize_with_separator().)
-        if separator.len() != 1 {
-            return Err(UUsageError::new(
-                2,
-                format!(
-                    "separator must be exactly one character long: {}",
-                    separator.quote()
-                ),
-            ));
-        }
-        settings.separator = Some(separator.chars().next().unwrap())
-    }
-
-    if let Some(values) = matches.values_of(options::KEY) {
-        for value in values {
-            let selector = FieldSelector::parse(value, &settings)?;
-            if selector.settings.mode == SortMode::Random && settings.salt.is_none() {
-                settings.salt = Some(get_rand_string());
-            }
-            settings.selectors.push(selector);
-        }
-    }
-
-    if !matches.is_present(options::KEY) {
-        // add a default selector matching the whole line
-        let key_settings = KeySettings::from(&settings);
-        settings.selectors.push(
-            FieldSelector::new(
-                KeyPosition {
-                    field: 1,
-                    char: 1,
-                    ignore_blanks: key_settings.ignore_blanks,
-                },
-                None,
-                key_settings,
-            )
-            .unwrap(),
-        );
-    }
-
-    // Verify that we can open all input files.
-    // It is the correct behavior to close all files afterwards,
-    // and to reopen them at a later point. This is different from how the output file is handled,
-    // probably to prevent running out of file descriptors.
-    for file in &files {
-        open(file)?;
-    }
-
-    let output = Output::new(matches.value_of(options::OUTPUT))?;
-
-    settings.init_precomputed();
-
-    exec(&mut files, &settings, output, &mut tmp_dir)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::modes::SORT)
-                .long(options::modes::SORT)
-                .takes_value(true)
-                .possible_values(&[
-                    "general-numeric",
-                    "human-numeric",
-                    "month",
-                    "numeric",
-                    "version",
-                    "random",
-                ])
-                .conflicts_with_all(&options::modes::ALL_SORT_MODES),
-        )
-        .arg(make_sort_mode_arg(
-            options::modes::HUMAN_NUMERIC,
-            'h',
-            "compare according to human readable sizes, eg 1M > 100k",
-        ))
-        .arg(make_sort_mode_arg(
-            options::modes::MONTH,
-            'M',
-            "compare according to month name abbreviation",
-        ))
-        .arg(make_sort_mode_arg(
-            options::modes::NUMERIC,
-            'n',
-            "compare according to string numerical value",
-        ))
-        .arg(make_sort_mode_arg(
-            options::modes::GENERAL_NUMERIC,
-            'g',
-            "compare according to string general numerical value",
-        ))
-        .arg(make_sort_mode_arg(
-            options::modes::VERSION,
-            'V',
-            "Sort by SemVer version number, eg 1.12.2 > 1.1.2",
-        ))
-        .arg(make_sort_mode_arg(
-            options::modes::RANDOM,
-            'R',
-            "shuffle in random order",
-        ))
-        .arg(
-            Arg::new(options::DICTIONARY_ORDER)
-                .short('d')
-                .long(options::DICTIONARY_ORDER)
-                .help("consider only blanks and alphanumeric characters")
-                .conflicts_with_all(&[
-                    options::modes::NUMERIC,
-                    options::modes::GENERAL_NUMERIC,
-                    options::modes::HUMAN_NUMERIC,
-                    options::modes::MONTH,
-                ]),
-        )
-        .arg(
-            Arg::new(options::MERGE)
-                .short('m')
-                .long(options::MERGE)
-                .help("merge already sorted files; do not sort"),
-        )
-        .arg(
-            Arg::new(options::check::CHECK)
-                .short('c')
-                .long(options::check::CHECK)
-                .takes_value(true)
-                .require_equals(true)
-                .min_values(0)
-                .possible_values(&[
-                    options::check::SILENT,
-                    options::check::QUIET,
-                    options::check::DIAGNOSE_FIRST,
-                ])
-                .conflicts_with(options::OUTPUT)
-                .help("check for sorted input; do not sort"),
-        )
-        .arg(
-            Arg::new(options::check::CHECK_SILENT)
-                .short('C')
-                .long(options::check::CHECK_SILENT)
-                .conflicts_with(options::OUTPUT)
-                .help(
-                    "exit successfully if the given file is already sorted,\
-                and exit with status 1 otherwise.",
-                ),
-        )
-        .arg(
-            Arg::new(options::IGNORE_CASE)
-                .short('f')
-                .long(options::IGNORE_CASE)
-                .help("fold lower case to upper case characters"),
-        )
-        .arg(
-            Arg::new(options::IGNORE_NONPRINTING)
-                .short('i')
-                .long(options::IGNORE_NONPRINTING)
-                .help("ignore nonprinting characters")
-                .conflicts_with_all(&[
-                    options::modes::NUMERIC,
-                    options::modes::GENERAL_NUMERIC,
-                    options::modes::HUMAN_NUMERIC,
-                    options::modes::MONTH,
-                ]),
-        )
-        .arg(
-            Arg::new(options::IGNORE_LEADING_BLANKS)
-                .short('b')
-                .long(options::IGNORE_LEADING_BLANKS)
-                .help("ignore leading blanks when finding sort keys in each line"),
-        )
-        .arg(
-            Arg::new(options::OUTPUT)
-                .short('o')
-                .long(options::OUTPUT)
-                .help("write output to FILENAME instead of stdout")
-                .takes_value(true)
-                .value_name("FILENAME"),
-        )
-        .arg(
-            Arg::new(options::REVERSE)
-                .short('r')
-                .long(options::REVERSE)
-                .help("reverse the output"),
-        )
-        .arg(
-            Arg::new(options::STABLE)
-                .short('s')
-                .long(options::STABLE)
-                .help("stabilize sort by disabling last-resort comparison"),
-        )
-        .arg(
-            Arg::new(options::UNIQUE)
-                .short('u')
-                .long(options::UNIQUE)
-                .help("output only the first of an equal run"),
-        )
-        .arg(
-            Arg::new(options::KEY)
-                .short('k')
-                .long(options::KEY)
-                .help("sort by a key")
-                .long_help(LONG_HELP_KEYS)
-                .multiple_occurrences(true)
-                .number_of_values(1)
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::SEPARATOR)
-                .short('t')
-                .long(options::SEPARATOR)
-                .help("custom separator for -k")
-                .takes_value(true)
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::ZERO_TERMINATED)
-                .short('z')
-                .long(options::ZERO_TERMINATED)
-                .help("line delimiter is NUL, not newline"),
-        )
-        .arg(
-            Arg::new(options::PARALLEL)
-                .long(options::PARALLEL)
-                .help("change the number of threads running concurrently to NUM_THREADS")
-                .takes_value(true)
-                .value_name("NUM_THREADS"),
-        )
-        .arg(
-            Arg::new(options::BUF_SIZE)
-                .short('S')
-                .long(options::BUF_SIZE)
-                .help("sets the maximum SIZE of each segment in number of sorted items")
-                .takes_value(true)
-                .value_name("SIZE"),
-        )
-        .arg(
-            Arg::new(options::TMP_DIR)
-                .short('T')
-                .long(options::TMP_DIR)
-                .help("use DIR for temporaries, not $TMPDIR or /tmp")
-                .takes_value(true)
-                .value_name("DIR"),
-        )
-        .arg(
-            Arg::new(options::COMPRESS_PROG)
-                .long(options::COMPRESS_PROG)
-                .help("compress temporary files with PROG, decompress with PROG -d")
-                .long_help("PROG has to take input from stdin and output to stdout")
-                .value_name("PROG"),
-        )
-        .arg(
-            Arg::new(options::BATCH_SIZE)
-                .long(options::BATCH_SIZE)
-                .help("Merge at most N_MERGE inputs at once.")
-                .value_name("N_MERGE"),
-        )
-        .arg(
-            Arg::new(options::FILES0_FROM)
-                .long(options::FILES0_FROM)
-                .help("read input from the files specified by NUL-terminated NUL_FILES")
-                .takes_value(true)
-                .value_name("NUL_FILES")
-                .multiple_occurrences(true)
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::DEBUG)
-                .long(options::DEBUG)
-                .help("underline the parts of the line that are actually used for sorting"),
-        )
-        .arg(
-            Arg::new(options::FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .allow_invalid_utf8(true),
-        )
-}
-
-fn exec(
-    files: &mut [OsString],
-    settings: &GlobalSettings,
-    output: Output,
-    tmp_dir: &mut TmpDirWrapper,
-) -> UResult<()> {
-    if settings.merge {
-        let file_merger = merge::merge(files, settings, output.as_output_name(), tmp_dir)?;
-        file_merger.write_all(settings, output)
-    } else if settings.check {
-        if files.len() > 1 {
-            Err(UUsageError::new(2, "only one file allowed with -c"))
-        } else {
-            check::check(files.first().unwrap(), settings)
-        }
-    } else {
-        let mut lines = files.iter().map(open);
-        ext_sort(&mut lines, settings, output, tmp_dir)
-    }
-}
-
-fn sort_by<'a>(unsorted: &mut Vec<Line<'a>>, settings: &GlobalSettings, line_data: &LineData<'a>) {
-    if settings.stable || settings.unique {
-        unsorted.par_sort_by(|a, b| compare_by(a, b, settings, line_data, line_data))
-    } else {
-        unsorted.par_sort_unstable_by(|a, b| compare_by(a, b, settings, line_data, line_data))
-    }
-}
-
-fn compare_by<'a>(
-    a: &Line<'a>,
-    b: &Line<'a>,
-    global_settings: &GlobalSettings,
-    a_line_data: &LineData<'a>,
-    b_line_data: &LineData<'a>,
-) -> Ordering {
-    let mut selection_index = 0;
-    let mut num_info_index = 0;
-    let mut parsed_float_index = 0;
-    for selector in &global_settings.selectors {
-        let (a_str, b_str) = if !selector.needs_selection {
-            // We can select the whole line.
-            (a.line, b.line)
-        } else {
-            let selections = (
-                a_line_data.selections
-                    [a.index * global_settings.precomputed.selections_per_line + selection_index],
-                b_line_data.selections
-                    [b.index * global_settings.precomputed.selections_per_line + selection_index],
-            );
-            selection_index += 1;
-            selections
-        };
-
-        let settings = &selector.settings;
-
-        let cmp: Ordering = match settings.mode {
-            SortMode::Random => {
-                // check if the two strings are equal
-                if custom_str_cmp(
-                    a_str,
-                    b_str,
-                    settings.ignore_non_printing,
-                    settings.dictionary_order,
-                    settings.ignore_case,
-                ) == Ordering::Equal
-                {
-                    Ordering::Equal
-                } else {
-                    // Only if they are not equal compare by the hash
-                    random_shuffle(a_str, b_str, &global_settings.salt.unwrap())
-                }
-            }
-            SortMode::Numeric => {
-                let a_num_info = &a_line_data.num_infos
-                    [a.index * global_settings.precomputed.num_infos_per_line + num_info_index];
-                let b_num_info = &b_line_data.num_infos
-                    [b.index * global_settings.precomputed.num_infos_per_line + num_info_index];
-                num_info_index += 1;
-                numeric_str_cmp((a_str, a_num_info), (b_str, b_num_info))
-            }
-            SortMode::HumanNumeric => {
-                let a_num_info = &a_line_data.num_infos
-                    [a.index * global_settings.precomputed.num_infos_per_line + num_info_index];
-                let b_num_info = &b_line_data.num_infos
-                    [b.index * global_settings.precomputed.num_infos_per_line + num_info_index];
-                num_info_index += 1;
-                human_numeric_str_cmp((a_str, a_num_info), (b_str, b_num_info))
-            }
-            SortMode::GeneralNumeric => {
-                let a_float = &a_line_data.parsed_floats
-                    [a.index * global_settings.precomputed.floats_per_line + parsed_float_index];
-                let b_float = &b_line_data.parsed_floats
-                    [b.index * global_settings.precomputed.floats_per_line + parsed_float_index];
-                parsed_float_index += 1;
-                general_numeric_compare(a_float, b_float)
-            }
-            SortMode::Month => month_compare(a_str, b_str),
-            SortMode::Version => version_cmp(a_str, b_str),
-            SortMode::Default => custom_str_cmp(
-                a_str,
-                b_str,
-                settings.ignore_non_printing,
-                settings.dictionary_order,
-                settings.ignore_case,
-            ),
-        };
-        if cmp != Ordering::Equal {
-            return if settings.reverse { cmp.reverse() } else { cmp };
-        }
-    }
-
-    // Call "last resort compare" if all selectors returned Equal
-    let cmp = if global_settings.mode == SortMode::Random
-        || global_settings.stable
-        || global_settings.unique
-    {
-        Ordering::Equal
-    } else {
-        a.line.cmp(b.line)
-    };
-
-    if global_settings.reverse {
-        cmp.reverse()
-    } else {
-        cmp
-    }
-}
-
-// This function cleans up the initial comparison done by leading_num_common for a general numeric compare.
-// In contrast to numeric compare, GNU general numeric/FP sort *should* recognize positive signs and
-// scientific notation, so we strip those lines only after the end of the following numeric string.
-// For example, 5e10KFD would be 5e10 or 5x10^10 and +10000HFKJFK would become 10000.
-fn get_leading_gen(input: &str) -> Range<usize> {
-    let trimmed = input.trim_start();
-    let leading_whitespace_len = input.len() - trimmed.len();
-
-    // check for inf, -inf and nan
-    for allowed_prefix in &["inf", "-inf", "nan"] {
-        if trimmed.is_char_boundary(allowed_prefix.len())
-            && trimmed[..allowed_prefix.len()].eq_ignore_ascii_case(allowed_prefix)
-        {
-            return leading_whitespace_len..(leading_whitespace_len + allowed_prefix.len());
-        }
-    }
-    // Make this iter peekable to see if next char is numeric
-    let mut char_indices = itertools::peek_nth(trimmed.char_indices());
-
-    let first = char_indices.peek();
-
-    if matches!(first, Some((_, NEGATIVE)) | Some((_, POSITIVE))) {
-        char_indices.next();
-    }
-
-    let mut had_e_notation = false;
-    let mut had_decimal_pt = false;
-    while let Some((idx, c)) = char_indices.next() {
-        if c.is_ascii_digit() {
-            continue;
-        }
-        if c == DECIMAL_PT && !had_decimal_pt && !had_e_notation {
-            had_decimal_pt = true;
-            continue;
-        }
-        if (c == 'e' || c == 'E') && !had_e_notation {
-            // we can only consume the 'e' if what follow is either a digit, or a sign followed by a digit.
-            if let Some(&(_, next_char)) = char_indices.peek() {
-                if (next_char == '+' || next_char == '-')
-                    && matches!(
-                        char_indices.peek_nth(2),
-                        Some((_, c)) if c.is_ascii_digit()
-                    )
-                {
-                    // Consume the sign. The following digits will be consumed by the main loop.
-                    char_indices.next();
-                    had_e_notation = true;
-                    continue;
-                }
-                if next_char.is_ascii_digit() {
-                    had_e_notation = true;
-                    continue;
-                }
-            }
-        }
-        return leading_whitespace_len..(leading_whitespace_len + idx);
-    }
-    leading_whitespace_len..input.len()
-}
-
-#[derive(Copy, Clone, PartialEq, PartialOrd, Debug)]
-pub enum GeneralF64ParseResult {
-    Invalid,
-    NaN,
-    NegInfinity,
-    Number(f64),
-    Infinity,
-}
-
-/// Parse the beginning string into a GeneralF64ParseResult.
-/// Using a GeneralF64ParseResult instead of f64 is necessary to correctly order floats.
-#[inline(always)]
-fn general_f64_parse(a: &str) -> GeneralF64ParseResult {
-    // The actual behavior here relies on Rust's implementation of parsing floating points.
-    // For example "nan", "inf" (ignoring the case) and "infinity" are only parsed to floats starting from 1.53.
-    // TODO: Once our minimum supported Rust version is 1.53 or above, we should add tests for those cases.
-    match a.parse::<f64>() {
-        Ok(a) if a.is_nan() => GeneralF64ParseResult::NaN,
-        Ok(a) if a == std::f64::NEG_INFINITY => GeneralF64ParseResult::NegInfinity,
-        Ok(a) if a == std::f64::INFINITY => GeneralF64ParseResult::Infinity,
-        Ok(a) => GeneralF64ParseResult::Number(a),
-        Err(_) => GeneralF64ParseResult::Invalid,
-    }
-}
-
-/// Compares two floats, with errors and non-numerics assumed to be -inf.
-/// Stops coercing at the first non-numeric char.
-/// We explicitly need to convert to f64 in this case.
-fn general_numeric_compare(a: &GeneralF64ParseResult, b: &GeneralF64ParseResult) -> Ordering {
-    a.partial_cmp(b).unwrap()
-}
-
-fn get_rand_string() -> [u8; 16] {
-    thread_rng().sample(rand::distributions::Standard)
-}
-
-fn get_hash<T: Hash>(t: &T) -> u64 {
-    let mut s: FnvHasher = Default::default();
-    t.hash(&mut s);
-    s.finish()
-}
-
-fn random_shuffle(a: &str, b: &str, salt: &[u8]) -> Ordering {
-    let da = get_hash(&(a, salt));
-    let db = get_hash(&(b, salt));
-    da.cmp(&db)
-}
-
-#[derive(Eq, Ord, PartialEq, PartialOrd, Clone, Copy)]
-enum Month {
-    Unknown,
-    January,
-    February,
-    March,
-    April,
-    May,
-    June,
-    July,
-    August,
-    September,
-    October,
-    November,
-    December,
-}
-
-/// Parse the beginning string into a Month, returning Month::Unknown on errors.
-fn month_parse(line: &str) -> Month {
-    let line = line.trim();
-
-    const MONTHS: [(&str, Month); 12] = [
-        ("JAN", Month::January),
-        ("FEB", Month::February),
-        ("MAR", Month::March),
-        ("APR", Month::April),
-        ("MAY", Month::May),
-        ("JUN", Month::June),
-        ("JUL", Month::July),
-        ("AUG", Month::August),
-        ("SEP", Month::September),
-        ("OCT", Month::October),
-        ("NOV", Month::November),
-        ("DEC", Month::December),
-    ];
-
-    for (month_str, month) in &MONTHS {
-        if line.is_char_boundary(month_str.len())
-            && line[..month_str.len()].eq_ignore_ascii_case(month_str)
-        {
-            return *month;
-        }
-    }
-
-    Month::Unknown
-}
-
-fn month_compare(a: &str, b: &str) -> Ordering {
-    #![allow(clippy::comparison_chain)]
-    let ma = month_parse(a);
-    let mb = month_parse(b);
-
-    if ma > mb {
-        Ordering::Greater
-    } else if ma < mb {
-        Ordering::Less
-    } else {
-        Ordering::Equal
-    }
-}
-
-fn print_sorted<'a, T: Iterator<Item = &'a Line<'a>>>(
-    iter: T,
-    settings: &GlobalSettings,
-    output: Output,
-) {
-    let mut writer = output.into_write();
-    for line in iter {
-        line.print(&mut writer, settings);
-    }
-}
-
-fn open(path: impl AsRef<OsStr>) -> UResult<Box<dyn Read + Send>> {
-    let path = path.as_ref();
-    if path == "-" {
-        let stdin = stdin();
-        return Ok(Box::new(stdin) as Box<dyn Read + Send>);
-    }
-
-    let path = Path::new(path);
-
-    match File::open(path) {
-        Ok(f) => Ok(Box::new(f) as Box<dyn Read + Send>),
-        Err(error) => Err(SortError::ReadFailed {
-            path: path.to_owned(),
-            error,
-        }
-        .into()),
-    }
-}
-
-fn format_error_message(error: ParseSizeError, s: &str, option: &str) -> String {
-    // NOTE:
-    // GNU's sort echos affected flag, -S or --buffer-size, depending user's selection
-    // GNU's sort does distinguish between "invalid (suffix in) argument"
-    match error {
-        ParseSizeError::ParseFailure(_) => format!("invalid --{} argument {}", option, s.quote()),
-        ParseSizeError::SizeTooBig(_) => format!("--{} argument {} too large", option, s.quote()),
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use super::*;
-
-    fn tokenize_helper(line: &str, separator: Option<char>) -> Vec<Field> {
-        let mut buffer = vec![];
-        tokenize(line, separator, &mut buffer);
-        buffer
-    }
-
-    #[test]
-    fn test_get_hash() {
-        let a = "Ted".to_string();
-
-        assert_eq!(2_646_829_031_758_483_623, get_hash(&a));
-    }
-
-    #[test]
-    fn test_random_shuffle() {
-        let a = "Ted";
-        let b = "Ted";
-        let c = get_rand_string();
-
-        assert_eq!(Ordering::Equal, random_shuffle(a, b, &c));
-    }
-
-    #[test]
-    fn test_month_compare() {
-        let a = "JaN";
-        let b = "OCt";
-
-        assert_eq!(Ordering::Less, month_compare(a, b));
-    }
-    #[test]
-    fn test_version_compare() {
-        let a = "1.2.3-alpha2";
-        let b = "1.4.0";
-
-        assert_eq!(Ordering::Less, version_cmp(a, b));
-    }
-
-    #[test]
-    fn test_random_compare() {
-        let a = "9";
-        let b = "9";
-        let c = get_rand_string();
-
-        assert_eq!(Ordering::Equal, random_shuffle(a, b, &c));
-    }
-
-    #[test]
-    fn test_tokenize_fields() {
-        let line = "foo bar b    x";
-        assert_eq!(tokenize_helper(line, None), vec![0..3, 3..7, 7..9, 9..14,],);
-    }
-
-    #[test]
-    fn test_tokenize_fields_leading_whitespace() {
-        let line = "    foo bar b    x";
-        assert_eq!(
-            tokenize_helper(line, None),
-            vec![0..7, 7..11, 11..13, 13..18,]
-        );
-    }
-
-    #[test]
-    fn test_tokenize_fields_custom_separator() {
-        let line = "aaa foo bar b    x";
-        assert_eq!(
-            tokenize_helper(line, Some('a')),
-            vec![0..0, 1..1, 2..2, 3..9, 10..18,]
-        );
-    }
-
-    #[test]
-    fn test_tokenize_fields_trailing_custom_separator() {
-        let line = "a";
-        assert_eq!(tokenize_helper(line, Some('a')), vec![0..0]);
-        let line = "aa";
-        assert_eq!(tokenize_helper(line, Some('a')), vec![0..0, 1..1]);
-        let line = "..a..a";
-        assert_eq!(tokenize_helper(line, Some('a')), vec![0..2, 3..5]);
-    }
-
-    #[test]
-    #[cfg(target_pointer_width = "64")]
-    fn test_line_size() {
-        // We should make sure to not regress the size of the Line struct because
-        // it is unconditional overhead for every line we sort.
-        assert_eq!(std::mem::size_of::<Line>(), 24);
-    }
-
-    #[test]
-    fn test_parse_byte_count() {
-        let valid_input = [
-            ("0", 0),
-            ("50K", 50 * 1024),
-            ("50k", 50 * 1024),
-            ("1M", 1024 * 1024),
-            ("100M", 100 * 1024 * 1024),
-            #[cfg(not(target_pointer_width = "32"))]
-            ("1000G", 1000 * 1024 * 1024 * 1024),
-            #[cfg(not(target_pointer_width = "32"))]
-            ("10T", 10 * 1024 * 1024 * 1024 * 1024),
-            ("1b", 1),
-            ("1024b", 1024),
-            ("1024Mb", 1024 * 1024 * 1024), // NOTE: This might not be how GNU `sort` behaves for 'Mb'
-            ("1", 1024),                    // K is default
-            ("50", 50 * 1024),
-            ("K", 1024),
-            ("k", 1024),
-            ("m", 1024 * 1024),
-            #[cfg(not(target_pointer_width = "32"))]
-            ("E", 1024 * 1024 * 1024 * 1024 * 1024 * 1024),
-        ];
-        for (input, expected_output) in &valid_input {
-            assert_eq!(
-                GlobalSettings::parse_byte_count(input),
-                Ok(*expected_output)
-            );
-        }
-
-        // SizeTooBig
-        let invalid_input = ["500E", "1Y"];
-        for input in &invalid_input {
-            #[cfg(not(target_pointer_width = "128"))]
-            assert!(GlobalSettings::parse_byte_count(input).is_err());
-        }
-
-        // ParseFailure
-        let invalid_input = ["nonsense", "1B", "B", "b", "p", "e", "z", "y"];
-        for input in &invalid_input {
-            assert!(GlobalSettings::parse_byte_count(input).is_err());
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sort/tmp_dir.rs.html b/src/uu_sort/tmp_dir.rs.html deleted file mode 100644 index 74e35a374..000000000 --- a/src/uu_sort/tmp_dir.rs.html +++ /dev/null @@ -1,174 +0,0 @@ -tmp_dir.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-
use std::{
-    fs::File,
-    path::{Path, PathBuf},
-    sync::{Arc, Mutex},
-};
-
-use tempfile::TempDir;
-use uucore::error::{UResult, USimpleError};
-
-use crate::SortError;
-
-/// A wrapper around TempDir that may only exist once in a process.
-///
-/// `TmpDirWrapper` handles the allocation of new temporary files in this temporary directory and
-/// deleting the whole directory when `SIGINT` is received. Creating a second `TmpDirWrapper` will
-/// fail because `ctrlc::set_handler()` fails when there's already a handler.
-/// The directory is only created once the first file is requested.
-pub struct TmpDirWrapper {
-    temp_dir: Option<TempDir>,
-    parent_path: PathBuf,
-    size: usize,
-    lock: Arc<Mutex<()>>,
-}
-
-impl TmpDirWrapper {
-    pub fn new(path: PathBuf) -> Self {
-        Self {
-            parent_path: path,
-            size: 0,
-            temp_dir: None,
-            lock: Default::default(),
-        }
-    }
-
-    fn init_tmp_dir(&mut self) -> UResult<()> {
-        assert!(self.temp_dir.is_none());
-        assert_eq!(self.size, 0);
-        self.temp_dir = Some(
-            tempfile::Builder::new()
-                .prefix("uutils_sort")
-                .tempdir_in(&self.parent_path)
-                .map_err(|_| SortError::TmpDirCreationFailed)?,
-        );
-
-        let path = self.temp_dir.as_ref().unwrap().path().to_owned();
-        let lock = self.lock.clone();
-        ctrlc::set_handler(move || {
-            // Take the lock so that `next_file_path` returns no new file path.
-            let _lock = lock.lock().unwrap();
-            if let Err(e) = remove_tmp_dir(&path) {
-                show_error!("failed to delete temporary directory: {}", e);
-            }
-            std::process::exit(2)
-        })
-        .map_err(|e| USimpleError::new(2, format!("failed to set up signal handler: {}", e)))
-    }
-
-    pub fn next_file(&mut self) -> UResult<(File, PathBuf)> {
-        if self.temp_dir.is_none() {
-            self.init_tmp_dir()?;
-        }
-
-        let _lock = self.lock.lock().unwrap();
-        let file_name = self.size.to_string();
-        self.size += 1;
-        let path = self.temp_dir.as_ref().unwrap().path().join(file_name);
-        Ok((
-            File::create(&path).map_err(|error| SortError::OpenTmpFileFailed { error })?,
-            path,
-        ))
-    }
-}
-
-/// Remove the directory at `path` by deleting its child files and then itself.
-/// Errors while deleting child files are ignored.
-fn remove_tmp_dir(path: &Path) -> std::io::Result<()> {
-    if let Ok(read_dir) = std::fs::read_dir(&path) {
-        for file in read_dir.flatten() {
-            // if we fail to delete the file here it was probably deleted by another thread
-            // in the meantime, but that's ok.
-            let _ = std::fs::remove_file(file.path());
-        }
-    }
-    std::fs::remove_dir(path)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_split/filenames.rs.html b/src/uu_split/filenames.rs.html deleted file mode 100644 index 12d176f41..000000000 --- a/src/uu_split/filenames.rs.html +++ /dev/null @@ -1,1062 +0,0 @@ -filenames.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-// spell-checker:ignore zaaa zaab zzaaaa zzzaaaaa
-//! Compute filenames from a given index.
-//!
-//! The [`FilenameFactory`] can be used to convert a chunk index given
-//! as a [`usize`] to a filename for that chunk.
-//!
-//! # Examples
-//!
-//! Create filenames of the form `chunk_??.txt`:
-//!
-//! ```rust,ignore
-//! use crate::filenames::FilenameFactory;
-//!
-//! let prefix = "chunk_".to_string();
-//! let suffix = ".txt".to_string();
-//! let width = 2;
-//! let use_numeric_suffix = false;
-//! let factory = FilenameFactory::new(prefix, suffix, width, use_numeric_suffix);
-//!
-//! assert_eq!(factory.make(0).unwrap(), "chunk_aa.txt");
-//! assert_eq!(factory.make(10).unwrap(), "chunk_ak.txt");
-//! assert_eq!(factory.make(28).unwrap(), "chunk_bc.txt");
-//! ```
-
-/// Base 10 logarithm.
-fn log10(n: usize) -> usize {
-    (n as f64).log10() as usize
-}
-
-/// Base 26 logarithm.
-fn log26(n: usize) -> usize {
-    (n as f64).log(26.0) as usize
-}
-
-/// Convert a radix 10 number to a radix 26 number of the given width.
-///
-/// `n` is the radix 10 (that is, decimal) number to transform. This
-/// function returns a [`Vec`] of unsigned integers representing the
-/// digits, with the most significant digit first and the least
-/// significant digit last. The returned `Vec` is always of length
-/// `width`.
-///
-/// If the number `n` is too large to represent within `width` digits,
-/// then this function returns `None`.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use crate::filenames::to_radix_26;
-///
-/// assert_eq!(to_radix_26(20, 2), Some(vec![0, 20]));
-/// assert_eq!(to_radix_26(26, 2), Some(vec![1, 0]));
-/// assert_eq!(to_radix_26(30, 2), Some(vec![1, 4]));
-/// ```
-fn to_radix_26(mut n: usize, width: usize) -> Option<Vec<u8>> {
-    if width == 0 {
-        return None;
-    }
-    // Use the division algorithm to repeatedly compute the quotient
-    // and remainder of the number after division by the radix 26. The
-    // successive quotients are the digits in radix 26, from most
-    // significant to least significant.
-    let mut result = vec![];
-    for w in (0..width).rev() {
-        let divisor = 26_usize.pow(w as u32);
-        let (quotient, remainder) = (n / divisor, n % divisor);
-        n = remainder;
-        // If the quotient is equal to or greater than the radix, that
-        // means the number `n` requires a greater width to be able to
-        // represent it in radix 26.
-        if quotient >= 26 {
-            return None;
-        }
-        result.push(quotient as u8);
-    }
-    Some(result)
-}
-
-/// Convert a number between 0 and 25 into a lowercase ASCII character.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use crate::filenames::to_ascii_char;
-///
-/// assert_eq!(to_ascii_char(&0), Some('a'));
-/// assert_eq!(to_ascii_char(&25), Some('z'));
-/// assert_eq!(to_ascii_char(&26), None);
-/// ```
-fn to_ascii_char(n: &u8) -> Option<char> {
-    // TODO In Rust v1.52.0 or later, use `char::from_digit`:
-    // https://doc.rust-lang.org/std/primitive.char.html#method.from_digit
-    //
-    //     char::from_digit(*n as u32 + 10, 36)
-    //
-    // In that call, radix 36 is used because the characters in radix
-    // 36 are [0-9a-z]. We want to exclude the the first ten of those
-    // characters, so we add 10 to the number before conversion.
-    //
-    // Until that function is available, just add `n` to `b'a'` and
-    // cast to `char`.
-    if *n < 26 {
-        Some((b'a' + n) as char)
-    } else {
-        None
-    }
-}
-
-/// Fixed width alphabetic string representation of index `i`.
-///
-/// If `i` is greater than or equal to the number of lowercase ASCII
-/// strings that can be represented in the given `width`, then this
-/// function returns `None`.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use crate::filenames::str_prefix_fixed_width;
-///
-/// assert_eq!(str_prefix_fixed_width(0, 2).as_deref(), "aa");
-/// assert_eq!(str_prefix_fixed_width(675, 2).as_deref(), "zz");
-/// assert_eq!(str_prefix_fixed_width(676, 2), None);
-/// ```
-fn str_prefix_fixed_width(i: usize, width: usize) -> Option<String> {
-    to_radix_26(i, width)?.iter().map(to_ascii_char).collect()
-}
-
-/// Dynamically sized alphabetic string representation of index `i`.
-///
-/// The size of the returned string starts at two then grows by 2 if
-/// `i` is sufficiently large.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use crate::filenames::str_prefix;
-///
-/// assert_eq!(str_prefix(0), "aa");
-/// assert_eq!(str_prefix(649), "yz");
-/// assert_eq!(str_prefix(650), "zaaa");
-/// assert_eq!(str_prefix(651), "zaab");
-/// ```
-fn str_prefix(i: usize) -> Option<String> {
-    // This number tells us the order of magnitude of `i`, with a
-    // slight adjustment.
-    //
-    // We shift by 26 so that
-    //
-    // * if `i` is in the interval [0, 26^2 - 26), then `d` is 1,
-    // * if `i` is in the interval [26^2 - 26, 26^3 - 26), then `d` is 2,
-    // * if `i` is in the interval [26^3 - 26, 26^4 - 26), then `d` is 3,
-    //
-    // and so on. This will allow us to compute how many leading "z"
-    // characters need to appear in the string and how many characters
-    // to format to the right of those.
-    let d = log26(i + 26);
-
-    // This is the number of leading "z" characters.
-    //
-    // For values of `i` less than 26^2 - 26, the returned string is
-    // just the radix 26 representation of that number with a width of
-    // two (using the lowercase ASCII characters as the digits).
-    //
-    // * if `i` is 26^2 - 26, then the returned string is "zaa",
-    // * if `i` is 26^3 - 26, then the returned string is "zzaaaa",
-    // * if `i` is 26^4 - 26, then the returned string is "zzzaaaaa",
-    //
-    // and so on. As you can see, the number of leading "z"s there is
-    // linearly increasing by 1 for each order of magnitude.
-    let num_fill_chars = d - 1;
-
-    // This is the number of characters after the leading "z" characters.
-    let width = d + 1;
-
-    // This is the radix 10 number to render in radix 26, to the right
-    // of the leading "z"s.
-    let number = (i + 26) - 26_usize.pow(d as u32);
-
-    // This is the radix 26 number to render after the leading "z"s,
-    // collected in a `String`.
-    //
-    // For example, if `i` is 789, then `number` is 789 + 26 - 676,
-    // which equals 139. In radix 26 and assuming a `width` of 3, this
-    // number is
-    //
-    //     [0, 5, 9]
-    //
-    // with the most significant digit on the left and the least
-    // significant digit on the right. After translating to ASCII
-    // lowercase letters, this becomes "afj".
-    let digits = str_prefix_fixed_width(number, width)?;
-
-    // `empty` is just the empty string, to be displayed with a width
-    // of `num_fill_chars` and with blank spaces filled with the
-    // character "z".
-    //
-    // `digits` is as described in the previous comment.
-    Some(format!(
-        "{empty:z<num_fill_chars$}{digits}",
-        empty = "",
-        num_fill_chars = num_fill_chars,
-        digits = digits
-    ))
-}
-
-/// Fixed width numeric string representation of index `i`.
-///
-/// If `i` is greater than or equal to the number of numbers that can
-/// be represented in the given `width`, then this function returns
-/// `None`.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use crate::filenames::num_prefix_fixed_width;
-///
-/// assert_eq!(num_prefix_fixed_width(0, 2).as_deref(), "89");
-/// assert_eq!(num_prefix_fixed_width(99, 2).as_deref(), "9000");
-/// assert_eq!(num_prefix_fixed_width(100, 2), None);
-/// ```
-fn num_prefix_fixed_width(i: usize, width: usize) -> Option<String> {
-    let max = 10_usize.pow(width as u32);
-    if i >= max {
-        None
-    } else {
-        Some(format!("{i:0width$}", i = i, width = width))
-    }
-}
-
-/// Dynamically sized numeric string representation of index `i`.
-///
-/// The size of the returned string starts at two then grows by 2 if
-/// `i` is sufficiently large.
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// use crate::filenames::num_prefix;
-///
-/// assert_eq!(num_prefix(89), "89");
-/// assert_eq!(num_prefix(90), "9000");
-/// assert_eq!(num_prefix(91), "9001");
-/// ```
-fn num_prefix(i: usize) -> String {
-    // This number tells us the order of magnitude of `i`, with a
-    // slight adjustment.
-    //
-    // We shift by 10 so that
-    //
-    // * if `i` is in the interval [0, 90), then `d` is 1,
-    // * if `i` is in the interval [90, 990), then `d` is 2,
-    // * if `i` is in the interval [990, 9990), then `d` is 3,
-    //
-    // and so on. This will allow us to compute how many leading "9"
-    // characters need to appear in the string and how many digits to
-    // format to the right of those.
-    let d = log10(i + 10);
-
-    // This is the number of leading "9" characters.
-    //
-    // For values of `i` less than 90, the returned string is just
-    // that number padded by a 0 to ensure the width is 2, but
-    //
-    // * if `i` is 90, then the returned string is "900",
-    // * if `i` is 990, then the returned string is "990000",
-    // * if `i` is 9990, then the returned string is "99900000",
-    //
-    // and so on. As you can see, the number of leading 9s there is
-    // linearly increasing by 1 for each order of magnitude.
-    let num_fill_chars = d - 1;
-
-    // This is the number of characters after the leading "9" characters.
-    let width = d + 1;
-
-    // This is the number to render after the leading "9"s.
-    //
-    // For example, if `i` is 5732, then the returned string is
-    // "994742". After the two "9" characters is the number 4742,
-    // which equals 5732 + 10 - 1000.
-    let number = (i + 10) - 10_usize.pow(d as u32);
-
-    // `empty` is just the empty string, to be displayed with a width
-    // of `num_fill_chars` and with blank spaces filled with the
-    // character "9".
-    //
-    // `number` is the next remaining part of the number to render;
-    // for small numbers we pad with 0 and enforce a minimum width.
-    format!(
-        "{empty:9<num_fill_chars$}{number:0width$}",
-        empty = "",
-        num_fill_chars = num_fill_chars,
-        number = number,
-        width = width
-    )
-}
-
-/// Compute filenames from a given index.
-///
-/// The [`FilenameFactory`] can be used to convert a chunk index given
-/// as a [`usize`] to a filename for that chunk.
-///
-/// The general form of filenames produced by instances of this struct is
-///
-/// ```ignore
-/// {prefix}{suffix}{additional_suffix}
-/// ```
-///
-/// If `suffix_length` is a positive integer, then the `suffix`
-/// portion will be of exactly that length. If `suffix_length` is 0,
-/// then the length of the `suffix` portion will grow dynamically to
-/// accommodate any chunk index. In that case, the length begins at 2
-/// and increases by 2 when the chunk index becomes sufficiently
-/// large.
-///
-/// If `use_numeric_suffix` is `true`, then the `suffix` portion will
-/// be nonnegative integers. If `false`, then the `suffix` will
-/// comprise lowercase ASCII characters.
-///
-/// # Examples
-///
-/// Create filenames of the form `chunk_??.txt`:
-///
-/// ```rust,ignore
-/// use crate::filenames::FilenameFactory;
-///
-/// let prefix = "chunk_".to_string();
-/// let suffix = ".txt".to_string();
-/// let width = 2;
-/// let use_numeric_suffix = false;
-/// let factory = FilenameFactory::new(prefix, suffix, width, use_numeric_suffix);
-///
-/// assert_eq!(factory.make(0).unwrap(), "chunk_aa.txt");
-/// assert_eq!(factory.make(10).unwrap(), "chunk_ak.txt");
-/// assert_eq!(factory.make(28).unwrap(), "chunk_bc.txt");
-/// ```
-///
-/// Set `suffix_length` to 0 for filename sizes that grow dynamically:
-///
-/// ```rust,ignore
-/// use crate::filenames::FilenameFactory;
-///
-/// let prefix = String::new();
-/// let suffix = String::new();
-/// let width = 0;
-/// let use_numeric_suffix = false;
-/// let factory = FilenameFactory::new(prefix, suffix, width, use_numeric_suffix);
-///
-/// assert_eq!(factory.make(0).unwrap(), "aa");
-/// assert_eq!(factory.make(1).unwrap(), "ab");
-/// assert_eq!(factory.make(649).unwrap(), "yz");
-/// assert_eq!(factory.make(650).unwrap(), "zaaa");
-/// assert_eq!(factory.make(6551).unwrap(), "zaab");
-/// ```
-pub struct FilenameFactory {
-    additional_suffix: String,
-    prefix: String,
-    suffix_length: usize,
-    use_numeric_suffix: bool,
-}
-
-impl FilenameFactory {
-    /// Create a new instance of this struct.
-    ///
-    /// For an explanation of the parameters, see the struct documentation.
-    pub fn new(
-        prefix: String,
-        additional_suffix: String,
-        suffix_length: usize,
-        use_numeric_suffix: bool,
-    ) -> FilenameFactory {
-        FilenameFactory {
-            prefix,
-            additional_suffix,
-            suffix_length,
-            use_numeric_suffix,
-        }
-    }
-
-    /// Construct the filename for the specified element of the output collection of files.
-    ///
-    /// For an explanation of the parameters, see the struct documentation.
-    ///
-    /// If `suffix_length` has been set to a positive integer and `i`
-    /// is greater than or equal to the number of strings that can be
-    /// represented within that length, then this returns `None`. For
-    /// example:
-    ///
-    /// ```rust,ignore
-    /// use crate::filenames::FilenameFactory;
-    ///
-    /// let prefix = String::new();
-    /// let suffix = String::new();
-    /// let width = 1;
-    /// let use_numeric_suffix = true;
-    /// let factory = FilenameFactory::new(prefix, suffix, width, use_numeric_suffix);
-    ///
-    /// assert_eq!(factory.make(10), None);
-    /// ```
-    pub fn make(&self, i: usize) -> Option<String> {
-        let prefix = self.prefix.clone();
-        let suffix1 = match (self.use_numeric_suffix, self.suffix_length) {
-            (true, 0) => Some(num_prefix(i)),
-            (false, 0) => str_prefix(i),
-            (true, width) => num_prefix_fixed_width(i, width),
-            (false, width) => str_prefix_fixed_width(i, width),
-        }?;
-        let suffix2 = &self.additional_suffix;
-        Some(prefix + &suffix1 + suffix2)
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use crate::filenames::num_prefix;
-    use crate::filenames::num_prefix_fixed_width;
-    use crate::filenames::str_prefix;
-    use crate::filenames::str_prefix_fixed_width;
-    use crate::filenames::to_ascii_char;
-    use crate::filenames::to_radix_26;
-    use crate::filenames::FilenameFactory;
-
-    #[test]
-    fn test_to_ascii_char() {
-        assert_eq!(to_ascii_char(&0), Some('a'));
-        assert_eq!(to_ascii_char(&5), Some('f'));
-        assert_eq!(to_ascii_char(&25), Some('z'));
-        assert_eq!(to_ascii_char(&26), None);
-    }
-
-    #[test]
-    fn test_to_radix_26_exceed_width() {
-        assert_eq!(to_radix_26(1, 0), None);
-        assert_eq!(to_radix_26(26, 1), None);
-        assert_eq!(to_radix_26(26 * 26, 2), None);
-    }
-
-    #[test]
-    fn test_to_radix_26_width_one() {
-        assert_eq!(to_radix_26(0, 1), Some(vec![0]));
-        assert_eq!(to_radix_26(10, 1), Some(vec![10]));
-        assert_eq!(to_radix_26(20, 1), Some(vec![20]));
-        assert_eq!(to_radix_26(25, 1), Some(vec![25]));
-    }
-
-    #[test]
-    fn test_to_radix_26_width_two() {
-        assert_eq!(to_radix_26(0, 2), Some(vec![0, 0]));
-        assert_eq!(to_radix_26(10, 2), Some(vec![0, 10]));
-        assert_eq!(to_radix_26(20, 2), Some(vec![0, 20]));
-        assert_eq!(to_radix_26(25, 2), Some(vec![0, 25]));
-
-        assert_eq!(to_radix_26(26, 2), Some(vec![1, 0]));
-        assert_eq!(to_radix_26(30, 2), Some(vec![1, 4]));
-
-        assert_eq!(to_radix_26(26 * 2, 2), Some(vec![2, 0]));
-        assert_eq!(to_radix_26(26 * 26 - 1, 2), Some(vec![25, 25]));
-    }
-
-    #[test]
-    fn test_str_prefix_dynamic_width() {
-        assert_eq!(str_prefix(0).as_deref(), Some("aa"));
-        assert_eq!(str_prefix(1).as_deref(), Some("ab"));
-        assert_eq!(str_prefix(2).as_deref(), Some("ac"));
-        assert_eq!(str_prefix(25).as_deref(), Some("az"));
-
-        assert_eq!(str_prefix(26).as_deref(), Some("ba"));
-        assert_eq!(str_prefix(27).as_deref(), Some("bb"));
-        assert_eq!(str_prefix(28).as_deref(), Some("bc"));
-        assert_eq!(str_prefix(51).as_deref(), Some("bz"));
-
-        assert_eq!(str_prefix(52).as_deref(), Some("ca"));
-
-        assert_eq!(str_prefix(26 * 25 - 1).as_deref(), Some("yz"));
-        assert_eq!(str_prefix(26 * 25).as_deref(), Some("zaaa"));
-        assert_eq!(str_prefix(26 * 25 + 1).as_deref(), Some("zaab"));
-    }
-
-    #[test]
-    fn test_num_prefix_dynamic_width() {
-        assert_eq!(num_prefix(0), "00");
-        assert_eq!(num_prefix(9), "09");
-        assert_eq!(num_prefix(17), "17");
-        assert_eq!(num_prefix(89), "89");
-        assert_eq!(num_prefix(90), "9000");
-        assert_eq!(num_prefix(91), "9001");
-        assert_eq!(num_prefix(989), "9899");
-        assert_eq!(num_prefix(990), "990000");
-    }
-
-    #[test]
-    fn test_str_prefix_fixed_width() {
-        assert_eq!(str_prefix_fixed_width(0, 2).as_deref(), Some("aa"));
-        assert_eq!(str_prefix_fixed_width(1, 2).as_deref(), Some("ab"));
-        assert_eq!(str_prefix_fixed_width(26, 2).as_deref(), Some("ba"));
-        assert_eq!(
-            str_prefix_fixed_width(26 * 26 - 1, 2).as_deref(),
-            Some("zz")
-        );
-        assert_eq!(str_prefix_fixed_width(26 * 26, 2).as_deref(), None);
-    }
-
-    #[test]
-    fn test_num_prefix_fixed_width() {
-        assert_eq!(num_prefix_fixed_width(0, 2).as_deref(), Some("00"));
-        assert_eq!(num_prefix_fixed_width(1, 2).as_deref(), Some("01"));
-        assert_eq!(num_prefix_fixed_width(99, 2).as_deref(), Some("99"));
-        assert_eq!(num_prefix_fixed_width(100, 2).as_deref(), None);
-    }
-
-    #[test]
-    fn test_alphabetic_suffix() {
-        let factory = FilenameFactory::new("123".to_string(), "789".to_string(), 3, false);
-        assert_eq!(factory.make(0).unwrap(), "123aaa789");
-        assert_eq!(factory.make(1).unwrap(), "123aab789");
-        assert_eq!(factory.make(28).unwrap(), "123abc789");
-    }
-
-    #[test]
-    fn test_numeric_suffix() {
-        let factory = FilenameFactory::new("abc".to_string(), "xyz".to_string(), 3, true);
-        assert_eq!(factory.make(0).unwrap(), "abc000xyz");
-        assert_eq!(factory.make(1).unwrap(), "abc001xyz");
-        assert_eq!(factory.make(123).unwrap(), "abc123xyz");
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_split/platform/mod.rs.html b/src/uu_split/platform/mod.rs.html deleted file mode 100644 index bb3f91264..000000000 --- a/src/uu_split/platform/mod.rs.html +++ /dev/null @@ -1,26 +0,0 @@ -mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-
#[cfg(unix)]
-pub use self::unix::instantiate_current_writer;
-
-#[cfg(windows)]
-pub use self::windows::instantiate_current_writer;
-
-#[cfg(unix)]
-mod unix;
-
-#[cfg(windows)]
-mod windows;
-
-
- \ No newline at end of file diff --git a/src/uu_split/platform/unix.rs.html b/src/uu_split/platform/unix.rs.html deleted file mode 100644 index 088de697a..000000000 --- a/src/uu_split/platform/unix.rs.html +++ /dev/null @@ -1,254 +0,0 @@ -unix.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-
use std::env;
-use std::io::Write;
-use std::io::{BufWriter, Result};
-use std::process::{Child, Command, Stdio};
-use uucore::crash;
-
-/// A writer that writes to a shell_process' stdin
-///
-/// We use a shell process (not directly calling a sub-process) so we can forward the name of the
-/// corresponding output file (xaa, xab, xac… ). This is the way it was implemented in GNU split.
-struct FilterWriter {
-    /// Running shell process
-    shell_process: Child,
-}
-
-impl Write for FilterWriter {
-    fn write(&mut self, buf: &[u8]) -> Result<usize> {
-        self.shell_process
-            .stdin
-            .as_mut()
-            .expect("failed to get shell stdin")
-            .write(buf)
-    }
-    fn flush(&mut self) -> Result<()> {
-        self.shell_process
-            .stdin
-            .as_mut()
-            .expect("failed to get shell stdin")
-            .flush()
-    }
-}
-
-/// Have an environment variable set at a value during this lifetime
-struct WithEnvVarSet {
-    /// Env var key
-    _previous_var_key: String,
-    /// Previous value set to this key
-    _previous_var_value: std::result::Result<String, env::VarError>,
-}
-impl WithEnvVarSet {
-    /// Save previous value assigned to key, set key=value
-    fn new(key: &str, value: &str) -> WithEnvVarSet {
-        let previous_env_value = env::var(key);
-        env::set_var(key, value);
-        WithEnvVarSet {
-            _previous_var_key: String::from(key),
-            _previous_var_value: previous_env_value,
-        }
-    }
-}
-
-impl Drop for WithEnvVarSet {
-    /// Restore previous value now that this is being dropped by context
-    fn drop(&mut self) {
-        if let Ok(ref prev_value) = self._previous_var_value {
-            env::set_var(&self._previous_var_key, &prev_value);
-        } else {
-            env::remove_var(&self._previous_var_key)
-        }
-    }
-}
-impl FilterWriter {
-    /// Create a new filter running a command with $FILE pointing at the output name
-    ///
-    /// #Arguments
-    ///
-    /// * `command` - The shell command to execute
-    /// * `filepath` - Path of the output file (forwarded to command as $FILE)
-    fn new(command: &str, filepath: &str) -> FilterWriter {
-        // set $FILE, save previous value (if there was one)
-        let _with_env_var_set = WithEnvVarSet::new("FILE", filepath);
-
-        let shell_process =
-            Command::new(env::var("SHELL").unwrap_or_else(|_| "/bin/sh".to_owned()))
-                .arg("-c")
-                .arg(command)
-                .stdin(Stdio::piped())
-                .spawn()
-                .expect("Couldn't spawn filter command");
-
-        FilterWriter { shell_process }
-    }
-}
-
-impl Drop for FilterWriter {
-    /// flush stdin, close it and wait on `shell_process` before dropping self
-    fn drop(&mut self) {
-        {
-            // close stdin by dropping it
-            let _stdin = self.shell_process.stdin.as_mut();
-        }
-        let exit_status = self
-            .shell_process
-            .wait()
-            .expect("Couldn't wait for child process");
-        if let Some(return_code) = exit_status.code() {
-            if return_code != 0 {
-                crash!(1, "Shell process returned {}", return_code);
-            }
-        } else {
-            crash!(1, "Shell process terminated by signal")
-        }
-    }
-}
-
-/// Instantiate either a file writer or a "write to shell process's stdin" writer
-pub fn instantiate_current_writer(
-    filter: &Option<String>,
-    filename: &str,
-) -> BufWriter<Box<dyn Write>> {
-    match filter {
-        None => BufWriter::new(Box::new(
-            // write to the next file
-            std::fs::OpenOptions::new()
-                .write(true)
-                .create(true)
-                .open(std::path::Path::new(&filename))
-                .unwrap(),
-        ) as Box<dyn Write>),
-        Some(ref filter_command) => BufWriter::new(Box::new(
-            // spawn a shell command and write to it
-            FilterWriter::new(filter_command, filename),
-        ) as Box<dyn Write>),
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_split/split.rs.html b/src/uu_split/split.rs.html deleted file mode 100644 index 2f6a9558c..000000000 --- a/src/uu_split/split.rs.html +++ /dev/null @@ -1,840 +0,0 @@ -split.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Akira Hayakawa <ruby.wktk@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) PREFIXaa
-
-mod filenames;
-mod platform;
-
-use crate::filenames::FilenameFactory;
-use clap::{crate_version, App, Arg, ArgMatches};
-use std::convert::TryFrom;
-use std::env;
-use std::fs::remove_file;
-use std::fs::File;
-use std::io::{stdin, BufRead, BufReader, BufWriter, Read, Write};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
-use uucore::parse_size::parse_size;
-
-static OPT_BYTES: &str = "bytes";
-static OPT_LINE_BYTES: &str = "line-bytes";
-static OPT_LINES: &str = "lines";
-static OPT_ADDITIONAL_SUFFIX: &str = "additional-suffix";
-static OPT_FILTER: &str = "filter";
-static OPT_NUMERIC_SUFFIXES: &str = "numeric-suffixes";
-static OPT_SUFFIX_LENGTH: &str = "suffix-length";
-static OPT_DEFAULT_SUFFIX_LENGTH: &str = "0";
-static OPT_VERBOSE: &str = "verbose";
-
-static ARG_INPUT: &str = "input";
-static ARG_PREFIX: &str = "prefix";
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [INPUT [PREFIX]]",
-        uucore::execution_phrase()
-    )
-}
-fn get_long_usage() -> String {
-    format!(
-        "Usage:
-  {0}
-
-Output fixed-size pieces of INPUT to PREFIXaa, PREFIX ab, ...; default
-size is 1000, and default PREFIX is 'x'. With no INPUT, or when INPUT is
--, read standard input.",
-        usage()
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let long_usage = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&long_usage[..])
-        .get_matches_from(args);
-
-    let mut settings = Settings {
-        prefix: "".to_owned(),
-        numeric_suffix: false,
-        suffix_length: 0,
-        additional_suffix: "".to_owned(),
-        input: "".to_owned(),
-        filter: None,
-        strategy: Strategy::Lines(1000),
-        verbose: false,
-    };
-
-    settings.suffix_length = matches
-        .value_of(OPT_SUFFIX_LENGTH)
-        .unwrap()
-        .parse()
-        .unwrap_or_else(|_| panic!("Invalid number for {}", OPT_SUFFIX_LENGTH));
-
-    settings.numeric_suffix = matches.occurrences_of(OPT_NUMERIC_SUFFIXES) > 0;
-    settings.additional_suffix = matches.value_of(OPT_ADDITIONAL_SUFFIX).unwrap().to_owned();
-
-    settings.verbose = matches.occurrences_of("verbose") > 0;
-    settings.strategy = Strategy::from(&matches)?;
-    settings.input = matches.value_of(ARG_INPUT).unwrap().to_owned();
-    settings.prefix = matches.value_of(ARG_PREFIX).unwrap().to_owned();
-
-    if matches.occurrences_of(OPT_FILTER) > 0 {
-        if cfg!(windows) {
-            // see https://github.com/rust-lang/rust/issues/29494
-            return Err(USimpleError::new(
-                -1,
-                format!("{} is currently not supported in this platform", OPT_FILTER),
-            ));
-        } else {
-            settings.filter = Some(matches.value_of(OPT_FILTER).unwrap().to_owned());
-        }
-    }
-
-    split(settings)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about("Create output files containing consecutive or interleaved sections of input")
-        // strategy (mutually exclusive)
-        .arg(
-            Arg::new(OPT_BYTES)
-                .short('b')
-                .long(OPT_BYTES)
-                .takes_value(true)
-                .help("put SIZE bytes per output file"),
-        )
-        .arg(
-            Arg::new(OPT_LINE_BYTES)
-                .short('C')
-                .long(OPT_LINE_BYTES)
-                .takes_value(true)
-                .default_value("2")
-                .help("put at most SIZE bytes of lines per output file"),
-        )
-        .arg(
-            Arg::new(OPT_LINES)
-                .short('l')
-                .long(OPT_LINES)
-                .takes_value(true)
-                .default_value("1000")
-                .help("put NUMBER lines/records per output file"),
-        )
-        // rest of the arguments
-        .arg(
-            Arg::new(OPT_ADDITIONAL_SUFFIX)
-                .long(OPT_ADDITIONAL_SUFFIX)
-                .takes_value(true)
-                .default_value("")
-                .help("additional suffix to append to output file names"),
-        )
-        .arg(
-            Arg::new(OPT_FILTER)
-                .long(OPT_FILTER)
-                .takes_value(true)
-                .help(
-                "write to shell COMMAND file name is $FILE (Currently not implemented for Windows)",
-            ),
-        )
-        .arg(
-            Arg::new(OPT_NUMERIC_SUFFIXES)
-                .short('d')
-                .long(OPT_NUMERIC_SUFFIXES)
-                .takes_value(true)
-                .default_missing_value("0")
-                .help("use numeric suffixes instead of alphabetic"),
-        )
-        .arg(
-            Arg::new(OPT_SUFFIX_LENGTH)
-                .short('a')
-                .long(OPT_SUFFIX_LENGTH)
-                .takes_value(true)
-                .default_value(OPT_DEFAULT_SUFFIX_LENGTH)
-                .help("use suffixes of length N (default 2)"),
-        )
-        .arg(
-            Arg::new(OPT_VERBOSE)
-                .long(OPT_VERBOSE)
-                .help("print a diagnostic just before each output file is opened"),
-        )
-        .arg(
-            Arg::new(ARG_INPUT)
-                .takes_value(true)
-                .default_value("-")
-                .index(1),
-        )
-        .arg(
-            Arg::new(ARG_PREFIX)
-                .takes_value(true)
-                .default_value("x")
-                .index(2),
-        )
-}
-
-/// The strategy for breaking up the input file into chunks.
-enum Strategy {
-    /// Each chunk has the specified number of lines.
-    Lines(usize),
-
-    /// Each chunk has the specified number of bytes.
-    Bytes(usize),
-
-    /// Each chunk has as many lines as possible without exceeding the
-    /// specified number of bytes.
-    LineBytes(usize),
-}
-
-impl Strategy {
-    /// Parse a strategy from the command-line arguments.
-    fn from(matches: &ArgMatches) -> UResult<Self> {
-        // Check that the user is not specifying more than one strategy.
-        //
-        // Note: right now, this exact behavior cannot be handled by
-        // `ArgGroup` since `ArgGroup` considers a default value `Arg`
-        // as "defined".
-        match (
-            matches.occurrences_of(OPT_LINES),
-            matches.occurrences_of(OPT_BYTES),
-            matches.occurrences_of(OPT_LINE_BYTES),
-        ) {
-            (0, 0, 0) => Ok(Strategy::Lines(1000)),
-            (1, 0, 0) => {
-                let s = matches.value_of(OPT_LINES).unwrap();
-                let n = parse_size(s)
-                    .map_err(|e| USimpleError::new(1, format!("invalid number of lines: {}", e)))?;
-                Ok(Strategy::Lines(n))
-            }
-            (0, 1, 0) => {
-                let s = matches.value_of(OPT_BYTES).unwrap();
-                let n = parse_size(s)
-                    .map_err(|e| USimpleError::new(1, format!("invalid number of bytes: {}", e)))?;
-                Ok(Strategy::Bytes(n))
-            }
-            (0, 0, 1) => {
-                let s = matches.value_of(OPT_LINE_BYTES).unwrap();
-                let n = parse_size(s)
-                    .map_err(|e| USimpleError::new(1, format!("invalid number of bytes: {}", e)))?;
-                Ok(Strategy::LineBytes(n))
-            }
-            _ => Err(UUsageError::new(1, "cannot split in more than one way")),
-        }
-    }
-}
-
-struct Settings {
-    prefix: String,
-    numeric_suffix: bool,
-    suffix_length: usize,
-    additional_suffix: String,
-    input: String,
-    /// When supplied, a shell command to output to instead of xaa, xab …
-    filter: Option<String>,
-    strategy: Strategy,
-    verbose: bool,
-}
-
-trait Splitter {
-    // Consume as much as possible from `reader` so as to saturate `writer`.
-    // Equivalent to finishing one of the part files. Returns the number of
-    // bytes that have been moved.
-    fn consume(
-        &mut self,
-        reader: &mut BufReader<Box<dyn Read>>,
-        writer: &mut BufWriter<Box<dyn Write>>,
-    ) -> std::io::Result<u128>;
-}
-
-struct LineSplitter {
-    lines_per_split: usize,
-}
-
-impl LineSplitter {
-    fn new(chunk_size: usize) -> LineSplitter {
-        LineSplitter {
-            lines_per_split: chunk_size,
-        }
-    }
-}
-
-impl Splitter for LineSplitter {
-    fn consume(
-        &mut self,
-        reader: &mut BufReader<Box<dyn Read>>,
-        writer: &mut BufWriter<Box<dyn Write>>,
-    ) -> std::io::Result<u128> {
-        let mut bytes_consumed = 0u128;
-        let mut buffer = String::with_capacity(1024);
-        for _ in 0..self.lines_per_split {
-            let bytes_read = reader.read_line(&mut buffer)?;
-            // If we ever read 0 bytes then we know we've hit EOF.
-            if bytes_read == 0 {
-                return Ok(bytes_consumed);
-            }
-
-            writer.write_all(buffer.as_bytes())?;
-            // Empty out the String buffer since `read_line` appends instead of
-            // replaces.
-            buffer.clear();
-
-            bytes_consumed += bytes_read as u128;
-        }
-
-        Ok(bytes_consumed)
-    }
-}
-
-struct ByteSplitter {
-    bytes_per_split: u128,
-}
-
-impl ByteSplitter {
-    fn new(chunk_size: usize) -> ByteSplitter {
-        ByteSplitter {
-            bytes_per_split: u128::try_from(chunk_size).unwrap(),
-        }
-    }
-}
-
-impl Splitter for ByteSplitter {
-    fn consume(
-        &mut self,
-        reader: &mut BufReader<Box<dyn Read>>,
-        writer: &mut BufWriter<Box<dyn Write>>,
-    ) -> std::io::Result<u128> {
-        // We buffer reads and writes. We proceed until `bytes_consumed` is
-        // equal to `self.bytes_per_split` or we reach EOF.
-        let mut bytes_consumed = 0u128;
-        const BUFFER_SIZE: usize = 1024;
-        let mut buffer = [0u8; BUFFER_SIZE];
-        while bytes_consumed < self.bytes_per_split {
-            // Don't overshoot `self.bytes_per_split`! Note: Using std::cmp::min
-            // doesn't really work since we have to get types to match which
-            // can't be done in a way that keeps all conversions safe.
-            let bytes_desired = if (BUFFER_SIZE as u128) <= self.bytes_per_split - bytes_consumed {
-                BUFFER_SIZE
-            } else {
-                // This is a safe conversion since the difference must be less
-                // than BUFFER_SIZE in this branch.
-                (self.bytes_per_split - bytes_consumed) as usize
-            };
-            let bytes_read = reader.read(&mut buffer[0..bytes_desired])?;
-            // If we ever read 0 bytes then we know we've hit EOF.
-            if bytes_read == 0 {
-                return Ok(bytes_consumed);
-            }
-
-            writer.write_all(&buffer[0..bytes_read])?;
-
-            bytes_consumed += bytes_read as u128;
-        }
-
-        Ok(bytes_consumed)
-    }
-}
-
-fn split(settings: Settings) -> UResult<()> {
-    let mut reader = BufReader::new(if settings.input == "-" {
-        Box::new(stdin()) as Box<dyn Read>
-    } else {
-        let r = File::open(Path::new(&settings.input)).map_err_context(|| {
-            format!(
-                "cannot open {} for reading: No such file or directory",
-                settings.input.quote()
-            )
-        })?;
-        Box::new(r) as Box<dyn Read>
-    });
-
-    let mut splitter: Box<dyn Splitter> = match settings.strategy {
-        Strategy::Lines(chunk_size) => Box::new(LineSplitter::new(chunk_size)),
-        Strategy::Bytes(chunk_size) | Strategy::LineBytes(chunk_size) => {
-            Box::new(ByteSplitter::new(chunk_size))
-        }
-    };
-
-    // This object is responsible for creating the filename for each chunk.
-    let filename_factory = FilenameFactory::new(
-        settings.prefix,
-        settings.additional_suffix,
-        settings.suffix_length,
-        settings.numeric_suffix,
-    );
-    let mut fileno = 0;
-    loop {
-        // Get a new part file set up, and construct `writer` for it.
-        let filename = filename_factory
-            .make(fileno)
-            .ok_or_else(|| USimpleError::new(1, "output file suffixes exhausted"))?;
-        let mut writer = platform::instantiate_current_writer(&settings.filter, filename.as_str());
-
-        let bytes_consumed = splitter
-            .consume(&mut reader, &mut writer)
-            .map_err_context(|| "input/output error".to_string())?;
-        writer
-            .flush()
-            .map_err_context(|| "error flushing to output file".to_string())?;
-
-        // If we didn't write anything we should clean up the empty file, and
-        // break from the loop.
-        if bytes_consumed == 0 {
-            // The output file is only ever created if --filter isn't used.
-            // Complicated, I know...
-            if settings.filter.is_none() {
-                remove_file(filename)
-                    .map_err_context(|| "error removing empty file".to_string())?;
-            }
-            break;
-        }
-
-        // TODO It is silly to have the "creating file" message here
-        // after the file has been already created. However, because
-        // of the way the main loop has been written, an extra file
-        // gets created and then deleted in the last iteration of the
-        // loop. So we need to make sure we are not in that case when
-        // printing this message.
-        //
-        // This is only here temporarily while we make some
-        // improvements to the architecture of the main loop in this
-        // function. In the future, it will move to a more appropriate
-        // place---at the point where the file is actually created.
-        if settings.verbose {
-            println!("creating file {}", filename.quote());
-        }
-
-        fileno += 1;
-    }
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_stat/stat.rs.html b/src/uu_stat/stat.rs.html deleted file mode 100644 index 457cd2957..000000000 --- a/src/uu_stat/stat.rs.html +++ /dev/null @@ -1,2038 +0,0 @@ -stat.rs - source -
   1
-   2
-   3
-   4
-   5
-   6
-   7
-   8
-   9
-  10
-  11
-  12
-  13
-  14
-  15
-  16
-  17
-  18
-  19
-  20
-  21
-  22
-  23
-  24
-  25
-  26
-  27
-  28
-  29
-  30
-  31
-  32
-  33
-  34
-  35
-  36
-  37
-  38
-  39
-  40
-  41
-  42
-  43
-  44
-  45
-  46
-  47
-  48
-  49
-  50
-  51
-  52
-  53
-  54
-  55
-  56
-  57
-  58
-  59
-  60
-  61
-  62
-  63
-  64
-  65
-  66
-  67
-  68
-  69
-  70
-  71
-  72
-  73
-  74
-  75
-  76
-  77
-  78
-  79
-  80
-  81
-  82
-  83
-  84
-  85
-  86
-  87
-  88
-  89
-  90
-  91
-  92
-  93
-  94
-  95
-  96
-  97
-  98
-  99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 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
- 213
- 214
- 215
- 216
- 217
- 218
- 219
- 220
- 221
- 222
- 223
- 224
- 225
- 226
- 227
- 228
- 229
- 230
- 231
- 232
- 233
- 234
- 235
- 236
- 237
- 238
- 239
- 240
- 241
- 242
- 243
- 244
- 245
- 246
- 247
- 248
- 249
- 250
- 251
- 252
- 253
- 254
- 255
- 256
- 257
- 258
- 259
- 260
- 261
- 262
- 263
- 264
- 265
- 266
- 267
- 268
- 269
- 270
- 271
- 272
- 273
- 274
- 275
- 276
- 277
- 278
- 279
- 280
- 281
- 282
- 283
- 284
- 285
- 286
- 287
- 288
- 289
- 290
- 291
- 292
- 293
- 294
- 295
- 296
- 297
- 298
- 299
- 300
- 301
- 302
- 303
- 304
- 305
- 306
- 307
- 308
- 309
- 310
- 311
- 312
- 313
- 314
- 315
- 316
- 317
- 318
- 319
- 320
- 321
- 322
- 323
- 324
- 325
- 326
- 327
- 328
- 329
- 330
- 331
- 332
- 333
- 334
- 335
- 336
- 337
- 338
- 339
- 340
- 341
- 342
- 343
- 344
- 345
- 346
- 347
- 348
- 349
- 350
- 351
- 352
- 353
- 354
- 355
- 356
- 357
- 358
- 359
- 360
- 361
- 362
- 363
- 364
- 365
- 366
- 367
- 368
- 369
- 370
- 371
- 372
- 373
- 374
- 375
- 376
- 377
- 378
- 379
- 380
- 381
- 382
- 383
- 384
- 385
- 386
- 387
- 388
- 389
- 390
- 391
- 392
- 393
- 394
- 395
- 396
- 397
- 398
- 399
- 400
- 401
- 402
- 403
- 404
- 405
- 406
- 407
- 408
- 409
- 410
- 411
- 412
- 413
- 414
- 415
- 416
- 417
- 418
- 419
- 420
- 421
- 422
- 423
- 424
- 425
- 426
- 427
- 428
- 429
- 430
- 431
- 432
- 433
- 434
- 435
- 436
- 437
- 438
- 439
- 440
- 441
- 442
- 443
- 444
- 445
- 446
- 447
- 448
- 449
- 450
- 451
- 452
- 453
- 454
- 455
- 456
- 457
- 458
- 459
- 460
- 461
- 462
- 463
- 464
- 465
- 466
- 467
- 468
- 469
- 470
- 471
- 472
- 473
- 474
- 475
- 476
- 477
- 478
- 479
- 480
- 481
- 482
- 483
- 484
- 485
- 486
- 487
- 488
- 489
- 490
- 491
- 492
- 493
- 494
- 495
- 496
- 497
- 498
- 499
- 500
- 501
- 502
- 503
- 504
- 505
- 506
- 507
- 508
- 509
- 510
- 511
- 512
- 513
- 514
- 515
- 516
- 517
- 518
- 519
- 520
- 521
- 522
- 523
- 524
- 525
- 526
- 527
- 528
- 529
- 530
- 531
- 532
- 533
- 534
- 535
- 536
- 537
- 538
- 539
- 540
- 541
- 542
- 543
- 544
- 545
- 546
- 547
- 548
- 549
- 550
- 551
- 552
- 553
- 554
- 555
- 556
- 557
- 558
- 559
- 560
- 561
- 562
- 563
- 564
- 565
- 566
- 567
- 568
- 569
- 570
- 571
- 572
- 573
- 574
- 575
- 576
- 577
- 578
- 579
- 580
- 581
- 582
- 583
- 584
- 585
- 586
- 587
- 588
- 589
- 590
- 591
- 592
- 593
- 594
- 595
- 596
- 597
- 598
- 599
- 600
- 601
- 602
- 603
- 604
- 605
- 606
- 607
- 608
- 609
- 610
- 611
- 612
- 613
- 614
- 615
- 616
- 617
- 618
- 619
- 620
- 621
- 622
- 623
- 624
- 625
- 626
- 627
- 628
- 629
- 630
- 631
- 632
- 633
- 634
- 635
- 636
- 637
- 638
- 639
- 640
- 641
- 642
- 643
- 644
- 645
- 646
- 647
- 648
- 649
- 650
- 651
- 652
- 653
- 654
- 655
- 656
- 657
- 658
- 659
- 660
- 661
- 662
- 663
- 664
- 665
- 666
- 667
- 668
- 669
- 670
- 671
- 672
- 673
- 674
- 675
- 676
- 677
- 678
- 679
- 680
- 681
- 682
- 683
- 684
- 685
- 686
- 687
- 688
- 689
- 690
- 691
- 692
- 693
- 694
- 695
- 696
- 697
- 698
- 699
- 700
- 701
- 702
- 703
- 704
- 705
- 706
- 707
- 708
- 709
- 710
- 711
- 712
- 713
- 714
- 715
- 716
- 717
- 718
- 719
- 720
- 721
- 722
- 723
- 724
- 725
- 726
- 727
- 728
- 729
- 730
- 731
- 732
- 733
- 734
- 735
- 736
- 737
- 738
- 739
- 740
- 741
- 742
- 743
- 744
- 745
- 746
- 747
- 748
- 749
- 750
- 751
- 752
- 753
- 754
- 755
- 756
- 757
- 758
- 759
- 760
- 761
- 762
- 763
- 764
- 765
- 766
- 767
- 768
- 769
- 770
- 771
- 772
- 773
- 774
- 775
- 776
- 777
- 778
- 779
- 780
- 781
- 782
- 783
- 784
- 785
- 786
- 787
- 788
- 789
- 790
- 791
- 792
- 793
- 794
- 795
- 796
- 797
- 798
- 799
- 800
- 801
- 802
- 803
- 804
- 805
- 806
- 807
- 808
- 809
- 810
- 811
- 812
- 813
- 814
- 815
- 816
- 817
- 818
- 819
- 820
- 821
- 822
- 823
- 824
- 825
- 826
- 827
- 828
- 829
- 830
- 831
- 832
- 833
- 834
- 835
- 836
- 837
- 838
- 839
- 840
- 841
- 842
- 843
- 844
- 845
- 846
- 847
- 848
- 849
- 850
- 851
- 852
- 853
- 854
- 855
- 856
- 857
- 858
- 859
- 860
- 861
- 862
- 863
- 864
- 865
- 866
- 867
- 868
- 869
- 870
- 871
- 872
- 873
- 874
- 875
- 876
- 877
- 878
- 879
- 880
- 881
- 882
- 883
- 884
- 885
- 886
- 887
- 888
- 889
- 890
- 891
- 892
- 893
- 894
- 895
- 896
- 897
- 898
- 899
- 900
- 901
- 902
- 903
- 904
- 905
- 906
- 907
- 908
- 909
- 910
- 911
- 912
- 913
- 914
- 915
- 916
- 917
- 918
- 919
- 920
- 921
- 922
- 923
- 924
- 925
- 926
- 927
- 928
- 929
- 930
- 931
- 932
- 933
- 934
- 935
- 936
- 937
- 938
- 939
- 940
- 941
- 942
- 943
- 944
- 945
- 946
- 947
- 948
- 949
- 950
- 951
- 952
- 953
- 954
- 955
- 956
- 957
- 958
- 959
- 960
- 961
- 962
- 963
- 964
- 965
- 966
- 967
- 968
- 969
- 970
- 971
- 972
- 973
- 974
- 975
- 976
- 977
- 978
- 979
- 980
- 981
- 982
- 983
- 984
- 985
- 986
- 987
- 988
- 989
- 990
- 991
- 992
- 993
- 994
- 995
- 996
- 997
- 998
- 999
-1000
-1001
-1002
-1003
-1004
-1005
-1006
-1007
-1008
-1009
-1010
-1011
-1012
-1013
-1014
-1015
-1016
-1017
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-#[macro_use]
-extern crate uucore;
-use uucore::display::Quotable;
-use uucore::entries;
-use uucore::error::{UResult, USimpleError};
-use uucore::fs::display_permissions;
-use uucore::fsext::{
-    pretty_filetype, pretty_fstype, pretty_time, read_fs_list, statfs, BirthTime, FsMeta,
-};
-use uucore::libc::mode_t;
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use std::borrow::Cow;
-use std::convert::AsRef;
-use std::os::unix::fs::{FileTypeExt, MetadataExt};
-use std::path::Path;
-use std::{cmp, fs, iter};
-
-macro_rules! check_bound {
-    ($str: ident, $bound:expr, $beg: expr, $end: expr) => {
-        if $end >= $bound {
-            return Err(USimpleError::new(
-                1,
-                format!("{}: invalid directive", $str[$beg..$end].quote()),
-            ));
-        }
-    };
-}
-macro_rules! fill_string {
-    ($str: ident, $c: expr, $cnt: expr) => {
-        iter::repeat($c)
-            .take($cnt)
-            .map(|c| $str.push(c))
-            .all(|_| true)
-    };
-}
-macro_rules! extend_digits {
-    ($str: expr, $min: expr) => {
-        if $min > $str.len() {
-            let mut pad = String::with_capacity($min);
-            fill_string!(pad, '0', $min - $str.len());
-            pad.push_str($str);
-            pad.into()
-        } else {
-            $str.into()
-        }
-    };
-}
-macro_rules! pad_and_print {
-    ($result: ident, $str: ident, $left: expr, $width: expr, $padding: expr) => {
-        if $str.len() < $width {
-            if $left {
-                $result.push_str($str.as_ref());
-                fill_string!($result, $padding, $width - $str.len());
-            } else {
-                fill_string!($result, $padding, $width - $str.len());
-                $result.push_str($str.as_ref());
-            }
-        } else {
-            $result.push_str($str.as_ref());
-        }
-        print!("{}", $result);
-    };
-}
-macro_rules! print_adjusted {
-    ($str: ident, $left: expr, $width: expr, $padding: expr) => {
-        let field_width = cmp::max($width, $str.len());
-        let mut result = String::with_capacity(field_width);
-        pad_and_print!(result, $str, $left, field_width, $padding);
-    };
-    ($str: ident, $left: expr, $need_prefix: expr, $prefix: expr, $width: expr, $padding: expr) => {
-        let mut field_width = cmp::max($width, $str.len());
-        let mut result = String::with_capacity(field_width + $prefix.len());
-        if $need_prefix {
-            result.push_str($prefix);
-            field_width -= $prefix.len();
-        }
-        pad_and_print!(result, $str, $left, field_width, $padding);
-    };
-}
-
-static ABOUT: &str = "Display file or file system status.";
-
-pub mod options {
-    pub static DEREFERENCE: &str = "dereference";
-    pub static FILE_SYSTEM: &str = "file-system";
-    pub static FORMAT: &str = "format";
-    pub static PRINTF: &str = "printf";
-    pub static TERSE: &str = "terse";
-}
-
-static ARG_FILES: &str = "files";
-
-pub const F_ALTER: u8 = 1;
-pub const F_ZERO: u8 = 1 << 1;
-pub const F_LEFT: u8 = 1 << 2;
-pub const F_SPACE: u8 = 1 << 3;
-pub const F_SIGN: u8 = 1 << 4;
-// unused at present
-pub const F_GROUP: u8 = 1 << 5;
-
-#[derive(Debug, PartialEq)]
-pub enum OutputType {
-    Str,
-    Integer,
-    Unsigned,
-    UnsignedHex,
-    UnsignedOct,
-    Unknown,
-}
-
-#[derive(Debug, PartialEq)]
-pub enum Token {
-    Char(char),
-    Directive {
-        flag: u8,
-        width: usize,
-        precision: i32,
-        format: char,
-    },
-}
-
-pub trait ScanUtil {
-    fn scan_num<F>(&self) -> Option<(F, usize)>
-    where
-        F: std::str::FromStr;
-    fn scan_char(&self, radix: u32) -> Option<(char, usize)>;
-}
-
-impl ScanUtil for str {
-    fn scan_num<F>(&self) -> Option<(F, usize)>
-    where
-        F: std::str::FromStr,
-    {
-        let mut chars = self.chars();
-        let mut i = 0;
-        match chars.next() {
-            Some('-') | Some('+') | Some('0'..='9') => i += 1,
-            _ => return None,
-        }
-        for c in chars {
-            match c {
-                '0'..='9' => i += 1,
-                _ => break,
-            }
-        }
-        if i > 0 {
-            F::from_str(&self[..i]).ok().map(|x| (x, i))
-        } else {
-            None
-        }
-    }
-
-    fn scan_char(&self, radix: u32) -> Option<(char, usize)> {
-        let count = match radix {
-            8 => 3_usize,
-            16 => 2,
-            _ => return None,
-        };
-        let chars = self.chars().enumerate();
-        let mut res = 0_u32;
-        let mut offset = 0_usize;
-        for (i, c) in chars {
-            if i >= count {
-                break;
-            }
-            match c.to_digit(radix) {
-                Some(digit) => {
-                    let tmp = res * radix + digit;
-                    if tmp < 256 {
-                        res = tmp;
-                    } else {
-                        break;
-                    }
-                }
-                None => break,
-            }
-            offset = i + 1;
-        }
-        if offset > 0 {
-            Some((res as u8 as char, offset))
-        } else {
-            None
-        }
-    }
-}
-
-pub fn group_num(s: &str) -> Cow<str> {
-    assert!(s.chars().all(char::is_numeric));
-    if s.len() < 4 {
-        return s.into();
-    }
-    let mut res = String::with_capacity((s.len() - 1) / 3);
-    let mut alone = (s.len() - 1) % 3 + 1;
-    res.push_str(&s[..alone]);
-    while alone != s.len() {
-        res.push(',');
-        res.push_str(&s[alone..alone + 3]);
-        alone += 3;
-    }
-    res.into()
-}
-
-pub struct Stater {
-    follow: bool,
-    show_fs: bool,
-    from_user: bool,
-    files: Vec<String>,
-    mount_list: Option<Vec<String>>,
-    default_tokens: Vec<Token>,
-    default_dev_tokens: Vec<Token>,
-}
-
-#[allow(clippy::cognitive_complexity)]
-fn print_it(arg: &str, output_type: OutputType, flag: u8, width: usize, precision: i32) {
-    // If the precision is given as just '.', the precision is taken to be zero.
-    // A negative precision is taken as if the precision were omitted.
-    // This gives the minimum number of digits to appear for d, i, o, u, x, and X conversions,
-    // the maximum number of characters to be printed from a string for s and S conversions.
-
-    // #
-    // The value should be converted to an "alternate form".
-    // For o conversions, the first character of the output string  is made  zero  (by  prefixing  a 0 if it was not zero already).
-    // For x and X conversions, a nonzero result has the string "0x" (or "0X" for X conversions) prepended to it.
-
-    // 0
-    // The value should be zero padded.
-    // For d, i, o, u, x, X, a, A, e, E, f, F, g, and G conversions, the converted value is padded on the left with zeros rather than blanks.
-    // If the 0 and - flags both appear, the 0 flag is ignored.
-    // If a precision  is  given with a numeric conversion (d, i, o, u, x, and X), the 0 flag is ignored.
-    // For other conversions, the behavior is undefined.
-
-    // -
-    // The converted value is to be left adjusted on the field boundary.  (The default is right justification.)
-    // The  converted  value  is padded on the right with blanks, rather than on the left with blanks or zeros.
-    // A - overrides a 0 if both are given.
-
-    // ' ' (a space)
-    // A blank should be left before a positive number (or empty string) produced by a signed conversion.
-
-    // +
-    // A sign (+ or -) should always be placed before a number produced by a signed conversion.
-    // By default, a sign  is  used only for negative numbers.
-    // A + overrides a space if both are used.
-
-    if output_type == OutputType::Unknown {
-        return print!("?");
-    }
-
-    let left_align = has!(flag, F_LEFT);
-    let padding_char = if has!(flag, F_ZERO) && !left_align && precision == -1 {
-        '0'
-    } else {
-        ' '
-    };
-
-    let has_sign = has!(flag, F_SIGN) || has!(flag, F_SPACE);
-
-    let should_alter = has!(flag, F_ALTER);
-    let prefix = match output_type {
-        OutputType::UnsignedOct => "0",
-        OutputType::UnsignedHex => "0x",
-        OutputType::Integer => {
-            if has!(flag, F_SIGN) {
-                "+"
-            } else {
-                " "
-            }
-        }
-        _ => "",
-    };
-
-    match output_type {
-        OutputType::Str => {
-            let limit = cmp::min(precision, arg.len() as i32);
-            let s: &str = if limit >= 0 {
-                &arg[..limit as usize]
-            } else {
-                arg
-            };
-            print_adjusted!(s, left_align, width, ' ');
-        }
-        OutputType::Integer => {
-            let arg = if has!(flag, F_GROUP) {
-                group_num(arg)
-            } else {
-                Cow::Borrowed(arg)
-            };
-            let min_digits = cmp::max(precision, arg.len() as i32) as usize;
-            let extended: Cow<str> = extend_digits!(arg.as_ref(), min_digits);
-            print_adjusted!(extended, left_align, has_sign, prefix, width, padding_char);
-        }
-        OutputType::Unsigned => {
-            let arg = if has!(flag, F_GROUP) {
-                group_num(arg)
-            } else {
-                Cow::Borrowed(arg)
-            };
-            let min_digits = cmp::max(precision, arg.len() as i32) as usize;
-            let extended: Cow<str> = extend_digits!(arg.as_ref(), min_digits);
-            print_adjusted!(extended, left_align, width, padding_char);
-        }
-        OutputType::UnsignedOct => {
-            let min_digits = cmp::max(precision, arg.len() as i32) as usize;
-            let extended: Cow<str> = extend_digits!(arg, min_digits);
-            print_adjusted!(
-                extended,
-                left_align,
-                should_alter,
-                prefix,
-                width,
-                padding_char
-            );
-        }
-        OutputType::UnsignedHex => {
-            let min_digits = cmp::max(precision, arg.len() as i32) as usize;
-            let extended: Cow<str> = extend_digits!(arg, min_digits);
-            print_adjusted!(
-                extended,
-                left_align,
-                should_alter,
-                prefix,
-                width,
-                padding_char
-            );
-        }
-        _ => unreachable!(),
-    }
-}
-
-impl Stater {
-    pub fn generate_tokens(format_str: &str, use_printf: bool) -> UResult<Vec<Token>> {
-        let mut tokens = Vec::new();
-        let bound = format_str.len();
-        let chars = format_str.chars().collect::<Vec<char>>();
-        let mut i = 0_usize;
-        while i < bound {
-            match chars[i] {
-                '%' => {
-                    let old = i;
-
-                    i += 1;
-                    if i >= bound {
-                        tokens.push(Token::Char('%'));
-                        continue;
-                    }
-                    if chars[i] == '%' {
-                        tokens.push(Token::Char('%'));
-                        i += 1;
-                        continue;
-                    }
-
-                    let mut flag: u8 = 0;
-
-                    while i < bound {
-                        match chars[i] {
-                            '#' => flag |= F_ALTER,
-                            '0' => flag |= F_ZERO,
-                            '-' => flag |= F_LEFT,
-                            ' ' => flag |= F_SPACE,
-                            '+' => flag |= F_SIGN,
-                            '\'' => flag |= F_GROUP,
-                            'I' => unimplemented!(),
-                            _ => break,
-                        }
-                        i += 1;
-                    }
-                    check_bound!(format_str, bound, old, i);
-
-                    let mut width = 0_usize;
-                    let mut precision = -1_i32;
-                    let mut j = i;
-
-                    if let Some((field_width, offset)) = format_str[j..].scan_num::<usize>() {
-                        width = field_width;
-                        j += offset;
-                    }
-                    check_bound!(format_str, bound, old, j);
-
-                    if chars[j] == '.' {
-                        j += 1;
-                        check_bound!(format_str, bound, old, j);
-
-                        match format_str[j..].scan_num::<i32>() {
-                            Some((value, offset)) => {
-                                if value >= 0 {
-                                    precision = value;
-                                }
-                                j += offset;
-                            }
-                            None => precision = 0,
-                        }
-                        check_bound!(format_str, bound, old, j);
-                    }
-
-                    i = j;
-                    tokens.push(Token::Directive {
-                        width,
-                        flag,
-                        precision,
-                        format: chars[i],
-                    })
-                }
-                '\\' => {
-                    if !use_printf {
-                        tokens.push(Token::Char('\\'));
-                    } else {
-                        i += 1;
-                        if i >= bound {
-                            show_warning!("backslash at end of format");
-                            tokens.push(Token::Char('\\'));
-                            continue;
-                        }
-                        match chars[i] {
-                            'x' if i + 1 < bound => {
-                                if let Some((c, offset)) = format_str[i + 1..].scan_char(16) {
-                                    tokens.push(Token::Char(c));
-                                    i += offset;
-                                } else {
-                                    show_warning!("unrecognized escape '\\x'");
-                                    tokens.push(Token::Char('x'));
-                                }
-                            }
-                            '0'..='7' => {
-                                let (c, offset) = format_str[i..].scan_char(8).unwrap();
-                                tokens.push(Token::Char(c));
-                                i += offset - 1;
-                            }
-                            '"' => tokens.push(Token::Char('"')),
-                            '\\' => tokens.push(Token::Char('\\')),
-                            'a' => tokens.push(Token::Char('\x07')),
-                            'b' => tokens.push(Token::Char('\x08')),
-                            'e' => tokens.push(Token::Char('\x1B')),
-                            'f' => tokens.push(Token::Char('\x0C')),
-                            'n' => tokens.push(Token::Char('\n')),
-                            'r' => tokens.push(Token::Char('\r')),
-                            't' => tokens.push(Token::Char('\t')),
-                            'v' => tokens.push(Token::Char('\x0B')),
-                            c => {
-                                show_warning!("unrecognized escape '\\{}'", c);
-                                tokens.push(Token::Char(c));
-                            }
-                        }
-                    }
-                }
-
-                c => tokens.push(Token::Char(c)),
-            }
-            i += 1;
-        }
-        if !use_printf && !format_str.ends_with('\n') {
-            tokens.push(Token::Char('\n'));
-        }
-        Ok(tokens)
-    }
-
-    fn new(matches: ArgMatches) -> UResult<Stater> {
-        let files: Vec<String> = matches
-            .values_of(ARG_FILES)
-            .map(|v| v.map(ToString::to_string).collect())
-            .unwrap_or_default();
-
-        let format_str = if matches.is_present(options::PRINTF) {
-            matches
-                .value_of(options::PRINTF)
-                .expect("Invalid format string")
-        } else {
-            matches.value_of(options::FORMAT).unwrap_or("")
-        };
-
-        let use_printf = matches.is_present(options::PRINTF);
-        let terse = matches.is_present(options::TERSE);
-        let show_fs = matches.is_present(options::FILE_SYSTEM);
-
-        let default_tokens = if format_str.is_empty() {
-            Stater::generate_tokens(&Stater::default_format(show_fs, terse, false), use_printf)?
-        } else {
-            Stater::generate_tokens(format_str, use_printf)?
-        };
-        let default_dev_tokens =
-            Stater::generate_tokens(&Stater::default_format(show_fs, terse, true), use_printf)?;
-
-        let mount_list = if show_fs {
-            // mount points aren't displayed when showing filesystem information
-            None
-        } else {
-            let mut mount_list = read_fs_list()
-                .iter()
-                .map(|mi| mi.mount_dir.clone())
-                .collect::<Vec<String>>();
-            // Reverse sort. The longer comes first.
-            mount_list.sort();
-            mount_list.reverse();
-            Some(mount_list)
-        };
-
-        Ok(Stater {
-            follow: matches.is_present(options::DEREFERENCE),
-            show_fs,
-            from_user: !format_str.is_empty(),
-            files,
-            default_tokens,
-            default_dev_tokens,
-            mount_list,
-        })
-    }
-
-    fn find_mount_point<P: AsRef<Path>>(&self, p: P) -> Option<String> {
-        let path = match p.as_ref().canonicalize() {
-            Ok(s) => s,
-            Err(_) => return None,
-        };
-        if let Some(ref mount_list) = self.mount_list {
-            for root in mount_list.iter() {
-                if path.starts_with(root) {
-                    return Some(root.clone());
-                }
-            }
-        }
-        None
-    }
-
-    fn exec(&self) -> i32 {
-        let mut ret = 0;
-        for f in &self.files {
-            ret |= self.do_stat(f.as_str());
-        }
-        ret
-    }
-
-    fn do_stat(&self, file: &str) -> i32 {
-        if !self.show_fs {
-            let result = if self.follow {
-                fs::metadata(file)
-            } else {
-                fs::symlink_metadata(file)
-            };
-            match result {
-                Ok(meta) => {
-                    let file_type = meta.file_type();
-                    let tokens = if self.from_user
-                        || !(file_type.is_char_device() || file_type.is_block_device())
-                    {
-                        &self.default_tokens
-                    } else {
-                        &self.default_dev_tokens
-                    };
-
-                    for t in tokens.iter() {
-                        match *t {
-                            Token::Char(c) => print!("{}", c),
-                            Token::Directive {
-                                flag,
-                                width,
-                                precision,
-                                format,
-                            } => {
-                                let arg: String;
-                                let output_type: OutputType;
-
-                                match format {
-                                    // access rights in octal
-                                    'a' => {
-                                        arg = format!("{:o}", 0o7777 & meta.mode());
-                                        output_type = OutputType::UnsignedOct;
-                                    }
-                                    // access rights in human readable form
-                                    'A' => {
-                                        arg = display_permissions(&meta, true);
-                                        output_type = OutputType::Str;
-                                    }
-                                    // number of blocks allocated (see %B)
-                                    'b' => {
-                                        arg = format!("{}", meta.blocks());
-                                        output_type = OutputType::Unsigned;
-                                    }
-
-                                    // the size in bytes of each block reported by %b
-                                    // FIXME: blocksize differs on various platform
-                                    // See coreutils/gnulib/lib/stat-size.h ST_NBLOCKSIZE // spell-checker:disable-line
-                                    'B' => {
-                                        // the size in bytes of each block reported by %b
-                                        arg = format!("{}", 512);
-                                        output_type = OutputType::Unsigned;
-                                    }
-
-                                    // device number in decimal
-                                    'd' => {
-                                        arg = format!("{}", meta.dev());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // device number in hex
-                                    'D' => {
-                                        arg = format!("{:x}", meta.dev());
-                                        output_type = OutputType::UnsignedHex;
-                                    }
-                                    // raw mode in hex
-                                    'f' => {
-                                        arg = format!("{:x}", meta.mode());
-                                        output_type = OutputType::UnsignedHex;
-                                    }
-                                    // file type
-                                    'F' => {
-                                        arg = pretty_filetype(meta.mode() as mode_t, meta.len())
-                                            .to_owned();
-                                        output_type = OutputType::Str;
-                                    }
-                                    // group ID of owner
-                                    'g' => {
-                                        arg = format!("{}", meta.gid());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // group name of owner
-                                    'G' => {
-                                        arg = entries::gid2grp(meta.gid())
-                                            .unwrap_or_else(|_| "UNKNOWN".to_owned());
-                                        output_type = OutputType::Str;
-                                    }
-                                    // number of hard links
-                                    'h' => {
-                                        arg = format!("{}", meta.nlink());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // inode number
-                                    'i' => {
-                                        arg = format!("{}", meta.ino());
-                                        output_type = OutputType::Unsigned;
-                                    }
-
-                                    // mount point
-                                    'm' => {
-                                        arg = self.find_mount_point(file).unwrap();
-                                        output_type = OutputType::Str;
-                                    }
-
-                                    // file name
-                                    'n' => {
-                                        arg = file.to_owned();
-                                        output_type = OutputType::Str;
-                                    }
-                                    // quoted file name with dereference if symbolic link
-                                    'N' => {
-                                        if file_type.is_symlink() {
-                                            let dst = match fs::read_link(file) {
-                                                Ok(path) => path,
-                                                Err(e) => {
-                                                    println!("{}", e);
-                                                    return 1;
-                                                }
-                                            };
-                                            arg = format!("{} -> {}", file.quote(), dst.quote());
-                                        } else {
-                                            arg = file.to_string();
-                                        }
-                                        output_type = OutputType::Str;
-                                    }
-                                    // optimal I/O transfer size hint
-                                    'o' => {
-                                        arg = format!("{}", meta.blksize());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // total size, in bytes
-                                    's' => {
-                                        arg = format!("{}", meta.len());
-                                        output_type = OutputType::Integer;
-                                    }
-                                    // major device type in hex, for character/block device special
-                                    // files
-                                    't' => {
-                                        arg = format!("{:x}", meta.rdev() >> 8);
-                                        output_type = OutputType::UnsignedHex;
-                                    }
-                                    // minor device type in hex, for character/block device special
-                                    // files
-                                    'T' => {
-                                        arg = format!("{:x}", meta.rdev() & 0xff);
-                                        output_type = OutputType::UnsignedHex;
-                                    }
-                                    // user ID of owner
-                                    'u' => {
-                                        arg = format!("{}", meta.uid());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // user name of owner
-                                    'U' => {
-                                        arg = entries::uid2usr(meta.uid())
-                                            .unwrap_or_else(|_| "UNKNOWN".to_owned());
-                                        output_type = OutputType::Str;
-                                    }
-
-                                    // time of file birth, human-readable; - if unknown
-                                    'w' => {
-                                        arg = meta.pretty_birth();
-                                        output_type = OutputType::Str;
-                                    }
-
-                                    // time of file birth, seconds since Epoch; 0 if unknown
-                                    'W' => {
-                                        arg = meta.birth();
-                                        output_type = OutputType::Integer;
-                                    }
-
-                                    // time of last access, human-readable
-                                    'x' => {
-                                        arg = pretty_time(meta.atime(), meta.atime_nsec());
-                                        output_type = OutputType::Str;
-                                    }
-                                    // time of last access, seconds since Epoch
-                                    'X' => {
-                                        arg = format!("{}", meta.atime());
-                                        output_type = OutputType::Integer;
-                                    }
-                                    // time of last data modification, human-readable
-                                    'y' => {
-                                        arg = pretty_time(meta.mtime(), meta.mtime_nsec());
-                                        output_type = OutputType::Str;
-                                    }
-                                    // time of last data modification, seconds since Epoch
-                                    'Y' => {
-                                        arg = format!("{}", meta.mtime());
-                                        output_type = OutputType::Str;
-                                    }
-                                    // time of last status change, human-readable
-                                    'z' => {
-                                        arg = pretty_time(meta.ctime(), meta.ctime_nsec());
-                                        output_type = OutputType::Str;
-                                    }
-                                    // time of last status change, seconds since Epoch
-                                    'Z' => {
-                                        arg = format!("{}", meta.ctime());
-                                        output_type = OutputType::Integer;
-                                    }
-
-                                    _ => {
-                                        arg = "?".to_owned();
-                                        output_type = OutputType::Unknown;
-                                    }
-                                }
-                                print_it(&arg, output_type, flag, width, precision);
-                            }
-                        }
-                    }
-                }
-                Err(e) => {
-                    show_error!("cannot stat {}: {}", file.quote(), e);
-                    return 1;
-                }
-            }
-        } else {
-            match statfs(file) {
-                Ok(meta) => {
-                    let tokens = &self.default_tokens;
-
-                    for t in tokens.iter() {
-                        match *t {
-                            Token::Char(c) => print!("{}", c),
-                            Token::Directive {
-                                flag,
-                                width,
-                                precision,
-                                format,
-                            } => {
-                                let arg: String;
-                                let output_type: OutputType;
-                                match format {
-                                    // free blocks available to non-superuser
-                                    'a' => {
-                                        arg = format!("{}", meta.avail_blocks());
-                                        output_type = OutputType::Integer;
-                                    }
-                                    // total data blocks in file system
-                                    'b' => {
-                                        arg = format!("{}", meta.total_blocks());
-                                        output_type = OutputType::Integer;
-                                    }
-                                    // total file nodes in file system
-                                    'c' => {
-                                        arg = format!("{}", meta.total_file_nodes());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // free file nodes in file system
-                                    'd' => {
-                                        arg = format!("{}", meta.free_file_nodes());
-                                        output_type = OutputType::Integer;
-                                    }
-                                    // free blocks in file system
-                                    'f' => {
-                                        arg = format!("{}", meta.free_blocks());
-                                        output_type = OutputType::Integer;
-                                    }
-                                    // file system ID in hex
-                                    'i' => {
-                                        arg = format!("{:x}", meta.fsid());
-                                        output_type = OutputType::UnsignedHex;
-                                    }
-                                    // maximum length of filenames
-                                    'l' => {
-                                        arg = format!("{}", meta.namelen());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // file name
-                                    'n' => {
-                                        arg = file.to_owned();
-                                        output_type = OutputType::Str;
-                                    }
-                                    // block size (for faster transfers)
-                                    's' => {
-                                        arg = format!("{}", meta.io_size());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // fundamental block size (for block counts)
-                                    'S' => {
-                                        arg = format!("{}", meta.block_size());
-                                        output_type = OutputType::Unsigned;
-                                    }
-                                    // file system type in hex
-                                    't' => {
-                                        arg = format!("{:x}", meta.fs_type());
-                                        output_type = OutputType::UnsignedHex;
-                                    }
-                                    // file system type in human readable form
-                                    'T' => {
-                                        arg = pretty_fstype(meta.fs_type()).into_owned();
-                                        output_type = OutputType::Str;
-                                    }
-                                    _ => {
-                                        arg = "?".to_owned();
-                                        output_type = OutputType::Unknown;
-                                    }
-                                }
-
-                                print_it(&arg, output_type, flag, width, precision);
-                            }
-                        }
-                    }
-                }
-                Err(e) => {
-                    show_error!(
-                        "cannot read file system information for {}: {}",
-                        file.quote(),
-                        e
-                    );
-                    return 1;
-                }
-            }
-        }
-        0
-    }
-
-    fn default_format(show_fs: bool, terse: bool, show_dev_type: bool) -> String {
-        // SELinux related format is *ignored*
-
-        let mut format_str = String::with_capacity(36);
-        if show_fs {
-            if terse {
-                format_str.push_str("%n %i %l %t %s %S %b %f %a %c %d\n");
-            } else {
-                format_str.push_str(
-                    "  File: \"%n\"\n    ID: %-8i Namelen: %-7l Type: %T\nBlock \
-                     size: %-10s Fundamental block size: %S\nBlocks: Total: %-10b \
-                     Free: %-10f Available: %a\nInodes: Total: %-10c Free: %d\n",
-                );
-            }
-        } else if terse {
-            format_str.push_str("%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o\n");
-        } else {
-            format_str.push_str("  File: %N\n  Size: %-10s\tBlocks: %-10b IO Block: %-6o %F\n");
-            if show_dev_type {
-                format_str
-                    .push_str("Device: %Dh/%dd\tInode: %-10i  Links: %-5h Device type: %t,%T\n");
-            } else {
-                format_str.push_str("Device: %Dh/%dd\tInode: %-10i  Links: %h\n");
-            }
-            format_str.push_str("Access: (%04a/%10.10A)  Uid: (%5u/%8U)   Gid: (%5g/%8G)\n");
-            format_str.push_str("Access: %x\nModify: %y\nChange: %z\n Birth: %w\n");
-        }
-        format_str
-    }
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... FILE...", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    String::from(
-        "
-The valid format sequences for files (without --file-system):
-
-  %a   access rights in octal (note '#' and '0' printf flags)
-  %A   access rights in human readable form
-  %b   number of blocks allocated (see %B)
-  %B   the size in bytes of each block reported by %b
-  %C   SELinux security context string
-  %d   device number in decimal
-  %D   device number in hex
-  %f   raw mode in hex
-  %F   file type
-  %g   group ID of owner
-  %G   group name of owner
-  %h   number of hard links
-  %i   inode number
-  %m   mount point
-  %n   file name
-  %N   quoted file name with dereference if symbolic link
-  %o   optimal I/O transfer size hint
-  %s   total size, in bytes
-  %t   major device type in hex, for character/block device special files
-  %T   minor device type in hex, for character/block device special files
-  %u   user ID of owner
-  %U   user name of owner
-  %w   time of file birth, human-readable; - if unknown
-  %W   time of file birth, seconds since Epoch; 0 if unknown
-  %x   time of last access, human-readable
-  %X   time of last access, seconds since Epoch
-  %y   time of last data modification, human-readable
-  %Y   time of last data modification, seconds since Epoch
-  %z   time of last status change, human-readable
-  %Z   time of last status change, seconds since Epoch
-
-Valid format sequences for file systems:
-
-  %a   free blocks available to non-superuser
-  %b   total data blocks in file system
-  %c   total file nodes in file system
-  %d   free file nodes in file system
-  %f   free blocks in file system
-  %i   file system ID in hex
-  %l   maximum length of filenames
-  %n   file name
-  %s   block size (for faster transfers)
-  %S   fundamental block size (for block counts)
-  %t   file system type in hex
-  %T   file system type in human readable form
-
-NOTE: your shell may have its own version of stat, which usually supersedes
-the version described here.  Please refer to your shell's documentation
-for details about the options it supports.
-",
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let long_usage = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&long_usage[..])
-        .get_matches_from(args);
-
-    let stater = Stater::new(matches)?;
-    let exit_status = stater.exec();
-    if exit_status == 0 {
-        Ok(())
-    } else {
-        Err(exit_status.into())
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::DEREFERENCE)
-                .short('L')
-                .long(options::DEREFERENCE)
-                .help("follow links"),
-        )
-        .arg(
-            Arg::new(options::FILE_SYSTEM)
-                .short('f')
-                .long(options::FILE_SYSTEM)
-                .help("display file system status instead of file status"),
-        )
-        .arg(
-            Arg::new(options::TERSE)
-                .short('t')
-                .long(options::TERSE)
-                .help("print the information in terse form"),
-        )
-        .arg(
-            Arg::new(options::FORMAT)
-                .short('c')
-                .long(options::FORMAT)
-                .help(
-                    "use the specified FORMAT instead of the default;
- output a newline after each use of FORMAT",
-                )
-                .value_name("FORMAT"),
-        )
-        .arg(
-            Arg::new(options::PRINTF)
-                .long(options::PRINTF)
-                .value_name("FORMAT")
-                .help(
-                    "like --format, but interpret backslash escapes,
-            and do not output a mandatory trailing newline;
-            if you want a newline, include \n in FORMAT",
-                ),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_stdbuf/stdbuf.rs.html b/src/uu_stdbuf/stdbuf.rs.html deleted file mode 100644 index bc0ce3ca5..000000000 --- a/src/uu_stdbuf/stdbuf.rs.html +++ /dev/null @@ -1,466 +0,0 @@ -stdbuf.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) Dorota Kapturkiewicz <dokaptur@gmail.com>
-// *
-// * For the full copyright and license information, please view the LICENSE
-// * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) tempdir dyld dylib dragonflybsd optgrps libstdbuf
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, AppSettings, Arg, ArgMatches};
-use std::convert::TryFrom;
-use std::fs::File;
-use std::io::{self, Write};
-use std::os::unix::process::ExitStatusExt;
-use std::path::PathBuf;
-use std::process::Command;
-use tempfile::tempdir;
-use tempfile::TempDir;
-use uucore::error::{FromIo, UResult, USimpleError, UUsageError};
-use uucore::parse_size::parse_size;
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str =
-    "Run COMMAND, with modified buffering operations for its standard streams.\n\n\
-     Mandatory arguments to long options are mandatory for short options too.";
-static LONG_HELP: &str = "If MODE is 'L' the corresponding stream will be line buffered.\n\
-     This option is invalid with standard input.\n\n\
-     If MODE is '0' the corresponding stream will be unbuffered.\n\n\
-     Otherwise MODE is a number which may be followed by one of the following:\n\n\
-     KB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.\n\
-     In this case the corresponding stream will be fully buffered with the buffer size set to \
-     MODE bytes.\n\n\
-     NOTE: If COMMAND adjusts the buffering of its standard streams ('tee' does for e.g.) then \
-     that will override corresponding settings changed by 'stdbuf'.\n\
-     Also some filters (like 'dd' and 'cat' etc.) don't use streams for I/O, \
-     and are thus unaffected by 'stdbuf' settings.\n";
-
-mod options {
-    pub const INPUT: &str = "input";
-    pub const INPUT_SHORT: char = 'i';
-    pub const OUTPUT: &str = "output";
-    pub const OUTPUT_SHORT: char = 'o';
-    pub const ERROR: &str = "error";
-    pub const ERROR_SHORT: char = 'e';
-    pub const COMMAND: &str = "command";
-}
-
-fn usage() -> String {
-    format!("{0} OPTION... COMMAND", uucore::execution_phrase())
-}
-
-const STDBUF_INJECT: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/libstdbuf.so"));
-
-enum BufferType {
-    Default,
-    Line,
-    Size(usize),
-}
-
-struct ProgramOptions {
-    stdin: BufferType,
-    stdout: BufferType,
-    stderr: BufferType,
-}
-
-impl<'a> TryFrom<&ArgMatches> for ProgramOptions {
-    type Error = ProgramOptionsError;
-
-    fn try_from(matches: &ArgMatches) -> Result<Self, Self::Error> {
-        Ok(ProgramOptions {
-            stdin: check_option(matches, options::INPUT)?,
-            stdout: check_option(matches, options::OUTPUT)?,
-            stderr: check_option(matches, options::ERROR)?,
-        })
-    }
-}
-
-struct ProgramOptionsError(String);
-
-#[cfg(any(
-    target_os = "linux",
-    target_os = "freebsd",
-    target_os = "netbsd",
-    target_os = "dragonflybsd"
-))]
-fn preload_strings() -> (&'static str, &'static str) {
-    ("LD_PRELOAD", "so")
-}
-
-#[cfg(target_vendor = "apple")]
-fn preload_strings() -> (&'static str, &'static str) {
-    ("DYLD_LIBRARY_PATH", "dylib")
-}
-
-#[cfg(not(any(
-    target_os = "linux",
-    target_os = "freebsd",
-    target_os = "netbsd",
-    target_os = "dragonflybsd",
-    target_vendor = "apple"
-)))]
-fn preload_strings() -> (&'static str, &'static str) {
-    crash!(1, "Command not supported for this operating system!")
-}
-
-fn check_option(matches: &ArgMatches, name: &str) -> Result<BufferType, ProgramOptionsError> {
-    match matches.value_of(name) {
-        Some(value) => match value {
-            "L" => {
-                if name == options::INPUT {
-                    Err(ProgramOptionsError(
-                        "line buffering stdin is meaningless".to_string(),
-                    ))
-                } else {
-                    Ok(BufferType::Line)
-                }
-            }
-            x => parse_size(x).map_or_else(
-                |e| crash!(125, "invalid mode {}", e),
-                |m| Ok(BufferType::Size(m)),
-            ),
-        },
-        None => Ok(BufferType::Default),
-    }
-}
-
-fn set_command_env(command: &mut Command, buffer_name: &str, buffer_type: BufferType) {
-    match buffer_type {
-        BufferType::Size(m) => {
-            command.env(buffer_name, m.to_string());
-        }
-        BufferType::Line => {
-            command.env(buffer_name, "L");
-        }
-        BufferType::Default => {}
-    }
-}
-
-fn get_preload_env(tmp_dir: &mut TempDir) -> io::Result<(String, PathBuf)> {
-    let (preload, extension) = preload_strings();
-    let inject_path = tmp_dir.path().join("libstdbuf").with_extension(extension);
-
-    let mut file = File::create(&inject_path)?;
-    file.write_all(STDBUF_INJECT)?;
-
-    Ok((preload.to_owned(), inject_path))
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let options = ProgramOptions::try_from(&matches).map_err(|e| UUsageError::new(125, e.0))?;
-
-    let mut command_values = matches.values_of::<&str>(options::COMMAND).unwrap();
-    let mut command = Command::new(command_values.next().unwrap());
-    let command_params: Vec<&str> = command_values.collect();
-
-    let mut tmp_dir = tempdir().unwrap();
-    let (preload_env, libstdbuf) = get_preload_env(&mut tmp_dir).map_err_context(String::new)?;
-    command.env(preload_env, libstdbuf);
-    set_command_env(&mut command, "_STDBUF_I", options.stdin);
-    set_command_env(&mut command, "_STDBUF_O", options.stdout);
-    set_command_env(&mut command, "_STDBUF_E", options.stderr);
-    command.args(command_params);
-
-    let mut process = command
-        .spawn()
-        .map_err_context(|| "failed to execute process".to_string())?;
-    let status = process.wait().map_err_context(String::new)?;
-    match status.code() {
-        Some(i) => {
-            if i == 0 {
-                Ok(())
-            } else {
-                Err(i.into())
-            }
-        }
-        None => Err(USimpleError::new(
-            1,
-            format!("process killed by signal {}", status.signal().unwrap()),
-        )),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help(LONG_HELP)
-        .setting(AppSettings::TrailingVarArg)
-        .arg(
-            Arg::new(options::INPUT)
-                .long(options::INPUT)
-                .short(options::INPUT_SHORT)
-                .help("adjust standard input stream buffering")
-                .value_name("MODE")
-                .required_unless_present_any(&[options::OUTPUT, options::ERROR]),
-        )
-        .arg(
-            Arg::new(options::OUTPUT)
-                .long(options::OUTPUT)
-                .short(options::OUTPUT_SHORT)
-                .help("adjust standard output stream buffering")
-                .value_name("MODE")
-                .required_unless_present_any(&[options::INPUT, options::ERROR]),
-        )
-        .arg(
-            Arg::new(options::ERROR)
-                .long(options::ERROR)
-                .short(options::ERROR_SHORT)
-                .help("adjust standard error stream buffering")
-                .value_name("MODE")
-                .required_unless_present_any(&[options::INPUT, options::OUTPUT]),
-        )
-        .arg(
-            Arg::new(options::COMMAND)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .hide(true)
-                .required(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sum/sum.rs.html b/src/uu_sum/sum.rs.html deleted file mode 100644 index 1d0ccf6d8..000000000 --- a/src/uu_sum/sum.rs.html +++ /dev/null @@ -1,334 +0,0 @@ -sum.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// * This file is part of the uutils coreutils package.
-// *
-// * (c) T. Jameson Little <t.jameson.little@gmail.com>
-// *
-// * For the full copyright and license information, please view the LICENSE file
-// * that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) sysv
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{stdin, Read};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-static NAME: &str = "sum";
-static USAGE: &str = "sum [OPTION]... [FILE]...";
-static SUMMARY: &str = "Checksum and count the blocks in a file.\n\
-                        With no FILE, or when  FILE is -, read standard input.";
-
-fn bsd_sum(mut reader: Box<dyn Read>) -> (usize, u16) {
-    let mut buf = [0; 1024];
-    let mut blocks_read = 0;
-    let mut checksum: u16 = 0;
-    loop {
-        match reader.read(&mut buf) {
-            Ok(n) if n != 0 => {
-                blocks_read += 1;
-                for &byte in buf[..n].iter() {
-                    checksum = (checksum >> 1) + ((checksum & 1) << 15);
-                    checksum = checksum.wrapping_add(u16::from(byte));
-                }
-            }
-            _ => break,
-        }
-    }
-
-    (blocks_read, checksum)
-}
-
-fn sysv_sum(mut reader: Box<dyn Read>) -> (usize, u16) {
-    let mut buf = [0; 512];
-    let mut blocks_read = 0;
-    let mut ret = 0u32;
-
-    loop {
-        match reader.read(&mut buf) {
-            Ok(n) if n != 0 => {
-                blocks_read += 1;
-                for &byte in buf[..n].iter() {
-                    ret = ret.wrapping_add(u32::from(byte));
-                }
-            }
-            _ => break,
-        }
-    }
-
-    ret = (ret & 0xffff) + (ret >> 16);
-    ret = (ret & 0xffff) + (ret >> 16);
-
-    (blocks_read, ret as u16)
-}
-
-fn open(name: &str) -> UResult<Box<dyn Read>> {
-    match name {
-        "-" => Ok(Box::new(stdin()) as Box<dyn Read>),
-        _ => {
-            let path = &Path::new(name);
-            if path.is_dir() {
-                return Err(USimpleError::new(
-                    2,
-                    format!("{}: Is a directory", name.maybe_quote()),
-                ));
-            };
-            // Silent the warning as we want to the error message
-            if path.metadata().is_err() {
-                return Err(USimpleError::new(
-                    2,
-                    format!("{}: No such file or directory", name.maybe_quote()),
-                ));
-            };
-            let f = File::open(path).map_err_context(String::new)?;
-            Ok(Box::new(f) as Box<dyn Read>)
-        }
-    }
-}
-
-mod options {
-    pub static FILE: &str = "file";
-    pub static BSD_COMPATIBLE: &str = "r";
-    pub static SYSTEM_V_COMPATIBLE: &str = "sysv";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let files: Vec<String> = match matches.values_of(options::FILE) {
-        Some(v) => v.clone().map(|v| v.to_owned()).collect(),
-        None => vec!["-".to_owned()],
-    };
-
-    let sysv = matches.is_present(options::SYSTEM_V_COMPATIBLE);
-
-    let print_names = if sysv {
-        files.len() > 1 || files[0] != "-"
-    } else {
-        files.len() > 1
-    };
-
-    for file in &files {
-        let reader = match open(file) {
-            Ok(f) => f,
-            Err(error) => {
-                show!(error);
-                continue;
-            }
-        };
-        let (blocks, sum) = if sysv {
-            sysv_sum(reader)
-        } else {
-            bsd_sum(reader)
-        };
-
-        if print_names {
-            println!("{} {} {}", sum, blocks, file);
-        } else {
-            println!("{} {}", sum, blocks);
-        }
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::FILE)
-                .multiple_occurrences(true)
-                .hide(true),
-        )
-        .arg(
-            Arg::new(options::BSD_COMPATIBLE)
-                .short('r')
-                .help("use the BSD sum algorithm, use 1K blocks (default)"),
-        )
-        .arg(
-            Arg::new(options::SYSTEM_V_COMPATIBLE)
-                .short('s')
-                .long(options::SYSTEM_V_COMPATIBLE)
-                .help("use System V sum algorithm, use 512 bytes blocks"),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_sync/sync.rs.html b/src/uu_sync/sync.rs.html deleted file mode 100644 index 4e7d91487..000000000 --- a/src/uu_sync/sync.rs.html +++ /dev/null @@ -1,472 +0,0 @@ -sync.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alexander Fomin <xander.fomin@ya.ru>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-/* Last synced with: sync (GNU coreutils) 8.13 */
-
-extern crate libc;
-
-use clap::{crate_version, App, Arg};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-
-static ABOUT: &str = "Synchronize cached writes to persistent storage";
-pub mod options {
-    pub static FILE_SYSTEM: &str = "file-system";
-    pub static DATA: &str = "data";
-}
-
-static ARG_FILES: &str = "files";
-
-#[cfg(unix)]
-mod platform {
-    use super::libc;
-    #[cfg(target_os = "linux")]
-    use std::fs::File;
-    #[cfg(target_os = "linux")]
-    use std::os::unix::io::AsRawFd;
-
-    pub unsafe fn do_sync() -> isize {
-        libc::sync();
-        0
-    }
-
-    #[cfg(target_os = "linux")]
-    pub unsafe fn do_syncfs(files: Vec<String>) -> isize {
-        for path in files {
-            let f = File::open(&path).unwrap();
-            let fd = f.as_raw_fd();
-            libc::syscall(libc::SYS_syncfs, fd);
-        }
-        0
-    }
-
-    #[cfg(target_os = "linux")]
-    pub unsafe fn do_fdatasync(files: Vec<String>) -> isize {
-        for path in files {
-            let f = File::open(&path).unwrap();
-            let fd = f.as_raw_fd();
-            libc::syscall(libc::SYS_fdatasync, fd);
-        }
-        0
-    }
-}
-
-#[cfg(windows)]
-mod platform {
-    extern crate winapi;
-    use self::winapi::shared::minwindef;
-    use self::winapi::shared::winerror;
-    use self::winapi::um::handleapi;
-    use self::winapi::um::winbase;
-    use self::winapi::um::winnt;
-    use std::fs::OpenOptions;
-    use std::mem;
-    use std::os::windows::prelude::*;
-    use std::path::Path;
-    use uucore::crash;
-    use uucore::wide::{FromWide, ToWide};
-
-    unsafe fn flush_volume(name: &str) {
-        let name_wide = name.to_wide_null();
-        if winapi::um::fileapi::GetDriveTypeW(name_wide.as_ptr()) == winbase::DRIVE_FIXED {
-            let sliced_name = &name[..name.len() - 1]; // eliminate trailing backslash
-            match OpenOptions::new().write(true).open(sliced_name) {
-                Ok(file) => {
-                    if winapi::um::fileapi::FlushFileBuffers(file.as_raw_handle()) == 0 {
-                        crash!(
-                            winapi::um::errhandlingapi::GetLastError() as i32,
-                            "failed to flush file buffer"
-                        );
-                    }
-                }
-                Err(e) => crash!(
-                    e.raw_os_error().unwrap_or(1),
-                    "failed to create volume handle"
-                ),
-            }
-        }
-    }
-
-    unsafe fn find_first_volume() -> (String, winnt::HANDLE) {
-        #[allow(deprecated)]
-        let mut name: [winnt::WCHAR; minwindef::MAX_PATH] = mem::uninitialized();
-        let handle = winapi::um::fileapi::FindFirstVolumeW(
-            name.as_mut_ptr(),
-            name.len() as minwindef::DWORD,
-        );
-        if handle == handleapi::INVALID_HANDLE_VALUE {
-            crash!(
-                winapi::um::errhandlingapi::GetLastError() as i32,
-                "failed to find first volume"
-            );
-        }
-        (String::from_wide_null(&name), handle)
-    }
-
-    unsafe fn find_all_volumes() -> Vec<String> {
-        let (first_volume, next_volume_handle) = find_first_volume();
-        let mut volumes = vec![first_volume];
-        loop {
-            #[allow(deprecated)]
-            let mut name: [winnt::WCHAR; minwindef::MAX_PATH] = mem::uninitialized();
-            if winapi::um::fileapi::FindNextVolumeW(
-                next_volume_handle,
-                name.as_mut_ptr(),
-                name.len() as minwindef::DWORD,
-            ) == 0
-            {
-                match winapi::um::errhandlingapi::GetLastError() {
-                    winerror::ERROR_NO_MORE_FILES => {
-                        winapi::um::fileapi::FindVolumeClose(next_volume_handle);
-                        return volumes;
-                    }
-                    err => crash!(err as i32, "failed to find next volume"),
-                }
-            } else {
-                volumes.push(String::from_wide_null(&name));
-            }
-        }
-    }
-
-    pub unsafe fn do_sync() -> isize {
-        let volumes = find_all_volumes();
-        for vol in &volumes {
-            flush_volume(vol);
-        }
-        0
-    }
-
-    pub unsafe fn do_syncfs(files: Vec<String>) -> isize {
-        for path in files {
-            flush_volume(
-                Path::new(&path)
-                    .components()
-                    .next()
-                    .unwrap()
-                    .as_os_str()
-                    .to_str()
-                    .unwrap(),
-            );
-        }
-        0
-    }
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... FILE...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let files: Vec<String> = matches
-        .values_of(ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    for f in &files {
-        if !Path::new(&f).exists() {
-            return Err(USimpleError::new(
-                1,
-                format!("cannot stat {}: No such file or directory", f.quote()),
-            ));
-        }
-    }
-
-    #[allow(clippy::if_same_then_else)]
-    if matches.is_present(options::FILE_SYSTEM) {
-        #[cfg(any(target_os = "linux", target_os = "windows"))]
-        syncfs(files);
-    } else if matches.is_present(options::DATA) {
-        #[cfg(target_os = "linux")]
-        fdatasync(files);
-    } else {
-        sync();
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::FILE_SYSTEM)
-                .short('f')
-                .long(options::FILE_SYSTEM)
-                .conflicts_with(options::DATA)
-                .help("sync the file systems that contain the files (Linux and Windows only)"),
-        )
-        .arg(
-            Arg::new(options::DATA)
-                .short('d')
-                .long(options::DATA)
-                .conflicts_with(options::FILE_SYSTEM)
-                .help("sync only file data, no unneeded metadata (Linux only)"),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true),
-        )
-}
-
-fn sync() -> isize {
-    unsafe { platform::do_sync() }
-}
-
-#[cfg(any(target_os = "linux", target_os = "windows"))]
-fn syncfs(files: Vec<String>) -> isize {
-    unsafe { platform::do_syncfs(files) }
-}
-
-#[cfg(target_os = "linux")]
-fn fdatasync(files: Vec<String>) -> isize {
-    unsafe { platform::do_fdatasync(files) }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tac/error.rs.html b/src/uu_tac/error.rs.html deleted file mode 100644 index 1417ed219..000000000 --- a/src/uu_tac/error.rs.html +++ /dev/null @@ -1,124 +0,0 @@ -error.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-//! Errors returned by tac during processing of a file.
-use std::error::Error;
-use std::fmt::Display;
-
-use uucore::display::Quotable;
-use uucore::error::UError;
-
-#[derive(Debug)]
-pub enum TacError {
-    /// A regular expression given by the user is invalid.
-    InvalidRegex(regex::Error),
-
-    /// An argument to tac is invalid.
-    InvalidArgument(String),
-
-    /// The specified file is not found on the filesystem.
-    FileNotFound(String),
-
-    /// An error reading the contents of a file or stdin.
-    ///
-    /// The parameters are the name of the file and the underlying
-    /// [`std::io::Error`] that caused this error.
-    ReadError(String, std::io::Error),
-
-    /// An error writing the (reversed) contents of a file or stdin.
-    ///
-    /// The parameter is the underlying [`std::io::Error`] that caused
-    /// this error.
-    WriteError(std::io::Error),
-}
-
-impl UError for TacError {
-    fn code(&self) -> i32 {
-        1
-    }
-}
-
-impl Error for TacError {}
-
-impl Display for TacError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            TacError::InvalidRegex(e) => write!(f, "invalid regular expression: {}", e),
-            TacError::InvalidArgument(s) => {
-                write!(f, "{}: read error: Invalid argument", s.maybe_quote())
-            }
-            TacError::FileNotFound(s) => write!(
-                f,
-                "failed to open {} for reading: No such file or directory",
-                s.quote()
-            ),
-            TacError::ReadError(s, e) => write!(f, "failed to read from {}: {}", s, e),
-            TacError::WriteError(e) => write!(f, "failed to write to stdout: {}", e),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tac/tac.rs.html b/src/uu_tac/tac.rs.html deleted file mode 100644 index ea4493066..000000000 --- a/src/uu_tac/tac.rs.html +++ /dev/null @@ -1,636 +0,0 @@ -tac.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) sbytes slen dlen memmem memmap Mmap mmap SIGBUS
-mod error;
-
-use clap::{crate_version, App, Arg};
-use memchr::memmem;
-use memmap2::Mmap;
-use std::io::{stdin, stdout, BufWriter, Read, Write};
-use std::{
-    fs::{read, File},
-    path::Path,
-};
-use uucore::display::Quotable;
-use uucore::error::UError;
-use uucore::error::UResult;
-use uucore::show;
-use uucore::InvalidEncodingHandling;
-
-use crate::error::TacError;
-
-static NAME: &str = "tac";
-static USAGE: &str = "[OPTION]... [FILE]...";
-static SUMMARY: &str = "Write each file to standard output, last line first.";
-
-mod options {
-    pub static BEFORE: &str = "before";
-    pub static REGEX: &str = "regex";
-    pub static SEPARATOR: &str = "separator";
-    pub static FILE: &str = "file";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let before = matches.is_present(options::BEFORE);
-    let regex = matches.is_present(options::REGEX);
-    let raw_separator = matches.value_of(options::SEPARATOR).unwrap_or("\n");
-    let separator = if raw_separator.is_empty() {
-        "\0"
-    } else {
-        raw_separator
-    };
-
-    let files: Vec<&str> = match matches.values_of(options::FILE) {
-        Some(v) => v.collect(),
-        None => vec!["-"],
-    };
-
-    tac(files, before, regex, separator)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .about(SUMMARY)
-        .arg(
-            Arg::new(options::BEFORE)
-                .short('b')
-                .long(options::BEFORE)
-                .help("attach the separator before instead of after")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::REGEX)
-                .short('r')
-                .long(options::REGEX)
-                .help("interpret the sequence as a regular expression")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::SEPARATOR)
-                .short('s')
-                .long(options::SEPARATOR)
-                .help("use STRING as the separator instead of newline")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .hide(true)
-                .multiple_occurrences(true),
-        )
-}
-
-/// Print lines of a buffer in reverse, with line separator given as a regex.
-///
-/// `data` contains the bytes of the file.
-///
-/// `pattern` is the regular expression given as a
-/// [`regex::bytes::Regex`] (not a [`regex::Regex`], since the input is
-/// given as a slice of bytes). If `before` is `true`, then each match
-/// of this pattern in `data` is interpreted as the start of a line. If
-/// `before` is `false`, then each match of this pattern is interpreted
-/// as the end of a line.
-///
-/// This function writes each line in `data` to [`std::io::Stdout`] in
-/// reverse.
-///
-/// # Errors
-///
-/// If there is a problem writing to `stdout`, then this function
-/// returns [`std::io::Error`].
-fn buffer_tac_regex(
-    data: &[u8],
-    pattern: &regex::bytes::Regex,
-    before: bool,
-) -> std::io::Result<()> {
-    let out = stdout();
-    let mut out = BufWriter::new(out.lock());
-
-    // The index of the line separator for the current line.
-    //
-    // As we scan through the `data` from right to left, we update this
-    // variable each time we find a new line separator. We restrict our
-    // regular expression search to only those bytes up to the line
-    // separator.
-    let mut this_line_end = data.len();
-
-    // The index of the start of the next line in the `data`.
-    //
-    // As we scan through the `data` from right to left, we update this
-    // variable each time we find a new line.
-    //
-    // If `before` is `true`, then each line starts immediately before
-    // the line separator. Otherwise, each line starts immediately after
-    // the line separator.
-    let mut following_line_start = data.len();
-
-    // Iterate over each byte in the buffer in reverse. When we find a
-    // line separator, write the line to stdout.
-    //
-    // The `before` flag controls whether the line separator appears at
-    // the end of the line (as in "abc\ndef\n") or at the beginning of
-    // the line (as in "/abc/def").
-    for i in (0..data.len()).rev() {
-        // Determine if there is a match for `pattern` starting at index
-        // `i` in `data`. Only search up to the line ending that was
-        // found previously.
-        if let Some(match_) = pattern.find_at(&data[..this_line_end], i) {
-            // Record this index as the ending of the current line.
-            this_line_end = i;
-
-            // The length of the match (that is, the line separator), in bytes.
-            let slen = match_.end() - match_.start();
-
-            if before {
-                out.write_all(&data[i..following_line_start])?;
-                following_line_start = i;
-            } else {
-                out.write_all(&data[i + slen..following_line_start])?;
-                following_line_start = i + slen;
-            }
-        }
-    }
-
-    // After the loop terminates, write whatever bytes are remaining at
-    // the beginning of the buffer.
-    out.write_all(&data[0..following_line_start])?;
-    Ok(())
-}
-
-/// Write lines from `data` to stdout in reverse.
-///
-/// This function writes to [`stdout`] each line appearing in `data`,
-/// starting with the last line and ending with the first line. The
-/// `separator` parameter defines what characters to use as a line
-/// separator.
-///
-/// If `before` is `false`, then this function assumes that the
-/// `separator` appears at the end of each line, as in `"abc\ndef\n"`.
-/// If `before` is `true`, then this function assumes that the
-/// `separator` appears at the beginning of each line, as in
-/// `"/abc/def"`.
-fn buffer_tac(data: &[u8], before: bool, separator: &str) -> std::io::Result<()> {
-    let out = stdout();
-    let mut out = BufWriter::new(out.lock());
-
-    // The number of bytes in the line separator.
-    let slen = separator.as_bytes().len();
-
-    // The index of the start of the next line in the `data`.
-    //
-    // As we scan through the `data` from right to left, we update this
-    // variable each time we find a new line.
-    //
-    // If `before` is `true`, then each line starts immediately before
-    // the line separator. Otherwise, each line starts immediately after
-    // the line separator.
-    let mut following_line_start = data.len();
-
-    // Iterate over each byte in the buffer in reverse. When we find a
-    // line separator, write the line to stdout.
-    //
-    // The `before` flag controls whether the line separator appears at
-    // the end of the line (as in "abc\ndef\n") or at the beginning of
-    // the line (as in "/abc/def").
-    for i in memmem::rfind_iter(data, separator) {
-        if before {
-            out.write_all(&data[i..following_line_start])?;
-            following_line_start = i;
-        } else {
-            out.write_all(&data[i + slen..following_line_start])?;
-            following_line_start = i + slen;
-        }
-    }
-
-    // After the loop terminates, write whatever bytes are remaining at
-    // the beginning of the buffer.
-    out.write_all(&data[0..following_line_start])?;
-    Ok(())
-}
-
-fn tac(filenames: Vec<&str>, before: bool, regex: bool, separator: &str) -> UResult<()> {
-    // Compile the regular expression pattern if it is provided.
-    let maybe_pattern = if regex {
-        match regex::bytes::Regex::new(separator) {
-            Ok(p) => Some(p),
-            Err(e) => return Err(TacError::InvalidRegex(e).into()),
-        }
-    } else {
-        None
-    };
-
-    for &filename in &filenames {
-        let mmap;
-        let buf;
-
-        let data: &[u8] = if filename == "-" {
-            if let Some(mmap1) = try_mmap_stdin() {
-                mmap = mmap1;
-                &mmap
-            } else {
-                let mut buf1 = Vec::new();
-                if let Err(e) = stdin().read_to_end(&mut buf1) {
-                    let e: Box<dyn UError> = TacError::ReadError("stdin".to_string(), e).into();
-                    show!(e);
-                    continue;
-                }
-                buf = buf1;
-                &buf
-            }
-        } else {
-            let path = Path::new(filename);
-            if path.is_dir() {
-                let e: Box<dyn UError> = TacError::InvalidArgument(String::from(filename)).into();
-                show!(e);
-                continue;
-            }
-
-            if path.metadata().is_err() {
-                let e: Box<dyn UError> = TacError::FileNotFound(String::from(filename)).into();
-                show!(e);
-                continue;
-            }
-
-            if let Some(mmap1) = try_mmap_path(path) {
-                mmap = mmap1;
-                &mmap
-            } else {
-                match read(path) {
-                    Ok(buf1) => {
-                        buf = buf1;
-                        &buf
-                    }
-                    Err(e) => {
-                        let s = format!("{}", filename.quote());
-                        let e: Box<dyn UError> = TacError::ReadError(s.to_string(), e).into();
-                        show!(e);
-                        continue;
-                    }
-                }
-            }
-        };
-
-        // Select the appropriate `tac` algorithm based on whether the
-        // separator is given as a regular expression or a fixed string.
-        let result = match maybe_pattern {
-            Some(ref pattern) => buffer_tac_regex(data, pattern, before),
-            None => buffer_tac(data, before, separator),
-        };
-
-        // If there is any error in writing the output, terminate immediately.
-        if let Err(e) = result {
-            return Err(TacError::WriteError(e).into());
-        }
-    }
-    Ok(())
-}
-
-fn try_mmap_stdin() -> Option<Mmap> {
-    // SAFETY: If the file is truncated while we map it, SIGBUS will be raised
-    // and our process will be terminated, thus preventing access of invalid memory.
-    unsafe { Mmap::map(&stdin()).ok() }
-}
-
-fn try_mmap_path(path: &Path) -> Option<Mmap> {
-    let file = File::open(path).ok()?;
-
-    // SAFETY: If the file is truncated while we map it, SIGBUS will be raised
-    // and our process will be terminated, thus preventing access of invalid memory.
-    let mmap = unsafe { Mmap::map(&file).ok()? };
-
-    Some(mmap)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tail/chunks.rs.html b/src/uu_tail/chunks.rs.html deleted file mode 100644 index 21d35ca07..000000000 --- a/src/uu_tail/chunks.rs.html +++ /dev/null @@ -1,170 +0,0 @@ -chunks.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-
//! Iterating over a file by chunks, starting at the end of the file.
-//!
-//! Use [`ReverseChunks::new`] to create a new iterator over chunks of
-//! bytes from the file.
-use std::fs::File;
-use std::io::{Read, Seek, SeekFrom};
-
-/// When reading files in reverse in `bounded_tail`, this is the size of each
-/// block read at a time.
-pub const BLOCK_SIZE: u64 = 1 << 16;
-
-/// An iterator over a file in non-overlapping chunks from the end of the file.
-///
-/// Each chunk is a [`Vec`]<[`u8`]> of size [`BLOCK_SIZE`] (except
-/// possibly the last chunk, which might be smaller). Each call to
-/// [`next`] will seek backwards through the given file.
-pub struct ReverseChunks<'a> {
-    /// The file to iterate over, by blocks, from the end to the beginning.
-    file: &'a File,
-
-    /// The total number of bytes in the file.
-    size: u64,
-
-    /// The total number of blocks to read.
-    max_blocks_to_read: usize,
-
-    /// The index of the next block to read.
-    block_idx: usize,
-}
-
-impl<'a> ReverseChunks<'a> {
-    pub fn new(file: &'a mut File) -> ReverseChunks<'a> {
-        let size = file.seek(SeekFrom::End(0)).unwrap();
-        let max_blocks_to_read = (size as f64 / BLOCK_SIZE as f64).ceil() as usize;
-        let block_idx = 0;
-        ReverseChunks {
-            file,
-            size,
-            max_blocks_to_read,
-            block_idx,
-        }
-    }
-}
-
-impl<'a> Iterator for ReverseChunks<'a> {
-    type Item = Vec<u8>;
-
-    fn next(&mut self) -> Option<Self::Item> {
-        // If there are no more chunks to read, terminate the iterator.
-        if self.block_idx >= self.max_blocks_to_read {
-            return None;
-        }
-
-        // The chunk size is `BLOCK_SIZE` for all but the last chunk
-        // (that is, the chunk closest to the beginning of the file),
-        // which contains the remainder of the bytes.
-        let block_size = if self.block_idx == self.max_blocks_to_read - 1 {
-            self.size % BLOCK_SIZE
-        } else {
-            BLOCK_SIZE
-        };
-
-        // Seek backwards by the next chunk, read the full chunk into
-        // `buf`, and then seek back to the start of the chunk again.
-        let mut buf = vec![0; BLOCK_SIZE as usize];
-        let pos = self
-            .file
-            .seek(SeekFrom::Current(-(block_size as i64)))
-            .unwrap();
-        self.file
-            .read_exact(&mut buf[0..(block_size as usize)])
-            .unwrap();
-        let pos2 = self
-            .file
-            .seek(SeekFrom::Current(-(block_size as i64)))
-            .unwrap();
-        assert_eq!(pos, pos2);
-
-        self.block_idx += 1;
-
-        Some(buf[0..(block_size as usize)].to_vec())
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tail/lines.rs.html b/src/uu_tail/lines.rs.html deleted file mode 100644 index ca7b5ffcb..000000000 --- a/src/uu_tail/lines.rs.html +++ /dev/null @@ -1,170 +0,0 @@ -lines.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-//! Iterate over lines, including the line ending character(s).
-//!
-//! This module provides the [`lines`] function, similar to the
-//! [`BufRead::lines`] method. While the [`BufRead::lines`] method
-//! yields [`String`] instances that do not include the line ending
-//! characters (`"\n"` or `"\r\n"`), our function yields [`String`]
-//! instances that include the line ending characters. This is useful
-//! if the input data does not end with a newline character and you
-//! want to preserve the exact form of the input data.
-use std::io::BufRead;
-
-/// Returns an iterator over the lines, including line ending characters.
-///
-/// This function is just like [`BufRead::lines`], but it includes the
-/// line ending characters in each yielded [`String`] if the input
-/// data has them.
-///
-/// # Examples
-///
-/// If the input data does not end with a newline character (`'\n'`),
-/// then the last [`String`] yielded by this iterator also does not
-/// end with a newline:
-///
-/// ```rust,ignore
-/// use std::io::BufRead;
-/// use std::io::Cursor;
-///
-/// let cursor = Cursor::new(b"x\ny\nz");
-/// let mut it = cursor.lines();
-///
-/// assert_eq!(it.next(), Some(String::from("x\n")));
-/// assert_eq!(it.next(), Some(String::from("y\n")));
-/// assert_eq!(it.next(), Some(String::from("z")));
-/// assert_eq!(it.next(), None);
-/// ```
-pub(crate) fn lines<B>(reader: B) -> Lines<B>
-where
-    B: BufRead,
-{
-    Lines { buf: reader }
-}
-
-/// An iterator over the lines of an instance of `BufRead`.
-///
-/// This struct is generally created by calling [`lines`] on a `BufRead`.
-/// Please see the documentation of [`lines`] for more details.
-pub(crate) struct Lines<B> {
-    buf: B,
-}
-
-impl<B: BufRead> Iterator for Lines<B> {
-    type Item = std::io::Result<String>;
-
-    fn next(&mut self) -> Option<std::io::Result<String>> {
-        let mut buf = String::new();
-        match self.buf.read_line(&mut buf) {
-            Ok(0) => None,
-            Ok(_n) => Some(Ok(buf)),
-            Err(e) => Some(Err(e)),
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use crate::lines::lines;
-    use std::io::Cursor;
-
-    #[test]
-    fn test_lines() {
-        let cursor = Cursor::new(b"x\ny\nz");
-        let mut it = lines(cursor).map(|l| l.unwrap());
-
-        assert_eq!(it.next(), Some(String::from("x\n")));
-        assert_eq!(it.next(), Some(String::from("y\n")));
-        assert_eq!(it.next(), Some(String::from("z")));
-        assert_eq!(it.next(), None);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tail/parse.rs.html b/src/uu_tail/parse.rs.html deleted file mode 100644 index bfaa7ec24..000000000 --- a/src/uu_tail/parse.rs.html +++ /dev/null @@ -1,326 +0,0 @@ -parse.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-148
-149
-150
-151
-152
-153
-154
-155
-156
-157
-158
-159
-160
-161
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use std::ffi::OsString;
-
-#[derive(PartialEq, Debug)]
-pub enum ParseError {
-    Syntax,
-    Overflow,
-}
-/// Parses obsolete syntax
-/// tail -NUM[kmzv] // spell-checker:disable-line
-pub fn parse_obsolete(src: &str) -> Option<Result<impl Iterator<Item = OsString>, ParseError>> {
-    let mut chars = src.char_indices();
-    if let Some((_, '-')) = chars.next() {
-        let mut num_end = 0usize;
-        let mut has_num = false;
-        let mut last_char = 0 as char;
-        for (n, c) in &mut chars {
-            if c.is_numeric() {
-                has_num = true;
-                num_end = n;
-            } else {
-                last_char = c;
-                break;
-            }
-        }
-        if has_num {
-            match src[1..=num_end].parse::<usize>() {
-                Ok(num) => {
-                    let mut quiet = false;
-                    let mut verbose = false;
-                    let mut zero_terminated = false;
-                    let mut multiplier = None;
-                    let mut c = last_char;
-                    loop {
-                        // not that here, we only match lower case 'k', 'c', and 'm'
-                        match c {
-                            // we want to preserve order
-                            // this also saves us 1 heap allocation
-                            'q' => {
-                                quiet = true;
-                                verbose = false
-                            }
-                            'v' => {
-                                verbose = true;
-                                quiet = false
-                            }
-                            'z' => zero_terminated = true,
-                            'c' => multiplier = Some(1),
-                            'b' => multiplier = Some(512),
-                            'k' => multiplier = Some(1024),
-                            'm' => multiplier = Some(1024 * 1024),
-                            '\0' => {}
-                            _ => return Some(Err(ParseError::Syntax)),
-                        }
-                        if let Some((_, next)) = chars.next() {
-                            c = next
-                        } else {
-                            break;
-                        }
-                    }
-                    let mut options = Vec::new();
-                    if quiet {
-                        options.push(OsString::from("-q"))
-                    }
-                    if verbose {
-                        options.push(OsString::from("-v"))
-                    }
-                    if zero_terminated {
-                        options.push(OsString::from("-z"))
-                    }
-                    if let Some(n) = multiplier {
-                        options.push(OsString::from("-c"));
-                        let num = match num.checked_mul(n) {
-                            Some(n) => n,
-                            None => return Some(Err(ParseError::Overflow)),
-                        };
-                        options.push(OsString::from(format!("{}", num)));
-                    } else {
-                        options.push(OsString::from("-n"));
-                        options.push(OsString::from(format!("{}", num)));
-                    }
-                    Some(Ok(options.into_iter()))
-                }
-                Err(_) => Some(Err(ParseError::Overflow)),
-            }
-        } else {
-            None
-        }
-    } else {
-        None
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    fn obsolete(src: &str) -> Option<Result<Vec<String>, ParseError>> {
-        let r = parse_obsolete(src);
-        match r {
-            Some(s) => match s {
-                Ok(v) => Some(Ok(v.map(|s| s.to_str().unwrap().to_owned()).collect())),
-                Err(e) => Some(Err(e)),
-            },
-            None => None,
-        }
-    }
-    fn obsolete_result(src: &[&str]) -> Option<Result<Vec<String>, ParseError>> {
-        Some(Ok(src.iter().map(|s| s.to_string()).collect()))
-    }
-    #[test]
-    fn test_parse_numbers_obsolete() {
-        assert_eq!(obsolete("-5"), obsolete_result(&["-n", "5"]));
-        assert_eq!(obsolete("-100"), obsolete_result(&["-n", "100"]));
-        assert_eq!(obsolete("-5m"), obsolete_result(&["-c", "5242880"]));
-        assert_eq!(obsolete("-1k"), obsolete_result(&["-c", "1024"]));
-        assert_eq!(obsolete("-2b"), obsolete_result(&["-c", "1024"]));
-        assert_eq!(obsolete("-1mmk"), obsolete_result(&["-c", "1024"]));
-        assert_eq!(obsolete("-1vz"), obsolete_result(&["-v", "-z", "-n", "1"]));
-        assert_eq!(
-            obsolete("-1vzqvq"), // spell-checker:disable-line
-            obsolete_result(&["-q", "-z", "-n", "1"])
-        );
-        assert_eq!(obsolete("-1vzc"), obsolete_result(&["-v", "-z", "-c", "1"]));
-        assert_eq!(
-            obsolete("-105kzm"),
-            obsolete_result(&["-z", "-c", "110100480"])
-        );
-    }
-    #[test]
-    fn test_parse_errors_obsolete() {
-        assert_eq!(obsolete("-5n"), Some(Err(ParseError::Syntax)));
-        assert_eq!(obsolete("-5c5"), Some(Err(ParseError::Syntax)));
-    }
-    #[test]
-    fn test_parse_obsolete_no_match() {
-        assert_eq!(obsolete("-k"), None);
-        assert_eq!(obsolete("asd"), None);
-    }
-    #[test]
-    #[cfg(target_pointer_width = "64")]
-    fn test_parse_obsolete_overflow_x64() {
-        assert_eq!(
-            obsolete("-1000000000000000m"),
-            Some(Err(ParseError::Overflow))
-        );
-        assert_eq!(
-            obsolete("-10000000000000000000000"),
-            Some(Err(ParseError::Overflow))
-        );
-    }
-    #[test]
-    #[cfg(target_pointer_width = "32")]
-    fn test_parse_obsolete_overflow_x32() {
-        assert_eq!(obsolete("-42949672960"), Some(Err(ParseError::Overflow)));
-        assert_eq!(obsolete("-42949672k"), Some(Err(ParseError::Overflow)));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tail/platform/mod.rs.html b/src/uu_tail/platform/mod.rs.html deleted file mode 100644 index 467a90671..000000000 --- a/src/uu_tail/platform/mod.rs.html +++ /dev/null @@ -1,46 +0,0 @@ -mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-
/*
- * This file is part of the uutils coreutils package.
- *
- * (c) Alexander Batischev <eual.jp@gmail.com>
- * (c) Thomas Queiroz <thomasqueirozb@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-#[cfg(unix)]
-pub use self::unix::{stdin_is_pipe_or_fifo, supports_pid_checks, Pid, ProcessChecker};
-
-#[cfg(windows)]
-pub use self::windows::{supports_pid_checks, Pid, ProcessChecker};
-
-#[cfg(unix)]
-mod unix;
-
-#[cfg(windows)]
-mod windows;
-
-
- \ No newline at end of file diff --git a/src/uu_tail/platform/unix.rs.html b/src/uu_tail/platform/unix.rs.html deleted file mode 100644 index b9a09ab1f..000000000 --- a/src/uu_tail/platform/unix.rs.html +++ /dev/null @@ -1,128 +0,0 @@ -unix.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-
/*
- * This file is part of the uutils coreutils package.
- *
- * (c) Alexander Batischev <eual.jp@gmail.com>
- * (c) Thomas Queiroz <thomasqueirozb@gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-// spell-checker:ignore (ToDO) errno EPERM ENOSYS
-
-use std::io::{stdin, Error};
-
-use std::os::unix::prelude::AsRawFd;
-
-use nix::sys::stat::fstat;
-
-use libc::{S_IFIFO, S_IFSOCK};
-
-pub type Pid = libc::pid_t;
-
-pub struct ProcessChecker {
-    pid: self::Pid,
-}
-
-impl ProcessChecker {
-    pub fn new(process_id: self::Pid) -> ProcessChecker {
-        ProcessChecker { pid: process_id }
-    }
-
-    // Borrowing mutably to be aligned with Windows implementation
-    pub fn is_dead(&mut self) -> bool {
-        unsafe { libc::kill(self.pid, 0) != 0 && get_errno() != libc::EPERM }
-    }
-}
-
-impl Drop for ProcessChecker {
-    fn drop(&mut self) {}
-}
-
-pub fn supports_pid_checks(pid: self::Pid) -> bool {
-    unsafe { !(libc::kill(pid, 0) != 0 && get_errno() == libc::ENOSYS) }
-}
-
-#[inline]
-fn get_errno() -> i32 {
-    Error::last_os_error().raw_os_error().unwrap()
-}
-
-pub fn stdin_is_pipe_or_fifo() -> bool {
-    let fd = stdin().lock().as_raw_fd();
-    fd >= 0 // GNU tail checks fd >= 0
-                            && match fstat(fd) {
-                                Ok(stat) => {
-                                    let mode = stat.st_mode;
-                                    // NOTE: This is probably not the most correct way to check this
-                                    (mode & S_IFIFO != 0) || (mode & S_IFSOCK != 0)
-                                }
-                                Err(err) => panic!("{}", err),
-                            }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tail/tail.rs.html b/src/uu_tail/tail.rs.html deleted file mode 100644 index 67adfb7a8..000000000 --- a/src/uu_tail/tail.rs.html +++ /dev/null @@ -1,1316 +0,0 @@ -tail.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Morten Olsen Lysgaard <morten@lysgaard.no>
-//  * (c) Alexander Batischev <eual.jp@gmail.com>
-//  * (c) Thomas Queiroz <thomasqueirozb@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) seekable seek'd tail'ing ringbuffer ringbuf
-
-#[macro_use]
-extern crate clap;
-
-#[macro_use]
-extern crate uucore;
-
-mod chunks;
-mod lines;
-mod parse;
-mod platform;
-use chunks::ReverseChunks;
-use lines::lines;
-
-use clap::{App, Arg};
-use std::collections::VecDeque;
-use std::ffi::OsString;
-use std::fmt;
-use std::fs::{File, Metadata};
-use std::io::{stdin, stdout, BufRead, BufReader, Read, Seek, SeekFrom, Write};
-use std::path::Path;
-use std::thread::sleep;
-use std::time::Duration;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::parse_size::{parse_size, ParseSizeError};
-use uucore::ringbuffer::RingBuffer;
-
-#[cfg(unix)]
-use crate::platform::stdin_is_pipe_or_fifo;
-#[cfg(unix)]
-use std::os::unix::fs::MetadataExt;
-
-const ABOUT: &str = "\
-                     Print the last 10 lines of each FILE to standard output.\n\
-                     With more than one FILE, precede each with a header giving the file name.\n\
-                     With no FILE, or when FILE is -, read standard input.\n\
-                     \n\
-                     Mandatory arguments to long flags are mandatory for short flags too.\
-                     ";
-const USAGE: &str = "tail [FLAG]... [FILE]...";
-
-pub mod options {
-    pub mod verbosity {
-        pub static QUIET: &str = "quiet";
-        pub static VERBOSE: &str = "verbose";
-    }
-    pub static BYTES: &str = "bytes";
-    pub static FOLLOW: &str = "follow";
-    pub static LINES: &str = "lines";
-    pub static PID: &str = "pid";
-    pub static SLEEP_INT: &str = "sleep-interval";
-    pub static ZERO_TERM: &str = "zero-terminated";
-    pub static ARG_FILES: &str = "files";
-}
-
-#[derive(Debug)]
-enum FilterMode {
-    Bytes(usize),
-    Lines(usize, u8), // (number of lines, delimiter)
-}
-
-impl Default for FilterMode {
-    fn default() -> Self {
-        FilterMode::Lines(10, b'\n')
-    }
-}
-
-#[derive(Debug, Default)]
-struct Settings {
-    quiet: bool,
-    verbose: bool,
-    mode: FilterMode,
-    sleep_msec: u32,
-    beginning: bool,
-    follow: bool,
-    pid: platform::Pid,
-    files: Vec<String>,
-}
-
-impl Settings {
-    pub fn get_from(args: impl uucore::Args) -> Result<Self, String> {
-        let matches = uu_app().get_matches_from(arg_iterate(args)?);
-
-        let mut settings: Settings = Settings {
-            sleep_msec: 1000,
-            follow: matches.is_present(options::FOLLOW),
-            ..Default::default()
-        };
-
-        if settings.follow {
-            if let Some(n) = matches.value_of(options::SLEEP_INT) {
-                let parsed: Option<u32> = n.parse().ok();
-                if let Some(m) = parsed {
-                    settings.sleep_msec = m * 1000
-                }
-            }
-        }
-
-        if let Some(pid_str) = matches.value_of(options::PID) {
-            if let Ok(pid) = pid_str.parse() {
-                settings.pid = pid;
-                if pid != 0 {
-                    if !settings.follow {
-                        show_warning!("PID ignored; --pid=PID is useful only when following");
-                    }
-
-                    if !platform::supports_pid_checks(pid) {
-                        show_warning!("--pid=PID is not supported on this system");
-                        settings.pid = 0;
-                    }
-                }
-            }
-        }
-
-        let mode_and_beginning = if let Some(arg) = matches.value_of(options::BYTES) {
-            match parse_num(arg) {
-                Ok((n, beginning)) => (FilterMode::Bytes(n), beginning),
-                Err(e) => return Err(format!("invalid number of bytes: {}", e)),
-            }
-        } else if let Some(arg) = matches.value_of(options::LINES) {
-            match parse_num(arg) {
-                Ok((n, beginning)) => (FilterMode::Lines(n, b'\n'), beginning),
-                Err(e) => return Err(format!("invalid number of lines: {}", e)),
-            }
-        } else {
-            (FilterMode::Lines(10, b'\n'), false)
-        };
-        settings.mode = mode_and_beginning.0;
-        settings.beginning = mode_and_beginning.1;
-
-        if matches.is_present(options::ZERO_TERM) {
-            if let FilterMode::Lines(count, _) = settings.mode {
-                settings.mode = FilterMode::Lines(count, 0);
-            }
-        }
-
-        settings.verbose = matches.is_present(options::verbosity::VERBOSE);
-        settings.quiet = matches.is_present(options::verbosity::QUIET);
-
-        settings.files = match matches.values_of(options::ARG_FILES) {
-            Some(v) => v.map(|s| s.to_owned()).collect(),
-            None => vec!["-".to_owned()],
-        };
-
-        Ok(settings)
-    }
-}
-
-#[allow(clippy::cognitive_complexity)]
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = match Settings::get_from(args) {
-        Ok(o) => o,
-        Err(s) => {
-            return Err(USimpleError::new(1, s));
-        }
-    };
-    uu_tail(&args)
-}
-
-fn uu_tail(settings: &Settings) -> UResult<()> {
-    let multiple = settings.files.len() > 1;
-    let mut first_header = true;
-    let mut readers: Vec<(Box<dyn BufRead>, &String)> = Vec::new();
-
-    #[cfg(unix)]
-    let stdin_string = String::from("standard input");
-
-    for filename in &settings.files {
-        let use_stdin = filename.as_str() == "-";
-        if (multiple || settings.verbose) && !settings.quiet {
-            if !first_header {
-                println!();
-            }
-            if use_stdin {
-                println!("==> standard input <==");
-            } else {
-                println!("==> {} <==", filename);
-            }
-        }
-        first_header = false;
-
-        if use_stdin {
-            let mut reader = BufReader::new(stdin());
-            unbounded_tail(&mut reader, settings)?;
-
-            // Don't follow stdin since there are no checks for pipes/FIFOs
-            //
-            // FIXME windows has GetFileType which can determine if the file is a pipe/FIFO
-            // so this check can also be performed
-
-            #[cfg(unix)]
-            {
-                /*
-                POSIX specification regarding tail -f
-
-                If the input file is a regular file or if the file operand specifies a FIFO, do not
-                terminate after the last line of the input file has been copied, but read and copy
-                further bytes from the input file when they become available. If no file operand is
-                specified and standard input is a pipe or FIFO, the -f option shall be ignored. If
-                the input file is not a FIFO, pipe, or regular file, it is unspecified whether or
-                not the -f option shall be ignored.
-                */
-
-                if settings.follow && !stdin_is_pipe_or_fifo() {
-                    readers.push((Box::new(reader), &stdin_string));
-                }
-            }
-        } else {
-            let path = Path::new(filename);
-            if path.is_dir() {
-                continue;
-            }
-            let mut file = File::open(&path)
-                .map_err_context(|| format!("cannot open {} for reading", filename.quote()))?;
-            let md = file.metadata().unwrap();
-            if is_seekable(&mut file) && get_block_size(&md) > 0 {
-                bounded_tail(&mut file, &settings.mode, settings.beginning);
-                if settings.follow {
-                    let reader = BufReader::new(file);
-                    readers.push((Box::new(reader), filename));
-                }
-            } else {
-                let mut reader = BufReader::new(file);
-                unbounded_tail(&mut reader, settings)?;
-                if settings.follow {
-                    readers.push((Box::new(reader), filename));
-                }
-            }
-        }
-    }
-
-    if settings.follow {
-        follow(&mut readers[..], settings)?;
-    }
-
-    Ok(())
-}
-
-fn arg_iterate<'a>(
-    mut args: impl uucore::Args + 'a,
-) -> Result<Box<dyn Iterator<Item = OsString> + 'a>, String> {
-    // argv[0] is always present
-    let first = args.next().unwrap();
-    if let Some(second) = args.next() {
-        if let Some(s) = second.to_str() {
-            match parse::parse_obsolete(s) {
-                Some(Ok(iter)) => Ok(Box::new(vec![first].into_iter().chain(iter).chain(args))),
-                Some(Err(e)) => match e {
-                    parse::ParseError::Syntax => Err(format!("bad argument format: {}", s.quote())),
-                    parse::ParseError::Overflow => Err(format!(
-                        "invalid argument: {} Value too large for defined datatype",
-                        s.quote()
-                    )),
-                },
-                None => Ok(Box::new(vec![first, second].into_iter().chain(args))),
-            }
-        } else {
-            Err("bad argument encoding".to_owned())
-        }
-    } else {
-        Ok(Box::new(vec![first].into_iter()))
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .override_usage(USAGE)
-        .arg(
-            Arg::new(options::BYTES)
-                .short('c')
-                .long(options::BYTES)
-                .takes_value(true)
-                .allow_hyphen_values(true)
-                .overrides_with_all(&[options::BYTES, options::LINES])
-                .help("Number of bytes to print"),
-        )
-        .arg(
-            Arg::new(options::FOLLOW)
-                .short('f')
-                .long(options::FOLLOW)
-                .help("Print the file as it grows"),
-        )
-        .arg(
-            Arg::new(options::LINES)
-                .short('n')
-                .long(options::LINES)
-                .takes_value(true)
-                .allow_hyphen_values(true)
-                .overrides_with_all(&[options::BYTES, options::LINES])
-                .help("Number of lines to print"),
-        )
-        .arg(
-            Arg::new(options::PID)
-                .long(options::PID)
-                .takes_value(true)
-                .help("with -f, terminate after process ID, PID dies"),
-        )
-        .arg(
-            Arg::new(options::verbosity::QUIET)
-                .short('q')
-                .long(options::verbosity::QUIET)
-                .visible_alias("silent")
-                .overrides_with_all(&[options::verbosity::QUIET, options::verbosity::VERBOSE])
-                .help("never output headers giving file names"),
-        )
-        .arg(
-            Arg::new(options::SLEEP_INT)
-                .short('s')
-                .takes_value(true)
-                .long(options::SLEEP_INT)
-                .help("Number or seconds to sleep between polling the file when running with -f"),
-        )
-        .arg(
-            Arg::new(options::verbosity::VERBOSE)
-                .short('v')
-                .long(options::verbosity::VERBOSE)
-                .overrides_with_all(&[options::verbosity::QUIET, options::verbosity::VERBOSE])
-                .help("always output headers giving file names"),
-        )
-        .arg(
-            Arg::new(options::ZERO_TERM)
-                .short('z')
-                .long(options::ZERO_TERM)
-                .help("Line delimiter is NUL, not newline"),
-        )
-        .arg(
-            Arg::new(options::ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1),
-        )
-}
-
-/// Continually check for new data in the given readers, writing any to stdout.
-fn follow<T: BufRead>(readers: &mut [(T, &String)], settings: &Settings) -> UResult<()> {
-    if readers.is_empty() || !settings.follow {
-        return Ok(());
-    }
-
-    let mut last = readers.len() - 1;
-    let mut read_some = false;
-    let mut process = platform::ProcessChecker::new(settings.pid);
-    let mut stdout = stdout();
-
-    loop {
-        sleep(Duration::new(0, settings.sleep_msec * 1000));
-
-        let pid_is_dead = !read_some && settings.pid != 0 && process.is_dead();
-        read_some = false;
-
-        for (i, (reader, filename)) in readers.iter_mut().enumerate() {
-            // Print all new content since the last pass
-            loop {
-                let mut datum = vec![];
-                match reader.read_until(b'\n', &mut datum) {
-                    Ok(0) => break,
-                    Ok(_) => {
-                        read_some = true;
-                        if i != last {
-                            println!("\n==> {} <==", filename);
-                            last = i;
-                        }
-                        stdout
-                            .write_all(&datum)
-                            .map_err_context(|| String::from("write error"))?;
-                    }
-                    Err(err) => return Err(USimpleError::new(1, err.to_string())),
-                }
-            }
-        }
-
-        if pid_is_dead {
-            break;
-        }
-    }
-    Ok(())
-}
-
-/// Find the index after the given number of instances of a given byte.
-///
-/// This function reads through a given reader until `num_delimiters`
-/// instances of `delimiter` have been seen, returning the index of
-/// the byte immediately following that delimiter. If there are fewer
-/// than `num_delimiters` instances of `delimiter`, this returns the
-/// total number of bytes read from the `reader` until EOF.
-///
-/// # Errors
-///
-/// This function returns an error if there is an error during reading
-/// from `reader`.
-///
-/// # Examples
-///
-/// Basic usage:
-///
-/// ```rust,ignore
-/// use std::io::Cursor;
-///
-/// let mut reader = Cursor::new("a\nb\nc\nd\ne\n");
-/// let i = forwards_thru_file(&mut reader, 2, b'\n').unwrap();
-/// assert_eq!(i, 4);
-/// ```
-///
-/// If `num_delimiters` is zero, then this function always returns
-/// zero:
-///
-/// ```rust,ignore
-/// use std::io::Cursor;
-///
-/// let mut reader = Cursor::new("a\n");
-/// let i = forwards_thru_file(&mut reader, 0, b'\n').unwrap();
-/// assert_eq!(i, 0);
-/// ```
-///
-/// If there are fewer than `num_delimiters` instances of `delimiter`
-/// in the reader, then this function returns the total number of
-/// bytes read:
-///
-/// ```rust,ignore
-/// use std::io::Cursor;
-///
-/// let mut reader = Cursor::new("a\n");
-/// let i = forwards_thru_file(&mut reader, 2, b'\n').unwrap();
-/// assert_eq!(i, 2);
-/// ```
-fn forwards_thru_file<R>(
-    reader: &mut R,
-    num_delimiters: usize,
-    delimiter: u8,
-) -> std::io::Result<usize>
-where
-    R: Read,
-{
-    let mut reader = BufReader::new(reader);
-
-    let mut buf = vec![];
-    let mut total = 0;
-    for _ in 0..num_delimiters {
-        match reader.read_until(delimiter, &mut buf) {
-            Ok(0) => {
-                return Ok(total);
-            }
-            Ok(n) => {
-                total += n;
-                buf.clear();
-                continue;
-            }
-            Err(e) => {
-                return Err(e);
-            }
-        }
-    }
-    Ok(total)
-}
-
-/// Iterate over bytes in the file, in reverse, until we find the
-/// `num_delimiters` instance of `delimiter`. The `file` is left seek'd to the
-/// position just after that delimiter.
-fn backwards_thru_file(file: &mut File, num_delimiters: usize, delimiter: u8) {
-    // This variable counts the number of delimiters found in the file
-    // so far (reading from the end of the file toward the beginning).
-    let mut counter = 0;
-
-    for (block_idx, slice) in ReverseChunks::new(file).enumerate() {
-        // Iterate over each byte in the slice in reverse order.
-        let mut iter = slice.iter().enumerate().rev();
-
-        // Ignore a trailing newline in the last block, if there is one.
-        if block_idx == 0 {
-            if let Some(c) = slice.last() {
-                if *c == delimiter {
-                    iter.next();
-                }
-            }
-        }
-
-        // For each byte, increment the count of the number of
-        // delimiters found. If we have found more than the specified
-        // number of delimiters, terminate the search and seek to the
-        // appropriate location in the file.
-        for (i, ch) in iter {
-            if *ch == delimiter {
-                counter += 1;
-                if counter >= num_delimiters {
-                    // After each iteration of the outer loop, the
-                    // cursor in the file is at the *beginning* of the
-                    // block, so seeking forward by `i + 1` bytes puts
-                    // us right after the found delimiter.
-                    file.seek(SeekFrom::Current((i + 1) as i64)).unwrap();
-                    return;
-                }
-            }
-        }
-    }
-}
-
-/// When tail'ing a file, we do not need to read the whole file from start to
-/// finish just to find the last n lines or bytes. Instead, we can seek to the
-/// end of the file, and then read the file "backwards" in blocks of size
-/// `BLOCK_SIZE` until we find the location of the first line/byte. This ends up
-/// being a nice performance win for very large files.
-fn bounded_tail(file: &mut File, mode: &FilterMode, beginning: bool) {
-    // Find the position in the file to start printing from.
-    match (mode, beginning) {
-        (FilterMode::Lines(count, delimiter), false) => {
-            backwards_thru_file(file, *count, *delimiter);
-        }
-        (FilterMode::Lines(count, delimiter), true) => {
-            let i = forwards_thru_file(file, (*count).max(1) - 1, *delimiter).unwrap();
-            file.seek(SeekFrom::Start(i as u64)).unwrap();
-        }
-        (FilterMode::Bytes(count), false) => {
-            file.seek(SeekFrom::End(-(*count as i64))).unwrap();
-        }
-        (FilterMode::Bytes(count), true) => {
-            // GNU `tail` seems to index bytes and lines starting at 1, not
-            // at 0. It seems to treat `+0` and `+1` as the same thing.
-            file.seek(SeekFrom::Start(((*count).max(1) - 1) as u64))
-                .unwrap();
-        }
-    }
-
-    // Print the target section of the file.
-    let stdout = stdout();
-    let mut stdout = stdout.lock();
-    std::io::copy(file, &mut stdout).unwrap();
-}
-
-/// Collect the last elements of an iterator into a `VecDeque`.
-///
-/// This function returns a [`VecDeque`] containing either the last
-/// `count` elements of `iter`, an [`Iterator`] over [`Result`]
-/// instances, or all but the first `count` elements of `iter`. If
-/// `beginning` is `true`, then all but the first `count` elements are
-/// returned.
-///
-/// # Panics
-///
-/// If any element of `iter` is an [`Err`], then this function panics.
-fn unbounded_tail_collect<T, E>(
-    iter: impl Iterator<Item = Result<T, E>>,
-    count: usize,
-    beginning: bool,
-) -> VecDeque<T>
-where
-    E: fmt::Debug,
-{
-    if beginning {
-        // GNU `tail` seems to index bytes and lines starting at 1, not
-        // at 0. It seems to treat `+0` and `+1` as the same thing.
-        let i = count.max(1) - 1;
-        iter.skip(i as usize).map(|r| r.unwrap()).collect()
-    } else {
-        RingBuffer::from_iter(iter.map(|r| r.unwrap()), count as usize).data
-    }
-}
-
-fn unbounded_tail<T: Read>(reader: &mut BufReader<T>, settings: &Settings) -> UResult<()> {
-    // Read through each line/char and store them in a ringbuffer that always
-    // contains count lines/chars. When reaching the end of file, output the
-    // data in the ringbuf.
-    match settings.mode {
-        FilterMode::Lines(count, _) => {
-            for line in unbounded_tail_collect(lines(reader), count, settings.beginning) {
-                print!("{}", line);
-            }
-        }
-        FilterMode::Bytes(count) => {
-            for byte in unbounded_tail_collect(reader.bytes(), count, settings.beginning) {
-                if let Err(err) = stdout().write(&[byte]) {
-                    return Err(USimpleError::new(1, err.to_string()));
-                }
-            }
-        }
-    }
-    Ok(())
-}
-
-fn is_seekable<T: Seek>(file: &mut T) -> bool {
-    file.seek(SeekFrom::Current(0)).is_ok()
-        && file.seek(SeekFrom::End(0)).is_ok()
-        && file.seek(SeekFrom::Start(0)).is_ok()
-}
-
-fn parse_num(src: &str) -> Result<(usize, bool), ParseSizeError> {
-    let mut size_string = src.trim();
-    let mut starting_with = false;
-
-    if let Some(c) = size_string.chars().next() {
-        if c == '+' || c == '-' {
-            // tail: '-' is not documented (8.32 man pages)
-            size_string = &size_string[1..];
-            if c == '+' {
-                starting_with = true;
-            }
-        }
-    } else {
-        return Err(ParseSizeError::ParseFailure(src.to_string()));
-    }
-
-    parse_size(size_string).map(|n| (n, starting_with))
-}
-
-fn get_block_size(md: &Metadata) -> u64 {
-    #[cfg(unix)]
-    {
-        md.blocks()
-    }
-    #[cfg(not(unix))]
-    {
-        md.len()
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use crate::forwards_thru_file;
-    use std::io::Cursor;
-
-    #[test]
-    fn test_forwards_thru_file_zero() {
-        let mut reader = Cursor::new("a\n");
-        let i = forwards_thru_file(&mut reader, 0, b'\n').unwrap();
-        assert_eq!(i, 0);
-    }
-
-    #[test]
-    fn test_forwards_thru_file_basic() {
-        //                   01 23 45 67 89
-        let mut reader = Cursor::new("a\nb\nc\nd\ne\n");
-        let i = forwards_thru_file(&mut reader, 2, b'\n').unwrap();
-        assert_eq!(i, 4);
-    }
-
-    #[test]
-    fn test_forwards_thru_file_past_end() {
-        let mut reader = Cursor::new("x\n");
-        let i = forwards_thru_file(&mut reader, 2, b'\n').unwrap();
-        assert_eq!(i, 2);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tee/tee.rs.html b/src/uu_tee/tee.rs.html deleted file mode 100644 index 68a865b21..000000000 --- a/src/uu_tee/tee.rs.html +++ /dev/null @@ -1,456 +0,0 @@ -tee.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Aleksander Bielawski <pabzdzdzwiagief@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use retain_mut::RetainMut;
-use std::fs::OpenOptions;
-use std::io::{copy, sink, stdin, stdout, Error, ErrorKind, Read, Result, Write};
-use std::path::PathBuf;
-use uucore::display::Quotable;
-use uucore::error::UResult;
-
-#[cfg(unix)]
-use uucore::libc;
-
-static ABOUT: &str = "Copy standard input to each FILE, and also to standard output.";
-
-mod options {
-    pub const APPEND: &str = "append";
-    pub const IGNORE_INTERRUPTS: &str = "ignore-interrupts";
-    pub const FILE: &str = "file";
-}
-
-#[allow(dead_code)]
-struct Options {
-    append: bool,
-    ignore_interrupts: bool,
-    files: Vec<String>,
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let options = Options {
-        append: matches.is_present(options::APPEND),
-        ignore_interrupts: matches.is_present(options::IGNORE_INTERRUPTS),
-        files: matches
-            .values_of(options::FILE)
-            .map(|v| v.map(ToString::to_string).collect())
-            .unwrap_or_default(),
-    };
-
-    match tee(options) {
-        Ok(_) => Ok(()),
-        Err(_) => Err(1.into()),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .after_help("If a FILE is -, it refers to a file named - .")
-        .arg(
-            Arg::new(options::APPEND)
-                .long(options::APPEND)
-                .short('a')
-                .help("append to the given FILEs, do not overwrite"),
-        )
-        .arg(
-            Arg::new(options::IGNORE_INTERRUPTS)
-                .long(options::IGNORE_INTERRUPTS)
-                .short('i')
-                .help("ignore interrupt signals (ignored on non-Unix platforms)"),
-        )
-        .arg(Arg::new(options::FILE).multiple_occurrences(true))
-}
-
-#[cfg(unix)]
-fn ignore_interrupts() -> Result<()> {
-    let ret = unsafe { libc::signal(libc::SIGINT, libc::SIG_IGN) };
-    if ret == libc::SIG_ERR {
-        return Err(Error::new(ErrorKind::Other, ""));
-    }
-    Ok(())
-}
-
-#[cfg(not(unix))]
-fn ignore_interrupts() -> Result<()> {
-    // Do nothing.
-    Ok(())
-}
-
-fn tee(options: Options) -> Result<()> {
-    if options.ignore_interrupts {
-        ignore_interrupts()?
-    }
-    let mut writers: Vec<NamedWriter> = options
-        .files
-        .clone()
-        .into_iter()
-        .map(|file| NamedWriter {
-            name: file.clone(),
-            inner: open(file, options.append),
-        })
-        .collect();
-
-    writers.insert(
-        0,
-        NamedWriter {
-            name: "'standard output'".to_owned(),
-            inner: Box::new(stdout()),
-        },
-    );
-
-    let mut output = MultiWriter::new(writers);
-    let input = &mut NamedReader {
-        inner: Box::new(stdin()) as Box<dyn Read>,
-    };
-
-    // TODO: replaced generic 'copy' call to be able to stop copying
-    // if all outputs are closed (due to errors)
-    if copy(input, &mut output).is_err() || output.flush().is_err() || output.error_occurred() {
-        Err(Error::new(ErrorKind::Other, ""))
-    } else {
-        Ok(())
-    }
-}
-
-fn open(name: String, append: bool) -> Box<dyn Write> {
-    let path = PathBuf::from(name.clone());
-    let inner: Box<dyn Write> = {
-        let mut options = OpenOptions::new();
-        let mode = if append {
-            options.append(true)
-        } else {
-            options.truncate(true)
-        };
-        match mode.write(true).create(true).open(path.as_path()) {
-            Ok(file) => Box::new(file),
-            Err(_) => Box::new(sink()),
-        }
-    };
-    Box::new(NamedWriter { inner, name }) as Box<dyn Write>
-}
-
-struct MultiWriter {
-    writers: Vec<NamedWriter>,
-    initial_len: usize,
-}
-
-impl MultiWriter {
-    fn new(writers: Vec<NamedWriter>) -> Self {
-        Self {
-            initial_len: writers.len(),
-            writers,
-        }
-    }
-    fn error_occurred(&self) -> bool {
-        self.writers.len() != self.initial_len
-    }
-}
-
-impl Write for MultiWriter {
-    fn write(&mut self, buf: &[u8]) -> Result<usize> {
-        RetainMut::retain_mut(&mut self.writers, |writer| {
-            let result = writer.write_all(buf);
-            match result {
-                Err(f) => {
-                    show_error!("{}: {}", writer.name.maybe_quote(), f);
-                    false
-                }
-                _ => true,
-            }
-        });
-        Ok(buf.len())
-    }
-
-    fn flush(&mut self) -> Result<()> {
-        RetainMut::retain_mut(&mut self.writers, |writer| {
-            let result = writer.flush();
-            match result {
-                Err(f) => {
-                    show_error!("{}: {}", writer.name.maybe_quote(), f);
-                    false
-                }
-                _ => true,
-            }
-        });
-        Ok(())
-    }
-}
-
-struct NamedWriter {
-    inner: Box<dyn Write>,
-    pub name: String,
-}
-
-impl Write for NamedWriter {
-    fn write(&mut self, buf: &[u8]) -> Result<usize> {
-        self.inner.write(buf)
-    }
-
-    fn flush(&mut self) -> Result<()> {
-        self.inner.flush()
-    }
-}
-
-struct NamedReader {
-    inner: Box<dyn Read>,
-}
-
-impl Read for NamedReader {
-    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
-        match self.inner.read(buf) {
-            Err(f) => {
-                show_error!("stdin: {}", f);
-                Err(f)
-            }
-            okay => okay,
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_test/parser.rs.html b/src/uu_test/parser.rs.html deleted file mode 100644 index a60d7094c..000000000 --- a/src/uu_test/parser.rs.html +++ /dev/null @@ -1,828 +0,0 @@ -parser.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-
// This file is part of the uutils coreutils package.
-//
-// (c) Daniel Rocco <drocco@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (grammar) BOOLOP STRLEN FILETEST FILEOP INTOP STRINGOP ; (vars) LParen StrlenOp
-
-use std::ffi::OsString;
-use std::iter::Peekable;
-
-use uucore::display::Quotable;
-use uucore::show_error;
-
-/// Represents one of the binary comparison operators for strings, integers, or files
-#[derive(Debug, PartialEq)]
-pub enum Operator {
-    String(OsString),
-    Int(OsString),
-    File(OsString),
-}
-
-/// Represents one of the unary test operators for strings or files
-#[derive(Debug, PartialEq)]
-pub enum UnaryOperator {
-    StrlenOp(OsString),
-    FiletestOp(OsString),
-}
-
-/// Represents a parsed token from a test expression
-#[derive(Debug, PartialEq)]
-pub enum Symbol {
-    LParen,
-    Bang,
-    BoolOp(OsString),
-    Literal(OsString),
-    Op(Operator),
-    UnaryOp(UnaryOperator),
-    None,
-}
-
-impl Symbol {
-    /// Create a new Symbol from an OsString.
-    ///
-    /// Returns Symbol::None in place of None
-    fn new(token: Option<OsString>) -> Symbol {
-        match token {
-            Some(s) => match s.to_str() {
-                Some(t) => match t {
-                    "(" => Symbol::LParen,
-                    "!" => Symbol::Bang,
-                    "-a" | "-o" => Symbol::BoolOp(s),
-                    "=" | "==" | "!=" => Symbol::Op(Operator::String(s)),
-                    "-eq" | "-ge" | "-gt" | "-le" | "-lt" | "-ne" => Symbol::Op(Operator::Int(s)),
-                    "-ef" | "-nt" | "-ot" => Symbol::Op(Operator::File(s)),
-                    "-n" | "-z" => Symbol::UnaryOp(UnaryOperator::StrlenOp(s)),
-                    "-b" | "-c" | "-d" | "-e" | "-f" | "-g" | "-G" | "-h" | "-k" | "-L" | "-O"
-                    | "-p" | "-r" | "-s" | "-S" | "-t" | "-u" | "-w" | "-x" => {
-                        Symbol::UnaryOp(UnaryOperator::FiletestOp(s))
-                    }
-                    _ => Symbol::Literal(s),
-                },
-                None => Symbol::Literal(s),
-            },
-            None => Symbol::None,
-        }
-    }
-
-    /// Convert this Symbol into a Symbol::Literal, useful for cases where
-    /// test treats an operator as a string operand (test has no reserved
-    /// words).
-    ///
-    /// # Panics
-    ///
-    /// Panics if `self` is Symbol::None
-    fn into_literal(self) -> Symbol {
-        Symbol::Literal(match self {
-            Symbol::LParen => OsString::from("("),
-            Symbol::Bang => OsString::from("!"),
-            Symbol::BoolOp(s)
-            | Symbol::Literal(s)
-            | Symbol::Op(Operator::String(s))
-            | Symbol::Op(Operator::Int(s))
-            | Symbol::Op(Operator::File(s))
-            | Symbol::UnaryOp(UnaryOperator::StrlenOp(s))
-            | Symbol::UnaryOp(UnaryOperator::FiletestOp(s)) => s,
-            Symbol::None => panic!(),
-        })
-    }
-}
-
-/// Recursive descent parser for test, which converts a list of OsStrings
-/// (typically command line arguments) into a stack of Symbols in postfix
-/// order.
-///
-/// Grammar:
-///
-///   EXPR → TERM | EXPR BOOLOP EXPR
-///   TERM → ( EXPR )
-///   TERM → ! EXPR
-///   TERM → UOP str
-///   UOP → STRLEN | FILETEST
-///   TERM → str OP str
-///   TERM → str | 𝜖
-///   OP → STRINGOP | INTOP | FILEOP
-///   STRINGOP → = | == | !=
-///   INTOP → -eq | -ge | -gt | -le | -lt | -ne
-///   FILEOP → -ef | -nt | -ot
-///   STRLEN → -n | -z
-///   FILETEST → -b | -c | -d | -e | -f | -g | -G | -h | -k | -L | -O | -p |
-///               -r | -s | -S | -t | -u | -w | -x
-///   BOOLOP → -a | -o
-///
-#[derive(Debug)]
-struct Parser {
-    tokens: Peekable<std::vec::IntoIter<OsString>>,
-    pub stack: Vec<Symbol>,
-}
-
-impl Parser {
-    /// Construct a new Parser from a `Vec<OsString>` of tokens.
-    fn new(tokens: Vec<OsString>) -> Parser {
-        Parser {
-            tokens: tokens.into_iter().peekable(),
-            stack: vec![],
-        }
-    }
-
-    /// Fetch the next token from the input stream as a Symbol.
-    fn next_token(&mut self) -> Symbol {
-        Symbol::new(self.tokens.next())
-    }
-
-    /// Consume the next token & verify that it matches the provided value.
-    ///
-    /// # Panics
-    ///
-    /// Panics if the next token does not match the provided value.
-    ///
-    /// TODO: remove panics and convert Parser to return error messages.
-    fn expect(&mut self, value: &str) {
-        match self.next_token() {
-            Symbol::Literal(s) if s == value => (),
-            _ => panic!("expected ‘{}’", value),
-        }
-    }
-
-    /// Peek at the next token from the input stream, returning it as a Symbol.
-    /// The stream is unchanged and will return the same Symbol on subsequent
-    /// calls to `next()` or `peek()`.
-    fn peek(&mut self) -> Symbol {
-        Symbol::new(self.tokens.peek().map(|s| s.to_os_string()))
-    }
-
-    /// Test if the next token in the stream is a BOOLOP (-a or -o), without
-    /// removing the token from the stream.
-    fn peek_is_boolop(&mut self) -> bool {
-        matches!(self.peek(), Symbol::BoolOp(_))
-    }
-
-    /// Parse an expression.
-    ///
-    ///   EXPR → TERM | EXPR BOOLOP EXPR
-    fn expr(&mut self) {
-        if !self.peek_is_boolop() {
-            self.term();
-        }
-        self.maybe_boolop();
-    }
-
-    /// Parse a term token and possible subsequent symbols: "(", "!", UOP,
-    /// literal, or None.
-    fn term(&mut self) {
-        let symbol = self.next_token();
-
-        match symbol {
-            Symbol::LParen => self.lparen(),
-            Symbol::Bang => self.bang(),
-            Symbol::UnaryOp(_) => self.uop(symbol),
-            Symbol::None => self.stack.push(symbol),
-            literal => self.literal(literal),
-        }
-    }
-
-    /// Parse a (possibly) parenthesized expression.
-    ///
-    /// test has no reserved keywords, so "(" will be interpreted as a literal
-    /// in certain cases:
-    ///
-    /// * when found at the end of the token stream
-    /// * when followed by a binary operator that is not _itself_ interpreted
-    ///   as a literal
-    ///
-    fn lparen(&mut self) {
-        // Look ahead up to 3 tokens to determine if the lparen is being used
-        // as a grouping operator or should be treated as a literal string
-        let peek3: Vec<Symbol> = self
-            .tokens
-            .clone()
-            .take(3)
-            .map(|token| Symbol::new(Some(token)))
-            .collect();
-
-        match peek3.as_slice() {
-            // case 1: lparen is a literal when followed by nothing
-            [] => self.literal(Symbol::LParen.into_literal()),
-
-            // case 2: error if end of stream is `( <any_token>`
-            [symbol] => {
-                show_error!("missing argument after ‘{:?}’", symbol);
-                std::process::exit(2);
-            }
-
-            // case 3: `( uop <any_token> )` → parenthesized unary operation;
-            //         this case ensures we don’t get confused by `( -f ) )`
-            //         or `( -f ( )`, for example
-            [Symbol::UnaryOp(_), _, Symbol::Literal(s)] if s == ")" => {
-                let symbol = self.next_token();
-                self.uop(symbol);
-                self.expect(")");
-            }
-
-            // case 4: binary comparison of literal lparen, e.g. `( != )`
-            [Symbol::Op(_), Symbol::Literal(s)] | [Symbol::Op(_), Symbol::Literal(s), _]
-                if s == ")" =>
-            {
-                self.literal(Symbol::LParen.into_literal());
-            }
-
-            // case 5: after handling the prior cases, any single token inside
-            //         parentheses is a literal, e.g. `( -f )`
-            [_, Symbol::Literal(s)] | [_, Symbol::Literal(s), _] if s == ")" => {
-                let symbol = self.next_token();
-                self.literal(symbol);
-                self.expect(")");
-            }
-
-            // case 6: two binary ops in a row, treat the first op as a literal
-            [Symbol::Op(_), Symbol::Op(_), _] => {
-                let symbol = self.next_token();
-                self.literal(symbol);
-                self.expect(")");
-            }
-
-            // case 7: if earlier cases didn’t match, `( op <any_token>…`
-            //         indicates binary comparison of literal lparen with
-            //         anything _except_ ")" (case 4)
-            [Symbol::Op(_), _] | [Symbol::Op(_), _, _] => {
-                self.literal(Symbol::LParen.into_literal());
-            }
-
-            // Otherwise, lparen indicates the start of a parenthesized
-            // expression
-            _ => {
-                self.expr();
-                self.expect(")");
-            }
-        }
-    }
-
-    /// Parse a (possibly) negated expression.
-    ///
-    /// Example cases:
-    ///
-    /// * `! =`: negate the result of the implicit string length test of `=`
-    /// * `! = foo`: compare the literal strings `!` and `foo`
-    /// * `! = = str`: negate comparison of literal `=` and `str`
-    /// * `!`: bang followed by nothing is literal
-    /// * `! EXPR`: negate the result of the expression
-    ///
-    /// Combined Boolean & negation:
-    ///
-    /// * `! ( EXPR ) [BOOLOP EXPR]`: negate the parenthesized expression only
-    /// * `! UOP str BOOLOP EXPR`: negate the unary subexpression
-    /// * `! str BOOLOP str`: negate the entire Boolean expression
-    /// * `! str BOOLOP EXPR BOOLOP EXPR`: negate the value of the first `str` term
-    ///
-    fn bang(&mut self) {
-        match self.peek() {
-            Symbol::Op(_) | Symbol::BoolOp(_) => {
-                // we need to peek ahead one more token to disambiguate the first
-                // three cases listed above
-                let peek2 = Symbol::new(self.tokens.clone().nth(1));
-
-                match peek2 {
-                    // case 1: `! <OP as literal>`
-                    // case 3: `! = OP str`
-                    Symbol::Op(_) | Symbol::None => {
-                        // op is literal
-                        let op = self.next_token().into_literal();
-                        self.literal(op);
-                        self.stack.push(Symbol::Bang);
-                    }
-                    // case 2: `<! as literal> OP str [BOOLOP EXPR]`.
-                    _ => {
-                        // bang is literal; parsing continues with op
-                        self.literal(Symbol::Bang.into_literal());
-                        self.maybe_boolop();
-                    }
-                }
-            }
-
-            // bang followed by nothing is literal
-            Symbol::None => self.stack.push(Symbol::Bang.into_literal()),
-
-            _ => {
-                // peek ahead up to 4 tokens to determine if we need to negate
-                // the entire expression or just the first term
-                let peek4: Vec<Symbol> = self
-                    .tokens
-                    .clone()
-                    .take(4)
-                    .map(|token| Symbol::new(Some(token)))
-                    .collect();
-
-                match peek4.as_slice() {
-                    // we peeked ahead 4 but there were only 3 tokens left
-                    [Symbol::Literal(_), Symbol::BoolOp(_), Symbol::Literal(_)] => {
-                        self.expr();
-                        self.stack.push(Symbol::Bang);
-                    }
-                    _ => {
-                        self.term();
-                        self.stack.push(Symbol::Bang);
-                    }
-                }
-            }
-        }
-    }
-
-    /// Peek at the next token and parse it as a BOOLOP or string literal,
-    /// as appropriate.
-    fn maybe_boolop(&mut self) {
-        if self.peek_is_boolop() {
-            let symbol = self.next_token();
-
-            // BoolOp by itself interpreted as Literal
-            if let Symbol::None = self.peek() {
-                self.literal(symbol.into_literal());
-            } else {
-                self.boolop(symbol);
-                self.maybe_boolop();
-            }
-        }
-    }
-
-    /// Parse a Boolean expression.
-    ///
-    /// Logical and (-a) has higher precedence than or (-o), so in an
-    /// expression like `foo -o '' -a ''`, the and subexpression is evaluated
-    /// first.
-    fn boolop(&mut self, op: Symbol) {
-        if op == Symbol::BoolOp(OsString::from("-a")) {
-            self.term();
-        } else {
-            self.expr();
-        }
-        self.stack.push(op);
-    }
-
-    /// Parse a (possible) unary argument test (string length or file
-    /// attribute check).
-    ///
-    /// If a UOP is followed by nothing it is interpreted as a literal string.
-    fn uop(&mut self, op: Symbol) {
-        match self.next_token() {
-            Symbol::None => self.stack.push(op.into_literal()),
-            symbol => {
-                self.stack.push(symbol.into_literal());
-                self.stack.push(op);
-            }
-        }
-    }
-
-    /// Parse a string literal, optionally followed by a comparison operator
-    /// and a second string literal.
-    fn literal(&mut self, token: Symbol) {
-        self.stack.push(token.into_literal());
-
-        // EXPR → str OP str
-        if let Symbol::Op(_) = self.peek() {
-            let op = self.next_token();
-
-            match self.next_token() {
-                Symbol::None => panic!("missing argument after {:?}", op),
-                token => self.stack.push(token.into_literal()),
-            }
-
-            self.stack.push(op);
-        }
-    }
-
-    /// Parser entry point: parse the token stream `self.tokens`, storing the
-    /// resulting `Symbol` stack in `self.stack`.
-    fn parse(&mut self) -> Result<(), String> {
-        self.expr();
-
-        match self.tokens.next() {
-            Some(token) => Err(format!("extra argument {}", token.quote())),
-            None => Ok(()),
-        }
-    }
-}
-
-/// Parse the token stream `args`, returning a `Symbol` stack representing the
-/// operations to perform in postfix order.
-pub fn parse(args: Vec<OsString>) -> Result<Vec<Symbol>, String> {
-    let mut p = Parser::new(args);
-    p.parse()?;
-    Ok(p.stack)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_test/test.rs.html b/src/uu_test/test.rs.html deleted file mode 100644 index 713487629..000000000 --- a/src/uu_test/test.rs.html +++ /dev/null @@ -1,788 +0,0 @@ -test.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-
// This file is part of the uutils coreutils package.
-//
-// (c) mahkoh (ju.orth [at] gmail [dot] com)
-// (c) Daniel Rocco <drocco@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (vars) egid euid FiletestOp StrlenOp
-
-mod parser;
-
-use clap::{crate_version, App, AppSettings};
-use parser::{parse, Operator, Symbol, UnaryOperator};
-use std::ffi::{OsStr, OsString};
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-
-const USAGE: &str = "test EXPRESSION
-or:  test
-or:  [ EXPRESSION ]
-or:  [ ]
-or:  [ OPTION";
-
-// We use after_help so that this comes after the usage string (it would come before if we used about)
-const AFTER_HELP: &str = "
-Exit with the status determined by EXPRESSION.
-
-An omitted EXPRESSION defaults to false.  Otherwise,
-EXPRESSION is true or false and sets exit status.  It is one of:
-
-  ( EXPRESSION )               EXPRESSION is true
-  ! EXPRESSION                 EXPRESSION is false
-  EXPRESSION1 -a EXPRESSION2   both EXPRESSION1 and EXPRESSION2 are true
-  EXPRESSION1 -o EXPRESSION2   either EXPRESSION1 or EXPRESSION2 is true
-
-  -n STRING            the length of STRING is nonzero
-  STRING               equivalent to -n STRING
-  -z STRING            the length of STRING is zero
-  STRING1 = STRING2    the strings are equal
-  STRING1 != STRING2   the strings are not equal
-
-  INTEGER1 -eq INTEGER2   INTEGER1 is equal to INTEGER2
-  INTEGER1 -ge INTEGER2   INTEGER1 is greater than or equal to INTEGER2
-  INTEGER1 -gt INTEGER2   INTEGER1 is greater than INTEGER2
-  INTEGER1 -le INTEGER2   INTEGER1 is less than or equal to INTEGER2
-  INTEGER1 -lt INTEGER2   INTEGER1 is less than INTEGER2
-  INTEGER1 -ne INTEGER2   INTEGER1 is not equal to INTEGER2
-
-  FILE1 -ef FILE2   FILE1 and FILE2 have the same device and inode numbers
-  FILE1 -nt FILE2   FILE1 is newer (modification date) than FILE2
-  FILE1 -ot FILE2   FILE1 is older than FILE2
-
-  -b FILE     FILE exists and is block special
-  -c FILE     FILE exists and is character special
-  -d FILE     FILE exists and is a directory
-  -e FILE     FILE exists
-  -f FILE     FILE exists and is a regular file
-  -g FILE     FILE exists and is set-group-ID
-  -G FILE     FILE exists and is owned by the effective group ID
-  -h FILE     FILE exists and is a symbolic link (same as -L)
-  -k FILE     FILE exists and has its sticky bit set
-  -L FILE     FILE exists and is a symbolic link (same as -h)
-  -N FILE     FILE exists and has been modified since it was last read
-  -O FILE     FILE exists and is owned by the effective user ID
-  -p FILE     FILE exists and is a named pipe
-  -r FILE     FILE exists and read permission is granted
-  -s FILE     FILE exists and has a size greater than zero
-  -S FILE     FILE exists and is a socket
-  -t FD       file descriptor FD is opened on a terminal
-  -u FILE     FILE exists and its set-user-ID bit is set
-  -w FILE     FILE exists and write permission is granted
-  -x FILE     FILE exists and execute (or search) permission is granted
-
-Except for -h and -L, all FILE-related tests dereference symbolic links.
-Beware that parentheses need to be escaped (e.g., by backslashes) for shells.
-INTEGER may also be -l STRING, which evaluates to the length of STRING.
-
-NOTE: Binary -a and -o are inherently ambiguous.  Use 'test EXPR1 && test
-EXPR2' or 'test EXPR1 || test EXPR2' instead.
-
-NOTE: [ honors the --help and --version options, but test does not.
-test treats each of those as it treats any other nonempty STRING.
-
-NOTE: your shell may have its own version of test and/or [, which usually supersedes
-the version described here.  Please refer to your shell's documentation
-for details about the options it supports.";
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .setting(AppSettings::DisableHelpFlag)
-        .setting(AppSettings::DisableVersionFlag)
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(mut args: impl uucore::Args) -> UResult<()> {
-    let program = args.next().unwrap_or_else(|| OsString::from("test"));
-    let binary_name = uucore::util_name();
-    let mut args: Vec<_> = args.collect();
-
-    if binary_name.ends_with('[') {
-        // If invoked as [ we should recognize --help and --version (but not -h or -v)
-        if args.len() == 1 && (args[0] == "--help" || args[0] == "--version") {
-            // Let clap pretty-print help and version
-            App::new(binary_name)
-                .version(crate_version!())
-                .override_usage(USAGE)
-                .after_help(AFTER_HELP)
-                // Disable printing of -h and -v as valid alternatives for --help and --version,
-                // since we don't recognize -h and -v as help/version flags.
-                .get_matches_from(std::iter::once(program).chain(args.into_iter()));
-            return Ok(());
-        }
-        // If invoked via name '[', matching ']' must be in the last arg
-        let last = args.pop();
-        if last.as_deref() != Some(OsStr::new("]")) {
-            return Err(USimpleError::new(2, "missing ']'"));
-        }
-    }
-
-    let result = parse(args).and_then(|mut stack| eval(&mut stack));
-
-    match result {
-        Ok(result) => {
-            if result {
-                Ok(())
-            } else {
-                Err(1.into())
-            }
-        }
-        Err(e) => Err(USimpleError::new(2, e)),
-    }
-}
-
-/// Evaluate a stack of Symbols, returning the result of the evaluation or
-/// an error message if evaluation failed.
-fn eval(stack: &mut Vec<Symbol>) -> Result<bool, String> {
-    macro_rules! pop_literal {
-        () => {
-            match stack.pop() {
-                Some(Symbol::Literal(s)) => s,
-                _ => panic!(),
-            }
-        };
-    }
-
-    let s = stack.pop();
-
-    match s {
-        Some(Symbol::Bang) => {
-            let result = eval(stack)?;
-
-            Ok(!result)
-        }
-        Some(Symbol::Op(Operator::String(op))) => {
-            let b = stack.pop();
-            let a = stack.pop();
-            Ok(if op == "!=" { a != b } else { a == b })
-        }
-        Some(Symbol::Op(Operator::Int(op))) => {
-            let b = pop_literal!();
-            let a = pop_literal!();
-
-            Ok(integers(&a, &b, &op)?)
-        }
-        Some(Symbol::Op(Operator::File(_op))) => unimplemented!(),
-        Some(Symbol::UnaryOp(UnaryOperator::StrlenOp(op))) => {
-            let s = match stack.pop() {
-                Some(Symbol::Literal(s)) => s,
-                Some(Symbol::None) => OsString::from(""),
-                None => {
-                    return Ok(true);
-                }
-                _ => {
-                    return Err(format!("missing argument after '{:?}'", op));
-                }
-            };
-
-            Ok(if op == "-z" {
-                s.is_empty()
-            } else {
-                !s.is_empty()
-            })
-        }
-        Some(Symbol::UnaryOp(UnaryOperator::FiletestOp(op))) => {
-            let op = op.to_str().unwrap();
-
-            let f = pop_literal!();
-
-            Ok(match op {
-                "-b" => path(&f, PathCondition::BlockSpecial),
-                "-c" => path(&f, PathCondition::CharacterSpecial),
-                "-d" => path(&f, PathCondition::Directory),
-                "-e" => path(&f, PathCondition::Exists),
-                "-f" => path(&f, PathCondition::Regular),
-                "-g" => path(&f, PathCondition::GroupIdFlag),
-                "-G" => path(&f, PathCondition::GroupOwns),
-                "-h" => path(&f, PathCondition::SymLink),
-                "-k" => path(&f, PathCondition::Sticky),
-                "-L" => path(&f, PathCondition::SymLink),
-                "-O" => path(&f, PathCondition::UserOwns),
-                "-p" => path(&f, PathCondition::Fifo),
-                "-r" => path(&f, PathCondition::Readable),
-                "-S" => path(&f, PathCondition::Socket),
-                "-s" => path(&f, PathCondition::NonEmpty),
-                "-t" => isatty(&f)?,
-                "-u" => path(&f, PathCondition::UserIdFlag),
-                "-w" => path(&f, PathCondition::Writable),
-                "-x" => path(&f, PathCondition::Executable),
-                _ => panic!(),
-            })
-        }
-        Some(Symbol::Literal(s)) => Ok(!s.is_empty()),
-        Some(Symbol::None) => Ok(false),
-        Some(Symbol::BoolOp(op)) => {
-            let b = eval(stack)?;
-            let a = eval(stack)?;
-
-            Ok(if op == "-a" { a && b } else { a || b })
-        }
-        None => Ok(false),
-        _ => Err("expected value".to_string()),
-    }
-}
-
-fn integers(a: &OsStr, b: &OsStr, op: &OsStr) -> Result<bool, String> {
-    let format_err = |value: &OsStr| format!("invalid integer {}", value.quote());
-
-    let a: i64 = a
-        .to_str()
-        .and_then(|s| s.parse().ok())
-        .ok_or_else(|| format_err(a))?;
-
-    let b: i64 = b
-        .to_str()
-        .and_then(|s| s.parse().ok())
-        .ok_or_else(|| format_err(b))?;
-
-    Ok(match op.to_str() {
-        Some("-eq") => a == b,
-        Some("-ne") => a != b,
-        Some("-gt") => a > b,
-        Some("-ge") => a >= b,
-        Some("-lt") => a < b,
-        Some("-le") => a <= b,
-        _ => return Err(format!("unknown operator {}", op.quote())),
-    })
-}
-
-fn isatty(fd: &OsStr) -> Result<bool, String> {
-    fd.to_str()
-        .and_then(|s| s.parse().ok())
-        .ok_or_else(|| format!("invalid integer {}", fd.quote()))
-        .map(|i| {
-            #[cfg(not(target_os = "redox"))]
-            unsafe {
-                libc::isatty(i) == 1
-            }
-            #[cfg(target_os = "redox")]
-            syscall::dup(i, b"termios").map(syscall::close).is_ok()
-        })
-}
-
-#[derive(Eq, PartialEq)]
-enum PathCondition {
-    BlockSpecial,
-    CharacterSpecial,
-    Directory,
-    Exists,
-    Regular,
-    GroupIdFlag,
-    GroupOwns,
-    SymLink,
-    Sticky,
-    UserOwns,
-    Fifo,
-    Readable,
-    Socket,
-    NonEmpty,
-    UserIdFlag,
-    Writable,
-    Executable,
-}
-
-#[cfg(not(windows))]
-fn path(path: &OsStr, condition: PathCondition) -> bool {
-    use std::fs::{self, Metadata};
-    use std::os::unix::fs::{FileTypeExt, MetadataExt};
-
-    const S_ISUID: u32 = 0o4000;
-    const S_ISGID: u32 = 0o2000;
-    const S_ISVTX: u32 = 0o1000;
-
-    enum Permission {
-        Read = 0o4,
-        Write = 0o2,
-        Execute = 0o1,
-    }
-
-    let geteuid = || {
-        #[cfg(not(target_os = "redox"))]
-        let euid = unsafe { libc::geteuid() };
-        #[cfg(target_os = "redox")]
-        let euid = syscall::geteuid().unwrap() as u32;
-
-        euid
-    };
-
-    let getegid = || {
-        #[cfg(not(target_os = "redox"))]
-        let egid = unsafe { libc::getegid() };
-        #[cfg(target_os = "redox")]
-        let egid = syscall::getegid().unwrap() as u32;
-
-        egid
-    };
-
-    let perm = |metadata: Metadata, p: Permission| {
-        if geteuid() == metadata.uid() {
-            metadata.mode() & ((p as u32) << 6) != 0
-        } else if getegid() == metadata.gid() {
-            metadata.mode() & ((p as u32) << 3) != 0
-        } else {
-            metadata.mode() & (p as u32) != 0
-        }
-    };
-
-    let metadata = if condition == PathCondition::SymLink {
-        fs::symlink_metadata(path)
-    } else {
-        fs::metadata(path)
-    };
-
-    let metadata = match metadata {
-        Ok(metadata) => metadata,
-        Err(_) => {
-            return false;
-        }
-    };
-
-    let file_type = metadata.file_type();
-
-    match condition {
-        PathCondition::BlockSpecial => file_type.is_block_device(),
-        PathCondition::CharacterSpecial => file_type.is_char_device(),
-        PathCondition::Directory => file_type.is_dir(),
-        PathCondition::Exists => true,
-        PathCondition::Regular => file_type.is_file(),
-        PathCondition::GroupIdFlag => metadata.mode() & S_ISGID != 0,
-        PathCondition::GroupOwns => metadata.gid() == getegid(),
-        PathCondition::SymLink => metadata.file_type().is_symlink(),
-        PathCondition::Sticky => metadata.mode() & S_ISVTX != 0,
-        PathCondition::UserOwns => metadata.uid() == geteuid(),
-        PathCondition::Fifo => file_type.is_fifo(),
-        PathCondition::Readable => perm(metadata, Permission::Read),
-        PathCondition::Socket => file_type.is_socket(),
-        PathCondition::NonEmpty => metadata.size() > 0,
-        PathCondition::UserIdFlag => metadata.mode() & S_ISUID != 0,
-        PathCondition::Writable => perm(metadata, Permission::Write),
-        PathCondition::Executable => perm(metadata, Permission::Execute),
-    }
-}
-
-#[cfg(windows)]
-fn path(path: &OsStr, condition: PathCondition) -> bool {
-    use std::fs::metadata;
-
-    let stat = match metadata(path) {
-        Ok(s) => s,
-        _ => return false,
-    };
-
-    match condition {
-        PathCondition::BlockSpecial => false,
-        PathCondition::CharacterSpecial => false,
-        PathCondition::Directory => stat.is_dir(),
-        PathCondition::Exists => true,
-        PathCondition::Regular => stat.is_file(),
-        PathCondition::GroupIdFlag => false,
-        PathCondition::GroupOwns => unimplemented!(),
-        PathCondition::SymLink => false,
-        PathCondition::Sticky => false,
-        PathCondition::UserOwns => unimplemented!(),
-        PathCondition::Fifo => false,
-        PathCondition::Readable => false, // TODO
-        PathCondition::Socket => false,
-        PathCondition::NonEmpty => stat.len() > 0,
-        PathCondition::UserIdFlag => false,
-        PathCondition::Writable => false,   // TODO
-        PathCondition::Executable => false, // TODO
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_timeout/timeout.rs.html b/src/uu_timeout/timeout.rs.html deleted file mode 100644 index f04f68f96..000000000 --- a/src/uu_timeout/timeout.rs.html +++ /dev/null @@ -1,558 +0,0 @@ -timeout.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) tstr sigstr cmdname setpgid sigchld
-
-#[macro_use]
-extern crate uucore;
-
-extern crate clap;
-
-use clap::{crate_version, App, AppSettings, Arg};
-use std::io::ErrorKind;
-use std::process::{Command, Stdio};
-use std::time::Duration;
-use uucore::display::Quotable;
-use uucore::error::{UResult, USimpleError};
-use uucore::process::ChildExt;
-use uucore::signals::{signal_by_name_or_value, signal_name_by_value};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "Start COMMAND, and kill it if still running after DURATION.";
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION] DURATION COMMAND...",
-        uucore::execution_phrase()
-    )
-}
-
-const ERR_EXIT_STATUS: i32 = 125;
-
-pub mod options {
-    pub static FOREGROUND: &str = "foreground";
-    pub static KILL_AFTER: &str = "kill-after";
-    pub static SIGNAL: &str = "signal";
-    pub static PRESERVE_STATUS: &str = "preserve-status";
-    pub static VERBOSE: &str = "verbose";
-
-    // Positional args.
-    pub static DURATION: &str = "duration";
-    pub static COMMAND: &str = "command";
-}
-
-struct Config {
-    foreground: bool,
-    kill_after: Option<Duration>,
-    signal: usize,
-    duration: Duration,
-    preserve_status: bool,
-    verbose: bool,
-
-    command: Vec<String>,
-}
-
-impl Config {
-    fn from(options: clap::ArgMatches) -> Config {
-        let signal = match options.value_of(options::SIGNAL) {
-            Some(signal_) => {
-                let signal_result = signal_by_name_or_value(signal_);
-                match signal_result {
-                    None => {
-                        unreachable!("invalid signal {}", signal_.quote());
-                    }
-                    Some(signal_value) => signal_value,
-                }
-            }
-            _ => uucore::signals::signal_by_name_or_value("TERM").unwrap(),
-        };
-
-        let kill_after = options
-            .value_of(options::KILL_AFTER)
-            .map(|time| uucore::parse_time::from_str(time).unwrap());
-
-        let duration: Duration =
-            uucore::parse_time::from_str(options.value_of(options::DURATION).unwrap()).unwrap();
-
-        let preserve_status: bool = options.is_present(options::PRESERVE_STATUS);
-        let foreground = options.is_present(options::FOREGROUND);
-        let verbose = options.is_present(options::VERBOSE);
-
-        let command = options
-            .values_of(options::COMMAND)
-            .unwrap()
-            .map(String::from)
-            .collect::<Vec<_>>();
-
-        Config {
-            foreground,
-            kill_after,
-            signal,
-            duration,
-            preserve_status,
-            verbose,
-            command,
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let usage = usage();
-
-    let app = uu_app().override_usage(&usage[..]);
-
-    let matches = app.get_matches_from(args);
-
-    let config = Config::from(matches);
-    timeout(
-        &config.command,
-        config.duration,
-        config.signal,
-        config.kill_after,
-        config.foreground,
-        config.preserve_status,
-        config.verbose,
-    )
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new("timeout")
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::FOREGROUND)
-                .long(options::FOREGROUND)
-                .help("when not running timeout directly from a shell prompt, allow COMMAND to read from the TTY and get TTY signals; in this mode, children of COMMAND will not be timed out")
-        )
-        .arg(
-            Arg::new(options::KILL_AFTER)
-                .short('k')
-                .takes_value(true))
-        .arg(
-            Arg::new(options::PRESERVE_STATUS)
-                .long(options::PRESERVE_STATUS)
-                .help("exit with the same status as COMMAND, even when the command times out")
-        )
-        .arg(
-            Arg::new(options::SIGNAL)
-                .short('s')
-                .long(options::SIGNAL)
-                .help("specify the signal to be sent on timeout; SIGNAL may be a name like 'HUP' or a number; see 'kill -l' for a list of signals")
-                .takes_value(true)
-        )
-        .arg(
-            Arg::new(options::VERBOSE)
-              .short('v')
-              .long(options::VERBOSE)
-              .help("diagnose to stderr any signal sent upon timeout")
-        )
-        .arg(
-            Arg::new(options::DURATION)
-                .index(1)
-                .required(true)
-        )
-        .arg(
-            Arg::new(options::COMMAND)
-                .index(2)
-                .required(true)
-                .multiple_occurrences(true)
-        )
-        .setting(AppSettings::TrailingVarArg)
-}
-
-/// Remove pre-existing SIGCHLD handlers that would make waiting for the child's exit code fail.
-fn unblock_sigchld() {
-    unsafe {
-        nix::sys::signal::signal(
-            nix::sys::signal::Signal::SIGCHLD,
-            nix::sys::signal::SigHandler::SigDfl,
-        )
-        .unwrap();
-    }
-}
-
-/// TODO: Improve exit codes, and make them consistent with the GNU Coreutils exit codes.
-
-fn timeout(
-    cmd: &[String],
-    duration: Duration,
-    signal: usize,
-    kill_after: Option<Duration>,
-    foreground: bool,
-    preserve_status: bool,
-    verbose: bool,
-) -> UResult<()> {
-    if !foreground {
-        unsafe { libc::setpgid(0, 0) };
-    }
-    let mut process = Command::new(&cmd[0])
-        .args(&cmd[1..])
-        .stdin(Stdio::inherit())
-        .stdout(Stdio::inherit())
-        .stderr(Stdio::inherit())
-        .spawn()
-        .map_err(|err| {
-            let status_code = if err.kind() == ErrorKind::NotFound {
-                // FIXME: not sure which to use
-                127
-            } else {
-                // FIXME: this may not be 100% correct...
-                126
-            };
-            USimpleError::new(status_code, format!("failed to execute process: {}", err))
-        })?;
-    unblock_sigchld();
-    match process.wait_or_timeout(duration) {
-        Ok(Some(status)) => {
-            let status_code = status.code().unwrap_or_else(|| status.signal().unwrap());
-            if status_code == 0 {
-                Ok(())
-            } else {
-                Err(status_code.into())
-            }
-        }
-        Ok(None) => {
-            if verbose {
-                show_error!(
-                    "sending signal {} to command {}",
-                    signal_name_by_value(signal).unwrap(),
-                    cmd[0].quote()
-                );
-            }
-            process
-                .send_signal(signal)
-                .map_err(|e| USimpleError::new(ERR_EXIT_STATUS, format!("{}", e)))?;
-            if let Some(kill_after) = kill_after {
-                match process.wait_or_timeout(kill_after) {
-                    Ok(Some(status)) => {
-                        if preserve_status {
-                            let status_code =
-                                status.code().unwrap_or_else(|| status.signal().unwrap());
-                            if status_code == 0 {
-                                Ok(())
-                            } else {
-                                Err(status_code.into())
-                            }
-                        } else {
-                            Err(124.into())
-                        }
-                    }
-                    Ok(None) => {
-                        if verbose {
-                            show_error!("sending signal KILL to command {}", cmd[0].quote());
-                        }
-                        process
-                            .send_signal(uucore::signals::signal_by_name_or_value("KILL").unwrap())
-                            .map_err(|e| USimpleError::new(ERR_EXIT_STATUS, format!("{}", e)))?;
-                        process
-                            .wait()
-                            .map_err(|e| USimpleError::new(ERR_EXIT_STATUS, format!("{}", e)))?;
-                        Err(137.into())
-                    }
-                    Err(_) => Err(124.into()),
-                }
-            } else {
-                Err(124.into())
-            }
-        }
-        Err(_) => {
-            // We're going to return ERR_EXIT_STATUS regardless of
-            // whether `send_signal()` succeeds or fails, so just
-            // ignore the return value.
-            process
-                .send_signal(signal)
-                .map_err(|e| USimpleError::new(ERR_EXIT_STATUS, format!("{}", e)))?;
-            Err(ERR_EXIT_STATUS.into())
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_touch/touch.rs.html b/src/uu_touch/touch.rs.html deleted file mode 100644 index 63a70ebf4..000000000 --- a/src/uu_touch/touch.rs.html +++ /dev/null @@ -1,580 +0,0 @@ -touch.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-
// This file is part of the uutils coreutils package.
-//
-// (c) Nick Platt <platt.nicholas@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) filetime strptime utcoff strs datetime MMDDhhmm clapv
-
-pub extern crate filetime;
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg, ArgGroup};
-use filetime::*;
-use std::fs::{self, File};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UError, UResult, USimpleError};
-
-static ABOUT: &str = "Update the access and modification times of each FILE to the current time.";
-pub mod options {
-    // Both SOURCES and sources are needed as we need to be able to refer to the ArgGroup.
-    pub static SOURCES: &str = "sources";
-    pub mod sources {
-        pub static DATE: &str = "date";
-        pub static REFERENCE: &str = "reference";
-        pub static CURRENT: &str = "current";
-    }
-    pub static ACCESS: &str = "access";
-    pub static MODIFICATION: &str = "modification";
-    pub static NO_CREATE: &str = "no-create";
-    pub static NO_DEREF: &str = "no-dereference";
-    pub static TIME: &str = "time";
-}
-
-static ARG_FILES: &str = "files";
-
-fn to_local(mut tm: time::Tm) -> time::Tm {
-    tm.tm_utcoff = time::now().tm_utcoff;
-    tm
-}
-
-fn local_tm_to_filetime(tm: time::Tm) -> FileTime {
-    let ts = tm.to_timespec();
-    FileTime::from_unix_time(ts.sec as i64, ts.nsec as u32)
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [USER]", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let files = matches.values_of_os(ARG_FILES).unwrap();
-
-    let (mut atime, mut mtime) =
-        if let Some(reference) = matches.value_of_os(options::sources::REFERENCE) {
-            stat(Path::new(reference), !matches.is_present(options::NO_DEREF))?
-        } else {
-            let timestamp = if let Some(date) = matches.value_of(options::sources::DATE) {
-                parse_date(date)?
-            } else if let Some(current) = matches.value_of(options::sources::CURRENT) {
-                parse_timestamp(current)?
-            } else {
-                local_tm_to_filetime(time::now())
-            };
-            (timestamp, timestamp)
-        };
-
-    for filename in files {
-        let path = Path::new(filename);
-        if !path.exists() {
-            // no-dereference included here for compatibility
-            if matches.is_present(options::NO_CREATE) || matches.is_present(options::NO_DEREF) {
-                continue;
-            }
-
-            if let Err(e) = File::create(path) {
-                show!(e.map_err_context(|| format!("cannot touch {}", path.quote())));
-                continue;
-            };
-
-            // Minor optimization: if no reference time was specified, we're done.
-            if !matches.is_present(options::SOURCES) {
-                continue;
-            }
-        }
-
-        // If changing "only" atime or mtime, grab the existing value of the other.
-        // Note that "-a" and "-m" may be passed together; this is not an xor.
-        if matches.is_present(options::ACCESS)
-            || matches.is_present(options::MODIFICATION)
-            || matches.is_present(options::TIME)
-        {
-            let st = stat(path, !matches.is_present(options::NO_DEREF))?;
-            let time = matches.value_of(options::TIME).unwrap_or("");
-
-            if !(matches.is_present(options::ACCESS)
-                || time.contains(&"access".to_owned())
-                || time.contains(&"atime".to_owned())
-                || time.contains(&"use".to_owned()))
-            {
-                atime = st.0;
-            }
-
-            if !(matches.is_present(options::MODIFICATION)
-                || time.contains(&"modify".to_owned())
-                || time.contains(&"mtime".to_owned()))
-            {
-                mtime = st.1;
-            }
-        }
-
-        if matches.is_present(options::NO_DEREF) {
-            set_symlink_file_times(path, atime, mtime)
-        } else {
-            filetime::set_file_times(path, atime, mtime)
-        }
-        .map_err_context(|| format!("setting times of {}", path.quote()))?;
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::ACCESS)
-                .short('a')
-                .help("change only the access time"),
-        )
-        .arg(
-            Arg::new(options::sources::CURRENT)
-                .short('t')
-                .help("use [[CC]YY]MMDDhhmm[.ss] instead of the current time")
-                .value_name("STAMP")
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(options::sources::DATE)
-                .short('d')
-                .long(options::sources::DATE)
-                .help("parse argument and use it instead of current time")
-                .value_name("STRING"),
-        )
-        .arg(
-            Arg::new(options::MODIFICATION)
-                .short('m')
-                .help("change only the modification time"),
-        )
-        .arg(
-            Arg::new(options::NO_CREATE)
-                .short('c')
-                .long(options::NO_CREATE)
-                .help("do not create any files"),
-        )
-        .arg(
-            Arg::new(options::NO_DEREF)
-                .short('h')
-                .long(options::NO_DEREF)
-                .help(
-                    "affect each symbolic link instead of any referenced file \
-                     (only for systems that can change the timestamps of a symlink)",
-                ),
-        )
-        .arg(
-            Arg::new(options::sources::REFERENCE)
-                .short('r')
-                .long(options::sources::REFERENCE)
-                .alias("ref") // clapv3
-                .help("use this file's times instead of the current time")
-                .value_name("FILE")
-                .allow_invalid_utf8(true),
-        )
-        .arg(
-            Arg::new(options::TIME)
-                .long(options::TIME)
-                .help(
-                    "change only the specified time: \"access\", \"atime\", or \
-                     \"use\" are equivalent to -a; \"modify\" or \"mtime\" are \
-                     equivalent to -m",
-                )
-                .value_name("WORD")
-                .possible_values(&["access", "atime", "use"])
-                .takes_value(true),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1)
-                .allow_invalid_utf8(true),
-        )
-        .group(ArgGroup::new(options::SOURCES).args(&[
-            options::sources::CURRENT,
-            options::sources::DATE,
-            options::sources::REFERENCE,
-        ]))
-}
-
-fn stat(path: &Path, follow: bool) -> UResult<(FileTime, FileTime)> {
-    let metadata = if follow {
-        fs::symlink_metadata(path)
-    } else {
-        fs::metadata(path)
-    }
-    .map_err_context(|| format!("failed to get attributes of {}", path.quote()))?;
-
-    Ok((
-        FileTime::from_last_access_time(&metadata),
-        FileTime::from_last_modification_time(&metadata),
-    ))
-}
-
-fn parse_date(str: &str) -> UResult<FileTime> {
-    // This isn't actually compatible with GNU touch, but there doesn't seem to
-    // be any simple specification for what format this parameter allows and I'm
-    // not about to implement GNU parse_datetime.
-    // http://git.savannah.gnu.org/gitweb/?p=gnulib.git;a=blob_plain;f=lib/parse-datetime.y
-    let formats = vec!["%c", "%F"];
-    for f in formats {
-        if let Ok(tm) = time::strptime(str, f) {
-            return Ok(local_tm_to_filetime(to_local(tm)));
-        }
-    }
-
-    if let Ok(tm) = time::strptime(str, "@%s") {
-        // Don't convert to local time in this case - seconds since epoch are not time-zone dependent
-        return Ok(local_tm_to_filetime(tm));
-    }
-
-    Err(USimpleError::new(
-        1,
-        format!("Unable to parse date: {}", str),
-    ))
-}
-
-fn parse_timestamp(s: &str) -> UResult<FileTime> {
-    let now = time::now();
-    let (format, ts) = match s.chars().count() {
-        15 => ("%Y%m%d%H%M.%S", s.to_owned()),
-        12 => ("%Y%m%d%H%M", s.to_owned()),
-        13 => ("%y%m%d%H%M.%S", s.to_owned()),
-        10 => ("%y%m%d%H%M", s.to_owned()),
-        11 => ("%Y%m%d%H%M.%S", format!("{}{}", now.tm_year + 1900, s)),
-        8 => ("%Y%m%d%H%M", format!("{}{}", now.tm_year + 1900, s)),
-        _ => {
-            return Err(USimpleError::new(
-                1,
-                format!("invalid date format {}", s.quote()),
-            ))
-        }
-    };
-
-    let tm = time::strptime(&ts, format)
-        .map_err(|_| USimpleError::new(1, format!("invalid date format {}", s.quote())))?;
-
-    let mut local = to_local(tm);
-    local.tm_isdst = -1;
-    let ft = local_tm_to_filetime(local);
-
-    // We have to check that ft is valid time. Due to daylight saving
-    // time switch, local time can jump from 1:59 AM to 3:00 AM,
-    // in which case any time between 2:00 AM and 2:59 AM is not valid.
-    // Convert back to local time and see if we got the same value back.
-    let ts = time::Timespec {
-        sec: ft.unix_seconds(),
-        nsec: 0,
-    };
-    let tm2 = time::at(ts);
-    if tm.tm_hour != tm2.tm_hour {
-        return Err(USimpleError::new(
-            1,
-            format!("invalid date format {}", s.quote()),
-        ));
-    }
-
-    Ok(ft)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tr/convert.rs.html b/src/uu_tr/convert.rs.html deleted file mode 100644 index f00ad86d0..000000000 --- a/src/uu_tr/convert.rs.html +++ /dev/null @@ -1,78 +0,0 @@ -convert.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (strings) anychar combinator
-
-use nom::{
-    branch::alt,
-    bytes::complete::tag,
-    character::complete::{anychar, one_of},
-    combinator::{map_opt, recognize},
-    multi::{many0, many_m_n},
-    sequence::preceded,
-    IResult,
-};
-
-fn parse_octal(input: &str) -> IResult<&str, char> {
-    map_opt(
-        preceded(tag("\\"), recognize(many_m_n(1, 3, one_of("01234567")))),
-        |out: &str| {
-            u32::from_str_radix(out, 8)
-                .map(std::char::from_u32)
-                .ok()
-                .flatten()
-        },
-    )(input)
-}
-
-pub fn reduce_octal_to_char(input: String) -> String {
-    let result = many0(alt((parse_octal, anychar)))(input.as_str())
-        .map(|(_, r)| r)
-        .unwrap()
-        .into_iter()
-        .collect();
-    result
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tr/operation.rs.html b/src/uu_tr/operation.rs.html deleted file mode 100644 index 4e3e8e258..000000000 --- a/src/uu_tr/operation.rs.html +++ /dev/null @@ -1,1116 +0,0 @@ -operation.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (strings) anychar combinator Alnum Punct Xdigit alnum punct xdigit cntrl
-
-use nom::{
-    branch::alt,
-    bytes::complete::tag,
-    character::complete::{anychar, digit1},
-    combinator::{map, peek, value},
-    multi::many0,
-    sequence::{delimited, preceded, separated_pair},
-    IResult,
-};
-use std::{
-    collections::{HashMap, HashSet},
-    error::Error,
-    fmt::{Debug, Display},
-    io::{BufRead, Write},
-};
-use uucore::error::UError;
-
-use crate::unicode_table;
-
-#[derive(Debug, Clone)]
-pub enum BadSequence {
-    MissingCharClassName,
-    MissingEquivalentClassChar,
-    MultipleCharRepeatInSet2,
-    CharRepeatInSet1,
-    InvalidRepeatCount(String),
-    EmptySet2WhenNotTruncatingSet1,
-}
-
-impl Display for BadSequence {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            BadSequence::MissingCharClassName => writeln!(f, "missing character class name '[::]'"),
-            BadSequence::MissingEquivalentClassChar => {
-                writeln!(f, "missing equivalence class character '[==]'")
-            }
-            BadSequence::MultipleCharRepeatInSet2 => {
-                writeln!(f, "only one [c*] repeat construct may appear in string2")
-            }
-            BadSequence::CharRepeatInSet1 => {
-                writeln!(f, "the [c*] repeat construct may not appear in string1")
-            }
-            BadSequence::InvalidRepeatCount(count) => {
-                writeln!(f, "invalid repeat count '{}' in [c*n] construct", count)
-            }
-            BadSequence::EmptySet2WhenNotTruncatingSet1 => {
-                writeln!(f, "when not truncating set1, string2 must be non-empty")
-            }
-        }
-    }
-}
-
-impl Error for BadSequence {}
-impl UError for BadSequence {}
-
-#[derive(Debug, Clone, Copy)]
-pub enum Sequence {
-    Char(char),
-    CharRange(u32, u32),
-    CharStar(char),
-    CharRepeat(char, usize),
-    Alnum,
-    Alpha,
-    Blank,
-    Control,
-    Digit,
-    Graph,
-    Lower,
-    Print,
-    Punct,
-    Space,
-    Upper,
-    Xdigit,
-}
-
-impl Sequence {
-    pub fn flatten(&self) -> Box<dyn Iterator<Item = char>> {
-        match self {
-            Sequence::Char(c) => Box::new(std::iter::once(*c)),
-            Sequence::CharRange(l, r) => Box::new((*l..=*r).flat_map(std::char::from_u32)),
-            Sequence::CharStar(c) => Box::new(std::iter::repeat(*c)),
-            Sequence::CharRepeat(c, n) => Box::new(std::iter::repeat(*c).take(*n)),
-            Sequence::Alnum => Box::new(('0'..='9').chain('A'..='Z').chain('a'..='z')),
-            Sequence::Alpha => Box::new(('A'..='Z').chain('a'..='z')),
-            Sequence::Blank => Box::new(unicode_table::BLANK.iter().cloned()),
-            Sequence::Control => Box::new(
-                (0..=31)
-                    .chain(std::iter::once(127))
-                    .flat_map(std::char::from_u32),
-            ),
-            Sequence::Digit => Box::new('0'..='9'),
-            Sequence::Graph => Box::new(
-                (48..=57) // digit
-                    .chain(65..=90) // uppercase
-                    .chain(97..=122) // lowercase
-                    // punctuations
-                    .chain(33..=47)
-                    .chain(58..=64)
-                    .chain(91..=96)
-                    .chain(123..=126)
-                    .chain(std::iter::once(32)) // space
-                    .flat_map(std::char::from_u32),
-            ),
-            Sequence::Lower => Box::new('a'..='z'),
-            Sequence::Print => Box::new(
-                (48..=57) // digit
-                    .chain(65..=90) // uppercase
-                    .chain(97..=122) // lowercase
-                    // punctuations
-                    .chain(33..=47)
-                    .chain(58..=64)
-                    .chain(91..=96)
-                    .chain(123..=126)
-                    .flat_map(std::char::from_u32),
-            ),
-            Sequence::Punct => Box::new(
-                (33..=47)
-                    .chain(58..=64)
-                    .chain(91..=96)
-                    .chain(123..=126)
-                    .flat_map(std::char::from_u32),
-            ),
-            Sequence::Space => Box::new(unicode_table::SPACES.iter().cloned()),
-            Sequence::Upper => Box::new('A'..='Z'),
-            Sequence::Xdigit => Box::new(('0'..='9').chain('A'..='F').chain('a'..='f')),
-        }
-    }
-
-    // Hide all the nasty sh*t in here
-    // TODO: Make the 2 set lazily generate the character mapping as necessary.
-    pub fn solve_set_characters(
-        set1_str: &str,
-        set2_str: &str,
-        truncate_set1_flag: bool,
-    ) -> Result<(Vec<char>, Vec<char>), BadSequence> {
-        let set1 = Sequence::from_str(set1_str)?;
-        let set2 = Sequence::from_str(set2_str)?;
-
-        let is_char_star = |s: &&Sequence| -> bool { matches!(s, Sequence::CharStar(_)) };
-        let set1_star_count = set1.iter().filter(is_char_star).count();
-        if set1_star_count == 0 {
-            let set2_star_count = set2.iter().filter(is_char_star).count();
-            if set2_star_count < 2 {
-                let char_star = set2.iter().find_map(|s| match s {
-                    Sequence::CharStar(c) => Some(c),
-                    _ => None,
-                });
-                let mut partition = set2
-                    .as_slice()
-                    .split(|s| matches!(s, Sequence::CharStar(_)));
-                let set1_len = set1.iter().flat_map(Sequence::flatten).count();
-                let set2_len = set2
-                    .iter()
-                    .filter_map(|s| match s {
-                        Sequence::CharStar(_) => None,
-                        r => Some(r),
-                    })
-                    .flat_map(Sequence::flatten)
-                    .count();
-                let star_compensate_len = set1_len.saturating_sub(set2_len);
-                let (left, right) = (partition.next(), partition.next());
-                let set2_solved: Vec<char> = match (left, right) {
-                    (None, None) => match char_star {
-                        Some(c) => std::iter::repeat(*c).take(star_compensate_len).collect(),
-                        None => std::iter::empty().collect(),
-                    },
-                    (None, Some(set2_b)) => {
-                        if let Some(c) = char_star {
-                            std::iter::repeat(*c)
-                                .take(star_compensate_len)
-                                .chain(set2_b.iter().flat_map(Sequence::flatten))
-                                .collect()
-                        } else {
-                            set2_b.iter().flat_map(Sequence::flatten).collect()
-                        }
-                    }
-                    (Some(set2_a), None) => match char_star {
-                        Some(c) => set2_a
-                            .iter()
-                            .flat_map(Sequence::flatten)
-                            .chain(std::iter::repeat(*c).take(star_compensate_len))
-                            .collect(),
-                        None => set2_a.iter().flat_map(Sequence::flatten).collect(),
-                    },
-                    (Some(set2_a), Some(set2_b)) => match char_star {
-                        Some(c) => set2_a
-                            .iter()
-                            .flat_map(Sequence::flatten)
-                            .chain(std::iter::repeat(*c).take(star_compensate_len))
-                            .chain(set2_b.iter().flat_map(Sequence::flatten))
-                            .collect(),
-                        None => set2_a
-                            .iter()
-                            .chain(set2_b.iter())
-                            .flat_map(Sequence::flatten)
-                            .collect(),
-                    },
-                };
-                let mut set1_solved: Vec<char> = set1.iter().flat_map(Sequence::flatten).collect();
-                if truncate_set1_flag {
-                    set1_solved.truncate(set2_solved.len());
-                }
-                Ok((set1_solved, set2_solved))
-            } else {
-                Err(BadSequence::MultipleCharRepeatInSet2)
-            }
-        } else {
-            Err(BadSequence::CharRepeatInSet1)
-        }
-    }
-}
-
-impl Sequence {
-    pub fn from_str(input: &str) -> Result<Vec<Sequence>, BadSequence> {
-        many0(alt((
-            Sequence::parse_char_range,
-            Sequence::parse_char_star,
-            Sequence::parse_char_repeat,
-            Sequence::parse_class,
-            Sequence::parse_char_equal,
-            // NOTE: This must be the last one
-            map(Sequence::parse_backslash_or_char, |s| Ok(Sequence::Char(s))),
-        )))(input)
-        .map(|(_, r)| r)
-        .unwrap()
-        .into_iter()
-        .collect::<Result<Vec<_>, _>>()
-    }
-
-    fn parse_backslash(input: &str) -> IResult<&str, char> {
-        preceded(tag("\\"), anychar)(input).map(|(l, a)| {
-            let c = match a {
-                'a' => unicode_table::BEL,
-                'b' => unicode_table::BS,
-                'f' => unicode_table::FF,
-                'n' => unicode_table::LF,
-                'r' => unicode_table::CR,
-                't' => unicode_table::HT,
-                'v' => unicode_table::VT,
-                x => x,
-            };
-            (l, c)
-        })
-    }
-
-    fn parse_backslash_or_char(input: &str) -> IResult<&str, char> {
-        alt((Sequence::parse_backslash, anychar))(input)
-    }
-
-    fn parse_char_range(input: &str) -> IResult<&str, Result<Sequence, BadSequence>> {
-        separated_pair(
-            Sequence::parse_backslash_or_char,
-            tag("-"),
-            Sequence::parse_backslash_or_char,
-        )(input)
-        .map(|(l, (a, b))| {
-            (l, {
-                let (start, end) = (u32::from(a), u32::from(b));
-                Ok(Sequence::CharRange(start, end))
-            })
-        })
-    }
-
-    fn parse_char_star(input: &str) -> IResult<&str, Result<Sequence, BadSequence>> {
-        delimited(tag("["), Sequence::parse_backslash_or_char, tag("*]"))(input)
-            .map(|(l, a)| (l, Ok(Sequence::CharStar(a))))
-    }
-
-    fn parse_char_repeat(input: &str) -> IResult<&str, Result<Sequence, BadSequence>> {
-        delimited(
-            tag("["),
-            separated_pair(Sequence::parse_backslash_or_char, tag("*"), digit1),
-            tag("]"),
-        )(input)
-        .map(|(l, (c, str))| {
-            (
-                l,
-                match usize::from_str_radix(str, 8) {
-                    Ok(0) => Ok(Sequence::CharStar(c)),
-                    Ok(count) => Ok(Sequence::CharRepeat(c, count)),
-                    Err(_) => Err(BadSequence::InvalidRepeatCount(str.to_string())),
-                },
-            )
-        })
-    }
-
-    fn parse_class(input: &str) -> IResult<&str, Result<Sequence, BadSequence>> {
-        delimited(
-            tag("[:"),
-            alt((
-                map(
-                    alt((
-                        value(Sequence::Alnum, tag("alnum")),
-                        value(Sequence::Alpha, tag("alpha")),
-                        value(Sequence::Blank, tag("blank")),
-                        value(Sequence::Control, tag("cntrl")),
-                        value(Sequence::Digit, tag("digit")),
-                        value(Sequence::Graph, tag("graph")),
-                        value(Sequence::Lower, tag("lower")),
-                        value(Sequence::Print, tag("print")),
-                        value(Sequence::Punct, tag("punct")),
-                        value(Sequence::Space, tag("space")),
-                        value(Sequence::Upper, tag("upper")),
-                        value(Sequence::Xdigit, tag("xdigit")),
-                    )),
-                    Ok,
-                ),
-                value(Err(BadSequence::MissingCharClassName), tag("")),
-            )),
-            tag(":]"),
-        )(input)
-    }
-
-    fn parse_char_equal(input: &str) -> IResult<&str, Result<Sequence, BadSequence>> {
-        delimited(
-            tag("[="),
-            alt((
-                value(
-                    Err(BadSequence::MissingEquivalentClassChar),
-                    peek(tag("=]")),
-                ),
-                map(Sequence::parse_backslash_or_char, |c| Ok(Sequence::Char(c))),
-            )),
-            tag("=]"),
-        )(input)
-    }
-}
-
-pub trait SymbolTranslator {
-    fn translate(&mut self, current: char) -> Option<char>;
-}
-
-#[derive(Debug)]
-pub struct DeleteOperation {
-    set: Vec<char>,
-    complement_flag: bool,
-}
-
-impl DeleteOperation {
-    pub fn new(set: Vec<char>, complement_flag: bool) -> DeleteOperation {
-        DeleteOperation {
-            set,
-            complement_flag,
-        }
-    }
-}
-
-impl SymbolTranslator for DeleteOperation {
-    fn translate(&mut self, current: char) -> Option<char> {
-        let found = self.set.iter().any(|sequence| sequence.eq(&current));
-        if self.complement_flag == found {
-            Some(current)
-        } else {
-            None
-        }
-    }
-}
-
-pub struct TranslateOperationComplement {
-    iter: u32,
-    set2_iter: usize,
-    set1: Vec<char>,
-    set2: Vec<char>,
-    translation_map: HashMap<char, char>,
-}
-
-impl TranslateOperationComplement {
-    fn new(set1: Vec<char>, set2: Vec<char>) -> TranslateOperationComplement {
-        TranslateOperationComplement {
-            iter: 0,
-            set2_iter: 0,
-            set1,
-            set2,
-            translation_map: HashMap::new(),
-        }
-    }
-}
-
-#[derive(Debug)]
-pub struct TranslateOperationStandard {
-    translation_map: HashMap<char, char>,
-}
-
-impl TranslateOperationStandard {
-    fn new(set1: Vec<char>, set2: Vec<char>) -> Result<TranslateOperationStandard, BadSequence> {
-        if let Some(fallback) = set2.last().copied() {
-            Ok(TranslateOperationStandard {
-                translation_map: set1
-                    .into_iter()
-                    .zip(set2.into_iter().chain(std::iter::repeat(fallback)))
-                    .collect::<HashMap<_, _>>(),
-            })
-        } else if set1.is_empty() && set2.is_empty() {
-            Ok(TranslateOperationStandard {
-                translation_map: HashMap::new(),
-            })
-        } else {
-            Err(BadSequence::EmptySet2WhenNotTruncatingSet1)
-        }
-    }
-}
-
-pub enum TranslateOperation {
-    Standard(TranslateOperationStandard),
-    Complement(TranslateOperationComplement),
-}
-
-impl TranslateOperation {
-    fn next_complement_char(iter: u32, ignore_list: &[char]) -> (u32, char) {
-        (iter..)
-            .filter_map(std::char::from_u32)
-            .filter(|c| !ignore_list.iter().any(|s| s.eq(c)))
-            .map(|c| (u32::from(c) + 1, c))
-            .next()
-            .expect("exhausted all possible characters")
-    }
-}
-
-impl TranslateOperation {
-    pub fn new(
-        set1: Vec<char>,
-        set2: Vec<char>,
-        complement: bool,
-    ) -> Result<TranslateOperation, BadSequence> {
-        if complement {
-            Ok(TranslateOperation::Complement(
-                TranslateOperationComplement::new(set1, set2),
-            ))
-        } else {
-            Ok(TranslateOperation::Standard(
-                TranslateOperationStandard::new(set1, set2)?,
-            ))
-        }
-    }
-}
-
-impl SymbolTranslator for TranslateOperation {
-    fn translate(&mut self, current: char) -> Option<char> {
-        match self {
-            TranslateOperation::Standard(TranslateOperationStandard { translation_map }) => Some(
-                translation_map
-                    .iter()
-                    .find_map(|(l, r)| if l.eq(&current) { Some(*r) } else { None })
-                    .unwrap_or(current),
-            ),
-            TranslateOperation::Complement(TranslateOperationComplement {
-                iter,
-                set2_iter,
-                set1,
-                set2,
-                translation_map,
-            }) => {
-                // First, try to see if current char is already mapped
-                // If so, return the mapped char
-                // Else, pop from set2
-                // If we popped something, map the next complement character to this value
-                // If set2 is empty, we just map the current char directly to fallback --- to avoid looping unnecessarily
-                if let Some(c) = set1.iter().find(|c| c.eq(&&current)) {
-                    Some(*c)
-                } else {
-                    while translation_map.get(&current).is_none() {
-                        if let Some(value) = set2.get(*set2_iter) {
-                            let (next_iter, next_key) =
-                                TranslateOperation::next_complement_char(*iter, &*set1);
-                            *iter = next_iter;
-                            *set2_iter = set2_iter.saturating_add(1);
-                            translation_map.insert(next_key, *value);
-                        } else {
-                            translation_map.insert(current, *set2.last().unwrap());
-                        }
-                    }
-                    Some(*translation_map.get(&current).unwrap())
-                }
-            }
-        }
-    }
-}
-
-#[derive(Debug, Clone)]
-pub struct SqueezeOperation {
-    set1: HashSet<char>,
-    complement: bool,
-    previous: Option<char>,
-}
-
-impl SqueezeOperation {
-    pub fn new(set1: Vec<char>, complement: bool) -> SqueezeOperation {
-        SqueezeOperation {
-            set1: set1.into_iter().collect(),
-            complement,
-            previous: None,
-        }
-    }
-}
-
-impl SymbolTranslator for SqueezeOperation {
-    fn translate(&mut self, current: char) -> Option<char> {
-        if self.complement {
-            let next = if self.set1.contains(&current) {
-                Some(current)
-            } else {
-                match self.previous {
-                    Some(v) => {
-                        if v.eq(&current) {
-                            None
-                        } else {
-                            Some(current)
-                        }
-                    }
-                    None => Some(current),
-                }
-            };
-            self.previous = Some(current);
-            next
-        } else {
-            let next = if self.set1.contains(&current) {
-                match self.previous {
-                    Some(v) if v == current => None,
-                    _ => Some(current),
-                }
-            } else {
-                Some(current)
-            };
-            self.previous = Some(current);
-            next
-        }
-    }
-}
-
-pub fn translate_input<T, R, W>(input: &mut R, output: &mut W, mut translator: T)
-where
-    T: SymbolTranslator,
-    R: BufRead,
-    W: Write,
-{
-    let mut buf = String::new();
-    let mut output_buf = String::new();
-    while let Ok(length) = input.read_line(&mut buf) {
-        if length == 0 {
-            break;
-        } else {
-            let filtered = buf.chars().filter_map(|c| translator.translate(c));
-            output_buf.extend(filtered);
-            output.write_all(output_buf.as_bytes()).unwrap();
-        }
-        buf.clear();
-        output_buf.clear();
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tr/tr.rs.html b/src/uu_tr/tr.rs.html deleted file mode 100644 index ccdac08ca..000000000 --- a/src/uu_tr/tr.rs.html +++ /dev/null @@ -1,388 +0,0 @@ -tr.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) allocs bset dflag cflag sflag tflag
-
-extern crate nom;
-
-mod convert;
-mod operation;
-mod unicode_table;
-
-use clap::{crate_version, App, Arg};
-use nom::AsBytes;
-use operation::{translate_input, Sequence, SqueezeOperation, TranslateOperation};
-use std::io::{stdin, stdout, BufReader, BufWriter};
-use uucore::show;
-
-use crate::operation::DeleteOperation;
-use uucore::error::{UResult, USimpleError, UUsageError};
-use uucore::{display::Quotable, InvalidEncodingHandling};
-
-static ABOUT: &str = "translate or delete characters";
-
-mod options {
-    pub const COMPLEMENT: &str = "complement";
-    pub const DELETE: &str = "delete";
-    pub const SQUEEZE: &str = "squeeze-repeats";
-    pub const TRUNCATE_SET1: &str = "truncate-set1";
-    pub const SETS: &str = "sets";
-}
-
-fn get_usage() -> String {
-    format!("{} [OPTION]... SET1 [SET2]", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    "Translate, squeeze, and/or delete characters from standard input, \
-     writing to standard output."
-        .to_string()
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let usage = get_usage();
-    let after_help = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let delete_flag = matches.is_present(options::DELETE);
-    let complement_flag = matches.is_present(options::COMPLEMENT) || matches.is_present("C");
-    let squeeze_flag = matches.is_present(options::SQUEEZE);
-    let truncate_set1_flag = matches.is_present(options::TRUNCATE_SET1);
-
-    let sets = matches
-        .values_of(options::SETS)
-        .map(|v| {
-            v.map(ToString::to_string)
-                .map(convert::reduce_octal_to_char)
-                .collect::<Vec<_>>()
-        })
-        .unwrap_or_default();
-    let sets_len = sets.len();
-
-    if sets.is_empty() {
-        return Err(UUsageError::new(1, "missing operand"));
-    }
-
-    if !(delete_flag || squeeze_flag) && sets_len < 2 {
-        return Err(UUsageError::new(
-            1,
-            format!("missing operand after {}", sets[0].quote()),
-        ));
-    }
-
-    if let Some(first) = sets.get(0) {
-        if first.ends_with('\\') {
-            show!(USimpleError::new(
-                0,
-                "warning: an unescaped backslash at end of string is not portable"
-            ));
-        }
-    }
-
-    let stdin = stdin();
-    let mut locked_stdin = stdin.lock();
-    let stdout = stdout();
-    let locked_stdout = stdout.lock();
-    let mut buffered_stdout = BufWriter::new(locked_stdout);
-
-    let mut sets_iter = sets.iter().map(|c| c.as_str());
-    let (set1, set2) = Sequence::solve_set_characters(
-        sets_iter.next().unwrap_or_default(),
-        sets_iter.next().unwrap_or_default(),
-        truncate_set1_flag,
-    )?;
-
-    if delete_flag {
-        if squeeze_flag {
-            let mut delete_buffer = vec![];
-            {
-                let mut delete_writer = BufWriter::new(&mut delete_buffer);
-                let delete_op = DeleteOperation::new(set1, complement_flag);
-                translate_input(&mut locked_stdin, &mut delete_writer, delete_op);
-            }
-            {
-                let mut squeeze_reader = BufReader::new(delete_buffer.as_bytes());
-                let op = SqueezeOperation::new(set2, complement_flag);
-                translate_input(&mut squeeze_reader, &mut buffered_stdout, op);
-            }
-        } else {
-            let op = DeleteOperation::new(set1, complement_flag);
-            translate_input(&mut locked_stdin, &mut buffered_stdout, op);
-        }
-    } else if squeeze_flag {
-        if sets_len < 2 {
-            let op = SqueezeOperation::new(set1, complement_flag);
-            translate_input(&mut locked_stdin, &mut buffered_stdout, op);
-        } else {
-            let mut translate_buffer = vec![];
-            {
-                let mut writer = BufWriter::new(&mut translate_buffer);
-                let op = TranslateOperation::new(set1, set2.clone(), complement_flag)?;
-                translate_input(&mut locked_stdin, &mut writer, op);
-            }
-            {
-                let mut reader = BufReader::new(translate_buffer.as_bytes());
-                let squeeze_op = SqueezeOperation::new(set2, false);
-                translate_input(&mut reader, &mut buffered_stdout, squeeze_op);
-            }
-        }
-    } else {
-        let op = TranslateOperation::new(set1, set2, complement_flag)?;
-        translate_input(&mut locked_stdin, &mut buffered_stdout, op);
-    }
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::COMPLEMENT)
-                // .visible_short_alias('C')  // TODO: requires clap "3.0.0-beta.2"
-                .short('c')
-                .long(options::COMPLEMENT)
-                .help("use the complement of SET1"),
-        )
-        .arg(
-            Arg::new("C") // work around for `Arg::visible_short_alias`
-                .short('C')
-                .help("same as -c"),
-        )
-        .arg(
-            Arg::new(options::DELETE)
-                .short('d')
-                .long(options::DELETE)
-                .help("delete characters in SET1, do not translate"),
-        )
-        .arg(
-            Arg::new(options::SQUEEZE)
-                .long(options::SQUEEZE)
-                .short('s')
-                .help(
-                    "replace each sequence of a repeated character that is \
-                     listed in the last specified SET, with a single occurrence \
-                     of that character",
-                ),
-        )
-        .arg(
-            Arg::new(options::TRUNCATE_SET1)
-                .long(options::TRUNCATE_SET1)
-                .short('t')
-                .help("first truncate SET1 to length of SET2"),
-        )
-        .arg(
-            Arg::new(options::SETS)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .min_values(1)
-                .max_values(2),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tr/unicode_table.rs.html b/src/uu_tr/unicode_table.rs.html deleted file mode 100644 index 56e22e9c8..000000000 --- a/src/uu_tr/unicode_table.rs.html +++ /dev/null @@ -1,34 +0,0 @@ -unicode_table.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-pub static BEL: char = '\u{0007}';
-pub static BS: char = '\u{0008}';
-pub static HT: char = '\u{0009}';
-pub static LF: char = '\u{000A}';
-pub static VT: char = '\u{000B}';
-pub static FF: char = '\u{000C}';
-pub static CR: char = '\u{000D}';
-pub static SPACE: char = '\u{0020}';
-pub static SPACES: &[char] = &[HT, LF, VT, FF, CR, SPACE];
-pub static BLANK: &[char] = &[SPACE, HT];
-
-
- \ No newline at end of file diff --git a/src/uu_true/true.rs.html b/src/uu_true/true.rs.html deleted file mode 100644 index cdeaca5d6..000000000 --- a/src/uu_true/true.rs.html +++ /dev/null @@ -1,42 +0,0 @@ -true.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use clap::App;
-use uucore::error::UResult;
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    uu_app().get_matches_from(args);
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_truncate/truncate.rs.html b/src/uu_truncate/truncate.rs.html deleted file mode 100644 index cb96b17a5..000000000 --- a/src/uu_truncate/truncate.rs.html +++ /dev/null @@ -1,764 +0,0 @@ -truncate.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Alex Lyon <arcterus@mail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) RFILE refsize rfilename fsize tsize
-
-#[macro_use]
-extern crate uucore;
-
-use clap::{crate_version, App, Arg};
-use std::convert::TryFrom;
-use std::fs::{metadata, OpenOptions};
-use std::io::ErrorKind;
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{UIoError, UResult, USimpleError, UUsageError};
-use uucore::parse_size::{parse_size, ParseSizeError};
-
-#[derive(Debug, Eq, PartialEq)]
-enum TruncateMode {
-    Absolute(usize),
-    Extend(usize),
-    Reduce(usize),
-    AtMost(usize),
-    AtLeast(usize),
-    RoundDown(usize),
-    RoundUp(usize),
-}
-
-impl TruncateMode {
-    /// Compute a target size in bytes for this truncate mode.
-    ///
-    /// `fsize` is the size of the reference file, in bytes.
-    ///
-    /// # Examples
-    ///
-    /// ```rust,ignore
-    /// let mode = TruncateMode::Extend(5);
-    /// let fsize = 10;
-    /// assert_eq!(mode.to_size(fsize), 15);
-    /// ```
-    fn to_size(&self, fsize: usize) -> usize {
-        match self {
-            TruncateMode::Absolute(size) => *size,
-            TruncateMode::Extend(size) => fsize + size,
-            TruncateMode::Reduce(size) => fsize - size,
-            TruncateMode::AtMost(size) => fsize.min(*size),
-            TruncateMode::AtLeast(size) => fsize.max(*size),
-            TruncateMode::RoundDown(size) => fsize - fsize % size,
-            TruncateMode::RoundUp(size) => fsize + fsize % size,
-        }
-    }
-}
-
-static ABOUT: &str = "Shrink or extend the size of each file to the specified size.";
-
-pub mod options {
-    pub static IO_BLOCKS: &str = "io-blocks";
-    pub static NO_CREATE: &str = "no-create";
-    pub static REFERENCE: &str = "reference";
-    pub static SIZE: &str = "size";
-    pub static ARG_FILES: &str = "files";
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]... [FILE]...", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    String::from(
-        "
-    SIZE is an integer with an optional prefix and optional unit.
-    The available units (K, M, G, T, P, E, Z, and Y) use the following format:
-        'KB' =>           1000 (kilobytes)
-        'K'  =>           1024 (kibibytes)
-        'MB' =>      1000*1000 (megabytes)
-        'M'  =>      1024*1024 (mebibytes)
-        'GB' => 1000*1000*1000 (gigabytes)
-        'G'  => 1024*1024*1024 (gibibytes)
-    SIZE may also be prefixed by one of the following to adjust the size of each
-    file based on its current size:
-        '+'  => extend by
-        '-'  => reduce by
-        '<'  => at most
-        '>'  => at least
-        '/'  => round down to multiple of
-        '%'  => round up to multiple of",
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let long_usage = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&long_usage[..])
-        .get_matches_from(args);
-
-    let files: Vec<String> = matches
-        .values_of(options::ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    if files.is_empty() {
-        return Err(UUsageError::new(1, "missing file operand"));
-    } else {
-        let io_blocks = matches.is_present(options::IO_BLOCKS);
-        let no_create = matches.is_present(options::NO_CREATE);
-        let reference = matches.value_of(options::REFERENCE).map(String::from);
-        let size = matches.value_of(options::SIZE).map(String::from);
-        truncate(no_create, io_blocks, reference, size, files).map_err(|e| {
-            match e.kind() {
-                ErrorKind::NotFound => {
-                    // TODO Improve error-handling so that the error
-                    // returned by `truncate()` provides the necessary
-                    // parameter for formatting the error message.
-                    let reference = matches.value_of(options::REFERENCE).map(String::from);
-                    USimpleError::new(
-                        1,
-                        format!(
-                            "cannot stat {}: No such file or directory",
-                            reference.as_deref().unwrap_or("").quote()
-                        ),
-                    ) // TODO: fix '--no-create' see test_reference and test_truncate_bytes_size
-                }
-                _ => uio_error!(e, ""),
-            }
-        })
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::IO_BLOCKS)
-            .short('o')
-            .long(options::IO_BLOCKS)
-            .help("treat SIZE as the number of I/O blocks of the file rather than bytes (NOT IMPLEMENTED)")
-        )
-        .arg(
-            Arg::new(options::NO_CREATE)
-            .short('c')
-            .long(options::NO_CREATE)
-            .help("do not create files that do not exist")
-        )
-        .arg(
-            Arg::new(options::REFERENCE)
-            .short('r')
-            .long(options::REFERENCE)
-            .required_unless_present(options::SIZE)
-            .help("base the size of each file on the size of RFILE")
-            .value_name("RFILE")
-        )
-        .arg(
-            Arg::new(options::SIZE)
-            .short('s')
-            .long(options::SIZE)
-            .required_unless_present(options::REFERENCE)
-            .help("set or adjust the size of each file according to SIZE, which is in bytes unless --io-blocks is specified")
-            .value_name("SIZE")
-        )
-        .arg(Arg::new(options::ARG_FILES)
-             .value_name("FILE")
-             .multiple_occurrences(true)
-             .takes_value(true)
-             .required(true)
-             .min_values(1))
-}
-
-/// Truncate the named file to the specified size.
-///
-/// If `create` is true, then the file will be created if it does not
-/// already exist. If `size` is larger than the number of bytes in the
-/// file, then the file will be padded with zeros. If `size` is smaller
-/// than the number of bytes in the file, then the file will be
-/// truncated and any bytes beyond `size` will be lost.
-///
-/// # Errors
-///
-/// If the file could not be opened, or there was a problem setting the
-/// size of the file.
-fn file_truncate(filename: &str, create: bool, size: usize) -> std::io::Result<()> {
-    let path = Path::new(filename);
-    let f = OpenOptions::new().write(true).create(create).open(path)?;
-    f.set_len(u64::try_from(size).unwrap())
-}
-
-/// Truncate files to a size relative to a given file.
-///
-/// `rfilename` is the name of the reference file.
-///
-/// `size_string` gives the size relative to the reference file to which
-/// to set the target files. For example, "+3K" means "set each file to
-/// be three kilobytes larger than the size of the reference file".
-///
-/// If `create` is true, then each file will be created if it does not
-/// already exist.
-///
-/// # Errors
-///
-/// If the any file could not be opened, or there was a problem setting
-/// the size of at least one file.
-fn truncate_reference_and_size(
-    rfilename: &str,
-    size_string: &str,
-    filenames: Vec<String>,
-    create: bool,
-) -> std::io::Result<()> {
-    let mode = match parse_mode_and_size(size_string) {
-        Ok(m) => match m {
-            TruncateMode::Absolute(_) => {
-                crash!(1, "you must specify a relative '--size' with '--reference'")
-            }
-            _ => m,
-        },
-        Err(e) => crash!(1, "Invalid number: {}", e.to_string()),
-    };
-    let fsize = usize::try_from(metadata(rfilename)?.len()).unwrap();
-    let tsize = mode.to_size(fsize);
-    for filename in &filenames {
-        file_truncate(filename, create, tsize)?;
-    }
-    Ok(())
-}
-
-/// Truncate files to match the size of a given reference file.
-///
-/// `rfilename` is the name of the reference file.
-///
-/// If `create` is true, then each file will be created if it does not
-/// already exist.
-///
-/// # Errors
-///
-/// If the any file could not be opened, or there was a problem setting
-/// the size of at least one file.
-fn truncate_reference_file_only(
-    rfilename: &str,
-    filenames: Vec<String>,
-    create: bool,
-) -> std::io::Result<()> {
-    let tsize = usize::try_from(metadata(rfilename)?.len()).unwrap();
-    for filename in &filenames {
-        file_truncate(filename, create, tsize)?;
-    }
-    Ok(())
-}
-
-/// Truncate files to a specified size.
-///
-/// `size_string` gives either an absolute size or a relative size. A
-/// relative size adjusts the size of each file relative to its current
-/// size. For example, "3K" means "set each file to be three kilobytes"
-/// whereas "+3K" means "set each file to be three kilobytes larger than
-/// its current size".
-///
-/// If `create` is true, then each file will be created if it does not
-/// already exist.
-///
-/// # Errors
-///
-/// If the any file could not be opened, or there was a problem setting
-/// the size of at least one file.
-fn truncate_size_only(
-    size_string: &str,
-    filenames: Vec<String>,
-    create: bool,
-) -> std::io::Result<()> {
-    let mode = match parse_mode_and_size(size_string) {
-        Ok(m) => m,
-        Err(e) => crash!(1, "Invalid number: {}", e.to_string()),
-    };
-    for filename in &filenames {
-        let fsize = match metadata(filename) {
-            Ok(m) => m.len(),
-            Err(_) => 0,
-        };
-        let tsize = mode.to_size(fsize as usize);
-        match file_truncate(filename, create, tsize) {
-            Ok(_) => continue,
-            Err(e) if e.kind() == ErrorKind::NotFound && !create => continue,
-            Err(e) => return Err(e),
-        }
-    }
-    Ok(())
-}
-
-fn truncate(
-    no_create: bool,
-    _: bool,
-    reference: Option<String>,
-    size: Option<String>,
-    filenames: Vec<String>,
-) -> std::io::Result<()> {
-    let create = !no_create;
-    // There are four possibilities
-    // - reference file given and size given,
-    // - reference file given but no size given,
-    // - no reference file given but size given,
-    // - no reference file given and no size given,
-    match (reference, size) {
-        (Some(rfilename), Some(size_string)) => {
-            truncate_reference_and_size(&rfilename, &size_string, filenames, create)
-        }
-        (Some(rfilename), None) => truncate_reference_file_only(&rfilename, filenames, create),
-        (None, Some(size_string)) => truncate_size_only(&size_string, filenames, create),
-        (None, None) => unreachable!(), // this case cannot happen anymore because it's handled by clap
-    }
-}
-
-/// Decide whether a character is one of the size modifiers, like '+' or '<'.
-fn is_modifier(c: char) -> bool {
-    c == '+' || c == '-' || c == '<' || c == '>' || c == '/' || c == '%'
-}
-
-/// Parse a size string with optional modifier symbol as its first character.
-///
-/// A size string is as described in [`parse_size`]. The first character
-/// of `size_string` might be a modifier symbol, like `'+'` or
-/// `'<'`. The first element of the pair returned by this function
-/// indicates which modifier symbol was present, or
-/// [`TruncateMode::Absolute`] if none.
-///
-/// # Panics
-///
-/// If `size_string` is empty, or if no number could be parsed from the
-/// given string (for example, if the string were `"abc"`).
-///
-/// # Examples
-///
-/// ```rust,ignore
-/// assert_eq!(parse_mode_and_size("+123"), (TruncateMode::Extend, 123));
-/// ```
-fn parse_mode_and_size(size_string: &str) -> Result<TruncateMode, ParseSizeError> {
-    // Trim any whitespace.
-    let mut size_string = size_string.trim();
-
-    // Get the modifier character from the size string, if any. For
-    // example, if the argument is "+123", then the modifier is '+'.
-    if let Some(c) = size_string.chars().next() {
-        if is_modifier(c) {
-            size_string = &size_string[1..];
-        }
-        parse_size(size_string).map(match c {
-            '+' => TruncateMode::Extend,
-            '-' => TruncateMode::Reduce,
-            '<' => TruncateMode::AtMost,
-            '>' => TruncateMode::AtLeast,
-            '/' => TruncateMode::RoundDown,
-            '%' => TruncateMode::RoundUp,
-            _ => TruncateMode::Absolute,
-        })
-    } else {
-        Err(ParseSizeError::ParseFailure(size_string.to_string()))
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use crate::parse_mode_and_size;
-    use crate::TruncateMode;
-
-    #[test]
-    fn test_parse_mode_and_size() {
-        assert_eq!(parse_mode_and_size("10"), Ok(TruncateMode::Absolute(10)));
-        assert_eq!(parse_mode_and_size("+10"), Ok(TruncateMode::Extend(10)));
-        assert_eq!(parse_mode_and_size("-10"), Ok(TruncateMode::Reduce(10)));
-        assert_eq!(parse_mode_and_size("<10"), Ok(TruncateMode::AtMost(10)));
-        assert_eq!(parse_mode_and_size(">10"), Ok(TruncateMode::AtLeast(10)));
-        assert_eq!(parse_mode_and_size("/10"), Ok(TruncateMode::RoundDown(10)));
-        assert_eq!(parse_mode_and_size("%10"), Ok(TruncateMode::RoundUp(10)));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tsort/tsort.rs.html b/src/uu_tsort/tsort.rs.html deleted file mode 100644 index 6e102bcf7..000000000 --- a/src/uu_tsort/tsort.rs.html +++ /dev/null @@ -1,376 +0,0 @@ -tsort.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Ben Eggers <ben.eggers36@gmail.com>
-//  * (c) Akira Hayakawa <ruby.wktk@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-use clap::{crate_version, App, Arg};
-use std::collections::{HashMap, HashSet};
-use std::fs::File;
-use std::io::{stdin, BufRead, BufReader, Read};
-use std::path::Path;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-use uucore::InvalidEncodingHandling;
-
-static SUMMARY: &str = "Topological sort the strings in FILE.
-Strings are defined as any sequence of tokens separated by whitespace (tab, space, or newline).
-If FILE is not passed in, stdin is used instead.";
-static USAGE: &str = "tsort [OPTIONS] FILE";
-
-mod options {
-    pub const FILE: &str = "file";
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    let input = matches
-        .value_of(options::FILE)
-        .expect("Value is required by clap");
-
-    let mut stdin_buf;
-    let mut file_buf;
-    let mut reader = BufReader::new(if input == "-" {
-        stdin_buf = stdin();
-        &mut stdin_buf as &mut dyn Read
-    } else {
-        file_buf = File::open(Path::new(&input)).map_err_context(|| input.to_string())?;
-        &mut file_buf as &mut dyn Read
-    });
-
-    let mut g = Graph::new();
-    loop {
-        let mut line = String::new();
-        match reader.read_line(&mut line) {
-            Ok(_) => {
-                let tokens: Vec<String> = line
-                    .trim_end()
-                    .split_whitespace()
-                    .map(|s| s.to_owned())
-                    .collect();
-                if tokens.is_empty() {
-                    break;
-                }
-                for ab in tokens.chunks(2) {
-                    match ab.len() {
-                        2 => g.add_edge(&ab[0], &ab[1]),
-                        _ => {
-                            return Err(USimpleError::new(
-                                1,
-                                format!(
-                                    "{}: input contains an odd number of tokens",
-                                    input.maybe_quote()
-                                ),
-                            ))
-                        }
-                    }
-                }
-            }
-            _ => break,
-        }
-    }
-
-    g.run_tsort();
-
-    if !g.is_acyclic() {
-        return Err(USimpleError::new(
-            1,
-            format!("{}, input contains a loop:", input),
-        ));
-    }
-
-    for x in &g.result {
-        println!("{}", x);
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .about(SUMMARY)
-        .arg(Arg::new(options::FILE).default_value("-").hide(true))
-}
-
-// We use String as a representation of node here
-// but using integer may improve performance.
-struct Graph {
-    in_edges: HashMap<String, HashSet<String>>,
-    out_edges: HashMap<String, Vec<String>>,
-    result: Vec<String>,
-}
-
-impl Graph {
-    fn new() -> Graph {
-        Graph {
-            in_edges: HashMap::new(),
-            out_edges: HashMap::new(),
-            result: vec![],
-        }
-    }
-
-    fn has_node(&self, n: &str) -> bool {
-        self.in_edges.contains_key(n)
-    }
-
-    fn has_edge(&self, from: &str, to: &str) -> bool {
-        self.in_edges[to].contains(from)
-    }
-
-    fn init_node(&mut self, n: &str) {
-        self.in_edges.insert(n.to_string(), HashSet::new());
-        self.out_edges.insert(n.to_string(), vec![]);
-    }
-
-    fn add_edge(&mut self, from: &str, to: &str) {
-        if !self.has_node(to) {
-            self.init_node(to);
-        }
-
-        if !self.has_node(from) {
-            self.init_node(from);
-        }
-
-        if from != to && !self.has_edge(from, to) {
-            self.in_edges.get_mut(to).unwrap().insert(from.to_string());
-            self.out_edges.get_mut(from).unwrap().push(to.to_string());
-        }
-    }
-
-    // Kahn's algorithm
-    // O(|V|+|E|)
-    fn run_tsort(&mut self) {
-        let mut start_nodes = vec![];
-        for (n, edges) in &self.in_edges {
-            if edges.is_empty() {
-                start_nodes.push(n.clone());
-            }
-        }
-
-        while !start_nodes.is_empty() {
-            let n = start_nodes.remove(0);
-
-            self.result.push(n.clone());
-
-            let n_out_edges = self.out_edges.get_mut(&n).unwrap();
-            for m in n_out_edges.iter() {
-                let m_in_edges = self.in_edges.get_mut(m).unwrap();
-                m_in_edges.remove(&n);
-
-                // If m doesn't have other in-coming edges add it to start_nodes
-                if m_in_edges.is_empty() {
-                    start_nodes.push(m.clone());
-                }
-            }
-            n_out_edges.clear();
-        }
-    }
-
-    fn is_acyclic(&self) -> bool {
-        for edges in self.out_edges.values() {
-            if !edges.is_empty() {
-                return false;
-            }
-        }
-        true
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_tty/tty.rs.html b/src/uu_tty/tty.rs.html deleted file mode 100644 index 78dc0f183..000000000 --- a/src/uu_tty/tty.rs.html +++ /dev/null @@ -1,176 +0,0 @@ -tty.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-85
-86
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-//  *
-//  * Synced with http://lingrok.org/xref/coreutils/src/tty.c
-
-// spell-checker:ignore (ToDO) ttyname filedesc
-
-use clap::{crate_version, App, Arg};
-use std::ffi::CStr;
-use std::io::Write;
-use uucore::error::{UResult, UUsageError};
-use uucore::InvalidEncodingHandling;
-
-static ABOUT: &str = "Print the file name of the terminal connected to standard input.";
-
-mod options {
-    pub const SILENT: &str = "silent";
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let args = args
-        .collect_str(InvalidEncodingHandling::ConvertLossy)
-        .accept_any();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .try_get_matches_from(args)
-        .map_err(|e| UUsageError::new(2, format!("{}", e)))?;
-
-    let silent = matches.is_present(options::SILENT);
-
-    // Call libc function ttyname
-    let tty = unsafe {
-        let ptr = libc::ttyname(libc::STDIN_FILENO);
-        if !ptr.is_null() {
-            String::from_utf8_lossy(CStr::from_ptr(ptr).to_bytes()).to_string()
-        } else {
-            "".to_owned()
-        }
-    };
-
-    let mut stdout = std::io::stdout();
-
-    if !silent {
-        let write_result = if !tty.chars().all(|c| c.is_whitespace()) {
-            writeln!(stdout, "{}", tty)
-        } else {
-            writeln!(stdout, "not a tty")
-        };
-        if write_result.is_err() || stdout.flush().is_err() {
-            // Don't return to prevent a panic later when another flush is attempted
-            // because the `uucore_procs::main` macro inserts a flush after execution for every utility.
-            std::process::exit(3);
-        }
-    }
-
-    if atty::is(atty::Stream::Stdin) {
-        Ok(())
-    } else {
-        Err(libc::EXIT_FAILURE.into())
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::SILENT)
-                .long(options::SILENT)
-                .visible_alias("quiet")
-                .short('s')
-                .help("print nothing, only return an exit status")
-                .required(false),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_uname/uname.rs.html b/src/uu_uname/uname.rs.html deleted file mode 100644 index 086162b3a..000000000 --- a/src/uu_uname/uname.rs.html +++ /dev/null @@ -1,330 +0,0 @@ -uname.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Joao Oliveira <joaoxsouls@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// last synced with: uname (GNU coreutils) 8.21
-
-// spell-checker:ignore (ToDO) nodename kernelname kernelrelease kernelversion sysname hwplatform mnrsv
-
-use clap::{crate_version, App, Arg};
-use platform_info::*;
-use uucore::error::{FromIo, UResult};
-
-const ABOUT: &str = "Print certain system information.  With no OPTION, same as -s.";
-
-pub mod options {
-    pub static ALL: &str = "all";
-    pub static KERNELNAME: &str = "kernel-name";
-    pub static NODENAME: &str = "nodename";
-    pub static KERNELVERSION: &str = "kernel-version";
-    pub static KERNELRELEASE: &str = "kernel-release";
-    pub static MACHINE: &str = "machine";
-    pub static PROCESSOR: &str = "processor";
-    pub static HWPLATFORM: &str = "hardware-platform";
-    pub static OS: &str = "operating-system";
-}
-
-#[cfg(all(target_os = "linux", any(target_env = "gnu", target_env = "")))]
-const HOST_OS: &str = "GNU/Linux";
-#[cfg(all(target_os = "linux", not(any(target_env = "gnu", target_env = ""))))]
-const HOST_OS: &str = "Linux";
-#[cfg(target_os = "windows")]
-const HOST_OS: &str = "Windows NT";
-#[cfg(target_os = "freebsd")]
-const HOST_OS: &str = "FreeBSD";
-#[cfg(target_os = "netbsd")]
-const HOST_OS: &str = "NetBSD";
-#[cfg(target_os = "openbsd")]
-const HOST_OS: &str = "OpenBSD";
-#[cfg(target_vendor = "apple")]
-const HOST_OS: &str = "Darwin";
-#[cfg(target_os = "fuchsia")]
-const HOST_OS: &str = "Fuchsia";
-#[cfg(target_os = "redox")]
-const HOST_OS: &str = "Redox";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = format!("{} [OPTION]...", uucore::execution_phrase());
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let uname =
-        PlatformInfo::new().map_err_context(|| "failed to create PlatformInfo".to_string())?;
-    let mut output = String::new();
-
-    let all = matches.is_present(options::ALL);
-    let kernelname = matches.is_present(options::KERNELNAME);
-    let nodename = matches.is_present(options::NODENAME);
-    let kernelrelease = matches.is_present(options::KERNELRELEASE);
-    let kernelversion = matches.is_present(options::KERNELVERSION);
-    let machine = matches.is_present(options::MACHINE);
-    let processor = matches.is_present(options::PROCESSOR);
-    let hwplatform = matches.is_present(options::HWPLATFORM);
-    let os = matches.is_present(options::OS);
-
-    let none = !(all
-        || kernelname
-        || nodename
-        || kernelrelease
-        || kernelversion
-        || machine
-        || os
-        || processor
-        || hwplatform);
-
-    if kernelname || all || none {
-        output.push_str(&uname.sysname());
-        output.push(' ');
-    }
-
-    if nodename || all {
-        output.push_str(&uname.nodename());
-        output.push(' ');
-    }
-    if kernelrelease || all {
-        output.push_str(&uname.release());
-        output.push(' ');
-    }
-    if kernelversion || all {
-        output.push_str(&uname.version());
-        output.push(' ');
-    }
-    if machine || all {
-        output.push_str(&uname.machine());
-        output.push(' ');
-    }
-    if processor || all {
-        // According to https://stackoverflow.com/posts/394271/revisions
-        // Most of the time, it returns unknown
-        output.push_str("unknown");
-        output.push(' ');
-    }
-    if hwplatform || all {
-        // According to https://lists.gnu.org/archive/html/bug-coreutils/2005-09/msg00063.html
-        // Most of the time, it returns unknown
-        output.push_str("unknown");
-        output.push(' ');
-    }
-    if os || all {
-        output.push_str(HOST_OS);
-        output.push(' ');
-    }
-    println!("{}", output.trim_end());
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(Arg::new(options::ALL)
-            .short('a')
-            .long(options::ALL)
-            .help("Behave as though all of the options -mnrsv were specified."))
-        .arg(Arg::new(options::KERNELNAME)
-            .short('s')
-            .long(options::KERNELNAME)
-            .alias("sysname") // Obsolescent option in GNU uname
-            .help("print the kernel name."))
-        .arg(Arg::new(options::NODENAME)
-            .short('n')
-            .long(options::NODENAME)
-            .help("print the nodename (the nodename may be a name that the system is known by to a communications network)."))
-        .arg(Arg::new(options::KERNELRELEASE)
-            .short('r')
-            .long(options::KERNELRELEASE)
-            .alias("release") // Obsolescent option in GNU uname
-            .help("print the operating system release."))
-        .arg(Arg::new(options::KERNELVERSION)
-            .short('v')
-            .long(options::KERNELVERSION)
-            .help("print the operating system version."))
-        .arg(Arg::new(options::HWPLATFORM)
-            .short('i')
-            .long(options::HWPLATFORM)
-            .help("print the hardware platform (non-portable)"))
-        .arg(Arg::new(options::MACHINE)
-            .short('m')
-            .long(options::MACHINE)
-            .help("print the machine hardware name."))
-        .arg(Arg::new(options::PROCESSOR)
-            .short('p')
-            .long(options::PROCESSOR)
-            .help("print the processor type (non-portable)"))
-        .arg(Arg::new(options::OS)
-            .short('o')
-            .long(options::OS)
-            .help("print the operating system name."))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_unexpand/unexpand.rs.html b/src/uu_unexpand/unexpand.rs.html deleted file mode 100644 index d7f37df5d..000000000 --- a/src/uu_unexpand/unexpand.rs.html +++ /dev/null @@ -1,694 +0,0 @@ -unexpand.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Virgile Andreani <virgile.andreani@anbuco.fr>
-//  * (c) kwantam <kwantam@gmail.com>
-//  *     * 2015-04-28 ~ updated to work with both UTF-8 and non-UTF-8 encodings
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) nums aflag uflag scol prevtab amode ctype cwidth nbytes lastcol pctype
-
-#[macro_use]
-extern crate uucore;
-use clap::{crate_version, App, Arg};
-use std::fs::File;
-use std::io::{stdin, stdout, BufRead, BufReader, BufWriter, Read, Stdout, Write};
-use std::str::from_utf8;
-use unicode_width::UnicodeWidthChar;
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-use uucore::InvalidEncodingHandling;
-
-static NAME: &str = "unexpand";
-static USAGE: &str = "unexpand [OPTION]... [FILE]...";
-static SUMMARY: &str = "Convert blanks in each FILE to tabs, writing to standard output.\n\
-                        With no FILE, or when FILE is -, read standard input.";
-
-const DEFAULT_TABSTOP: usize = 8;
-
-fn tabstops_parse(s: String) -> Vec<usize> {
-    let words = s.split(',');
-
-    let nums = words
-        .map(|sn| {
-            sn.parse()
-                .unwrap_or_else(|_| crash!(1, "{}\n", "tab size contains invalid character(s)"))
-        })
-        .collect::<Vec<usize>>();
-
-    if nums.iter().any(|&n| n == 0) {
-        crash!(1, "{}\n", "tab size cannot be 0");
-    }
-
-    if let (false, _) = nums
-        .iter()
-        .fold((true, 0), |(acc, last), &n| (acc && last <= n, n))
-    {
-        crash!(1, "{}\n", "tab sizes must be ascending");
-    }
-
-    nums
-}
-
-mod options {
-    pub const FILE: &str = "file";
-    pub const ALL: &str = "all";
-    pub const FIRST_ONLY: &str = "first-only";
-    pub const TABS: &str = "tabs";
-    pub const NO_UTF8: &str = "no-utf8";
-}
-
-struct Options {
-    files: Vec<String>,
-    tabstops: Vec<usize>,
-    aflag: bool,
-    uflag: bool,
-}
-
-impl Options {
-    fn new(matches: clap::ArgMatches) -> Options {
-        let tabstops = match matches.value_of(options::TABS) {
-            None => vec![DEFAULT_TABSTOP],
-            Some(s) => tabstops_parse(s.to_string()),
-        };
-
-        let aflag = (matches.is_present(options::ALL) || matches.is_present(options::TABS))
-            && !matches.is_present(options::FIRST_ONLY);
-        let uflag = !matches.is_present(options::NO_UTF8);
-
-        let files = match matches.value_of(options::FILE) {
-            Some(v) => vec![v.to_string()],
-            None => vec!["-".to_owned()],
-        };
-
-        Options {
-            files,
-            tabstops,
-            aflag,
-            uflag,
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let matches = uu_app().get_matches_from(args);
-
-    unexpand(Options::new(matches)).map_err_context(String::new)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .name(NAME)
-        .version(crate_version!())
-        .override_usage(USAGE)
-        .about(SUMMARY)
-        .arg(Arg::new(options::FILE).hide(true).multiple_occurrences(true))
-        .arg(
-            Arg::new(options::ALL)
-                .short('a')
-                .long(options::ALL)
-                .help("convert all blanks, instead of just initial blanks")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::FIRST_ONLY)
-                .long(options::FIRST_ONLY)
-                .help("convert only leading sequences of blanks (overrides -a)")
-                .takes_value(false),
-        )
-        .arg(
-            Arg::new(options::TABS)
-                .short('t')
-                .long(options::TABS)
-                .long_help("use comma separated LIST of tab positions or have tabs N characters apart instead of 8 (enables -a)")
-                .takes_value(true)
-        )
-        .arg(
-            Arg::new(options::NO_UTF8)
-                .short('U')
-                .long(options::NO_UTF8)
-                .takes_value(false)
-                .help("interpret input file as 8-bit ASCII rather than UTF-8"))
-}
-
-fn open(path: String) -> BufReader<Box<dyn Read + 'static>> {
-    let file_buf;
-    if path == "-" {
-        BufReader::new(Box::new(stdin()) as Box<dyn Read>)
-    } else {
-        file_buf = match File::open(&path) {
-            Ok(a) => a,
-            Err(e) => crash!(1, "{}: {}", path.maybe_quote(), e),
-        };
-        BufReader::new(Box::new(file_buf) as Box<dyn Read>)
-    }
-}
-
-fn next_tabstop(tabstops: &[usize], col: usize) -> Option<usize> {
-    if tabstops.len() == 1 {
-        Some(tabstops[0] - col % tabstops[0])
-    } else {
-        // find next larger tab
-        // if there isn't one in the list, tab becomes a single space
-        tabstops.iter().find(|&&t| t > col).map(|t| t - col)
-    }
-}
-
-fn write_tabs(
-    output: &mut BufWriter<Stdout>,
-    tabstops: &[usize],
-    mut scol: usize,
-    col: usize,
-    prevtab: bool,
-    init: bool,
-    amode: bool,
-) {
-    // This conditional establishes the following:
-    // We never turn a single space before a non-blank into
-    // a tab, unless it's at the start of the line.
-    let ai = init || amode;
-    if (ai && !prevtab && col > scol + 1) || (col > scol && (init || ai && prevtab)) {
-        while let Some(nts) = next_tabstop(tabstops, scol) {
-            if col < scol + nts {
-                break;
-            }
-
-            crash_if_err!(1, output.write_all(b"\t"));
-            scol += nts;
-        }
-    }
-
-    while col > scol {
-        crash_if_err!(1, output.write_all(b" "));
-        scol += 1;
-    }
-}
-
-#[derive(PartialEq, Eq, Debug)]
-enum CharType {
-    Backspace,
-    Space,
-    Tab,
-    Other,
-}
-
-fn next_char_info(uflag: bool, buf: &[u8], byte: usize) -> (CharType, usize, usize) {
-    let (ctype, cwidth, nbytes) = if uflag {
-        let nbytes = char::from(buf[byte]).len_utf8();
-
-        if byte + nbytes > buf.len() {
-            // make sure we don't overrun the buffer because of invalid UTF-8
-            (CharType::Other, 1, 1)
-        } else if let Ok(t) = from_utf8(&buf[byte..byte + nbytes]) {
-            // Now that we think it's UTF-8, figure out what kind of char it is
-            match t.chars().next() {
-                Some(' ') => (CharType::Space, 0, 1),
-                Some('\t') => (CharType::Tab, 0, 1),
-                Some('\x08') => (CharType::Backspace, 0, 1),
-                Some(c) => (
-                    CharType::Other,
-                    UnicodeWidthChar::width(c).unwrap_or(0),
-                    nbytes,
-                ),
-                None => {
-                    // invalid char snuck past the utf8_validation_iterator somehow???
-                    (CharType::Other, 1, 1)
-                }
-            }
-        } else {
-            // otherwise, it's not valid
-            (CharType::Other, 1, 1) // implicit assumption: non-UTF8 char has display width 1
-        }
-    } else {
-        (
-            match buf[byte] {
-                // always take exactly 1 byte in strict ASCII mode
-                0x20 => CharType::Space,
-                0x09 => CharType::Tab,
-                0x08 => CharType::Backspace,
-                _ => CharType::Other,
-            },
-            1,
-            1,
-        )
-    };
-
-    (ctype, cwidth, nbytes)
-}
-
-fn unexpand(options: Options) -> std::io::Result<()> {
-    let mut output = BufWriter::new(stdout());
-    let ts = &options.tabstops[..];
-    let mut buf = Vec::new();
-    let lastcol = if ts.len() > 1 { *ts.last().unwrap() } else { 0 };
-
-    for file in options.files.into_iter() {
-        let mut fh = open(file);
-
-        while match fh.read_until(b'\n', &mut buf) {
-            Ok(s) => s > 0,
-            Err(_) => !buf.is_empty(),
-        } {
-            let mut byte = 0; // offset into the buffer
-            let mut col = 0; // the current column
-            let mut scol = 0; // the start col for the current span, i.e., the already-printed width
-            let mut init = true; // are we at the start of the line?
-            let mut pctype = CharType::Other;
-
-            while byte < buf.len() {
-                // when we have a finite number of columns, never convert past the last column
-                if lastcol > 0 && col >= lastcol {
-                    write_tabs(
-                        &mut output,
-                        ts,
-                        scol,
-                        col,
-                        pctype == CharType::Tab,
-                        init,
-                        true,
-                    );
-                    output.write_all(&buf[byte..])?;
-                    scol = col;
-                    break;
-                }
-
-                // figure out how big the next char is, if it's UTF-8
-                let (ctype, cwidth, nbytes) = next_char_info(options.uflag, &buf, byte);
-
-                // now figure out how many columns this char takes up, and maybe print it
-                let tabs_buffered = init || options.aflag;
-                match ctype {
-                    CharType::Space | CharType::Tab => {
-                        // compute next col, but only write space or tab chars if not buffering
-                        col += if ctype == CharType::Space {
-                            1
-                        } else {
-                            next_tabstop(ts, col).unwrap_or(1)
-                        };
-
-                        if !tabs_buffered {
-                            output.write_all(&buf[byte..byte + nbytes])?;
-                            scol = col; // now printed up to this column
-                        }
-                    }
-                    CharType::Other | CharType::Backspace => {
-                        // always
-                        write_tabs(
-                            &mut output,
-                            ts,
-                            scol,
-                            col,
-                            pctype == CharType::Tab,
-                            init,
-                            options.aflag,
-                        );
-                        init = false; // no longer at the start of a line
-                        col = if ctype == CharType::Other {
-                            // use computed width
-                            col + cwidth
-                        } else if col > 0 {
-                            // Backspace case, but only if col > 0
-                            col - 1
-                        } else {
-                            0
-                        };
-                        output.write_all(&buf[byte..byte + nbytes])?;
-                        scol = col; // we've now printed up to this column
-                    }
-                }
-
-                byte += nbytes; // move on to next char
-                pctype = ctype; // save the previous type
-            }
-
-            // write out anything remaining
-            write_tabs(
-                &mut output,
-                ts,
-                scol,
-                col,
-                pctype == CharType::Tab,
-                init,
-                true,
-            );
-            output.flush()?;
-            buf.truncate(0); // clear out the buffer
-        }
-    }
-    output.flush()
-}
-
-
- \ No newline at end of file diff --git a/src/uu_uniq/uniq.rs.html b/src/uu_uniq/uniq.rs.html deleted file mode 100644 index 7a592efe5..000000000 --- a/src/uu_uniq/uniq.rs.html +++ /dev/null @@ -1,870 +0,0 @@ -uniq.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Chirag B Jadwani <chirag.jadwani@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-use clap::{crate_version, App, Arg, ArgMatches};
-use std::fs::File;
-use std::io::{self, stdin, stdout, BufRead, BufReader, BufWriter, Read, Write};
-use std::path::Path;
-use std::str::FromStr;
-use strum_macros::{AsRefStr, EnumString};
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult, USimpleError};
-
-static ABOUT: &str = "Report or omit repeated lines.";
-pub mod options {
-    pub static ALL_REPEATED: &str = "all-repeated";
-    pub static CHECK_CHARS: &str = "check-chars";
-    pub static COUNT: &str = "count";
-    pub static IGNORE_CASE: &str = "ignore-case";
-    pub static REPEATED: &str = "repeated";
-    pub static SKIP_FIELDS: &str = "skip-fields";
-    pub static SKIP_CHARS: &str = "skip-chars";
-    pub static UNIQUE: &str = "unique";
-    pub static ZERO_TERMINATED: &str = "zero-terminated";
-    pub static GROUP: &str = "group";
-}
-
-static ARG_FILES: &str = "files";
-
-#[derive(PartialEq, Clone, Copy, AsRefStr, EnumString)]
-#[strum(serialize_all = "snake_case")]
-enum Delimiters {
-    Append,
-    Prepend,
-    Separate,
-    Both,
-    None,
-}
-
-struct Uniq {
-    repeats_only: bool,
-    uniques_only: bool,
-    all_repeated: bool,
-    delimiters: Delimiters,
-    show_counts: bool,
-    skip_fields: Option<usize>,
-    slice_start: Option<usize>,
-    slice_stop: Option<usize>,
-    ignore_case: bool,
-    zero_terminated: bool,
-}
-
-macro_rules! write_line_terminator {
-    ($writer:expr, $line_terminator:expr) => {
-        $writer
-            .write_all(&[$line_terminator])
-            .map_err_context(|| "Could not write line terminator".to_string())
-    };
-}
-
-impl Uniq {
-    pub fn print_uniq<R: Read, W: Write>(
-        &self,
-        reader: &mut BufReader<R>,
-        writer: &mut BufWriter<W>,
-    ) -> UResult<()> {
-        let mut first_line_printed = false;
-        let mut group_count = 1;
-        let line_terminator = self.get_line_terminator();
-        let mut lines = reader.split(line_terminator).map(get_line_string);
-        let mut line = match lines.next() {
-            Some(l) => l?,
-            None => return Ok(()),
-        };
-
-        // compare current `line` with consecutive lines (`next_line`) of the input
-        // and if needed, print `line` based on the command line options provided
-        for next_line in lines {
-            let next_line = next_line?;
-            if self.cmp_keys(&line, &next_line) {
-                if (group_count == 1 && !self.repeats_only)
-                    || (group_count > 1 && !self.uniques_only)
-                {
-                    self.print_line(writer, &line, group_count, first_line_printed)?;
-                    first_line_printed = true;
-                }
-                line = next_line;
-                group_count = 1;
-            } else {
-                if self.all_repeated {
-                    self.print_line(writer, &line, group_count, first_line_printed)?;
-                    first_line_printed = true;
-                    line = next_line;
-                }
-                group_count += 1;
-            }
-        }
-        if (group_count == 1 && !self.repeats_only) || (group_count > 1 && !self.uniques_only) {
-            self.print_line(writer, &line, group_count, first_line_printed)?;
-            first_line_printed = true;
-        }
-        if (self.delimiters == Delimiters::Append || self.delimiters == Delimiters::Both)
-            && first_line_printed
-        {
-            write_line_terminator!(writer, line_terminator)?;
-        }
-        Ok(())
-    }
-
-    fn skip_fields<'a>(&self, line: &'a str) -> &'a str {
-        if let Some(skip_fields) = self.skip_fields {
-            let mut i = 0;
-            let mut char_indices = line.char_indices();
-            for _ in 0..skip_fields {
-                if char_indices.find(|(_, c)| !c.is_whitespace()) == None {
-                    return "";
-                }
-                match char_indices.find(|(_, c)| c.is_whitespace()) {
-                    None => return "",
-
-                    Some((next_field_i, _)) => i = next_field_i,
-                }
-            }
-            &line[i..]
-        } else {
-            line
-        }
-    }
-
-    fn get_line_terminator(&self) -> u8 {
-        if self.zero_terminated {
-            0
-        } else {
-            b'\n'
-        }
-    }
-
-    fn cmp_keys(&self, first: &str, second: &str) -> bool {
-        self.cmp_key(first, |first_iter| {
-            self.cmp_key(second, |second_iter| first_iter.ne(second_iter))
-        })
-    }
-
-    fn cmp_key<F>(&self, line: &str, mut closure: F) -> bool
-    where
-        F: FnMut(&mut dyn Iterator<Item = char>) -> bool,
-    {
-        let fields_to_check = self.skip_fields(line);
-        let len = fields_to_check.len();
-        let slice_start = self.slice_start.unwrap_or(0);
-        let slice_stop = self.slice_stop.unwrap_or(len);
-        if len > 0 {
-            // fast path: avoid doing any work if there is no need to skip or map to lower-case
-            if !self.ignore_case && slice_start == 0 && slice_stop == len {
-                return closure(&mut fields_to_check.chars());
-            }
-
-            // fast path: avoid skipping
-            if self.ignore_case && slice_start == 0 && slice_stop == len {
-                return closure(&mut fields_to_check.chars().flat_map(|c| c.to_uppercase()));
-            }
-
-            // fast path: we can avoid mapping chars to upper-case, if we don't want to ignore the case
-            if !self.ignore_case {
-                return closure(&mut fields_to_check.chars().skip(slice_start).take(slice_stop));
-            }
-
-            closure(
-                &mut fields_to_check
-                    .chars()
-                    .skip(slice_start)
-                    .take(slice_stop)
-                    .flat_map(|c| c.to_uppercase()),
-            )
-        } else {
-            closure(&mut fields_to_check.chars())
-        }
-    }
-
-    fn should_print_delimiter(&self, group_count: usize, first_line_printed: bool) -> bool {
-        // if no delimiter option is selected then no other checks needed
-        self.delimiters != Delimiters::None
-            // print delimiter only before the first line of a group, not between lines of a group
-            && group_count == 1
-            // if at least one line has been output before current group then print delimiter
-            && (first_line_printed
-                // or if we need to prepend delimiter then print it even at the start of the output
-                || self.delimiters == Delimiters::Prepend
-                // the 'both' delimit mode should prepend and append delimiters
-                || self.delimiters == Delimiters::Both)
-    }
-
-    fn print_line<W: Write>(
-        &self,
-        writer: &mut BufWriter<W>,
-        line: &str,
-        count: usize,
-        first_line_printed: bool,
-    ) -> UResult<()> {
-        let line_terminator = self.get_line_terminator();
-
-        if self.should_print_delimiter(count, first_line_printed) {
-            write_line_terminator!(writer, line_terminator)?;
-        }
-
-        if self.show_counts {
-            writer.write_all(format!("{:7} {}", count, line).as_bytes())
-        } else {
-            writer.write_all(line.as_bytes())
-        }
-        .map_err_context(|| "Failed to write line".to_string())?;
-
-        write_line_terminator!(writer, line_terminator)
-    }
-}
-
-fn get_line_string(io_line: io::Result<Vec<u8>>) -> UResult<String> {
-    let line_bytes = io_line.map_err_context(|| "failed to split lines".to_string())?;
-    String::from_utf8(line_bytes)
-        .map_err(|e| USimpleError::new(1, format!("failed to convert line to utf8: {}", e)))
-}
-
-fn opt_parsed<T: FromStr>(opt_name: &str, matches: &ArgMatches) -> UResult<Option<T>> {
-    Ok(match matches.value_of(opt_name) {
-        Some(arg_str) => Some(arg_str.parse().map_err(|_| {
-            USimpleError::new(
-                1,
-                format!(
-                    "Invalid argument for {}: {}",
-                    opt_name,
-                    arg_str.maybe_quote()
-                ),
-            )
-        })?),
-        None => None,
-    })
-}
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [INPUT [OUTPUT]]...",
-        uucore::execution_phrase()
-    )
-}
-
-fn get_long_usage() -> String {
-    String::from(
-        "Filter adjacent matching lines from INPUT (or standard input),\n\
-        writing to OUTPUT (or standard output).
-        Note: 'uniq' does not detect repeated lines unless they are adjacent.\n\
-        You may want to sort the input first, or use 'sort -u' without 'uniq'.\n",
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let long_usage = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&long_usage[..])
-        .get_matches_from(args);
-
-    let files: Vec<String> = matches
-        .values_of(ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let (in_file_name, out_file_name) = match files.len() {
-        0 => ("-".to_owned(), "-".to_owned()),
-        1 => (files[0].clone(), "-".to_owned()),
-        2 => (files[0].clone(), files[1].clone()),
-        _ => {
-            unreachable!() // Cannot happen as clap will fail earlier
-        }
-    };
-
-    let uniq = Uniq {
-        repeats_only: matches.is_present(options::REPEATED)
-            || matches.is_present(options::ALL_REPEATED),
-        uniques_only: matches.is_present(options::UNIQUE),
-        all_repeated: matches.is_present(options::ALL_REPEATED)
-            || matches.is_present(options::GROUP),
-        delimiters: get_delimiter(&matches),
-        show_counts: matches.is_present(options::COUNT),
-        skip_fields: opt_parsed(options::SKIP_FIELDS, &matches)?,
-        slice_start: opt_parsed(options::SKIP_CHARS, &matches)?,
-        slice_stop: opt_parsed(options::CHECK_CHARS, &matches)?,
-        ignore_case: matches.is_present(options::IGNORE_CASE),
-        zero_terminated: matches.is_present(options::ZERO_TERMINATED),
-    };
-    uniq.print_uniq(
-        &mut open_input_file(in_file_name)?,
-        &mut open_output_file(out_file_name)?,
-    )
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::ALL_REPEATED)
-                .short('D')
-                .long(options::ALL_REPEATED)
-                .possible_values(&[
-                    "none",
-                    "prepend",
-                    "separate"
-                ])
-                .help("print all duplicate lines. Delimiting is done with blank lines. [default: none]")
-                .value_name("delimit-method")
-                .min_values(0)
-                .max_values(1),
-        )
-        .arg(
-            Arg::new(options::GROUP)
-                .long(options::GROUP)
-                .possible_values(&[
-                    "separate",
-                    "prepend",
-                    "append",
-                    "both",
-                ])
-                .help("show all items, separating groups with an empty line. [default: separate]")
-                .value_name("group-method")
-                .min_values(0)
-                .max_values(1)
-                .conflicts_with_all(&[
-                    options::REPEATED,
-                    options::ALL_REPEATED,
-                    options::UNIQUE,
-                ]),
-        )
-        .arg(
-            Arg::new(options::CHECK_CHARS)
-                .short('w')
-                .long(options::CHECK_CHARS)
-                .help("compare no more than N characters in lines")
-                .value_name("N"),
-        )
-        .arg(
-            Arg::new(options::COUNT)
-                .short('c')
-                .long(options::COUNT)
-                .help("prefix lines by the number of occurrences"),
-        )
-        .arg(
-            Arg::new(options::IGNORE_CASE)
-                .short('i')
-                .long(options::IGNORE_CASE)
-                .help("ignore differences in case when comparing"),
-        )
-        .arg(
-            Arg::new(options::REPEATED)
-                .short('d')
-                .long(options::REPEATED)
-                .help("only print duplicate lines"),
-        )
-        .arg(
-            Arg::new(options::SKIP_CHARS)
-                .short('s')
-                .long(options::SKIP_CHARS)
-                .help("avoid comparing the first N characters")
-                .value_name("N"),
-        )
-        .arg(
-            Arg::new(options::SKIP_FIELDS)
-                .short('f')
-                .long(options::SKIP_FIELDS)
-                .help("avoid comparing the first N fields")
-                .value_name("N"),
-        )
-        .arg(
-            Arg::new(options::UNIQUE)
-                .short('u')
-                .long(options::UNIQUE)
-                .help("only print unique lines"),
-        )
-        .arg(
-            Arg::new(options::ZERO_TERMINATED)
-                .short('z')
-                .long(options::ZERO_TERMINATED)
-                .help("end lines with 0 byte, not newline"),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .max_values(2),
-        )
-}
-
-fn get_delimiter(matches: &ArgMatches) -> Delimiters {
-    let value = matches
-        .value_of(options::ALL_REPEATED)
-        .or_else(|| matches.value_of(options::GROUP));
-    if let Some(delimiter_arg) = value {
-        Delimiters::from_str(delimiter_arg).unwrap() // All possible values for ALL_REPEATED are Delimiters (of type `&str`)
-    } else if matches.is_present(options::GROUP) {
-        Delimiters::Separate
-    } else {
-        Delimiters::None
-    }
-}
-
-fn open_input_file(in_file_name: String) -> UResult<BufReader<Box<dyn Read + 'static>>> {
-    let in_file = if in_file_name == "-" {
-        Box::new(stdin()) as Box<dyn Read>
-    } else {
-        let path = Path::new(&in_file_name[..]);
-        let in_file = File::open(&path)
-            .map_err_context(|| format!("Could not open {}", in_file_name.maybe_quote()))?;
-        Box::new(in_file) as Box<dyn Read>
-    };
-    Ok(BufReader::new(in_file))
-}
-
-fn open_output_file(out_file_name: String) -> UResult<BufWriter<Box<dyn Write + 'static>>> {
-    let out_file = if out_file_name == "-" {
-        Box::new(stdout()) as Box<dyn Write>
-    } else {
-        let path = Path::new(&out_file_name[..]);
-        let out_file = File::create(&path)
-            .map_err_context(|| format!("Could not create {}", out_file_name.maybe_quote()))?;
-        Box::new(out_file) as Box<dyn Write>
-    };
-    Ok(BufWriter::new(out_file))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_unlink/unlink.rs.html b/src/uu_unlink/unlink.rs.html deleted file mode 100644 index 3b212ee62..000000000 --- a/src/uu_unlink/unlink.rs.html +++ /dev/null @@ -1,84 +0,0 @@ -unlink.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Colin Warren <me@zv.ms>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-/* last synced with: unlink (GNU coreutils) 8.21 */
-
-use std::fs::remove_file;
-use std::path::Path;
-
-use clap::{crate_version, App, Arg};
-
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-
-static ABOUT: &str = "Unlink the file at FILE.";
-static OPT_PATH: &str = "FILE";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let matches = uu_app().get_matches_from(args);
-
-    let path: &Path = matches.value_of_os(OPT_PATH).unwrap().as_ref();
-
-    remove_file(path).map_err_context(|| format!("cannot unlink {}", path.quote()))
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(OPT_PATH)
-                .required(true)
-                .hide(true)
-                .allow_invalid_utf8(true),
-        )
-}
-
-
- \ No newline at end of file diff --git a/src/uu_uptime/uptime.rs.html b/src/uu_uptime/uptime.rs.html deleted file mode 100644 index ed1c06399..000000000 --- a/src/uu_uptime/uptime.rs.html +++ /dev/null @@ -1,372 +0,0 @@ -uptime.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  * (c) Jian Zeng <anonymousknight86@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) getloadavg upsecs updays nusers loadavg boottime uphours upmins
-
-use chrono::{Local, TimeZone, Utc};
-use clap::{crate_version, App, Arg};
-
-// import crate time from utmpx
-pub use uucore::libc;
-use uucore::libc::time_t;
-
-use uucore::error::{UResult, USimpleError};
-
-static ABOUT: &str = "Display the current time, the length of time the system has been up,\n\
-                      the number of users on the system, and the average number of jobs\n\
-                      in the run queue over the last 1, 5 and 15 minutes.";
-pub mod options {
-    pub static SINCE: &str = "since";
-}
-
-#[cfg(unix)]
-use uucore::libc::getloadavg;
-
-#[cfg(windows)]
-extern "C" {
-    fn GetTickCount() -> uucore::libc::uint32_t;
-}
-
-fn usage() -> String {
-    format!("{0} [OPTION]...", uucore::execution_phrase())
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let (boot_time, user_count) = process_utmpx();
-    let uptime = get_uptime(boot_time);
-    if uptime < 0 {
-        Err(USimpleError::new(1, "could not retrieve system uptime"))
-    } else {
-        if matches.is_present(options::SINCE) {
-            let initial_date = Local.timestamp(Utc::now().timestamp() - uptime, 0);
-            println!("{}", initial_date.format("%Y-%m-%d %H:%M:%S"));
-            return Ok(());
-        }
-
-        print_time();
-        let upsecs = uptime;
-        print_uptime(upsecs);
-        print_nusers(user_count);
-        print_loadavg();
-
-        Ok(())
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::SINCE)
-                .short('s')
-                .long(options::SINCE)
-                .help("system up since"),
-        )
-}
-
-#[cfg(unix)]
-fn print_loadavg() {
-    use uucore::libc::c_double;
-
-    let mut avg: [c_double; 3] = [0.0; 3];
-    let loads: i32 = unsafe { getloadavg(avg.as_mut_ptr(), 3) };
-
-    if loads == -1 {
-        println!();
-    } else {
-        print!("load average: ");
-        for n in 0..loads {
-            print!(
-                "{:.2}{}",
-                avg[n as usize],
-                if n == loads - 1 { "\n" } else { ", " }
-            );
-        }
-    }
-}
-
-#[cfg(windows)]
-fn print_loadavg() {
-    // XXX: currently this is a noop as Windows does not seem to have anything comparable to
-    //      getloadavg()
-}
-
-#[cfg(unix)]
-fn process_utmpx() -> (Option<time_t>, usize) {
-    use uucore::utmpx::*;
-
-    let mut nusers = 0;
-    let mut boot_time = None;
-
-    for line in Utmpx::iter_all_records() {
-        match line.record_type() {
-            USER_PROCESS => nusers += 1,
-            BOOT_TIME => {
-                let t = line.login_time().to_timespec();
-                if t.sec > 0 {
-                    boot_time = Some(t.sec as time_t);
-                }
-            }
-            _ => continue,
-        }
-    }
-    (boot_time, nusers)
-}
-
-#[cfg(windows)]
-fn process_utmpx() -> (Option<time_t>, usize) {
-    (None, 0) // TODO: change 0 to number of users
-}
-
-fn print_nusers(nusers: usize) {
-    match nusers.cmp(&1) {
-        std::cmp::Ordering::Equal => print!("1 user,  "),
-        std::cmp::Ordering::Greater => print!("{} users,  ", nusers),
-        _ => {}
-    };
-}
-
-fn print_time() {
-    let local_time = Local::now().time();
-
-    print!(" {} ", local_time.format("%H:%M:%S"));
-}
-
-#[cfg(unix)]
-fn get_uptime(boot_time: Option<time_t>) -> i64 {
-    use std::fs::File;
-    use std::io::Read;
-
-    let mut proc_uptime_s = String::new();
-
-    let proc_uptime = File::open("/proc/uptime")
-        .ok()
-        .and_then(|mut f| f.read_to_string(&mut proc_uptime_s).ok())
-        .and_then(|_| proc_uptime_s.split_whitespace().next())
-        .and_then(|s| s.split('.').next().unwrap_or("0").parse().ok());
-
-    proc_uptime.unwrap_or_else(|| match boot_time {
-        Some(t) => {
-            let now = Local::now().timestamp();
-            let boottime = t as i64;
-            now - boottime
-        }
-        None => -1,
-    })
-}
-
-#[cfg(windows)]
-fn get_uptime(_boot_time: Option<time_t>) -> i64 {
-    unsafe { GetTickCount() as i64 }
-}
-
-fn print_uptime(upsecs: i64) {
-    let updays = upsecs / 86400;
-    let uphours = (upsecs - (updays * 86400)) / 3600;
-    let upmins = (upsecs - (updays * 86400) - (uphours * 3600)) / 60;
-    match updays.cmp(&1) {
-        std::cmp::Ordering::Equal => print!("up {:1} day, {:2}:{:02},  ", updays, uphours, upmins),
-        std::cmp::Ordering::Greater => {
-            print!("up {:1} days, {:2}:{:02},  ", updays, uphours, upmins)
-        }
-        _ => print!("up  {:2}:{:02}, ", uphours, upmins),
-    };
-}
-
-
- \ No newline at end of file diff --git a/src/uu_users/users.rs.html b/src/uu_users/users.rs.html deleted file mode 100644 index e9c9aa5ba..000000000 --- a/src/uu_users/users.rs.html +++ /dev/null @@ -1,148 +0,0 @@ -users.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) KokaKiwi <kokakiwi@kokakiwi.net>
-//  * (c) Jian Zeng <anonymousknight86@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (paths) wtmp
-
-use std::path::Path;
-
-use clap::{crate_version, App, Arg};
-use uucore::error::UResult;
-use uucore::utmpx::{self, Utmpx};
-
-static ABOUT: &str = "Print the user names of users currently logged in to the current host";
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!("{0} [FILE]", uucore::execution_phrase())
-}
-
-fn get_long_usage() -> String {
-    format!(
-        "Output who is currently logged in according to FILE.
-If FILE is not specified, use {}.  /var/log/wtmp as FILE is common.",
-        utmpx::DEFAULT_FILE
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-    let after_help = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let files: Vec<&Path> = matches
-        .values_of_os(ARG_FILES)
-        .map(|v| v.map(AsRef::as_ref).collect())
-        .unwrap_or_default();
-
-    let filename = if !files.is_empty() {
-        files[0]
-    } else {
-        utmpx::DEFAULT_FILE.as_ref()
-    };
-
-    let mut users = Utmpx::iter_all_records_from(filename)
-        .filter(Utmpx::is_user_process)
-        .map(|ut| ut.user())
-        .collect::<Vec<_>>();
-
-    if !users.is_empty() {
-        users.sort();
-        println!("{}", users.join(" "));
-    }
-
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(Arg::new(ARG_FILES).takes_value(true).max_values(1))
-}
-
-
- \ No newline at end of file diff --git a/src/uu_wc/count_fast.rs.html b/src/uu_wc/count_fast.rs.html deleted file mode 100644 index 43762e1a2..000000000 --- a/src/uu_wc/count_fast.rs.html +++ /dev/null @@ -1,264 +0,0 @@ -count_fast.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-
use crate::word_count::WordCount;
-
-use super::WordCountable;
-
-#[cfg(any(target_os = "linux", target_os = "android"))]
-use std::fs::OpenOptions;
-use std::io::{self, ErrorKind, Read};
-
-#[cfg(unix)]
-use libc::S_IFREG;
-#[cfg(unix)]
-use nix::sys::stat;
-#[cfg(any(target_os = "linux", target_os = "android"))]
-use std::os::unix::io::AsRawFd;
-
-#[cfg(any(target_os = "linux", target_os = "android"))]
-use libc::S_IFIFO;
-#[cfg(any(target_os = "linux", target_os = "android"))]
-use uucore::pipes::{pipe, splice, splice_exact};
-
-const BUF_SIZE: usize = 16 * 1024;
-#[cfg(any(target_os = "linux", target_os = "android"))]
-const SPLICE_SIZE: usize = 128 * 1024;
-
-/// This is a Linux-specific function to count the number of bytes using the
-/// `splice` system call, which is faster than using `read`.
-///
-/// On error it returns the number of bytes it did manage to read, since the
-/// caller will fall back to a simpler method.
-#[inline]
-#[cfg(any(target_os = "linux", target_os = "android"))]
-fn count_bytes_using_splice(fd: &impl AsRawFd) -> Result<usize, usize> {
-    let null_file = OpenOptions::new()
-        .write(true)
-        .open("/dev/null")
-        .map_err(|_| 0_usize)?;
-    let null_rdev = stat::fstat(null_file.as_raw_fd())
-        .map_err(|_| 0_usize)?
-        .st_rdev;
-    if (stat::major(null_rdev), stat::minor(null_rdev)) != (1, 3) {
-        // This is not a proper /dev/null, writing to it is probably bad
-        // Bit of an edge case, but it has been known to happen
-        return Err(0);
-    }
-    let (pipe_rd, pipe_wr) = pipe().map_err(|_| 0_usize)?;
-
-    let mut byte_count = 0;
-    loop {
-        match splice(fd, &pipe_wr, SPLICE_SIZE) {
-            Ok(0) => break,
-            Ok(res) => {
-                byte_count += res;
-                // Silent the warning as we want to the error message
-                #[allow(clippy::question_mark)]
-                if splice_exact(&pipe_rd, &null_file, res).is_err() {
-                    return Err(byte_count);
-                }
-            }
-            Err(_) => return Err(byte_count),
-        };
-    }
-
-    Ok(byte_count)
-}
-
-/// In the special case where we only need to count the number of bytes. There
-/// are several optimizations we can do:
-///   1. On Unix,  we can simply `stat` the file if it is regular.
-///   2. On Linux -- if the above did not work -- we can use splice to count
-///      the number of bytes if the file is a FIFO.
-///   3. Otherwise, we just read normally, but without the overhead of counting
-///      other things such as lines and words.
-#[inline]
-pub(crate) fn count_bytes_fast<T: WordCountable>(handle: &mut T) -> (usize, Option<io::Error>) {
-    let mut byte_count = 0;
-
-    #[cfg(unix)]
-    {
-        let fd = handle.as_raw_fd();
-        if let Ok(stat) = stat::fstat(fd) {
-            // If the file is regular, then the `st_size` should hold
-            // the file's size in bytes.
-            if (stat.st_mode & S_IFREG) != 0 {
-                return (stat.st_size as usize, None);
-            }
-            #[cfg(any(target_os = "linux", target_os = "android"))]
-            {
-                // Else, if we're on Linux and our file is a FIFO pipe
-                // (or stdin), we use splice to count the number of bytes.
-                if (stat.st_mode & S_IFIFO) != 0 {
-                    match count_bytes_using_splice(handle) {
-                        Ok(n) => return (n, None),
-                        Err(n) => byte_count = n,
-                    }
-                }
-            }
-        }
-    }
-
-    // Fall back on `read`, but without the overhead of counting words and lines.
-    let mut buf = [0_u8; BUF_SIZE];
-    loop {
-        match handle.read(&mut buf) {
-            Ok(0) => return (byte_count, None),
-            Ok(n) => {
-                byte_count += n;
-            }
-            Err(ref e) if e.kind() == ErrorKind::Interrupted => continue,
-            Err(e) => return (byte_count, Some(e)),
-        }
-    }
-}
-
-pub(crate) fn count_bytes_and_lines_fast<R: Read>(
-    handle: &mut R,
-) -> (WordCount, Option<io::Error>) {
-    let mut total = WordCount::default();
-    let mut buf = [0; BUF_SIZE];
-    loop {
-        match handle.read(&mut buf) {
-            Ok(0) => return (total, None),
-            Ok(n) => {
-                total.bytes += n;
-                total.lines += bytecount::count(&buf[..n], b'\n');
-            }
-            Err(ref e) if e.kind() == ErrorKind::Interrupted => continue,
-            Err(e) => return (total, Some(e)),
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_wc/countable.rs.html b/src/uu_wc/countable.rs.html deleted file mode 100644 index 1a132176c..000000000 --- a/src/uu_wc/countable.rs.html +++ /dev/null @@ -1,78 +0,0 @@ -countable.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-
//! Traits and implementations for iterating over lines in a file-like object.
-//!
-//! This module provides a [`WordCountable`] trait and implementations
-//! for some common file-like objects. Use the [`WordCountable::lines`]
-//! method to get an iterator over lines of a file-like object.
-use std::fs::File;
-use std::io::{BufRead, BufReader, Read, StdinLock};
-
-#[cfg(unix)]
-use std::os::unix::io::AsRawFd;
-
-#[cfg(unix)]
-pub trait WordCountable: AsRawFd + Read {
-    type Buffered: BufRead;
-    fn buffered(self) -> Self::Buffered;
-}
-
-#[cfg(not(unix))]
-pub trait WordCountable: Read {
-    type Buffered: BufRead;
-    fn buffered(self) -> Self::Buffered;
-}
-
-impl WordCountable for StdinLock<'_> {
-    type Buffered = Self;
-
-    fn buffered(self) -> Self::Buffered {
-        self
-    }
-}
-impl WordCountable for File {
-    type Buffered = BufReader<Self>;
-
-    fn buffered(self) -> Self::Buffered {
-        BufReader::new(self)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_wc/wc.rs.html b/src/uu_wc/wc.rs.html deleted file mode 100644 index b8f8d0984..000000000 --- a/src/uu_wc/wc.rs.html +++ /dev/null @@ -1,1068 +0,0 @@ -wc.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Boden Garman <bpgarman@gmail.com>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-#[macro_use]
-extern crate uucore;
-
-mod count_fast;
-mod countable;
-mod word_count;
-use count_fast::{count_bytes_and_lines_fast, count_bytes_fast};
-use countable::WordCountable;
-use unicode_width::UnicodeWidthChar;
-use utf8::{BufReadDecoder, BufReadDecoderError};
-use word_count::{TitledWordCount, WordCount};
-
-use clap::{crate_version, App, Arg, ArgMatches};
-
-use std::cmp::max;
-use std::fs::{self, File};
-use std::io::{self, Write};
-use std::path::{Path, PathBuf};
-
-use uucore::display::{Quotable, Quoted};
-use uucore::error::{UResult, USimpleError};
-
-/// The minimum character width for formatting counts when reading from stdin.
-const MINIMUM_WIDTH: usize = 7;
-
-struct Settings {
-    show_bytes: bool,
-    show_chars: bool,
-    show_lines: bool,
-    show_words: bool,
-    show_max_line_length: bool,
-}
-
-impl Settings {
-    fn new(matches: &ArgMatches) -> Settings {
-        let settings = Settings {
-            show_bytes: matches.is_present(options::BYTES),
-            show_chars: matches.is_present(options::CHAR),
-            show_lines: matches.is_present(options::LINES),
-            show_words: matches.is_present(options::WORDS),
-            show_max_line_length: matches.is_present(options::MAX_LINE_LENGTH),
-        };
-
-        if settings.show_bytes
-            || settings.show_chars
-            || settings.show_lines
-            || settings.show_words
-            || settings.show_max_line_length
-        {
-            return settings;
-        }
-
-        Settings {
-            show_bytes: true,
-            show_chars: false,
-            show_lines: true,
-            show_words: true,
-            show_max_line_length: false,
-        }
-    }
-
-    fn number_enabled(&self) -> u32 {
-        let mut result = 0;
-        result += self.show_bytes as u32;
-        result += self.show_chars as u32;
-        result += self.show_lines as u32;
-        result += self.show_max_line_length as u32;
-        result += self.show_words as u32;
-        result
-    }
-}
-
-static ABOUT: &str = "Display newline, word, and byte counts for each FILE, and a total line if
-more than one FILE is specified.";
-
-pub mod options {
-    pub static BYTES: &str = "bytes";
-    pub static CHAR: &str = "chars";
-    pub static LINES: &str = "lines";
-    pub static MAX_LINE_LENGTH: &str = "max-line-length";
-    pub static WORDS: &str = "words";
-}
-
-static ARG_FILES: &str = "files";
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [FILE]...
- With no FILE, or when FILE is -, read standard input.",
-        uucore::execution_phrase()
-    )
-}
-
-enum StdinKind {
-    /// Stdin specified on command-line with "-".
-    Explicit,
-
-    /// Stdin implicitly specified on command-line by not passing any positional argument.
-    Implicit,
-}
-
-/// Supported inputs.
-enum Input {
-    /// A regular file.
-    Path(PathBuf),
-
-    /// Standard input.
-    Stdin(StdinKind),
-}
-
-impl Input {
-    /// Converts input to title that appears in stats.
-    fn to_title(&self) -> Option<&Path> {
-        match self {
-            Input::Path(path) => Some(path),
-            Input::Stdin(StdinKind::Explicit) => Some("-".as_ref()),
-            Input::Stdin(StdinKind::Implicit) => None,
-        }
-    }
-
-    fn path_display(&self) -> Quoted<'_> {
-        match self {
-            Input::Path(path) => path.maybe_quote(),
-            Input::Stdin(_) => "standard input".maybe_quote(),
-        }
-    }
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let usage = usage();
-
-    let matches = uu_app().override_usage(&usage[..]).get_matches_from(args);
-
-    let mut inputs: Vec<Input> = matches
-        .values_of_os(ARG_FILES)
-        .map(|v| {
-            v.map(|i| {
-                if i == "-" {
-                    Input::Stdin(StdinKind::Explicit)
-                } else {
-                    Input::Path(i.into())
-                }
-            })
-            .collect()
-        })
-        .unwrap_or_default();
-
-    if inputs.is_empty() {
-        inputs.push(Input::Stdin(StdinKind::Implicit));
-    }
-
-    let settings = Settings::new(&matches);
-
-    wc(inputs, &settings)
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::BYTES)
-                .short('c')
-                .long(options::BYTES)
-                .help("print the byte counts"),
-        )
-        .arg(
-            Arg::new(options::CHAR)
-                .short('m')
-                .long(options::CHAR)
-                .help("print the character counts"),
-        )
-        .arg(
-            Arg::new(options::LINES)
-                .short('l')
-                .long(options::LINES)
-                .help("print the newline counts"),
-        )
-        .arg(
-            Arg::new(options::MAX_LINE_LENGTH)
-                .short('L')
-                .long(options::MAX_LINE_LENGTH)
-                .help("print the length of the longest line"),
-        )
-        .arg(
-            Arg::new(options::WORDS)
-                .short('w')
-                .long(options::WORDS)
-                .help("print the word counts"),
-        )
-        .arg(
-            Arg::new(ARG_FILES)
-                .multiple_occurrences(true)
-                .takes_value(true)
-                .allow_invalid_utf8(true),
-        )
-}
-
-fn word_count_from_reader<T: WordCountable>(
-    mut reader: T,
-    settings: &Settings,
-) -> (WordCount, Option<io::Error>) {
-    let only_count_bytes = settings.show_bytes
-        && (!(settings.show_chars
-            || settings.show_lines
-            || settings.show_max_line_length
-            || settings.show_words));
-    if only_count_bytes {
-        let (bytes, error) = count_bytes_fast(&mut reader);
-        return (
-            WordCount {
-                bytes,
-                ..WordCount::default()
-            },
-            error,
-        );
-    }
-
-    // we do not need to decode the byte stream if we're only counting bytes/newlines
-    let decode_chars = settings.show_chars || settings.show_words || settings.show_max_line_length;
-
-    if !decode_chars {
-        return count_bytes_and_lines_fast(&mut reader);
-    }
-
-    let mut total = WordCount::default();
-    let mut reader = BufReadDecoder::new(reader.buffered());
-    let mut in_word = false;
-    let mut current_len = 0;
-
-    while let Some(chunk) = reader.next_strict() {
-        match chunk {
-            Ok(text) => {
-                for ch in text.chars() {
-                    if settings.show_words {
-                        if ch.is_whitespace() {
-                            in_word = false;
-                        } else if ch.is_ascii_control() {
-                            // These count as characters but do not affect the word state
-                        } else if !in_word {
-                            in_word = true;
-                            total.words += 1;
-                        }
-                    }
-                    if settings.show_max_line_length {
-                        match ch {
-                            '\n' => {
-                                total.max_line_length = max(current_len, total.max_line_length);
-                                current_len = 0;
-                            }
-                            // '\x0c' = '\f'
-                            '\r' | '\x0c' => {
-                                total.max_line_length = max(current_len, total.max_line_length);
-                                current_len = 0;
-                            }
-                            '\t' => {
-                                current_len -= current_len % 8;
-                                current_len += 8;
-                            }
-                            _ => {
-                                current_len += ch.width().unwrap_or(0);
-                            }
-                        }
-                    }
-                    if settings.show_lines && ch == '\n' {
-                        total.lines += 1;
-                    }
-                    if settings.show_chars {
-                        total.chars += 1;
-                    }
-                }
-                total.bytes += text.len();
-            }
-            Err(BufReadDecoderError::InvalidByteSequence(bytes)) => {
-                // GNU wc treats invalid data as neither word nor char nor whitespace,
-                // so no other counters are affected
-                total.bytes += bytes.len();
-            }
-            Err(BufReadDecoderError::Io(e)) => {
-                return (total, Some(e));
-            }
-        }
-    }
-
-    total.max_line_length = max(current_len, total.max_line_length);
-
-    (total, None)
-}
-
-enum CountResult {
-    /// Nothing went wrong.
-    Success(WordCount),
-    /// Managed to open but failed to read.
-    Interrupted(WordCount, io::Error),
-    /// Didn't even manage to open.
-    Failure(io::Error),
-}
-
-/// If we fail opening a file we only show the error. If we fail reading it
-/// we show a count for what we managed to read.
-///
-/// Therefore the reading implementations always return a total and sometimes
-/// return an error: (WordCount, Option<io::Error>).
-fn word_count_from_input(input: &Input, settings: &Settings) -> CountResult {
-    match input {
-        Input::Stdin(_) => {
-            let stdin = io::stdin();
-            let stdin_lock = stdin.lock();
-            match word_count_from_reader(stdin_lock, settings) {
-                (total, Some(error)) => CountResult::Interrupted(total, error),
-                (total, None) => CountResult::Success(total),
-            }
-        }
-        Input::Path(path) => match File::open(path) {
-            Err(error) => CountResult::Failure(error),
-            Ok(file) => match word_count_from_reader(file, settings) {
-                (total, Some(error)) => CountResult::Interrupted(total, error),
-                (total, None) => CountResult::Success(total),
-            },
-        },
-    }
-}
-
-/// Compute the number of digits needed to represent any count for this input.
-///
-/// If `input` is [`Input::Stdin`], then this function returns
-/// [`MINIMUM_WIDTH`]. Otherwise, if metadata could not be read from
-/// `input` then this function returns 1.
-///
-/// # Errors
-///
-/// This function will return an error if `input` is a [`Input::Path`]
-/// and there is a problem accessing the metadata of the given `input`.
-///
-/// # Examples
-///
-/// A [`Input::Stdin`] gets a default minimum width:
-///
-/// ```rust,ignore
-/// let input = Input::Stdin(StdinKind::Explicit);
-/// assert_eq!(7, digit_width(input));
-/// ```
-fn digit_width(input: &Input) -> io::Result<usize> {
-    match input {
-        Input::Stdin(_) => Ok(MINIMUM_WIDTH),
-        Input::Path(filename) => {
-            let path = Path::new(filename);
-            let metadata = fs::metadata(path)?;
-            if metadata.is_file() {
-                // TODO We are now computing the number of bytes in a file
-                // twice: once here and once in `WordCount::from_line()` (or
-                // in `count_bytes_fast()` if that function is called
-                // instead). See GitHub issue #2201.
-                let num_bytes = metadata.len();
-                let num_digits = num_bytes.to_string().len();
-                Ok(num_digits)
-            } else {
-                Ok(MINIMUM_WIDTH)
-            }
-        }
-    }
-}
-
-/// Compute the number of digits needed to represent all counts in all inputs.
-///
-/// `inputs` may include zero or more [`Input::Stdin`] entries, each of
-/// which represents reading from `stdin`. The presence of any such
-/// entry causes this function to return a width that is at least
-/// [`MINIMUM_WIDTH`].
-///
-/// If `input` is empty, then this function returns 1. If file metadata
-/// could not be read from any of the [`Input::Path`] inputs and there
-/// are no [`Input::Stdin`] inputs, then this function returns 1.
-///
-/// If there is a problem accessing the metadata, this function will
-/// silently ignore the error and assume that the number of digits
-/// needed to display the counts for that file is 1.
-///
-/// # Examples
-///
-/// An empty slice implies a width of 1:
-///
-/// ```rust,ignore
-/// assert_eq!(1, max_width(&vec![]));
-/// ```
-///
-/// The presence of [`Input::Stdin`] implies a minimum width:
-///
-/// ```rust,ignore
-/// let inputs = vec![Input::Stdin(StdinKind::Explicit)];
-/// assert_eq!(7, max_width(&inputs));
-/// ```
-fn max_width(inputs: &[Input]) -> usize {
-    let mut result = 1;
-    for input in inputs {
-        if let Ok(n) = digit_width(input) {
-            result = result.max(n);
-        }
-    }
-    result
-}
-
-fn wc(inputs: Vec<Input>, settings: &Settings) -> UResult<()> {
-    // Compute the width, in digits, to use when formatting counts.
-    //
-    // The width is the number of digits needed to print the number of
-    // bytes in the largest file. This is true regardless of whether
-    // the `settings` indicate that the bytes will be displayed.
-    //
-    // If we only need to display a single number, set this to 0 to
-    // prevent leading spaces.
-    let max_width = if settings.number_enabled() <= 1 {
-        0
-    } else {
-        max_width(&inputs)
-    };
-
-    let mut total_word_count = WordCount::default();
-
-    let num_inputs = inputs.len();
-
-    for input in &inputs {
-        let word_count = match word_count_from_input(input, settings) {
-            CountResult::Success(word_count) => word_count,
-            CountResult::Interrupted(word_count, error) => {
-                show!(USimpleError::new(
-                    1,
-                    format!("{}: {}", input.path_display(), error)
-                ));
-                word_count
-            }
-            CountResult::Failure(error) => {
-                show!(USimpleError::new(
-                    1,
-                    format!("{}: {}", input.path_display(), error)
-                ));
-                continue;
-            }
-        };
-        total_word_count += word_count;
-        let result = word_count.with_title(input.to_title());
-        if let Err(err) = print_stats(settings, &result, max_width) {
-            show!(USimpleError::new(
-                1,
-                format!(
-                    "failed to print result for {}: {}",
-                    result
-                        .title
-                        .unwrap_or_else(|| "<stdin>".as_ref())
-                        .maybe_quote(),
-                    err,
-                ),
-            ));
-        }
-    }
-
-    if num_inputs > 1 {
-        let total_result = total_word_count.with_title(Some("total".as_ref()));
-        if let Err(err) = print_stats(settings, &total_result, max_width) {
-            show!(USimpleError::new(
-                1,
-                format!("failed to print total: {}", err)
-            ));
-        }
-    }
-
-    // Although this appears to be returning `Ok`, the exit code may
-    // have been set to a non-zero value by a call to `show!()` above.
-    Ok(())
-}
-
-fn print_stats(settings: &Settings, result: &TitledWordCount, min_width: usize) -> io::Result<()> {
-    let stdout = io::stdout();
-    let mut stdout_lock = stdout.lock();
-
-    let mut is_first: bool = true;
-
-    if settings.show_lines {
-        if !is_first {
-            write!(stdout_lock, " ")?;
-        }
-        write!(stdout_lock, "{:1$}", result.count.lines, min_width)?;
-        is_first = false;
-    }
-    if settings.show_words {
-        if !is_first {
-            write!(stdout_lock, " ")?;
-        }
-        write!(stdout_lock, "{:1$}", result.count.words, min_width)?;
-        is_first = false;
-    }
-    if settings.show_chars {
-        if !is_first {
-            write!(stdout_lock, " ")?;
-        }
-        write!(stdout_lock, "{:1$}", result.count.chars, min_width)?;
-        is_first = false;
-    }
-    if settings.show_bytes {
-        if !is_first {
-            write!(stdout_lock, " ")?;
-        }
-        write!(stdout_lock, "{:1$}", result.count.bytes, min_width)?;
-        is_first = false;
-    }
-    if settings.show_max_line_length {
-        if !is_first {
-            write!(stdout_lock, " ")?;
-        }
-        write!(
-            stdout_lock,
-            "{:1$}",
-            result.count.max_line_length, min_width
-        )?;
-    }
-
-    if let Some(title) = result.title {
-        writeln!(stdout_lock, " {}", title.maybe_quote())?;
-    } else {
-        writeln!(stdout_lock)?;
-    }
-
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uu_wc/word_count.rs.html b/src/uu_wc/word_count.rs.html deleted file mode 100644 index 68f3e0b50..000000000 --- a/src/uu_wc/word_count.rs.html +++ /dev/null @@ -1,100 +0,0 @@ -word_count.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-
use std::cmp::max;
-use std::ops::{Add, AddAssign};
-use std::path::Path;
-
-#[derive(Debug, Default, Copy, Clone)]
-pub struct WordCount {
-    pub bytes: usize,
-    pub chars: usize,
-    pub lines: usize,
-    pub words: usize,
-    pub max_line_length: usize,
-}
-
-impl Add for WordCount {
-    type Output = Self;
-
-    fn add(self, other: Self) -> Self {
-        Self {
-            bytes: self.bytes + other.bytes,
-            chars: self.chars + other.chars,
-            lines: self.lines + other.lines,
-            words: self.words + other.words,
-            max_line_length: max(self.max_line_length, other.max_line_length),
-        }
-    }
-}
-
-impl AddAssign for WordCount {
-    fn add_assign(&mut self, other: Self) {
-        *self = *self + other
-    }
-}
-
-impl WordCount {
-    pub fn with_title(self, title: Option<&Path>) -> TitledWordCount {
-        TitledWordCount { title, count: self }
-    }
-}
-
-/// This struct supplements the actual word count with an optional title that is
-/// displayed to the user at the end of the program.
-/// The reason we don't simply include title in the `WordCount` struct is that
-/// it would result in unnecessary copying of `String`.
-#[derive(Debug, Default, Clone)]
-pub struct TitledWordCount<'a> {
-    pub title: Option<&'a Path>,
-    pub count: WordCount,
-}
-
-
- \ No newline at end of file diff --git a/src/uu_who/who.rs.html b/src/uu_who/who.rs.html deleted file mode 100644 index 1b989e153..000000000 --- a/src/uu_who/who.rs.html +++ /dev/null @@ -1,1130 +0,0 @@ -who.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) ttyname hostnames runlevel mesg wtmp statted boottime deadprocs initspawn clockchange curr runlvline pidstr exitstr hoststr
-
-use uucore::display::Quotable;
-use uucore::error::{FromIo, UResult};
-use uucore::libc::{ttyname, STDIN_FILENO, S_IWGRP};
-use uucore::utmpx::{self, time, Utmpx};
-
-use clap::{crate_version, App, Arg};
-use std::borrow::Cow;
-use std::ffi::CStr;
-use std::os::unix::fs::MetadataExt;
-use std::path::PathBuf;
-use uucore::InvalidEncodingHandling;
-
-mod options {
-    pub const ALL: &str = "all";
-    pub const BOOT: &str = "boot";
-    pub const DEAD: &str = "dead";
-    pub const HEADING: &str = "heading";
-    pub const LOGIN: &str = "login";
-    pub const LOOKUP: &str = "lookup";
-    pub const ONLY_HOSTNAME_USER: &str = "only_hostname_user";
-    pub const PROCESS: &str = "process";
-    pub const COUNT: &str = "count";
-    pub const RUNLEVEL: &str = "runlevel";
-    pub const SHORT: &str = "short";
-    pub const TIME: &str = "time";
-    pub const USERS: &str = "users";
-    pub const MESG: &str = "mesg"; // aliases: --message, --writable
-    pub const FILE: &str = "FILE"; // if length=1: FILE, if length=2: ARG1 ARG2
-}
-
-static ABOUT: &str = "Print information about users who are currently logged in.";
-
-#[cfg(any(target_os = "linux"))]
-static RUNLEVEL_HELP: &str = "print current runlevel";
-#[cfg(not(target_os = "linux"))]
-static RUNLEVEL_HELP: &str = "print current runlevel (This is meaningless on non Linux)";
-
-fn usage() -> String {
-    format!(
-        "{0} [OPTION]... [ FILE | ARG1 ARG2 ]",
-        uucore::execution_phrase()
-    )
-}
-
-fn get_long_usage() -> String {
-    format!(
-        "If FILE is not specified, use {}.  /var/log/wtmp as FILE is common.\n\
-         If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.",
-        utmpx::DEFAULT_FILE,
-    )
-}
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let args = args
-        .collect_str(InvalidEncodingHandling::Ignore)
-        .accept_any();
-
-    let usage = usage();
-    let after_help = get_long_usage();
-
-    let matches = uu_app()
-        .override_usage(&usage[..])
-        .after_help(&after_help[..])
-        .get_matches_from(args);
-
-    let files: Vec<String> = matches
-        .values_of(options::FILE)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    // If true, attempt to canonicalize hostnames via a DNS lookup.
-    let do_lookup = matches.is_present(options::LOOKUP);
-
-    // If true, display only a list of usernames and count of
-    // the users logged on.
-    // Ignored for 'who am i'.
-    let short_list = matches.is_present(options::COUNT);
-
-    let all = matches.is_present(options::ALL);
-
-    // If true, display a line at the top describing each field.
-    let include_heading = matches.is_present(options::HEADING);
-
-    // If true, display a '+' for each user if mesg y, a '-' if mesg n,
-    // or a '?' if their tty cannot be statted.
-    let include_mesg = all || matches.is_present(options::MESG) || matches.is_present("w");
-
-    // If true, display the last boot time.
-    let need_boottime = all || matches.is_present(options::BOOT);
-
-    // If true, display dead processes.
-    let need_deadprocs = all || matches.is_present(options::DEAD);
-
-    // If true, display processes waiting for user login.
-    let need_login = all || matches.is_present(options::LOGIN);
-
-    // If true, display processes started by init.
-    let need_initspawn = all || matches.is_present(options::PROCESS);
-
-    // If true, display the last clock change.
-    let need_clockchange = all || matches.is_present(options::TIME);
-
-    // If true, display the current runlevel.
-    let need_runlevel = all || matches.is_present(options::RUNLEVEL);
-
-    let use_defaults = !(all
-        || need_boottime
-        || need_deadprocs
-        || need_login
-        || need_initspawn
-        || need_runlevel
-        || need_clockchange
-        || matches.is_present(options::USERS));
-
-    // If true, display user processes.
-    let need_users = all || matches.is_present(options::USERS) || use_defaults;
-
-    // If true, display the hours:minutes since each user has touched
-    // the keyboard, or "." if within the last minute, or "old" if
-    // not within the last day.
-    let include_idle = need_deadprocs || need_login || need_runlevel || need_users;
-
-    // If true, display process termination & exit status.
-    let include_exit = need_deadprocs;
-
-    // If true, display only name, line, and time fields.
-    let short_output = !include_exit && use_defaults;
-
-    // If true, display info only for the controlling tty.
-    let my_line_only = matches.is_present(options::ONLY_HOSTNAME_USER) || files.len() == 2;
-
-    let mut who = Who {
-        do_lookup,
-        short_list,
-        short_output,
-        include_idle,
-        include_heading,
-        include_mesg,
-        include_exit,
-        need_boottime,
-        need_deadprocs,
-        need_login,
-        need_initspawn,
-        need_clockchange,
-        need_runlevel,
-        need_users,
-        my_line_only,
-        args: files,
-    };
-
-    who.exec()
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-        .arg(
-            Arg::new(options::ALL)
-                .long(options::ALL)
-                .short('a')
-                .help("same as -b -d --login -p -r -t -T -u"),
-        )
-        .arg(
-            Arg::new(options::BOOT)
-                .long(options::BOOT)
-                .short('b')
-                .help("time of last system boot"),
-        )
-        .arg(
-            Arg::new(options::DEAD)
-                .long(options::DEAD)
-                .short('d')
-                .help("print dead processes"),
-        )
-        .arg(
-            Arg::new(options::HEADING)
-                .long(options::HEADING)
-                .short('H')
-                .help("print line of column headings"),
-        )
-        .arg(
-            Arg::new(options::LOGIN)
-                .long(options::LOGIN)
-                .short('l')
-                .help("print system login processes"),
-        )
-        .arg(
-            Arg::new(options::LOOKUP)
-                .long(options::LOOKUP)
-                .help("attempt to canonicalize hostnames via DNS"),
-        )
-        .arg(
-            Arg::new(options::ONLY_HOSTNAME_USER)
-                .short('m')
-                .help("only hostname and user associated with stdin"),
-        )
-        .arg(
-            Arg::new(options::PROCESS)
-                .long(options::PROCESS)
-                .short('p')
-                .help("print active processes spawned by init"),
-        )
-        .arg(
-            Arg::new(options::COUNT)
-                .long(options::COUNT)
-                .short('q')
-                .help("all login names and number of users logged on"),
-        )
-        .arg(
-            Arg::new(options::RUNLEVEL)
-                .long(options::RUNLEVEL)
-                .short('r')
-                .help(RUNLEVEL_HELP),
-        )
-        .arg(
-            Arg::new(options::SHORT)
-                .long(options::SHORT)
-                .short('s')
-                .help("print only name, line, and time (default)"),
-        )
-        .arg(
-            Arg::new(options::TIME)
-                .long(options::TIME)
-                .short('t')
-                .help("print last system clock change"),
-        )
-        .arg(
-            Arg::new(options::USERS)
-                .long(options::USERS)
-                .short('u')
-                .help("list users logged in"),
-        )
-        .arg(
-            Arg::new(options::MESG)
-                .long(options::MESG)
-                .short('T')
-                // .visible_short_alias('w')  // TODO: requires clap "3.0.0-beta.2"
-                .visible_aliases(&["message", "writable"])
-                .help("add user's message status as +, - or ?"),
-        )
-        .arg(
-            Arg::new("w") // work around for `Arg::visible_short_alias`
-                .short('w')
-                .help("same as -T"),
-        )
-        .arg(
-            Arg::new(options::FILE)
-                .takes_value(true)
-                .min_values(1)
-                .max_values(2),
-        )
-}
-
-struct Who {
-    do_lookup: bool,
-    short_list: bool,
-    short_output: bool,
-    include_idle: bool,
-    include_heading: bool,
-    include_mesg: bool,
-    include_exit: bool,
-    need_boottime: bool,
-    need_deadprocs: bool,
-    need_login: bool,
-    need_initspawn: bool,
-    need_clockchange: bool,
-    need_runlevel: bool,
-    need_users: bool,
-    my_line_only: bool,
-    args: Vec<String>,
-}
-
-fn idle_string<'a>(when: i64, boottime: i64) -> Cow<'a, str> {
-    thread_local! {
-        static NOW: time::Tm = time::now()
-    }
-    NOW.with(|n| {
-        let now = n.to_timespec().sec;
-        if boottime < when && now - 24 * 3600 < when && when <= now {
-            let seconds_idle = now - when;
-            if seconds_idle < 60 {
-                "  .  ".into()
-            } else {
-                format!(
-                    "{:02}:{:02}",
-                    seconds_idle / 3600,
-                    (seconds_idle % 3600) / 60
-                )
-                .into()
-            }
-        } else {
-            " old ".into()
-        }
-    })
-}
-
-fn time_string(ut: &Utmpx) -> String {
-    time::strftime("%b %e %H:%M", &ut.login_time()).unwrap() // LC_ALL=C
-}
-
-#[inline]
-fn current_tty() -> String {
-    unsafe {
-        let res = ttyname(STDIN_FILENO);
-        if !res.is_null() {
-            CStr::from_ptr(res as *const _)
-                .to_string_lossy()
-                .trim_start_matches("/dev/")
-                .to_owned()
-        } else {
-            "".to_owned()
-        }
-    }
-}
-
-impl Who {
-    fn exec(&mut self) -> UResult<()> {
-        let run_level_chk = |_record: i16| {
-            #[cfg(not(target_os = "linux"))]
-            return false;
-
-            #[cfg(target_os = "linux")]
-            return _record == utmpx::RUN_LVL;
-        };
-
-        let f = if self.args.len() == 1 {
-            self.args[0].as_ref()
-        } else {
-            utmpx::DEFAULT_FILE
-        };
-        if self.short_list {
-            let users = Utmpx::iter_all_records_from(f)
-                .filter(Utmpx::is_user_process)
-                .map(|ut| ut.user())
-                .collect::<Vec<_>>();
-            println!("{}", users.join(" "));
-            println!("# users={}", users.len());
-        } else {
-            let records = Utmpx::iter_all_records_from(f).peekable();
-
-            if self.include_heading {
-                self.print_heading()
-            }
-            let cur_tty = if self.my_line_only {
-                current_tty()
-            } else {
-                "".to_owned()
-            };
-
-            for ut in records {
-                if !self.my_line_only || cur_tty == ut.tty_device() {
-                    if self.need_users && ut.is_user_process() {
-                        self.print_user(&ut)?;
-                    } else if self.need_runlevel && run_level_chk(ut.record_type()) {
-                        if cfg!(target_os = "linux") {
-                            self.print_runlevel(&ut);
-                        }
-                    } else if self.need_boottime && ut.record_type() == utmpx::BOOT_TIME {
-                        self.print_boottime(&ut);
-                    } else if self.need_clockchange && ut.record_type() == utmpx::NEW_TIME {
-                        self.print_clockchange(&ut);
-                    } else if self.need_initspawn && ut.record_type() == utmpx::INIT_PROCESS {
-                        self.print_initspawn(&ut);
-                    } else if self.need_login && ut.record_type() == utmpx::LOGIN_PROCESS {
-                        self.print_login(&ut);
-                    } else if self.need_deadprocs && ut.record_type() == utmpx::DEAD_PROCESS {
-                        self.print_deadprocs(&ut);
-                    }
-                }
-
-                if ut.record_type() == utmpx::BOOT_TIME {}
-            }
-        }
-        Ok(())
-    }
-
-    #[inline]
-    fn print_runlevel(&self, ut: &Utmpx) {
-        let last = (ut.pid() / 256) as u8 as char;
-        let curr = (ut.pid() % 256) as u8 as char;
-        let runlvline = format!("run-level {}", curr);
-        let comment = format!("last={}", if last == 'N' { 'S' } else { 'N' });
-
-        self.print_line(
-            "",
-            ' ',
-            &runlvline,
-            &time_string(ut),
-            "",
-            "",
-            if !last.is_control() { &comment } else { "" },
-            "",
-        );
-    }
-
-    #[inline]
-    fn print_clockchange(&self, ut: &Utmpx) {
-        self.print_line("", ' ', "clock change", &time_string(ut), "", "", "", "");
-    }
-
-    #[inline]
-    fn print_login(&self, ut: &Utmpx) {
-        let comment = format!("id={}", ut.terminal_suffix());
-        let pidstr = format!("{}", ut.pid());
-        self.print_line(
-            "LOGIN",
-            ' ',
-            &ut.tty_device(),
-            &time_string(ut),
-            "",
-            &pidstr,
-            &comment,
-            "",
-        );
-    }
-
-    #[inline]
-    fn print_deadprocs(&self, ut: &Utmpx) {
-        let comment = format!("id={}", ut.terminal_suffix());
-        let pidstr = format!("{}", ut.pid());
-        let e = ut.exit_status();
-        let exitstr = format!("term={} exit={}", e.0, e.1);
-        self.print_line(
-            "",
-            ' ',
-            &ut.tty_device(),
-            &time_string(ut),
-            "",
-            &pidstr,
-            &comment,
-            &exitstr,
-        );
-    }
-
-    #[inline]
-    fn print_initspawn(&self, ut: &Utmpx) {
-        let comment = format!("id={}", ut.terminal_suffix());
-        let pidstr = format!("{}", ut.pid());
-        self.print_line(
-            "",
-            ' ',
-            &ut.tty_device(),
-            &time_string(ut),
-            "",
-            &pidstr,
-            &comment,
-            "",
-        );
-    }
-
-    #[inline]
-    fn print_boottime(&self, ut: &Utmpx) {
-        self.print_line("", ' ', "system boot", &time_string(ut), "", "", "", "");
-    }
-
-    fn print_user(&self, ut: &Utmpx) -> UResult<()> {
-        let mut p = PathBuf::from("/dev");
-        p.push(ut.tty_device().as_str());
-        let mesg;
-        let last_change;
-        match p.metadata() {
-            Ok(meta) => {
-                mesg = if meta.mode() & (S_IWGRP as u32) != 0 {
-                    '+'
-                } else {
-                    '-'
-                };
-                last_change = meta.atime();
-            }
-            _ => {
-                mesg = '?';
-                last_change = 0;
-            }
-        }
-
-        let idle = if last_change != 0 {
-            idle_string(last_change, 0)
-        } else {
-            "  ?".into()
-        };
-
-        let s = if self.do_lookup {
-            ut.canon_host().map_err_context(|| {
-                let host = ut.host();
-                format!(
-                    "failed to canonicalize {}",
-                    host.split(':').next().unwrap_or(&host).quote()
-                )
-            })?
-        } else {
-            ut.host()
-        };
-        let hoststr = if s.is_empty() { s } else { format!("({})", s) };
-
-        self.print_line(
-            ut.user().as_ref(),
-            mesg,
-            ut.tty_device().as_ref(),
-            time_string(ut).as_str(),
-            idle.as_ref(),
-            format!("{}", ut.pid()).as_str(),
-            hoststr.as_str(),
-            "",
-        );
-
-        Ok(())
-    }
-
-    #[allow(clippy::too_many_arguments)]
-    fn print_line(
-        &self,
-        user: &str,
-        state: char,
-        line: &str,
-        time: &str,
-        idle: &str,
-        pid: &str,
-        comment: &str,
-        exit: &str,
-    ) {
-        let mut buf = String::with_capacity(64);
-        let msg = vec![' ', state].into_iter().collect::<String>();
-
-        buf.push_str(&format!("{:<8}", user));
-        if self.include_mesg {
-            buf.push_str(&msg);
-        }
-        buf.push_str(&format!(" {:<12}", line));
-        // "%b %e %H:%M" (LC_ALL=C)
-        let time_size = 3 + 2 + 2 + 1 + 2;
-        buf.push_str(&format!(" {:<1$}", time, time_size));
-
-        if !self.short_output {
-            if self.include_idle {
-                buf.push_str(&format!(" {:<6}", idle));
-            }
-            buf.push_str(&format!(" {:>10}", pid));
-        }
-        buf.push_str(&format!(" {:<8}", comment));
-        if self.include_exit {
-            buf.push_str(&format!(" {:<12}", exit));
-        }
-        println!("{}", buf.trim_end());
-    }
-
-    #[inline]
-    fn print_heading(&self) {
-        self.print_line(
-            "NAME", ' ', "LINE", "TIME", "IDLE", "PID", "COMMENT", "EXIT",
-        );
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_whoami/platform/mod.rs.html b/src/uu_whoami/platform/mod.rs.html deleted file mode 100644 index f07a11f9e..000000000 --- a/src/uu_whoami/platform/mod.rs.html +++ /dev/null @@ -1,48 +0,0 @@ -mod.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-
/*
- * This file is part of the uutils coreutils package.
- *
- * (c) Jordi Boggiano <j.boggiano@seld.be>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-// spell-checker:ignore (ToDO) getusername
-
-#[cfg(unix)]
-pub use self::unix::get_username;
-
-#[cfg(windows)]
-pub use self::windows::get_username;
-
-#[cfg(unix)]
-mod unix;
-
-#[cfg(windows)]
-mod windows;
-
-
- \ No newline at end of file diff --git a/src/uu_whoami/platform/unix.rs.html b/src/uu_whoami/platform/unix.rs.html deleted file mode 100644 index 8f16ec0a9..000000000 --- a/src/uu_whoami/platform/unix.rs.html +++ /dev/null @@ -1,46 +0,0 @@ -unix.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-
/*
- * This file is part of the uutils coreutils package.
- *
- * (c) Jordi Boggiano <j.boggiano@seld.be>
- * (c) Jian Zeng <anonymousknight96 AT gmail.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-use std::ffi::OsString;
-use std::io;
-
-use uucore::entries::uid2usr;
-
-pub fn get_username() -> io::Result<OsString> {
-    // SAFETY: getuid() does nothing with memory and is always successful.
-    let uid = unsafe { libc::geteuid() };
-    // uid2usr should arguably return an OsString but currently doesn't
-    uid2usr(uid).map(Into::into)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_whoami/whoami.rs.html b/src/uu_whoami/whoami.rs.html deleted file mode 100644 index 918708c6c..000000000 --- a/src/uu_whoami/whoami.rs.html +++ /dev/null @@ -1,72 +0,0 @@ -whoami.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-/* last synced with: whoami (GNU coreutils) 8.21 */
-
-#[macro_use]
-extern crate clap;
-
-use clap::App;
-
-use uucore::display::println_verbatim;
-use uucore::error::{FromIo, UResult};
-
-mod platform;
-
-static ABOUT: &str = "Print the current username.";
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    uu_app().get_matches_from(args);
-    let username = platform::get_username().map_err_context(|| "failed to get username".into())?;
-    println_verbatim(&username).map_err_context(|| "failed to print username".into())?;
-    Ok(())
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    App::new(uucore::util_name())
-        .version(crate_version!())
-        .about(ABOUT)
-}
-
-
- \ No newline at end of file diff --git a/src/uu_yes/splice.rs.html b/src/uu_yes/splice.rs.html deleted file mode 100644 index 4ee377f4e..000000000 --- a/src/uu_yes/splice.rs.html +++ /dev/null @@ -1,138 +0,0 @@ -splice.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-
//! On Linux we can use vmsplice() to write data more efficiently.
-//!
-//! This does not always work. We're not allowed to splice to some targets,
-//! and on some systems (notably WSL 1) it isn't supported at all.
-//!
-//! If we get an error code that suggests splicing isn't supported then we
-//! tell that to the caller so it can fall back to a robust naïve method. If
-//! we get another kind of error we bubble it up as normal.
-//!
-//! vmsplice() can only splice into a pipe, so if the output is not a pipe
-//! we make our own and use splice() to bridge the gap from the pipe to the
-//! output.
-//!
-//! We assume that an "unsupported" error will only ever happen before any
-//! data was successfully written to the output. That way we don't have to
-//! make any effort to rescue data from the pipe if splice() fails, we can
-//! just fall back and start over from the beginning.
-
-use std::{io, os::unix::io::AsRawFd};
-
-use nix::{errno::Errno, libc::S_IFIFO, sys::stat::fstat};
-
-use uucore::pipes::{pipe, splice_exact, vmsplice};
-
-pub(crate) fn splice_data(bytes: &[u8], out: &impl AsRawFd) -> Result<()> {
-    let is_pipe = fstat(out.as_raw_fd())?.st_mode & S_IFIFO != 0;
-
-    if is_pipe {
-        loop {
-            let mut bytes = bytes;
-            while !bytes.is_empty() {
-                let len = vmsplice(out, bytes).map_err(maybe_unsupported)?;
-                bytes = &bytes[len..];
-            }
-        }
-    } else {
-        let (read, write) = pipe()?;
-        loop {
-            let mut bytes = bytes;
-            while !bytes.is_empty() {
-                let len = vmsplice(&write, bytes).map_err(maybe_unsupported)?;
-                splice_exact(&read, out, len).map_err(maybe_unsupported)?;
-                bytes = &bytes[len..];
-            }
-        }
-    }
-}
-
-pub(crate) enum Error {
-    Unsupported,
-    Io(io::Error),
-}
-
-type Result<T> = std::result::Result<T, Error>;
-
-impl From<nix::Error> for Error {
-    fn from(error: nix::Error) -> Self {
-        Error::Io(io::Error::from_raw_os_error(error as i32))
-    }
-}
-
-fn maybe_unsupported(error: nix::Error) -> Error {
-    match error {
-        Errno::EINVAL | Errno::ENOSYS | Errno::EBADF => Error::Unsupported,
-        _ => error.into(),
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uu_yes/yes.rs.html b/src/uu_yes/yes.rs.html deleted file mode 100644 index 3928c30a5..000000000 --- a/src/uu_yes/yes.rs.html +++ /dev/null @@ -1,170 +0,0 @@ -yes.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * (c) Jordi Boggiano <j.boggiano@seld.be>
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-/* last synced with: yes (GNU coreutils) 8.13 */
-
-use std::borrow::Cow;
-use std::io::{self, Write};
-
-#[macro_use]
-extern crate clap;
-
-use clap::{App, Arg};
-use uucore::error::{UResult, USimpleError};
-
-#[cfg(any(target_os = "linux", target_os = "android"))]
-mod splice;
-
-// it's possible that using a smaller or larger buffer might provide better performance on some
-// systems, but honestly this is good enough
-const BUF_SIZE: usize = 16 * 1024;
-
-#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    let matches = uu_app().get_matches_from(args);
-
-    let string = if let Some(values) = matches.values_of("STRING") {
-        let mut result = values.fold(String::new(), |res, s| res + s + " ");
-        result.pop();
-        result.push('\n');
-        Cow::from(result)
-    } else {
-        Cow::from("y\n")
-    };
-
-    let mut buffer = [0; BUF_SIZE];
-    let bytes = prepare_buffer(&string, &mut buffer);
-
-    match exec(bytes) {
-        Ok(()) => Ok(()),
-        Err(err) if err.kind() == io::ErrorKind::BrokenPipe => Ok(()),
-        Err(err) => Err(USimpleError::new(1, format!("standard output: {}", err))),
-    }
-}
-
-pub fn uu_app<'a>() -> App<'a> {
-    app_from_crate!().arg(Arg::new("STRING").index(1).multiple_occurrences(true))
-}
-
-fn prepare_buffer<'a>(input: &'a str, buffer: &'a mut [u8; BUF_SIZE]) -> &'a [u8] {
-    if input.len() < BUF_SIZE / 2 {
-        let mut size = 0;
-        while size < BUF_SIZE - input.len() {
-            let (_, right) = buffer.split_at_mut(size);
-            right[..input.len()].copy_from_slice(input.as_bytes());
-            size += input.len();
-        }
-        &buffer[..size]
-    } else {
-        input.as_bytes()
-    }
-}
-
-pub fn exec(bytes: &[u8]) -> io::Result<()> {
-    let stdout = io::stdout();
-    let mut stdout = stdout.lock();
-
-    #[cfg(any(target_os = "linux", target_os = "android"))]
-    {
-        match splice::splice_data(bytes, &stdout) {
-            Ok(_) => return Ok(()),
-            Err(splice::Error::Io(err)) => return Err(err),
-            Err(splice::Error::Unsupported) => (),
-        }
-    }
-
-    loop {
-        stdout.write_all(bytes)?;
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features.rs.html b/src/uucore/features.rs.html deleted file mode 100644 index a163e1c5a..000000000 --- a/src/uucore/features.rs.html +++ /dev/null @@ -1,90 +0,0 @@ -features.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-
// features ~ feature-gated modules (core/bundler file)
-
-#[cfg(feature = "encoding")]
-pub mod encoding;
-#[cfg(feature = "fs")]
-pub mod fs;
-#[cfg(feature = "fsext")]
-pub mod fsext;
-#[cfg(feature = "memo")]
-pub mod memo;
-#[cfg(feature = "ringbuffer")]
-pub mod ringbuffer;
-#[cfg(feature = "memo")]
-mod tokenize;
-
-// * (platform-specific) feature-gated modules
-// ** non-windows (i.e. Unix + Fuchsia)
-#[cfg(all(not(windows), feature = "mode"))]
-pub mod mode;
-
-// ** unix-only
-#[cfg(all(unix, feature = "entries"))]
-pub mod entries;
-#[cfg(all(unix, feature = "perms"))]
-pub mod perms;
-#[cfg(all(unix, feature = "pipes"))]
-pub mod pipes;
-#[cfg(all(unix, feature = "process"))]
-pub mod process;
-
-#[cfg(all(unix, not(target_os = "fuchsia"), feature = "signals"))]
-pub mod signals;
-#[cfg(all(
-    unix,
-    not(target_os = "fuchsia"),
-    not(target_os = "redox"),
-    not(target_env = "musl"),
-    feature = "utmpx"
-))]
-pub mod utmpx;
-// ** windows-only
-#[cfg(all(windows, feature = "wide"))]
-pub mod wide;
-
-
- \ No newline at end of file diff --git a/src/uucore/features/encoding.rs.html b/src/uucore/features/encoding.rs.html deleted file mode 100644 index a18425110..000000000 --- a/src/uucore/features/encoding.rs.html +++ /dev/null @@ -1,362 +0,0 @@ -encoding.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (strings) ABCDEFGHIJKLMNOPQRSTUVWXYZ ABCDEFGHIJKLMNOPQRSTUV
-// spell-checker:ignore (encodings) lsbf msbf hexupper
-
-use data_encoding::{self, BASE32, BASE64};
-
-use std::io::{self, Read, Write};
-
-use data_encoding::{Encoding, BASE32HEX, BASE64URL, HEXUPPER};
-use data_encoding_macro::new_encoding;
-#[cfg(feature = "thiserror")]
-use thiserror::Error;
-
-#[derive(Debug, Error)]
-pub enum DecodeError {
-    #[error("{}", _0)]
-    Decode(#[from] data_encoding::DecodeError),
-    #[error("{}", _0)]
-    DecodeZ85(#[from] z85::DecodeError),
-    #[error("{}", _0)]
-    Io(#[from] io::Error),
-}
-
-pub enum EncodeError {
-    Z85InputLenNotMultipleOf4,
-}
-
-pub type DecodeResult = Result<Vec<u8>, DecodeError>;
-
-#[derive(Clone, Copy)]
-pub enum Format {
-    Base64,
-    Base64Url,
-    Base32,
-    Base32Hex,
-    Base16,
-    Base2Lsbf,
-    Base2Msbf,
-    Z85,
-}
-use self::Format::*;
-
-const BASE2LSBF: Encoding = new_encoding! {
-    symbols: "01",
-    bit_order: LeastSignificantFirst,
-};
-const BASE2MSBF: Encoding = new_encoding! {
-    symbols: "01",
-    bit_order: MostSignificantFirst,
-};
-
-pub fn encode(f: Format, input: &[u8]) -> Result<String, EncodeError> {
-    Ok(match f {
-        Base32 => BASE32.encode(input),
-        Base64 => BASE64.encode(input),
-        Base64Url => BASE64URL.encode(input),
-        Base32Hex => BASE32HEX.encode(input),
-        Base16 => HEXUPPER.encode(input),
-        Base2Lsbf => BASE2LSBF.encode(input),
-        Base2Msbf => BASE2MSBF.encode(input),
-        Z85 => {
-            // According to the spec we should not accept inputs whose len is not a multiple of 4.
-            // However, the z85 crate implements a padded encoding and accepts such inputs. We have to manually check for them.
-            if input.len() % 4 != 0 {
-                return Err(EncodeError::Z85InputLenNotMultipleOf4);
-            } else {
-                z85::encode(input)
-            }
-        }
-    })
-}
-
-pub fn decode(f: Format, input: &[u8]) -> DecodeResult {
-    Ok(match f {
-        Base32 => BASE32.decode(input)?,
-        Base64 => BASE64.decode(input)?,
-        Base64Url => BASE64URL.decode(input)?,
-        Base32Hex => BASE32HEX.decode(input)?,
-        Base16 => HEXUPPER.decode(input)?,
-        Base2Lsbf => BASE2LSBF.decode(input)?,
-        Base2Msbf => BASE2MSBF.decode(input)?,
-        Z85 => {
-            // The z85 crate implements a padded encoding by using a leading '#' which is otherwise not allowed.
-            // We manually check for a leading '#' and return an error ourselves.
-            if input.starts_with(&[b'#']) {
-                return Err(z85::DecodeError::InvalidByte(0, b'#').into());
-            } else {
-                z85::decode(input)?
-            }
-        }
-    })
-}
-
-pub struct Data<R: Read> {
-    line_wrap: usize,
-    ignore_garbage: bool,
-    input: R,
-    format: Format,
-    alphabet: &'static [u8],
-}
-
-impl<R: Read> Data<R> {
-    pub fn new(input: R, format: Format) -> Self {
-        Data {
-            line_wrap: 76,
-            ignore_garbage: false,
-            input,
-            format,
-            alphabet: match format {
-                Base32 => b"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567=",
-                Base64 => b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789=+/",
-                Base64Url => b"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789=_-",
-                Base32Hex => b"0123456789ABCDEFGHIJKLMNOPQRSTUV=",
-                Base16 => b"0123456789ABCDEF",
-                Base2Lsbf => b"01",
-                Base2Msbf => b"01",
-                Z85 => b"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ.-:+=^!/*?&<>()[]{}@%$#",
-            },
-        }
-    }
-
-    #[must_use]
-    pub fn line_wrap(mut self, wrap: usize) -> Self {
-        self.line_wrap = wrap;
-        self
-    }
-
-    #[must_use]
-    pub fn ignore_garbage(mut self, ignore: bool) -> Self {
-        self.ignore_garbage = ignore;
-        self
-    }
-
-    pub fn decode(&mut self) -> DecodeResult {
-        let mut buf = vec![];
-        self.input.read_to_end(&mut buf)?;
-        if self.ignore_garbage {
-            buf.retain(|c| self.alphabet.contains(c));
-        } else {
-            buf.retain(|&c| c != b'\r' && c != b'\n');
-        };
-        decode(self.format, &buf)
-    }
-
-    pub fn encode(&mut self) -> Result<String, EncodeError> {
-        let mut buf: Vec<u8> = vec![];
-        self.input.read_to_end(&mut buf).unwrap();
-        encode(self.format, buf.as_slice())
-    }
-}
-
-// NOTE: this will likely be phased out at some point
-pub fn wrap_print<R: Read>(data: &Data<R>, res: String) {
-    let stdout = io::stdout();
-    wrap_write(stdout.lock(), data.line_wrap, res).unwrap();
-}
-
-pub fn wrap_write<W: Write>(mut writer: W, line_wrap: usize, res: String) -> io::Result<()> {
-    use std::cmp::min;
-
-    if line_wrap == 0 {
-        return write!(writer, "{}", res);
-    }
-
-    let mut start = 0;
-    while start < res.len() {
-        let end = min(start + line_wrap, res.len());
-        writeln!(writer, "{}", &res[start..end])?;
-        start = end;
-    }
-
-    Ok(())
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/entries.rs.html b/src/uucore/features/entries.rs.html deleted file mode 100644 index 40def2cba..000000000 --- a/src/uucore/features/entries.rs.html +++ /dev/null @@ -1,760 +0,0 @@ -entries.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (vars) Passwd cstr fnam gecos ngroups egid
-
-//! Get password/group file entry
-//!
-//! # Examples:
-//!
-//! ```
-//! use uucore::entries::{self, Locate};
-//!
-//! let root_group = if cfg!(any(target_os = "linux", target_os = "android")) {
-//!     "root"
-//! } else {
-//!     "wheel"
-//! };
-//!
-//! assert_eq!("root", entries::uid2usr(0).unwrap());
-//! assert_eq!(0, entries::usr2uid("root").unwrap());
-//! assert!(entries::gid2grp(0).is_ok());
-//! assert!(entries::grp2gid(root_group).is_ok());
-//!
-//! assert!(entries::Passwd::locate(0).is_ok());
-//! assert!(entries::Passwd::locate("0").is_ok());
-//! assert!(entries::Passwd::locate("root").is_ok());
-//!
-//! assert!(entries::Group::locate(0).is_ok());
-//! assert!(entries::Group::locate("0").is_ok());
-//! assert!(entries::Group::locate(root_group).is_ok());
-//! ```
-
-#[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-use libc::time_t;
-use libc::{c_char, c_int, gid_t, uid_t};
-#[cfg(not(target_os = "redox"))]
-use libc::{getgrgid, getgrnam, getgroups};
-use libc::{getpwnam, getpwuid, group, passwd};
-
-use std::convert::TryInto;
-use std::ffi::{CStr, CString};
-use std::io::Error as IOError;
-use std::io::ErrorKind;
-use std::io::Result as IOResult;
-use std::ptr;
-use std::sync::Mutex;
-
-use once_cell::sync::Lazy;
-
-extern "C" {
-    /// From: `<https://man7.org/linux/man-pages/man3/getgrouplist.3.html>`
-    /// > The getgrouplist() function scans the group database to obtain
-    /// > the list of groups that user belongs to.
-    fn getgrouplist(
-        name: *const c_char,
-        gid: gid_t,
-        groups: *mut gid_t,
-        ngroups: *mut c_int,
-    ) -> c_int;
-}
-
-/// From: `<https://man7.org/linux/man-pages/man2/getgroups.2.html>`
-/// > getgroups() returns the supplementary group IDs of the calling
-/// > process in list.
-/// > If size is zero, list is not modified, but the total number of
-/// > supplementary group IDs for the process is returned.  This allows
-/// > the caller to determine the size of a dynamically allocated list
-/// > to be used in a further call to getgroups().
-#[cfg(not(target_os = "redox"))]
-pub fn get_groups() -> IOResult<Vec<gid_t>> {
-    let mut groups = Vec::new();
-    loop {
-        let ngroups = match unsafe { getgroups(0, ptr::null_mut()) } {
-            -1 => return Err(IOError::last_os_error()),
-            // Not just optimization; 0 would mess up the next call
-            0 => return Ok(Vec::new()),
-            n => n,
-        };
-
-        // This is a small buffer, so we can afford to zero-initialize it and
-        // use safe Vec operations
-        groups.resize(ngroups.try_into().unwrap(), 0);
-        let res = unsafe { getgroups(ngroups, groups.as_mut_ptr()) };
-        if res == -1 {
-            let err = IOError::last_os_error();
-            if err.raw_os_error() == Some(libc::EINVAL) {
-                // Number of groups changed, retry
-                continue;
-            } else {
-                return Err(err);
-            }
-        } else {
-            groups.truncate(ngroups.try_into().unwrap());
-            return Ok(groups);
-        }
-    }
-}
-
-/// The list of group IDs returned from GNU's `groups` and GNU's `id --groups`
-/// starts with the effective group ID (egid).
-/// This is a wrapper for `get_groups()` to mimic this behavior.
-///
-/// If `arg_id` is `None` (default), `get_groups_gnu` moves the effective
-/// group id (egid) to the first entry in the returned Vector.
-/// If `arg_id` is `Some(x)`, `get_groups_gnu` moves the id with value `x`
-/// to the first entry in the returned Vector. This might be necessary
-/// for `id --groups --real` if `gid` and `egid` are not equal.
-///
-/// From: `<https://www.man7.org/linux/man-pages/man3/getgroups.3p.html>`
-/// > As implied by the definition of supplementary groups, the
-/// > effective group ID may appear in the array returned by
-/// > getgroups() or it may be returned only by getegid().  Duplication
-/// > may exist, but the application needs to call getegid() to be sure
-/// > of getting all of the information. Various implementation
-/// > variations and administrative sequences cause the set of groups
-/// > appearing in the result of getgroups() to vary in order and as to
-/// > whether the effective group ID is included, even when the set of
-/// > groups is the same (in the mathematical sense of ``set''). (The
-/// > history of a process and its parents could affect the details of
-/// > the result.)
-#[cfg(all(unix, not(target_os = "redox"), feature = "process"))]
-pub fn get_groups_gnu(arg_id: Option<u32>) -> IOResult<Vec<gid_t>> {
-    let groups = get_groups()?;
-    let egid = arg_id.unwrap_or_else(crate::features::process::getegid);
-    Ok(sort_groups(groups, egid))
-}
-
-#[cfg(all(unix, feature = "process"))]
-fn sort_groups(mut groups: Vec<gid_t>, egid: gid_t) -> Vec<gid_t> {
-    if let Some(index) = groups.iter().position(|&x| x == egid) {
-        groups[..=index].rotate_right(1);
-    } else {
-        groups.insert(0, egid);
-    }
-    groups
-}
-
-#[derive(Clone, Debug)]
-pub struct Passwd {
-    /// AKA passwd.pw_name
-    pub name: String,
-    /// AKA passwd.pw_uid
-    pub uid: uid_t,
-    /// AKA passwd.pw_gid
-    pub gid: gid_t,
-    /// AKA passwd.pw_gecos
-    pub user_info: String,
-    /// AKA passwd.pw_shell
-    pub user_shell: String,
-    /// AKA passwd.pw_dir
-    pub user_dir: String,
-    /// AKA passwd.pw_passwd
-    pub user_passwd: String,
-    /// AKA passwd.pw_class
-    #[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-    pub user_access_class: String,
-    /// AKA passwd.pw_change
-    #[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-    pub passwd_change_time: time_t,
-    /// AKA passwd.pw_expire
-    #[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-    pub expiration: time_t,
-}
-
-/// SAFETY: ptr must point to a valid C string.
-unsafe fn cstr2string(ptr: *const c_char) -> String {
-    CStr::from_ptr(ptr).to_string_lossy().into_owned()
-}
-
-impl Passwd {
-    /// SAFETY: All the pointed-to strings must be valid and not change while
-    /// the function runs. That means PW_LOCK must be held.
-    unsafe fn from_raw(raw: passwd) -> Self {
-        Passwd {
-            name: cstr2string(raw.pw_name),
-            uid: raw.pw_uid,
-            gid: raw.pw_gid,
-            user_info: cstr2string(raw.pw_gecos),
-            user_shell: cstr2string(raw.pw_shell),
-            user_dir: cstr2string(raw.pw_dir),
-            user_passwd: cstr2string(raw.pw_passwd),
-            #[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-            user_access_class: cstr2string(raw.pw_class),
-            #[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-            passwd_change_time: raw.pw_change,
-            #[cfg(any(target_os = "freebsd", target_vendor = "apple"))]
-            expiration: raw.pw_expire,
-        }
-    }
-
-    /// This is a wrapper function for `libc::getgrouplist`.
-    ///
-    /// From: `<https://man7.org/linux/man-pages/man3/getgrouplist.3.html>`
-    /// > If the number of groups of which user is a member is less than or
-    /// > equal to *ngroups, then the value *ngroups is returned.
-    /// > If the user is a member of more than *ngroups groups, then
-    /// > getgrouplist() returns -1.  In this case, the value returned in
-    /// > *ngroups can be used to resize the buffer passed to a further
-    /// > call getgrouplist().
-    ///
-    /// However, on macOS/darwin (and maybe others?) `getgrouplist` does
-    /// not update `ngroups` if `ngroups` is too small. Therefore, if not
-    /// updated by `getgrouplist`, `ngroups` needs to be increased in a
-    /// loop until `getgrouplist` stops returning -1.
-    pub fn belongs_to(&self) -> Vec<gid_t> {
-        let mut ngroups: c_int = 8;
-        let mut ngroups_old: c_int;
-        let mut groups = vec![0; ngroups.try_into().unwrap()];
-        let name = CString::new(self.name.clone()).unwrap();
-        loop {
-            ngroups_old = ngroups;
-            if unsafe { getgrouplist(name.as_ptr(), self.gid, groups.as_mut_ptr(), &mut ngroups) }
-                == -1
-            {
-                if ngroups == ngroups_old {
-                    ngroups *= 2;
-                }
-                groups.resize(ngroups.try_into().unwrap(), 0);
-            } else {
-                break;
-            }
-        }
-        let ngroups = ngroups.try_into().unwrap();
-        assert!(ngroups <= groups.len());
-        groups.truncate(ngroups);
-        groups
-    }
-}
-
-#[derive(Clone, Debug)]
-pub struct Group {
-    /// AKA group.gr_name
-    pub name: String,
-    /// AKA group.gr_gid
-    pub gid: gid_t,
-}
-
-impl Group {
-    /// SAFETY: gr_name must be valid and not change while
-    /// the function runs. That means PW_LOCK must be held.
-    unsafe fn from_raw(raw: group) -> Self {
-        Group {
-            name: cstr2string(raw.gr_name),
-            gid: raw.gr_gid,
-        }
-    }
-}
-
-/// Fetch desired entry.
-pub trait Locate<K> {
-    fn locate(key: K) -> IOResult<Self>
-    where
-        Self: ::std::marker::Sized;
-}
-
-// These functions are not thread-safe:
-// > The return value may point to a static area, and may be
-// > overwritten by subsequent calls to getpwent(3), getpwnam(),
-// > or getpwuid().
-// This applies not just to the struct but also the strings it points
-// to, so we must copy all the data we want before releasing the lock.
-// (Technically we must also ensure that the raw functions aren't being called
-// anywhere else in the program.)
-static PW_LOCK: Lazy<Mutex<()>> = Lazy::new(|| Mutex::new(()));
-
-macro_rules! f {
-    ($fnam:ident, $fid:ident, $t:ident, $st:ident) => {
-        impl Locate<$t> for $st {
-            fn locate(k: $t) -> IOResult<Self> {
-                let _guard = PW_LOCK.lock();
-                // SAFETY: We're holding PW_LOCK.
-                unsafe {
-                    let data = $fid(k);
-                    if !data.is_null() {
-                        Ok($st::from_raw(ptr::read(data as *const _)))
-                    } else {
-                        // FIXME: Resource limits, signals and I/O failure may
-                        // cause this too. See getpwnam(3).
-                        // errno must be set to zero before the call. We can
-                        // use libc::__errno_location() on some platforms.
-                        // The same applies for the two cases below.
-                        Err(IOError::new(
-                            ErrorKind::NotFound,
-                            format!("No such id: {}", k),
-                        ))
-                    }
-                }
-            }
-        }
-
-        impl<'a> Locate<&'a str> for $st {
-            fn locate(k: &'a str) -> IOResult<Self> {
-                let _guard = PW_LOCK.lock();
-                if let Ok(id) = k.parse::<$t>() {
-                    // SAFETY: We're holding PW_LOCK.
-                    unsafe {
-                        let data = $fid(id);
-                        if !data.is_null() {
-                            Ok($st::from_raw(ptr::read(data as *const _)))
-                        } else {
-                            Err(IOError::new(
-                                ErrorKind::NotFound,
-                                format!("No such id: {}", id),
-                            ))
-                        }
-                    }
-                } else {
-                    // SAFETY: We're holding PW_LOCK.
-                    unsafe {
-                        let data = $fnam(CString::new(k).unwrap().as_ptr());
-                        if !data.is_null() {
-                            Ok($st::from_raw(ptr::read(data as *const _)))
-                        } else {
-                            Err(IOError::new(
-                                ErrorKind::NotFound,
-                                format!("Not found: {}", k),
-                            ))
-                        }
-                    }
-                }
-            }
-        }
-    };
-}
-
-f!(getpwnam, getpwuid, uid_t, Passwd);
-#[cfg(not(target_os = "redox"))]
-f!(getgrnam, getgrgid, gid_t, Group);
-
-#[inline]
-pub fn uid2usr(id: uid_t) -> IOResult<String> {
-    Passwd::locate(id).map(|p| p.name)
-}
-
-#[cfg(not(target_os = "redox"))]
-#[inline]
-pub fn gid2grp(id: gid_t) -> IOResult<String> {
-    Group::locate(id).map(|p| p.name)
-}
-
-#[inline]
-pub fn usr2uid(name: &str) -> IOResult<uid_t> {
-    Passwd::locate(name).map(|p| p.uid)
-}
-
-#[cfg(not(target_os = "redox"))]
-#[inline]
-pub fn grp2gid(name: &str) -> IOResult<gid_t> {
-    Group::locate(name).map(|p| p.gid)
-}
-
-#[cfg(test)]
-mod test {
-    use super::*;
-
-    #[test]
-    fn test_sort_groups() {
-        assert_eq!(sort_groups(vec![1, 2, 3], 4), vec![4, 1, 2, 3]);
-        assert_eq!(sort_groups(vec![1, 2, 3], 3), vec![3, 1, 2]);
-        assert_eq!(sort_groups(vec![1, 2, 3], 2), vec![2, 1, 3]);
-        assert_eq!(sort_groups(vec![1, 2, 3], 1), vec![1, 2, 3]);
-        assert_eq!(sort_groups(vec![1, 2, 3], 0), vec![0, 1, 2, 3]);
-    }
-
-    #[test]
-    fn test_entries_get_groups_gnu() {
-        if let Ok(mut groups) = get_groups() {
-            if let Some(last) = groups.pop() {
-                groups.insert(0, last);
-                assert_eq!(get_groups_gnu(Some(last)).unwrap(), groups);
-            }
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/fs.rs.html b/src/uucore/features/fs.rs.html deleted file mode 100644 index 0872bc665..000000000 --- a/src/uucore/features/fs.rs.html +++ /dev/null @@ -1,1138 +0,0 @@ -fs.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-
// This file is part of the uutils coreutils package.
-//
-// (c) Joseph Crail <jbcrail@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-//! Set of functions to manage files and symlinks
-
-#[cfg(unix)]
-use libc::{
-    mode_t, S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFLNK, S_IFMT, S_IFREG, S_IFSOCK, S_IRGRP,
-    S_IROTH, S_IRUSR, S_ISGID, S_ISUID, S_ISVTX, S_IWGRP, S_IWOTH, S_IWUSR, S_IXGRP, S_IXOTH,
-    S_IXUSR,
-};
-use std::borrow::Cow;
-use std::env;
-use std::fs;
-use std::hash::Hash;
-use std::io::Error as IOError;
-use std::io::Result as IOResult;
-use std::io::{Error, ErrorKind};
-#[cfg(unix)]
-use std::os::unix::{fs::MetadataExt, io::AsRawFd};
-use std::path::{Component, Path, PathBuf};
-#[cfg(target_os = "windows")]
-use winapi_util::AsHandleRef;
-
-#[cfg(unix)]
-#[macro_export]
-macro_rules! has {
-    ($mode:expr, $perm:expr) => {
-        $mode & $perm != 0
-    };
-}
-
-/// Information to uniquely identify a file
-pub struct FileInformation(
-    #[cfg(unix)] nix::sys::stat::FileStat,
-    #[cfg(windows)] winapi_util::file::Information,
-);
-
-impl FileInformation {
-    /// Get information from a currently open file
-    #[cfg(unix)]
-    pub fn from_file(file: &impl AsRawFd) -> Option<Self> {
-        if let Ok(x) = nix::sys::stat::fstat(file.as_raw_fd()) {
-            Some(Self(x))
-        } else {
-            None
-        }
-    }
-
-    /// Get information from a currently open file
-    #[cfg(target_os = "windows")]
-    pub fn from_file(file: &impl AsHandleRef) -> Option<Self> {
-        if let Ok(x) = winapi_util::file::information(file.as_handle_ref()) {
-            Some(Self(x))
-        } else {
-            None
-        }
-    }
-
-    /// Get information for a given path.
-    ///
-    /// If `path` points to a symlink and `dereference` is true, information about
-    /// the link's target will be returned.
-    pub fn from_path(path: impl AsRef<Path>, dereference: bool) -> Option<Self> {
-        #[cfg(unix)]
-        {
-            let stat = if dereference {
-                nix::sys::stat::stat(path.as_ref())
-            } else {
-                nix::sys::stat::lstat(path.as_ref())
-            };
-            if let Ok(stat) = stat {
-                Some(Self(stat))
-            } else {
-                None
-            }
-        }
-        #[cfg(target_os = "windows")]
-        {
-            use std::fs::OpenOptions;
-            use std::os::windows::prelude::*;
-            let mut open_options = OpenOptions::new();
-            if !dereference {
-                open_options.custom_flags(winapi::um::winbase::FILE_FLAG_OPEN_REPARSE_POINT);
-            }
-            open_options
-                .read(true)
-                .open(path.as_ref())
-                .ok()
-                .and_then(|file| Self::from_file(&file))
-        }
-    }
-
-    pub fn file_size(&self) -> u64 {
-        #[cfg(unix)]
-        {
-            use std::convert::TryInto;
-
-            assert!(self.0.st_size >= 0, "File size is negative");
-            self.0.st_size.try_into().unwrap()
-        }
-        #[cfg(target_os = "windows")]
-        {
-            self.0.file_size()
-        }
-    }
-}
-
-#[cfg(unix)]
-impl PartialEq for FileInformation {
-    fn eq(&self, other: &Self) -> bool {
-        self.0.st_dev == other.0.st_dev && self.0.st_ino == other.0.st_ino
-    }
-}
-
-#[cfg(target_os = "windows")]
-impl PartialEq for FileInformation {
-    fn eq(&self, other: &Self) -> bool {
-        self.0.volume_serial_number() == other.0.volume_serial_number()
-            && self.0.file_index() == other.0.file_index()
-    }
-}
-
-impl Eq for FileInformation {}
-
-impl Hash for FileInformation {
-    fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
-        #[cfg(unix)]
-        {
-            self.0.st_dev.hash(state);
-            self.0.st_ino.hash(state);
-        }
-        #[cfg(target_os = "windows")]
-        {
-            self.0.volume_serial_number().hash(state);
-            self.0.file_index().hash(state);
-        }
-    }
-}
-
-pub fn resolve_relative_path(path: &Path) -> Cow<Path> {
-    if path.components().all(|e| e != Component::ParentDir) {
-        return path.into();
-    }
-    let root = Component::RootDir.as_os_str();
-    let mut result = env::current_dir().unwrap_or_else(|_| PathBuf::from(root));
-    for comp in path.components() {
-        match comp {
-            Component::ParentDir => {
-                if let Ok(p) = result.read_link() {
-                    result = p;
-                }
-                result.pop();
-            }
-            Component::CurDir => (),
-            Component::RootDir | Component::Normal(_) | Component::Prefix(_) => {
-                result.push(comp.as_os_str())
-            }
-        }
-    }
-    result.into()
-}
-
-/// Controls how symbolic links should be handled when canonicalizing a path.
-#[derive(Clone, Copy, Debug, Eq, PartialEq)]
-pub enum MissingHandling {
-    /// Return an error if any part of the path is missing.
-    Normal,
-
-    /// Resolve symbolic links, ignoring errors on the final component.
-    Existing,
-
-    /// Resolve symbolic links, ignoring errors on the non-final components.
-    Missing,
-}
-
-/// Controls when symbolic links are resolved
-#[derive(Clone, Copy, Debug, Eq, PartialEq)]
-pub enum ResolveMode {
-    /// Do not resolve any symbolic links.
-    None,
-
-    /// Resolve symlinks as encountered when processing the path
-    Physical,
-
-    /// Resolve '..' elements before symlinks
-    Logical,
-}
-
-// copied from https://github.com/rust-lang/cargo/blob/2e4cfc2b7d43328b207879228a2ca7d427d188bb/src/cargo/util/paths.rs#L65-L90
-// both projects are MIT https://github.com/rust-lang/cargo/blob/master/LICENSE-MIT
-// for std impl progress see rfc https://github.com/rust-lang/rfcs/issues/2208
-// replace this once that lands
-pub fn normalize_path(path: &Path) -> PathBuf {
-    let mut components = path.components().peekable();
-    let mut ret = if let Some(c @ Component::Prefix(..)) = components.peek().cloned() {
-        components.next();
-        PathBuf::from(c.as_os_str())
-    } else {
-        PathBuf::new()
-    };
-
-    for component in components {
-        match component {
-            Component::Prefix(..) => unreachable!(),
-            Component::RootDir => {
-                ret.push(component.as_os_str());
-            }
-            Component::CurDir => {}
-            Component::ParentDir => {
-                ret.pop();
-            }
-            Component::Normal(c) => {
-                ret.push(c);
-            }
-        }
-    }
-    ret
-}
-
-fn resolve<P: AsRef<Path>>(original: P) -> Result<PathBuf, (PathBuf, IOError)> {
-    const MAX_LINKS_FOLLOWED: u32 = 255;
-    let mut followed = 0;
-    let mut result = original.as_ref().to_path_buf();
-
-    let mut first_resolution = None;
-    loop {
-        if followed == MAX_LINKS_FOLLOWED {
-            return Err((
-                // When we hit MAX_LINKS_FOLLOWED we should return the first resolution (that's what GNU does - for whatever reason)
-                first_resolution.unwrap(),
-                Error::new(ErrorKind::InvalidInput, "maximum links followed"),
-            ));
-        }
-
-        match fs::symlink_metadata(&result) {
-            Ok(meta) => {
-                if !meta.file_type().is_symlink() {
-                    break;
-                }
-            }
-            Err(e) => return Err((result, e)),
-        }
-
-        followed += 1;
-        match fs::read_link(&result) {
-            Ok(path) => {
-                result.pop();
-                result.push(path);
-            }
-            Err(e) => return Err((result, e)),
-        }
-
-        if first_resolution.is_none() {
-            first_resolution = Some(result.clone());
-        }
-    }
-    Ok(result)
-}
-
-/// Return the canonical, absolute form of a path.
-///
-/// This function is a generalization of [`std::fs::canonicalize`] that
-/// allows controlling how symbolic links are resolved and how to deal
-/// with missing components. It returns the canonical, absolute form of
-/// a path.
-/// The `miss_mode` parameter controls how missing path elements are handled
-///
-/// * [`MissingHandling::Normal`] makes this function behave like
-///   [`std::fs::canonicalize`], resolving symbolic links and returning
-///   an error if the path does not exist.
-/// * [`MissingHandling::Missing`] makes this function ignore non-final
-///   components of the path that could not be resolved.
-/// * [`MissingHandling::Existing`] makes this function return an error
-///   if the final component of the path does not exist.
-///
-/// The `res_mode` parameter controls how symbolic links are
-/// resolved:
-///
-/// * [`ResolveMode::None`] makes this function not try to resolve
-///   any symbolic links.
-/// * [`ResolveMode::Physical`] makes this function resolve symlinks as they
-///   are encountered
-/// * [`ResolveMode::Logical`] makes this function resolve '..' components
-///   before symlinks
-///
-pub fn canonicalize<P: AsRef<Path>>(
-    original: P,
-    miss_mode: MissingHandling,
-    res_mode: ResolveMode,
-) -> IOResult<PathBuf> {
-    // Create an absolute path
-    let original = original.as_ref();
-    let original = if original.is_absolute() {
-        original.to_path_buf()
-    } else {
-        dunce::canonicalize(env::current_dir().unwrap())
-            .unwrap()
-            .join(original)
-    };
-
-    let mut result = PathBuf::new();
-    let mut parts = vec![];
-
-    // Split path by directory separator; add prefix (Windows-only) and root
-    // directory to final path buffer; add remaining parts to temporary
-    // vector for canonicalization.
-    for part in original.components() {
-        match part {
-            Component::Prefix(_) | Component::RootDir => {
-                result.push(part.as_os_str());
-            }
-            Component::CurDir => (),
-            Component::ParentDir => {
-                if res_mode == ResolveMode::Logical {
-                    parts.pop();
-                } else {
-                    parts.push(part.as_os_str());
-                }
-            }
-            Component::Normal(_) => {
-                parts.push(part.as_os_str());
-            }
-        }
-    }
-
-    // Resolve the symlinks where possible
-    if !parts.is_empty() {
-        for part in parts[..parts.len() - 1].iter() {
-            result.push(part);
-
-            //resolve as we go to handle long relative paths on windows
-            if res_mode == ResolveMode::Physical {
-                result = normalize_path(&result);
-            }
-
-            if res_mode == ResolveMode::None {
-                continue;
-            }
-
-            match resolve(&result) {
-                Err((path, _)) if miss_mode == MissingHandling::Missing => result = path,
-                Err((_, e)) => return Err(e),
-                Ok(path) => {
-                    result = path;
-                }
-            }
-        }
-
-        result.push(parts.last().unwrap());
-
-        if res_mode == ResolveMode::None {
-            return Ok(result);
-        }
-
-        match resolve(&result) {
-            Err((_, e)) if miss_mode == MissingHandling::Existing => {
-                return Err(e);
-            }
-            Ok(path) | Err((path, _)) => {
-                result = path;
-            }
-        }
-        if res_mode == ResolveMode::Physical {
-            result = normalize_path(&result);
-        }
-    }
-    Ok(result)
-}
-
-#[cfg(not(unix))]
-#[allow(unused_variables)]
-pub fn display_permissions(metadata: &fs::Metadata, display_file_type: bool) -> String {
-    if display_file_type {
-        return String::from("----------");
-    }
-    String::from("---------")
-}
-
-#[cfg(unix)]
-pub fn display_permissions(metadata: &fs::Metadata, display_file_type: bool) -> String {
-    let mode: mode_t = metadata.mode() as mode_t;
-    display_permissions_unix(mode, display_file_type)
-}
-
-#[cfg(unix)]
-pub fn display_permissions_unix(mode: mode_t, display_file_type: bool) -> String {
-    let mut result;
-    if display_file_type {
-        result = String::with_capacity(10);
-        result.push(match mode & S_IFMT {
-            S_IFDIR => 'd',
-            S_IFCHR => 'c',
-            S_IFBLK => 'b',
-            S_IFREG => '-',
-            S_IFIFO => 'p',
-            S_IFLNK => 'l',
-            S_IFSOCK => 's',
-            // TODO: Other file types
-            _ => '?',
-        });
-    } else {
-        result = String::with_capacity(9);
-    }
-
-    result.push(if has!(mode, S_IRUSR) { 'r' } else { '-' });
-    result.push(if has!(mode, S_IWUSR) { 'w' } else { '-' });
-    result.push(if has!(mode, S_ISUID as mode_t) {
-        if has!(mode, S_IXUSR) {
-            's'
-        } else {
-            'S'
-        }
-    } else if has!(mode, S_IXUSR) {
-        'x'
-    } else {
-        '-'
-    });
-
-    result.push(if has!(mode, S_IRGRP) { 'r' } else { '-' });
-    result.push(if has!(mode, S_IWGRP) { 'w' } else { '-' });
-    result.push(if has!(mode, S_ISGID as mode_t) {
-        if has!(mode, S_IXGRP) {
-            's'
-        } else {
-            'S'
-        }
-    } else if has!(mode, S_IXGRP) {
-        'x'
-    } else {
-        '-'
-    });
-
-    result.push(if has!(mode, S_IROTH) { 'r' } else { '-' });
-    result.push(if has!(mode, S_IWOTH) { 'w' } else { '-' });
-    result.push(if has!(mode, S_ISVTX as mode_t) {
-        if has!(mode, S_IXOTH) {
-            't'
-        } else {
-            'T'
-        }
-    } else if has!(mode, S_IXOTH) {
-        'x'
-    } else {
-        '-'
-    });
-
-    result
-}
-
-#[cfg(test)]
-mod tests {
-    // Note this useful idiom: importing names from outer (for mod tests) scope.
-    use super::*;
-
-    struct NormalizePathTestCase<'a> {
-        path: &'a str,
-        test: &'a str,
-    }
-
-    const NORMALIZE_PATH_TESTS: [NormalizePathTestCase; 8] = [
-        NormalizePathTestCase {
-            path: "./foo/bar.txt",
-            test: "foo/bar.txt",
-        },
-        NormalizePathTestCase {
-            path: "bar/../foo/bar.txt",
-            test: "foo/bar.txt",
-        },
-        NormalizePathTestCase {
-            path: "foo///bar.txt",
-            test: "foo/bar.txt",
-        },
-        NormalizePathTestCase {
-            path: "foo///bar",
-            test: "foo/bar",
-        },
-        NormalizePathTestCase {
-            path: "foo//./bar",
-            test: "foo/bar",
-        },
-        NormalizePathTestCase {
-            path: "/foo//./bar",
-            test: "/foo/bar",
-        },
-        NormalizePathTestCase {
-            path: r"C:/you/later/",
-            test: "C:/you/later",
-        },
-        NormalizePathTestCase {
-            path: "\\networkShare/a//foo//./bar",
-            test: "\\networkShare/a/foo/bar",
-        },
-    ];
-
-    #[test]
-    fn test_normalize_path() {
-        for test in NORMALIZE_PATH_TESTS.iter() {
-            let path = Path::new(test.path);
-            let normalized = normalize_path(path);
-            assert_eq!(
-                test.test
-                    .replace("/", std::path::MAIN_SEPARATOR.to_string().as_str()),
-                normalized.to_str().expect("Path is not valid utf-8!")
-            );
-        }
-    }
-
-    #[cfg(unix)]
-    #[test]
-    fn test_display_permissions() {
-        // spell-checker:ignore (perms) brwsr drwxr rwxr
-        assert_eq!(
-            "drwxr-xr-x",
-            display_permissions_unix(S_IFDIR | 0o755, true)
-        );
-        assert_eq!(
-            "rwxr-xr-x",
-            display_permissions_unix(S_IFDIR | 0o755, false)
-        );
-        assert_eq!(
-            "-rw-r--r--",
-            display_permissions_unix(S_IFREG | 0o644, true)
-        );
-        assert_eq!(
-            "srw-r-----",
-            display_permissions_unix(S_IFSOCK | 0o640, true)
-        );
-        assert_eq!(
-            "lrw-r-xr-x",
-            display_permissions_unix(S_IFLNK | 0o655, true)
-        );
-        assert_eq!("?rw-r-xr-x", display_permissions_unix(0o655, true));
-
-        assert_eq!(
-            "brwSr-xr-x",
-            display_permissions_unix(S_IFBLK | S_ISUID as mode_t | 0o655, true)
-        );
-        assert_eq!(
-            "brwsr-xr-x",
-            display_permissions_unix(S_IFBLK | S_ISUID as mode_t | 0o755, true)
-        );
-
-        assert_eq!(
-            "prw---sr--",
-            display_permissions_unix(S_IFIFO | S_ISGID as mode_t | 0o614, true)
-        );
-        assert_eq!(
-            "prw---Sr--",
-            display_permissions_unix(S_IFIFO | S_ISGID as mode_t | 0o604, true)
-        );
-
-        assert_eq!(
-            "c---r-xr-t",
-            display_permissions_unix(S_IFCHR | S_ISVTX as mode_t | 0o055, true)
-        );
-        assert_eq!(
-            "c---r-xr-T",
-            display_permissions_unix(S_IFCHR | S_ISVTX as mode_t | 0o054, true)
-        );
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/fsext.rs.html b/src/uucore/features/fsext.rs.html deleted file mode 100644 index cda01b7fe..000000000 --- a/src/uucore/features/fsext.rs.html +++ /dev/null @@ -1,1884 +0,0 @@ -fsext.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-622
-623
-624
-625
-626
-627
-628
-629
-630
-631
-632
-633
-634
-635
-636
-637
-638
-639
-640
-641
-642
-643
-644
-645
-646
-647
-648
-649
-650
-651
-652
-653
-654
-655
-656
-657
-658
-659
-660
-661
-662
-663
-664
-665
-666
-667
-668
-669
-670
-671
-672
-673
-674
-675
-676
-677
-678
-679
-680
-681
-682
-683
-684
-685
-686
-687
-688
-689
-690
-691
-692
-693
-694
-695
-696
-697
-698
-699
-700
-701
-702
-703
-704
-705
-706
-707
-708
-709
-710
-711
-712
-713
-714
-715
-716
-717
-718
-719
-720
-721
-722
-723
-724
-725
-726
-727
-728
-729
-730
-731
-732
-733
-734
-735
-736
-737
-738
-739
-740
-741
-742
-743
-744
-745
-746
-747
-748
-749
-750
-751
-752
-753
-754
-755
-756
-757
-758
-759
-760
-761
-762
-763
-764
-765
-766
-767
-768
-769
-770
-771
-772
-773
-774
-775
-776
-777
-778
-779
-780
-781
-782
-783
-784
-785
-786
-787
-788
-789
-790
-791
-792
-793
-794
-795
-796
-797
-798
-799
-800
-801
-802
-803
-804
-805
-806
-807
-808
-809
-810
-811
-812
-813
-814
-815
-816
-817
-818
-819
-820
-821
-822
-823
-824
-825
-826
-827
-828
-829
-830
-831
-832
-833
-834
-835
-836
-837
-838
-839
-840
-841
-842
-843
-844
-845
-846
-847
-848
-849
-850
-851
-852
-853
-854
-855
-856
-857
-858
-859
-860
-861
-862
-863
-864
-865
-866
-867
-868
-869
-870
-871
-872
-873
-874
-875
-876
-877
-878
-879
-880
-881
-882
-883
-884
-885
-886
-887
-888
-889
-890
-891
-892
-893
-894
-895
-896
-897
-898
-899
-900
-901
-902
-903
-904
-905
-906
-907
-908
-909
-910
-911
-912
-913
-914
-915
-916
-917
-918
-919
-920
-921
-922
-923
-924
-925
-926
-927
-928
-929
-930
-931
-932
-933
-934
-935
-936
-937
-938
-939
-940
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-// (c) Fangxu Hu <framlog@gmail.com>
-// (c) Sylvestre Ledru <sylvestre@debian.org>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-//! Set of functions to manage file systems
-
-// spell-checker:ignore (arch) bitrig ; (fs) cifs smbfs
-
-extern crate time;
-
-pub use crate::*; // import macros from `../../macros.rs`
-
-#[cfg(target_os = "linux")]
-const LINUX_MTAB: &str = "/etc/mtab";
-#[cfg(target_os = "linux")]
-const LINUX_MOUNTINFO: &str = "/proc/self/mountinfo";
-static MOUNT_OPT_BIND: &str = "bind";
-#[cfg(windows)]
-const MAX_PATH: usize = 266;
-#[cfg(not(unix))]
-static EXIT_ERR: i32 = 1;
-
-#[cfg(windows)]
-use std::ffi::OsStr;
-#[cfg(windows)]
-use std::os::windows::ffi::OsStrExt;
-#[cfg(windows)]
-use winapi::shared::minwindef::DWORD;
-#[cfg(windows)]
-use winapi::um::fileapi::GetDiskFreeSpaceW;
-#[cfg(windows)]
-use winapi::um::fileapi::{
-    FindFirstVolumeW, FindNextVolumeW, FindVolumeClose, GetDriveTypeW, GetVolumeInformationW,
-    GetVolumePathNamesForVolumeNameW, QueryDosDeviceW,
-};
-#[cfg(windows)]
-use winapi::um::handleapi::INVALID_HANDLE_VALUE;
-#[cfg(windows)]
-use winapi::um::winbase::DRIVE_REMOTE;
-
-// Warning: the pointer has to be used *immediately* or the Vec
-// it points to will be dropped!
-#[cfg(windows)]
-macro_rules! String2LPWSTR {
-    ($str: expr) => {
-        OsStr::new(&$str)
-            .encode_wide()
-            .chain(Some(0))
-            .collect::<Vec<u16>>()
-            .as_ptr()
-    };
-}
-
-#[cfg(windows)]
-#[allow(non_snake_case)]
-fn LPWSTR2String(buf: &[u16]) -> String {
-    let len = buf.iter().position(|&n| n == 0).unwrap();
-    String::from_utf16(&buf[..len]).unwrap()
-}
-
-use self::time::Timespec;
-#[cfg(unix)]
-use libc::{
-    mode_t, strerror, S_IFBLK, S_IFCHR, S_IFDIR, S_IFIFO, S_IFLNK, S_IFMT, S_IFREG, S_IFSOCK,
-};
-use std::borrow::Cow;
-use std::convert::{AsRef, From};
-#[cfg(unix)]
-use std::ffi::CString;
-use std::io::Error as IOError;
-#[cfg(unix)]
-use std::mem;
-use std::path::Path;
-use std::time::UNIX_EPOCH;
-
-#[cfg(any(
-    target_os = "linux",
-    target_vendor = "apple",
-    target_os = "android",
-    target_os = "freebsd",
-    target_os = "openbsd"
-))]
-pub use libc::statfs as StatFs;
-#[cfg(any(
-    target_os = "netbsd",
-    target_os = "bitrig",
-    target_os = "dragonfly",
-    target_os = "redox"
-))]
-pub use libc::statvfs as StatFs;
-
-#[cfg(any(
-    target_os = "linux",
-    target_vendor = "apple",
-    target_os = "android",
-    target_os = "freebsd",
-    target_os = "openbsd",
-))]
-pub use libc::statfs as statfs_fn;
-#[cfg(any(
-    target_os = "netbsd",
-    target_os = "bitrig",
-    target_os = "dragonfly",
-    target_os = "redox"
-))]
-pub use libc::statvfs as statfs_fn;
-
-pub trait BirthTime {
-    fn pretty_birth(&self) -> String;
-    fn birth(&self) -> String;
-}
-
-use std::fs::Metadata;
-impl BirthTime for Metadata {
-    fn pretty_birth(&self) -> String {
-        self.created()
-            .ok()
-            .and_then(|t| t.duration_since(UNIX_EPOCH).ok())
-            .map(|e| pretty_time(e.as_secs() as i64, i64::from(e.subsec_nanos())))
-            .unwrap_or_else(|| "-".to_owned())
-    }
-
-    fn birth(&self) -> String {
-        self.created()
-            .ok()
-            .and_then(|t| t.duration_since(UNIX_EPOCH).ok())
-            .map(|e| format!("{}", e.as_secs()))
-            .unwrap_or_else(|| "0".to_owned())
-    }
-}
-
-#[derive(Debug, Clone)]
-pub struct MountInfo {
-    // it stores `volume_name` in windows platform and `dev_id` in unix platform
-    pub dev_id: String,
-    pub dev_name: String,
-    pub fs_type: String,
-    pub mount_dir: String,
-    pub mount_option: String, // we only care "bind" option
-    pub mount_root: String,
-    pub remote: bool,
-    pub dummy: bool,
-}
-
-impl MountInfo {
-    fn set_missing_fields(&mut self) {
-        #[cfg(unix)]
-        {
-            use std::os::unix::fs::MetadataExt;
-            // We want to keep the dev_id on Windows
-            // but set dev_id
-            if let Ok(stat) = std::fs::metadata(&self.mount_dir) {
-                // Why do we cast this to i32?
-                self.dev_id = (stat.dev() as i32).to_string()
-            } else {
-                self.dev_id = "".to_string();
-            }
-        }
-        // set MountInfo::dummy
-        // spell-checker:disable
-        match self.fs_type.as_ref() {
-            "autofs" | "proc" | "subfs"
-            /* for Linux 2.6/3.x */
-            | "debugfs" | "devpts" | "fusectl" | "mqueue" | "rpc_pipefs" | "sysfs"
-            /* FreeBSD, Linux 2.4 */
-            | "devfs"
-            /* for NetBSD 3.0 */
-            | "kernfs"
-            /* for Irix 6.5 */
-            | "ignore" => self.dummy = true,
-            _ => self.dummy = self.fs_type == "none"
-                && !self.mount_option.contains(MOUNT_OPT_BIND)
-        }
-        // spell-checker:enable
-        // set MountInfo::remote
-        #[cfg(windows)]
-        {
-            self.remote = DRIVE_REMOTE == unsafe { GetDriveTypeW(String2LPWSTR!(self.mount_root)) };
-        }
-        #[cfg(unix)]
-        {
-            if self.dev_name.find(':').is_some()
-                || (self.dev_name.starts_with("//") && self.fs_type == "smbfs"
-                    || self.fs_type == "cifs")
-                || self.dev_name == "-hosts"
-            {
-                self.remote = true;
-            } else {
-                self.remote = false;
-            }
-        }
-    }
-
-    #[cfg(target_os = "linux")]
-    fn new(file_name: &str, raw: Vec<&str>) -> Option<MountInfo> {
-        match file_name {
-            // spell-checker:ignore (word) noatime
-            // Format: 36 35 98:0 /mnt1 /mnt2 rw,noatime master:1 - ext3 /dev/root rw,errors=continue
-            // "man proc" for more details
-            LINUX_MOUNTINFO => {
-                const FIELDS_OFFSET: usize = 6;
-                let after_fields = raw[FIELDS_OFFSET..].iter().position(|c| *c == "-").unwrap()
-                    + FIELDS_OFFSET
-                    + 1;
-                let mut m = MountInfo {
-                    dev_id: "".to_string(),
-                    dev_name: raw[after_fields + 1].to_string(),
-                    fs_type: raw[after_fields].to_string(),
-                    mount_root: raw[3].to_string(),
-                    mount_dir: raw[4].to_string(),
-                    mount_option: raw[5].to_string(),
-                    remote: false,
-                    dummy: false,
-                };
-                m.set_missing_fields();
-                Some(m)
-            }
-            LINUX_MTAB => {
-                let mut m = MountInfo {
-                    dev_id: "".to_string(),
-                    dev_name: raw[0].to_string(),
-                    fs_type: raw[2].to_string(),
-                    mount_root: "".to_string(),
-                    mount_dir: raw[1].to_string(),
-                    mount_option: raw[3].to_string(),
-                    remote: false,
-                    dummy: false,
-                };
-                m.set_missing_fields();
-                Some(m)
-            }
-            _ => None,
-        }
-    }
-    #[cfg(windows)]
-    fn new(mut volume_name: String) -> Option<MountInfo> {
-        let mut dev_name_buf = [0u16; MAX_PATH];
-        volume_name.pop();
-        unsafe {
-            QueryDosDeviceW(
-                OsStr::new(&volume_name)
-                    .encode_wide()
-                    .chain(Some(0))
-                    .skip(4)
-                    .collect::<Vec<u16>>()
-                    .as_ptr(),
-                dev_name_buf.as_mut_ptr(),
-                dev_name_buf.len() as DWORD,
-            )
-        };
-        volume_name.push('\\');
-        let dev_name = LPWSTR2String(&dev_name_buf);
-
-        let mut mount_root_buf = [0u16; MAX_PATH];
-        let success = unsafe {
-            GetVolumePathNamesForVolumeNameW(
-                String2LPWSTR!(volume_name),
-                mount_root_buf.as_mut_ptr(),
-                mount_root_buf.len() as DWORD,
-                ptr::null_mut(),
-            )
-        };
-        if 0 == success {
-            // TODO: support the case when `GetLastError()` returns `ERROR_MORE_DATA`
-            return None;
-        }
-        let mount_root = LPWSTR2String(&mount_root_buf);
-
-        let mut fs_type_buf = [0u16; MAX_PATH];
-        let success = unsafe {
-            GetVolumeInformationW(
-                String2LPWSTR!(mount_root),
-                ptr::null_mut(),
-                0,
-                ptr::null_mut(),
-                ptr::null_mut(),
-                ptr::null_mut(),
-                fs_type_buf.as_mut_ptr(),
-                fs_type_buf.len() as DWORD,
-            )
-        };
-        let fs_type = if 0 != success {
-            Some(LPWSTR2String(&fs_type_buf))
-        } else {
-            None
-        };
-        let mut mn_info = MountInfo {
-            dev_id: volume_name,
-            dev_name,
-            fs_type: fs_type.unwrap_or_else(|| "".to_string()),
-            mount_root,
-            mount_dir: "".to_string(),
-            mount_option: "".to_string(),
-            remote: false,
-            dummy: false,
-        };
-        mn_info.set_missing_fields();
-        Some(mn_info)
-    }
-}
-
-#[cfg(any(
-    target_vendor = "apple",
-    target_os = "freebsd",
-    target_os = "netbsd",
-    target_os = "openbsd"
-))]
-use std::ffi::CStr;
-#[cfg(any(
-    target_os = "freebsd",
-    target_vendor = "apple",
-    target_os = "netbsd",
-    target_os = "openbsd"
-))]
-impl From<StatFs> for MountInfo {
-    fn from(statfs: StatFs) -> Self {
-        let mut info = MountInfo {
-            dev_id: "".to_string(),
-            dev_name: unsafe {
-                // spell-checker:disable-next-line
-                CStr::from_ptr(&statfs.f_mntfromname[0])
-                    .to_string_lossy()
-                    .into_owned()
-            },
-            fs_type: unsafe {
-                // spell-checker:disable-next-line
-                CStr::from_ptr(&statfs.f_fstypename[0])
-                    .to_string_lossy()
-                    .into_owned()
-            },
-            mount_dir: unsafe {
-                // spell-checker:disable-next-line
-                CStr::from_ptr(&statfs.f_mntonname[0])
-                    .to_string_lossy()
-                    .into_owned()
-            },
-            mount_root: "".to_string(),
-            mount_option: "".to_string(),
-            remote: false,
-            dummy: false,
-        };
-        info.set_missing_fields();
-        info
-    }
-}
-
-#[cfg(any(
-    target_os = "freebsd",
-    target_vendor = "apple",
-    target_os = "netbsd",
-    target_os = "openbsd"
-))]
-use libc::c_int;
-#[cfg(any(
-    target_os = "freebsd",
-    target_vendor = "apple",
-    target_os = "netbsd",
-    target_os = "openbsd"
-))]
-extern "C" {
-    #[cfg(all(target_vendor = "apple", target_arch = "x86_64"))]
-    #[link_name = "getmntinfo$INODE64"] // spell-checker:disable-line
-    fn get_mount_info(mount_buffer_p: *mut *mut StatFs, flags: c_int) -> c_int;
-
-    #[cfg(any(
-        all(target_os = "freebsd"),
-        all(target_os = "netbsd"),
-        all(target_os = "openbsd"),
-        all(target_vendor = "apple", target_arch = "aarch64")
-    ))]
-    #[link_name = "getmntinfo"] // spell-checker:disable-line
-    fn get_mount_info(mount_buffer_p: *mut *mut StatFs, flags: c_int) -> c_int;
-}
-
-#[cfg(target_os = "linux")]
-use std::fs::File;
-#[cfg(target_os = "linux")]
-use std::io::{BufRead, BufReader};
-#[cfg(any(
-    target_vendor = "apple",
-    target_os = "freebsd",
-    target_os = "windows",
-    target_os = "netbsd",
-    target_os = "openbsd"
-))]
-use std::ptr;
-#[cfg(any(
-    target_vendor = "apple",
-    target_os = "freebsd",
-    target_os = "netbsd",
-    target_os = "openbsd"
-))]
-use std::slice;
-/// Read file system list.
-pub fn read_fs_list() -> Vec<MountInfo> {
-    #[cfg(target_os = "linux")]
-    {
-        let (file_name, f) = File::open(LINUX_MOUNTINFO)
-            .map(|f| (LINUX_MOUNTINFO, f))
-            .or_else(|_| File::open(LINUX_MTAB).map(|f| (LINUX_MTAB, f)))
-            .expect("failed to find mount list files");
-        let reader = BufReader::new(f);
-        reader
-            .lines()
-            .filter_map(|line| line.ok())
-            .filter_map(|line| {
-                let raw_data = line.split_whitespace().collect::<Vec<&str>>();
-                MountInfo::new(file_name, raw_data)
-            })
-            .collect::<Vec<_>>()
-    }
-    #[cfg(any(
-        target_os = "freebsd",
-        target_vendor = "apple",
-        target_os = "netbsd",
-        target_os = "openbsd"
-    ))]
-    {
-        let mut mount_buffer_ptr: *mut StatFs = ptr::null_mut();
-        let len = unsafe { get_mount_info(&mut mount_buffer_ptr, 1_i32) };
-        if len < 0 {
-            crash!(1, "get_mount_info() failed");
-        }
-        let mounts = unsafe { slice::from_raw_parts(mount_buffer_ptr, len as usize) };
-        mounts
-            .iter()
-            .map(|m| MountInfo::from(*m))
-            .collect::<Vec<_>>()
-    }
-    #[cfg(windows)]
-    {
-        let mut volume_name_buf = [0u16; MAX_PATH];
-        // As recommended in the MS documentation, retrieve the first volume before the others
-        let find_handle = unsafe {
-            FindFirstVolumeW(volume_name_buf.as_mut_ptr(), volume_name_buf.len() as DWORD)
-        };
-        if INVALID_HANDLE_VALUE == find_handle {
-            crash!(
-                EXIT_ERR,
-                "FindFirstVolumeW failed: {}",
-                IOError::last_os_error()
-            );
-        }
-        let mut mounts = Vec::<MountInfo>::new();
-        loop {
-            let volume_name = LPWSTR2String(&volume_name_buf);
-            if !volume_name.starts_with("\\\\?\\") || !volume_name.ends_with('\\') {
-                show_warning!("A bad path was skipped: {}", volume_name);
-                continue;
-            }
-            if let Some(m) = MountInfo::new(volume_name) {
-                mounts.push(m);
-            }
-            if 0 == unsafe {
-                FindNextVolumeW(
-                    find_handle,
-                    volume_name_buf.as_mut_ptr(),
-                    volume_name_buf.len() as DWORD,
-                )
-            } {
-                let err = IOError::last_os_error();
-                if err.raw_os_error() != Some(winapi::shared::winerror::ERROR_NO_MORE_FILES as i32)
-                {
-                    crash!(EXIT_ERR, "FindNextVolumeW failed: {}", err);
-                }
-                break;
-            }
-        }
-        unsafe {
-            FindVolumeClose(find_handle);
-        }
-        mounts
-    }
-    #[cfg(target_os = "redox")]
-    {
-        // No method to read mounts, yet
-        Vec::new()
-    }
-}
-
-#[derive(Debug, Clone)]
-pub struct FsUsage {
-    pub blocksize: u64,
-    pub blocks: u64,
-    pub bfree: u64,
-    pub bavail: u64,
-    pub bavail_top_bit_set: bool,
-    pub files: u64,
-    pub ffree: u64,
-}
-
-impl FsUsage {
-    #[cfg(unix)]
-    pub fn new(statvfs: StatFs) -> FsUsage {
-        {
-            FsUsage {
-                blocksize: statvfs.f_bsize as u64, // or `statvfs.f_frsize` ?
-                blocks: statvfs.f_blocks as u64,
-                bfree: statvfs.f_bfree as u64,
-                bavail: statvfs.f_bavail as u64,
-                bavail_top_bit_set: ((statvfs.f_bavail as u64) & (1u64.rotate_right(1))) != 0,
-                files: statvfs.f_files as u64,
-                ffree: statvfs.f_ffree as u64,
-            }
-        }
-    }
-    #[cfg(not(unix))]
-    pub fn new(path: &Path) -> FsUsage {
-        let mut root_path = [0u16; MAX_PATH];
-        let success = unsafe {
-            GetVolumePathNamesForVolumeNameW(
-                //path_utf8.as_ptr(),
-                String2LPWSTR!(path.as_os_str()),
-                root_path.as_mut_ptr(),
-                root_path.len() as DWORD,
-                ptr::null_mut(),
-            )
-        };
-        if 0 == success {
-            crash!(
-                EXIT_ERR,
-                "GetVolumePathNamesForVolumeNameW failed: {}",
-                IOError::last_os_error()
-            );
-        }
-
-        let mut sectors_per_cluster = 0;
-        let mut bytes_per_sector = 0;
-        let mut number_of_free_clusters = 0;
-        let mut total_number_of_clusters = 0;
-
-        let success = unsafe {
-            GetDiskFreeSpaceW(
-                String2LPWSTR!(path.as_os_str()),
-                &mut sectors_per_cluster,
-                &mut bytes_per_sector,
-                &mut number_of_free_clusters,
-                &mut total_number_of_clusters,
-            )
-        };
-        if 0 == success {
-            // Fails in case of CD for example
-            // crash!(
-            //     EXIT_ERR,
-            //     "GetDiskFreeSpaceW failed: {}",
-            //     IOError::last_os_error()
-            // );
-        }
-
-        let bytes_per_cluster = sectors_per_cluster as u64 * bytes_per_sector as u64;
-        FsUsage {
-            // f_bsize      File system block size.
-            blocksize: bytes_per_cluster as u64,
-            // f_blocks - Total number of blocks on the file system, in units of f_frsize.
-            // frsize =     Fundamental file system block size (fragment size).
-            blocks: total_number_of_clusters as u64,
-            //  Total number of free blocks.
-            bfree: number_of_free_clusters as u64,
-            //  Total number of free blocks available to non-privileged processes.
-            bavail: 0,
-            bavail_top_bit_set: ((bytes_per_sector as u64) & (1u64.rotate_right(1))) != 0,
-            // Total number of file nodes (inodes) on the file system.
-            files: 0, // Not available on windows
-            // Total number of free file nodes (inodes).
-            ffree: 4096, // Meaningless on Windows
-        }
-    }
-}
-
-#[cfg(unix)]
-pub trait FsMeta {
-    fn fs_type(&self) -> i64;
-    fn io_size(&self) -> u64;
-    fn block_size(&self) -> i64;
-    fn total_blocks(&self) -> u64;
-    fn free_blocks(&self) -> u64;
-    fn avail_blocks(&self) -> u64;
-    fn total_file_nodes(&self) -> u64;
-    fn free_file_nodes(&self) -> u64;
-    fn fsid(&self) -> u64;
-    fn namelen(&self) -> u64;
-}
-
-#[cfg(unix)]
-impl FsMeta for StatFs {
-    fn block_size(&self) -> i64 {
-        self.f_bsize as i64
-    }
-    fn total_blocks(&self) -> u64 {
-        self.f_blocks as u64
-    }
-    fn free_blocks(&self) -> u64 {
-        self.f_bfree as u64
-    }
-    fn avail_blocks(&self) -> u64 {
-        self.f_bavail as u64
-    }
-    fn total_file_nodes(&self) -> u64 {
-        self.f_files as u64
-    }
-    fn free_file_nodes(&self) -> u64 {
-        self.f_ffree as u64
-    }
-    #[cfg(any(target_os = "linux", target_vendor = "apple", target_os = "freebsd"))]
-    fn fs_type(&self) -> i64 {
-        self.f_type as i64
-    }
-    #[cfg(not(any(target_os = "linux", target_vendor = "apple", target_os = "freebsd")))]
-    fn fs_type(&self) -> i64 {
-        // FIXME: statvfs doesn't have an equivalent, so we need to do something else
-        unimplemented!()
-    }
-
-    #[cfg(target_os = "linux")]
-    fn io_size(&self) -> u64 {
-        self.f_frsize as u64
-    }
-    #[cfg(any(target_vendor = "apple", target_os = "freebsd", target_os = "netbsd"))]
-    fn io_size(&self) -> u64 {
-        self.f_iosize as u64
-    }
-    // XXX: dunno if this is right
-    #[cfg(not(any(
-        target_vendor = "apple",
-        target_os = "freebsd",
-        target_os = "linux",
-        target_os = "netbsd"
-    )))]
-    fn io_size(&self) -> u64 {
-        self.f_bsize as u64
-    }
-
-    // Linux, SunOS, HP-UX, 4.4BSD, FreeBSD have a system call statfs() that returns
-    // a struct statfs, containing a fsid_t f_fsid, where fsid_t is defined
-    // as struct { int val[2];  }
-    //
-    // Solaris, Irix and POSIX have a system call statvfs(2) that returns a
-    // struct statvfs, containing an  unsigned  long  f_fsid
-    #[cfg(any(
-        target_vendor = "apple",
-        target_os = "freebsd",
-        target_os = "linux",
-        target_os = "openbsd"
-    ))]
-    fn fsid(&self) -> u64 {
-        let f_fsid: &[u32; 2] =
-            unsafe { &*(&self.f_fsid as *const libc::fsid_t as *const [u32; 2]) };
-        (u64::from(f_fsid[0])) << 32 | u64::from(f_fsid[1])
-    }
-    #[cfg(not(any(
-        target_vendor = "apple",
-        target_os = "freebsd",
-        target_os = "linux",
-        target_os = "openbsd"
-    )))]
-    fn fsid(&self) -> u64 {
-        self.f_fsid as u64
-    }
-
-    #[cfg(target_os = "linux")]
-    fn namelen(&self) -> u64 {
-        self.f_namelen as u64
-    }
-    #[cfg(target_vendor = "apple")]
-    fn namelen(&self) -> u64 {
-        1024
-    }
-    #[cfg(any(target_os = "freebsd", target_os = "netbsd", target_os = "openbsd"))]
-    fn namelen(&self) -> u64 {
-        self.f_namemax as u64 // spell-checker:disable-line
-    }
-    // XXX: should everything just use statvfs?
-    #[cfg(not(any(
-        target_vendor = "apple",
-        target_os = "freebsd",
-        target_os = "linux",
-        target_os = "netbsd",
-        target_os = "openbsd"
-    )))]
-    fn namelen(&self) -> u64 {
-        self.f_namemax as u64 // spell-checker:disable-line
-    }
-}
-
-#[cfg(unix)]
-pub fn statfs<P: AsRef<Path>>(path: P) -> Result<StatFs, String>
-where
-    Vec<u8>: From<P>,
-{
-    match CString::new(path) {
-        Ok(p) => {
-            let mut buffer: StatFs = unsafe { mem::zeroed() };
-            unsafe {
-                match statfs_fn(p.as_ptr(), &mut buffer) {
-                    0 => Ok(buffer),
-                    _ => {
-                        let errno = IOError::last_os_error().raw_os_error().unwrap_or(0);
-                        Err(CString::from_raw(strerror(errno))
-                            .into_string()
-                            .unwrap_or_else(|_| "Unknown Error".to_owned()))
-                    }
-                }
-            }
-        }
-        Err(e) => Err(e.to_string()),
-    }
-}
-
-pub fn pretty_time(sec: i64, nsec: i64) -> String {
-    // sec == seconds since UNIX_EPOCH
-    // nsec == nanoseconds since (UNIX_EPOCH + sec)
-    let tm = time::at(Timespec::new(sec, nsec as i32));
-    let res = time::strftime("%Y-%m-%d %H:%M:%S.%f %z", &tm).unwrap();
-    if res.ends_with(" -0000") {
-        res.replace(" -0000", " +0000")
-    } else {
-        res
-    }
-}
-
-#[cfg(unix)]
-pub fn pretty_filetype<'a>(mode: mode_t, size: u64) -> &'a str {
-    match mode & S_IFMT {
-        S_IFREG => {
-            if size != 0 {
-                "regular file"
-            } else {
-                "regular empty file"
-            }
-        }
-        S_IFDIR => "directory",
-        S_IFLNK => "symbolic link",
-        S_IFCHR => "character special file",
-        S_IFBLK => "block special file",
-        S_IFIFO => "fifo",
-        S_IFSOCK => "socket",
-        // TODO: Other file types
-        // See coreutils/gnulib/lib/file-type.c // spell-checker:disable-line
-        _ => "weird file",
-    }
-}
-
-pub fn pretty_fstype<'a>(fstype: i64) -> Cow<'a, str> {
-    // spell-checker:disable
-    match fstype {
-        0x6163_6673 => "acfs".into(),
-        0xADF5 => "adfs".into(),
-        0xADFF => "affs".into(),
-        0x5346_414F => "afs".into(),
-        0x0904_1934 => "anon-inode FS".into(),
-        0x6175_6673 => "aufs".into(),
-        0x0187 => "autofs".into(),
-        0x4246_5331 => "befs".into(),
-        0x6264_6576 => "bdevfs".into(),
-        0x1BAD_FACE => "bfs".into(),
-        0xCAFE_4A11 => "bpf_fs".into(),
-        0x4249_4E4D => "binfmt_misc".into(),
-        0x9123_683E => "btrfs".into(),
-        0x7372_7279 => "btrfs_test".into(),
-        0x00C3_6400 => "ceph".into(),
-        0x0027_E0EB => "cgroupfs".into(),
-        0xFF53_4D42 => "cifs".into(),
-        0x7375_7245 => "coda".into(),
-        0x012F_F7B7 => "coh".into(),
-        0x6265_6570 => "configfs".into(),
-        0x28CD_3D45 => "cramfs".into(),
-        0x453D_CD28 => "cramfs-wend".into(),
-        0x6462_6720 => "debugfs".into(),
-        0x1373 => "devfs".into(),
-        0x1CD1 => "devpts".into(),
-        0xF15F => "ecryptfs".into(),
-        0xDE5E_81E4 => "efivarfs".into(),
-        0x0041_4A53 => "efs".into(),
-        0x5DF5 => "exofs".into(),
-        0x137D => "ext".into(),
-        0xEF53 => "ext2/ext3".into(),
-        0xEF51 => "ext2".into(),
-        0xF2F5_2010 => "f2fs".into(),
-        0x4006 => "fat".into(),
-        0x1983_0326 => "fhgfs".into(),
-        0x6573_5546 => "fuseblk".into(),
-        0x6573_5543 => "fusectl".into(),
-        0x0BAD_1DEA => "futexfs".into(),
-        0x0116_1970 => "gfs/gfs2".into(),
-        0x4750_4653 => "gpfs".into(),
-        0x4244 => "hfs".into(),
-        0x482B => "hfs+".into(),
-        0x4858 => "hfsx".into(),
-        0x00C0_FFEE => "hostfs".into(),
-        0xF995_E849 => "hpfs".into(),
-        0x9584_58F6 => "hugetlbfs".into(),
-        0x1130_7854 => "inodefs".into(),
-        0x0131_11A8 => "ibrix".into(),
-        0x2BAD_1DEA => "inotifyfs".into(),
-        0x9660 => "isofs".into(),
-        0x4004 => "isofs".into(),
-        0x4000 => "isofs".into(),
-        0x07C0 => "jffs".into(),
-        0x72B6 => "jffs2".into(),
-        0x3153_464A => "jfs".into(),
-        0x6B41_4653 => "k-afs".into(),
-        0xC97E_8168 => "logfs".into(),
-        0x0BD0_0BD0 => "lustre".into(),
-        0x5346_314D => "m1fs".into(),
-        0x137F => "minix".into(),
-        0x138F => "minix (30 char.)".into(),
-        0x2468 => "minix v2".into(),
-        0x2478 => "minix v2 (30 char.)".into(),
-        0x4D5A => "minix3".into(),
-        0x1980_0202 => "mqueue".into(),
-        0x4D44 => "msdos".into(),
-        0x564C => "novell".into(),
-        0x6969 => "nfs".into(),
-        0x6E66_7364 => "nfsd".into(),
-        0x3434 => "nilfs".into(),
-        0x6E73_6673 => "nsfs".into(),
-        0x5346_544E => "ntfs".into(),
-        0x9FA1 => "openprom".into(),
-        0x7461_636F => "ocfs2".into(),
-        0x794C_7630 => "overlayfs".into(),
-        0xAAD7_AAEA => "panfs".into(),
-        0x5049_5045 => "pipefs".into(),
-        0x7C7C_6673 => "prl_fs".into(),
-        0x9FA0 => "proc".into(),
-        0x6165_676C => "pstorefs".into(),
-        0x002F => "qnx4".into(),
-        0x6819_1122 => "qnx6".into(),
-        0x8584_58F6 => "ramfs".into(),
-        0x5265_4973 => "reiserfs".into(),
-        0x7275 => "romfs".into(),
-        0x6759_6969 => "rpc_pipefs".into(),
-        0x7363_6673 => "securityfs".into(),
-        0xF97C_FF8C => "selinux".into(),
-        0x4341_5D53 => "smackfs".into(),
-        0x517B => "smb".into(),
-        0xFE53_4D42 => "smb2".into(),
-        0xBEEF_DEAD => "snfs".into(),
-        0x534F_434B => "sockfs".into(),
-        0x7371_7368 => "squashfs".into(),
-        0x6265_6572 => "sysfs".into(),
-        0x012F_F7B6 => "sysv2".into(),
-        0x012F_F7B5 => "sysv4".into(),
-        0x0102_1994 => "tmpfs".into(),
-        0x7472_6163 => "tracefs".into(),
-        0x2405_1905 => "ubifs".into(),
-        0x1501_3346 => "udf".into(),
-        0x0001_1954 => "ufs".into(),
-        0x5419_0100 => "ufs".into(),
-        0x9FA2 => "usbdevfs".into(),
-        0x0102_1997 => "v9fs".into(),
-        0xBACB_ACBC => "vmhgfs".into(),
-        0xA501_FCF5 => "vxfs".into(),
-        0x565A_4653 => "vzfs".into(),
-        0x5346_4846 => "wslfs".into(),
-        0xABBA_1974 => "xenfs".into(),
-        0x012F_F7B4 => "xenix".into(),
-        0x5846_5342 => "xfs".into(),
-        0x012F_D16D => "xia".into(),
-        0x2FC1_2FC1 => "zfs".into(),
-        other => format!("UNKNOWN ({:#x})", other).into(),
-    }
-    // spell-checker:enable
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    #[test]
-    #[cfg(unix)]
-    fn test_file_type() {
-        assert_eq!("block special file", pretty_filetype(S_IFBLK, 0));
-        assert_eq!("character special file", pretty_filetype(S_IFCHR, 0));
-        assert_eq!("regular file", pretty_filetype(S_IFREG, 1));
-        assert_eq!("regular empty file", pretty_filetype(S_IFREG, 0));
-        assert_eq!("weird file", pretty_filetype(0, 0));
-    }
-
-    #[test]
-    fn test_fs_type() {
-        // spell-checker:disable
-        assert_eq!("ext2/ext3", pretty_fstype(0xEF53));
-        assert_eq!("tmpfs", pretty_fstype(0x01021994));
-        assert_eq!("nfs", pretty_fstype(0x6969));
-        assert_eq!("btrfs", pretty_fstype(0x9123683e));
-        assert_eq!("xfs", pretty_fstype(0x58465342));
-        assert_eq!("zfs", pretty_fstype(0x2FC12FC1));
-        assert_eq!("ntfs", pretty_fstype(0x5346544e));
-        assert_eq!("fat", pretty_fstype(0x4006));
-        assert_eq!("UNKNOWN (0x1234)", pretty_fstype(0x1234));
-        // spell-checker:enable
-    }
-
-    #[test]
-    #[cfg(target_os = "linux")]
-    fn test_mountinfo() {
-        // spell-checker:ignore (word) relatime
-        let info = MountInfo::new(
-            LINUX_MOUNTINFO,
-            "106 109 253:6 / /mnt rw,relatime - xfs /dev/fs0 rw"
-                .split_ascii_whitespace()
-                .collect(),
-        )
-        .unwrap();
-
-        assert_eq!(info.mount_root, "/");
-        assert_eq!(info.mount_dir, "/mnt");
-        assert_eq!(info.mount_option, "rw,relatime");
-        assert_eq!(info.fs_type, "xfs");
-        assert_eq!(info.dev_name, "/dev/fs0");
-
-        // Test parsing with different amounts of optional fields.
-        let info = MountInfo::new(
-            LINUX_MOUNTINFO,
-            "106 109 253:6 / /mnt rw,relatime master:1 - xfs /dev/fs0 rw"
-                .split_ascii_whitespace()
-                .collect(),
-        )
-        .unwrap();
-
-        assert_eq!(info.fs_type, "xfs");
-        assert_eq!(info.dev_name, "/dev/fs0");
-
-        let info = MountInfo::new(
-            LINUX_MOUNTINFO,
-            "106 109 253:6 / /mnt rw,relatime master:1 shared:2 - xfs /dev/fs0 rw"
-                .split_ascii_whitespace()
-                .collect(),
-        )
-        .unwrap();
-
-        assert_eq!(info.fs_type, "xfs");
-        assert_eq!(info.dev_name, "/dev/fs0");
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/memo.rs.html b/src/uucore/features/memo.rs.html deleted file mode 100644 index 003885344..000000000 --- a/src/uucore/features/memo.rs.html +++ /dev/null @@ -1,172 +0,0 @@ -memo.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-82
-83
-84
-
//! Memo runner of printf
-//! Takes a format string and arguments
-//! 1. tokenize format string into tokens, consuming
-//! any subst. arguments along the way.
-//! 2. feeds remaining arguments into function
-//! that prints tokens.
-
-use crate::display::Quotable;
-use crate::features::tokenize::sub::Sub;
-use crate::features::tokenize::token::{Token, Tokenizer};
-use crate::features::tokenize::unescaped_text::UnescapedText;
-use crate::show_warning;
-use itertools::put_back_n;
-use std::iter::Peekable;
-use std::slice::Iter;
-
-pub struct Memo {
-    tokens: Vec<Box<dyn Token>>,
-}
-
-fn warn_excess_args(first_arg: &str) {
-    show_warning!(
-        "ignoring excess arguments, starting with {}",
-        first_arg.quote()
-    );
-}
-
-impl Memo {
-    pub fn new(pf_string: &str, pf_args_it: &mut Peekable<Iter<String>>) -> Memo {
-        let mut pm = Memo { tokens: Vec::new() };
-        let mut tmp_token: Option<Box<dyn Token>>;
-        let mut it = put_back_n(pf_string.chars());
-        let mut has_sub = false;
-        loop {
-            tmp_token = UnescapedText::from_it(&mut it, pf_args_it);
-            if let Some(x) = tmp_token {
-                pm.tokens.push(x);
-            }
-            tmp_token = Sub::from_it(&mut it, pf_args_it);
-            if let Some(x) = tmp_token {
-                if !has_sub {
-                    has_sub = true;
-                }
-                pm.tokens.push(x);
-            }
-            if let Some(x) = it.next() {
-                it.put_back(x);
-            } else {
-                break;
-            }
-        }
-        if !has_sub {
-            let mut drain = false;
-            if let Some(first_arg) = pf_args_it.peek() {
-                warn_excess_args(first_arg);
-                drain = true;
-            }
-            if drain {
-                loop {
-                    // drain remaining args;
-                    if pf_args_it.next().is_none() {
-                        break;
-                    }
-                }
-            }
-        }
-        pm
-    }
-    pub fn apply(&self, pf_args_it: &mut Peekable<Iter<String>>) {
-        for tkn in self.tokens.iter() {
-            tkn.print(pf_args_it);
-        }
-    }
-    pub fn run_all(pf_string: &str, pf_args: &[String]) {
-        let mut arg_it = pf_args.iter().peekable();
-        let pm = Memo::new(pf_string, &mut arg_it);
-        loop {
-            if arg_it.peek().is_none() {
-                break;
-            }
-            pm.apply(&mut arg_it);
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/mode.rs.html b/src/uucore/features/mode.rs.html deleted file mode 100644 index 836392590..000000000 --- a/src/uucore/features/mode.rs.html +++ /dev/null @@ -1,406 +0,0 @@ -mode.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Alex Lyon <arcterus@mail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-//! Set of functions to parse modes
-
-// spell-checker:ignore (vars) fperm srwx
-
-use libc::{mode_t, umask, S_IRGRP, S_IROTH, S_IRUSR, S_IWGRP, S_IWOTH, S_IWUSR};
-
-pub fn parse_numeric(fperm: u32, mut mode: &str, considering_dir: bool) -> Result<u32, String> {
-    let (op, pos) = parse_op(mode).map_or_else(|_| (None, 0), |(op, pos)| (Some(op), pos));
-    mode = mode[pos..].trim();
-    let change = if mode.is_empty() {
-        0
-    } else {
-        u32::from_str_radix(mode, 8).map_err(|e| e.to_string())?
-    };
-    if change > 0o7777 {
-        Err(format!("mode is too large ({} > 7777", change))
-    } else {
-        Ok(match op {
-            Some('+') => fperm | change,
-            Some('-') => fperm & !change,
-            // If this is a directory, we keep the setgid and setuid bits,
-            // unless the mode contains 5 or more octal digits or the mode is "="
-            None if considering_dir && mode.len() < 5 => change | (fperm & (0o4000 | 0o2000)),
-            None | Some('=') => change,
-            Some(_) => unreachable!(),
-        })
-    }
-}
-
-pub fn parse_symbolic(
-    mut fperm: u32,
-    mut mode: &str,
-    umask: u32,
-    considering_dir: bool,
-) -> Result<u32, String> {
-    let (mask, pos) = parse_levels(mode);
-    if pos == mode.len() {
-        return Err(format!("invalid mode ({})", mode));
-    }
-    let respect_umask = pos == 0;
-    mode = &mode[pos..];
-    while !mode.is_empty() {
-        let (op, pos) = parse_op(mode)?;
-        mode = &mode[pos..];
-        let (mut srwx, pos) = parse_change(mode, fperm, considering_dir);
-        if respect_umask {
-            srwx &= !(umask as u32);
-        }
-        mode = &mode[pos..];
-        match op {
-            '+' => fperm |= srwx & mask,
-            '-' => fperm &= !(srwx & mask),
-            '=' => {
-                if considering_dir {
-                    // keep the setgid and setuid bits for directories
-                    srwx |= fperm & (0o4000 | 0o2000);
-                }
-                fperm = (fperm & !mask) | (srwx & mask)
-            }
-            _ => unreachable!(),
-        }
-    }
-    Ok(fperm)
-}
-
-fn parse_levels(mode: &str) -> (u32, usize) {
-    let mut mask = 0;
-    let mut pos = 0;
-    for ch in mode.chars() {
-        mask |= match ch {
-            'u' => 0o4700,
-            'g' => 0o2070,
-            'o' => 0o1007,
-            'a' => 0o7777,
-            _ => break,
-        };
-        pos += 1;
-    }
-    if pos == 0 {
-        mask = 0o7777; // default to 'a'
-    }
-    (mask, pos)
-}
-
-fn parse_op(mode: &str) -> Result<(char, usize), String> {
-    let ch = mode
-        .chars()
-        .next()
-        .ok_or_else(|| "unexpected end of mode".to_owned())?;
-    match ch {
-        '+' | '-' | '=' => Ok((ch, 1)),
-        _ => Err(format!(
-            "invalid operator (expected +, -, or =, but found {})",
-            ch
-        )),
-    }
-}
-
-fn parse_change(mode: &str, fperm: u32, considering_dir: bool) -> (u32, usize) {
-    let mut srwx = 0;
-    let mut pos = 0;
-    for ch in mode.chars() {
-        match ch {
-            'r' => srwx |= 0o444,
-            'w' => srwx |= 0o222,
-            'x' => srwx |= 0o111,
-            'X' => {
-                if considering_dir || (fperm & 0o0111) != 0 {
-                    srwx |= 0o111
-                }
-            }
-            's' => srwx |= 0o4000 | 0o2000,
-            't' => srwx |= 0o1000,
-            'u' => srwx = (fperm & 0o700) | ((fperm >> 3) & 0o070) | ((fperm >> 6) & 0o007),
-            'g' => srwx = ((fperm << 3) & 0o700) | (fperm & 0o070) | ((fperm >> 3) & 0o007),
-            'o' => srwx = ((fperm << 6) & 0o700) | ((fperm << 3) & 0o070) | (fperm & 0o007),
-            _ => break,
-        };
-        pos += 1;
-    }
-    if pos == 0 {
-        srwx = 0;
-    }
-    (srwx, pos)
-}
-
-pub fn parse_mode(mode: &str) -> Result<mode_t, String> {
-    let fperm = S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
-    let arr: &[char] = &['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
-    let result = if mode.contains(arr) {
-        parse_numeric(fperm as u32, mode, true)
-    } else {
-        parse_symbolic(fperm as u32, mode, get_umask(), true)
-    };
-    result.map(|mode| mode as mode_t)
-}
-
-pub fn get_umask() -> u32 {
-    // There's no portable way to read the umask without changing it.
-    // We have to replace it and then quickly set it back, hopefully before
-    // some other thread is affected.
-    // On modern Linux kernels the current umask could instead be read
-    // from /proc/self/status. But that's a lot of work.
-    // SAFETY: umask always succeeds and doesn't operate on memory. Races are
-    // possible but it can't violate Rust's guarantees.
-    let mask = unsafe { umask(0) };
-    unsafe { umask(mask) };
-    mask as u32
-}
-
-// Iterate 'args' and delete the first occurrence
-// of a prefix '-' if it's associated with MODE
-// e.g. "chmod -v -xw -R FILE" -> "chmod -v xw -R FILE"
-pub fn strip_minus_from_mode(args: &mut Vec<String>) -> bool {
-    for arg in args {
-        if arg == "--" {
-            break;
-        }
-        if let Some(arg_stripped) = arg.strip_prefix('-') {
-            if let Some(second) = arg.chars().nth(1) {
-                match second {
-                    'r' | 'w' | 'x' | 'X' | 's' | 't' | 'u' | 'g' | 'o' | '0'..='7' => {
-                        *arg = arg_stripped.to_string();
-                        return true;
-                    }
-                    _ => {}
-                }
-            }
-        }
-    }
-    false
-}
-
-#[cfg(test)]
-mod test {
-
-    #[test]
-    fn symbolic_modes() {
-        assert_eq!(super::parse_mode("u+x").unwrap(), 0o766);
-        assert_eq!(
-            super::parse_mode("+x").unwrap(),
-            if !crate::os::is_wsl_1() { 0o777 } else { 0o776 }
-        );
-        assert_eq!(super::parse_mode("a-w").unwrap(), 0o444);
-        assert_eq!(super::parse_mode("g-r").unwrap(), 0o626);
-    }
-
-    #[test]
-    fn numeric_modes() {
-        assert_eq!(super::parse_mode("644").unwrap(), 0o644);
-        assert_eq!(super::parse_mode("+100").unwrap(), 0o766);
-        assert_eq!(super::parse_mode("-4").unwrap(), 0o662);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/perms.rs.html b/src/uucore/features/perms.rs.html deleted file mode 100644 index 4f7829e36..000000000 --- a/src/uucore/features/perms.rs.html +++ /dev/null @@ -1,1060 +0,0 @@ -perms.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-
// This file is part of the uutils coreutils package.
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-//! Common functions to manage permissions
-
-use crate::display::Quotable;
-use crate::error::strip_errno;
-use crate::error::UResult;
-use crate::error::USimpleError;
-pub use crate::features::entries;
-use crate::fs::resolve_relative_path;
-use crate::show_error;
-use clap::App;
-use clap::Arg;
-use clap::ArgMatches;
-use libc::{self, gid_t, uid_t};
-use walkdir::WalkDir;
-
-use std::io::Error as IOError;
-use std::io::Result as IOResult;
-
-use std::ffi::CString;
-use std::fs::Metadata;
-use std::os::unix::fs::MetadataExt;
-
-use std::os::unix::ffi::OsStrExt;
-use std::path::Path;
-
-/// The various level of verbosity
-#[derive(PartialEq, Clone, Debug)]
-pub enum VerbosityLevel {
-    Silent,
-    Changes,
-    Verbose,
-    Normal,
-}
-#[derive(PartialEq, Clone, Debug)]
-pub struct Verbosity {
-    pub groups_only: bool,
-    pub level: VerbosityLevel,
-}
-
-/// Actually perform the change of owner on a path
-fn chown<P: AsRef<Path>>(path: P, uid: uid_t, gid: gid_t, follow: bool) -> IOResult<()> {
-    let path = path.as_ref();
-    let s = CString::new(path.as_os_str().as_bytes()).unwrap();
-    let ret = unsafe {
-        if follow {
-            libc::chown(s.as_ptr(), uid, gid)
-        } else {
-            libc::lchown(s.as_ptr(), uid, gid)
-        }
-    };
-    if ret == 0 {
-        Ok(())
-    } else {
-        Err(IOError::last_os_error())
-    }
-}
-
-/// Perform the change of owner on a path
-/// with the various options
-/// and error messages management
-pub fn wrap_chown<P: AsRef<Path>>(
-    path: P,
-    meta: &Metadata,
-    dest_uid: Option<u32>,
-    dest_gid: Option<u32>,
-    follow: bool,
-    verbosity: Verbosity,
-) -> Result<String, String> {
-    let dest_uid = dest_uid.unwrap_or_else(|| meta.uid());
-    let dest_gid = dest_gid.unwrap_or_else(|| meta.gid());
-    let path = path.as_ref();
-    let mut out: String = String::new();
-
-    if let Err(e) = chown(path, dest_uid, dest_gid, follow) {
-        match verbosity.level {
-            VerbosityLevel::Silent => (),
-            level => {
-                out = format!(
-                    "changing {} of {}: {}",
-                    if verbosity.groups_only {
-                        "group"
-                    } else {
-                        "ownership"
-                    },
-                    path.quote(),
-                    e
-                );
-                if level == VerbosityLevel::Verbose {
-                    out = if verbosity.groups_only {
-                        format!(
-                            "{}\nfailed to change group of {} from {} to {}",
-                            out,
-                            path.quote(),
-                            entries::gid2grp(meta.gid()).unwrap(),
-                            entries::gid2grp(dest_gid).unwrap()
-                        )
-                    } else {
-                        format!(
-                            "{}\nfailed to change ownership of {} from {}:{} to {}:{}",
-                            out,
-                            path.quote(),
-                            entries::uid2usr(meta.uid()).unwrap(),
-                            entries::gid2grp(meta.gid()).unwrap(),
-                            entries::uid2usr(dest_uid).unwrap(),
-                            entries::gid2grp(dest_gid).unwrap()
-                        )
-                    };
-                };
-            }
-        }
-        return Err(out);
-    } else {
-        let changed = dest_uid != meta.uid() || dest_gid != meta.gid();
-        if changed {
-            match verbosity.level {
-                VerbosityLevel::Changes | VerbosityLevel::Verbose => {
-                    out = if verbosity.groups_only {
-                        format!(
-                            "changed group of {} from {} to {}",
-                            path.quote(),
-                            entries::gid2grp(meta.gid()).unwrap(),
-                            entries::gid2grp(dest_gid).unwrap()
-                        )
-                    } else {
-                        format!(
-                            "changed ownership of {} from {}:{} to {}:{}",
-                            path.quote(),
-                            entries::uid2usr(meta.uid()).unwrap(),
-                            entries::gid2grp(meta.gid()).unwrap(),
-                            entries::uid2usr(dest_uid).unwrap(),
-                            entries::gid2grp(dest_gid).unwrap()
-                        )
-                    };
-                }
-                _ => (),
-            };
-        } else if verbosity.level == VerbosityLevel::Verbose {
-            out = if verbosity.groups_only {
-                format!(
-                    "group of {} retained as {}",
-                    path.quote(),
-                    entries::gid2grp(dest_gid).unwrap_or_default()
-                )
-            } else {
-                format!(
-                    "ownership of {} retained as {}:{}",
-                    path.quote(),
-                    entries::uid2usr(dest_uid).unwrap(),
-                    entries::gid2grp(dest_gid).unwrap()
-                )
-            };
-        }
-    }
-    Ok(out)
-}
-
-pub enum IfFrom {
-    All,
-    User(u32),
-    Group(u32),
-    UserGroup(u32, u32),
-}
-
-#[derive(PartialEq, Eq)]
-pub enum TraverseSymlinks {
-    None,
-    First,
-    All,
-}
-
-pub struct ChownExecutor {
-    pub dest_uid: Option<u32>,
-    pub dest_gid: Option<u32>,
-    pub traverse_symlinks: TraverseSymlinks,
-    pub verbosity: Verbosity,
-    pub filter: IfFrom,
-    pub files: Vec<String>,
-    pub recursive: bool,
-    pub preserve_root: bool,
-    pub dereference: bool,
-}
-
-impl ChownExecutor {
-    pub fn exec(&self) -> UResult<()> {
-        let mut ret = 0;
-        for f in &self.files {
-            ret |= self.traverse(f);
-        }
-        if ret != 0 {
-            return Err(ret.into());
-        }
-        Ok(())
-    }
-
-    fn traverse<P: AsRef<Path>>(&self, root: P) -> i32 {
-        let path = root.as_ref();
-        let meta = match self.obtain_meta(path, self.dereference) {
-            Some(m) => m,
-            _ => return 1,
-        };
-
-        // Prohibit only if:
-        // (--preserve-root and -R present) &&
-        // (
-        //     (argument is not symlink && resolved to be '/') ||
-        //     (argument is symlink && should follow argument && resolved to be '/')
-        // )
-        if self.recursive && self.preserve_root {
-            let may_exist = if self.dereference {
-                path.canonicalize().ok()
-            } else {
-                let real = resolve_relative_path(path);
-                if real.is_dir() {
-                    Some(real.canonicalize().expect("failed to get real path"))
-                } else {
-                    Some(real.into_owned())
-                }
-            };
-
-            if let Some(p) = may_exist {
-                if p.parent().is_none() {
-                    show_error!("it is dangerous to operate recursively on '/'");
-                    show_error!("use --no-preserve-root to override this failsafe");
-                    return 1;
-                }
-            }
-        }
-
-        let ret = if self.matched(meta.uid(), meta.gid()) {
-            match wrap_chown(
-                path,
-                &meta,
-                self.dest_uid,
-                self.dest_gid,
-                self.dereference,
-                self.verbosity.clone(),
-            ) {
-                Ok(n) => {
-                    if !n.is_empty() {
-                        show_error!("{}", n);
-                    }
-                    0
-                }
-                Err(e) => {
-                    if self.verbosity.level != VerbosityLevel::Silent {
-                        show_error!("{}", e);
-                    }
-                    1
-                }
-            }
-        } else {
-            0
-        };
-
-        if !self.recursive {
-            ret
-        } else {
-            ret | self.dive_into(&root)
-        }
-    }
-
-    fn dive_into<P: AsRef<Path>>(&self, root: P) -> i32 {
-        let root = root.as_ref();
-
-        // walkdir always dereferences the root directory, so we have to check it ourselves
-        // TODO: replace with `root.is_symlink()` once it is stable
-        if self.traverse_symlinks == TraverseSymlinks::None
-            && std::fs::symlink_metadata(root)
-                .map(|m| m.file_type().is_symlink())
-                .unwrap_or(false)
-        {
-            return 0;
-        }
-
-        let mut ret = 0;
-        let mut iterator = WalkDir::new(root)
-            .follow_links(self.traverse_symlinks == TraverseSymlinks::All)
-            .min_depth(1)
-            .into_iter();
-        // We can't use a for loop because we need to manipulate the iterator inside the loop.
-        while let Some(entry) = iterator.next() {
-            let entry = match entry {
-                Err(e) => {
-                    ret = 1;
-                    if let Some(path) = e.path() {
-                        show_error!(
-                            "cannot access '{}': {}",
-                            path.display(),
-                            if let Some(error) = e.io_error() {
-                                strip_errno(error)
-                            } else {
-                                "Too many levels of symbolic links".into()
-                            }
-                        )
-                    } else {
-                        show_error!("{}", e)
-                    }
-                    continue;
-                }
-                Ok(entry) => entry,
-            };
-            let path = entry.path();
-            let meta = match self.obtain_meta(path, self.dereference) {
-                Some(m) => m,
-                _ => {
-                    ret = 1;
-                    if entry.file_type().is_dir() {
-                        // Instruct walkdir to skip this directory to avoid getting another error
-                        // when walkdir tries to query the children of this directory.
-                        iterator.skip_current_dir();
-                    }
-                    continue;
-                }
-            };
-
-            if !self.matched(meta.uid(), meta.gid()) {
-                continue;
-            }
-
-            ret = match wrap_chown(
-                path,
-                &meta,
-                self.dest_uid,
-                self.dest_gid,
-                self.dereference,
-                self.verbosity.clone(),
-            ) {
-                Ok(n) => {
-                    if !n.is_empty() {
-                        show_error!("{}", n);
-                    }
-                    0
-                }
-                Err(e) => {
-                    if self.verbosity.level != VerbosityLevel::Silent {
-                        show_error!("{}", e);
-                    }
-                    1
-                }
-            }
-        }
-        ret
-    }
-
-    fn obtain_meta<P: AsRef<Path>>(&self, path: P, follow: bool) -> Option<Metadata> {
-        let path = path.as_ref();
-        let meta = if follow {
-            path.metadata()
-        } else {
-            path.symlink_metadata()
-        };
-        match meta {
-            Err(e) => {
-                match self.verbosity.level {
-                    VerbosityLevel::Silent => (),
-                    _ => show_error!(
-                        "cannot {} {}: {}",
-                        if follow { "dereference" } else { "access" },
-                        path.quote(),
-                        strip_errno(&e)
-                    ),
-                }
-                None
-            }
-            Ok(meta) => Some(meta),
-        }
-    }
-
-    #[inline]
-    fn matched(&self, uid: uid_t, gid: gid_t) -> bool {
-        match self.filter {
-            IfFrom::All => true,
-            IfFrom::User(u) => u == uid,
-            IfFrom::Group(g) => g == gid,
-            IfFrom::UserGroup(u, g) => u == uid && g == gid,
-        }
-    }
-}
-
-pub mod options {
-    pub mod verbosity {
-        pub const CHANGES: &str = "changes";
-        pub const QUIET: &str = "quiet";
-        pub const SILENT: &str = "silent";
-        pub const VERBOSE: &str = "verbose";
-    }
-    pub mod preserve_root {
-        pub const PRESERVE: &str = "preserve-root";
-        pub const NO_PRESERVE: &str = "no-preserve-root";
-    }
-    pub mod dereference {
-        pub const DEREFERENCE: &str = "dereference";
-        pub const NO_DEREFERENCE: &str = "no-dereference";
-    }
-    pub const FROM: &str = "from";
-    pub const RECURSIVE: &str = "recursive";
-    pub mod traverse {
-        pub const TRAVERSE: &str = "H";
-        pub const NO_TRAVERSE: &str = "P";
-        pub const EVERY: &str = "L";
-    }
-    pub const REFERENCE: &str = "reference";
-    pub const ARG_OWNER: &str = "OWNER";
-    pub const ARG_GROUP: &str = "GROUP";
-    pub const ARG_FILES: &str = "FILE";
-}
-
-type GidUidFilterParser = fn(&ArgMatches) -> UResult<(Option<u32>, Option<u32>, IfFrom)>;
-
-/// Base implementation for `chgrp` and `chown`.
-///
-/// An argument called `add_arg_if_not_reference` will be added to `app` if
-/// `args` does not contain the `--reference` option.
-/// `parse_gid_uid_and_filter` will be called to obtain the target gid and uid, and the filter,
-/// from `ArgMatches`.
-/// `groups_only` determines whether verbose output will only mention the group.
-pub fn chown_base<'a>(
-    mut app: App<'a>,
-    args: impl crate::Args,
-    add_arg_if_not_reference: &'a str,
-    parse_gid_uid_and_filter: GidUidFilterParser,
-    groups_only: bool,
-) -> UResult<()> {
-    let args: Vec<_> = args.collect();
-    let mut reference = false;
-    let mut help = false;
-    // stop processing options on --
-    for arg in args.iter().take_while(|s| *s != "--") {
-        if arg.to_string_lossy().starts_with("--reference=") || arg == "--reference" {
-            reference = true;
-        } else if arg == "--help" {
-            // we stop processing once we see --help,
-            // as it doesn't matter if we've seen reference or not
-            help = true;
-            break;
-        }
-    }
-
-    if help || !reference {
-        // add both positional arguments
-        // arg_group is only required if
-        app = app.arg(
-            Arg::new(add_arg_if_not_reference)
-                .value_name(add_arg_if_not_reference)
-                .required(true)
-                .takes_value(true)
-                .multiple_occurrences(false),
-        )
-    }
-    app = app.arg(
-        Arg::new(options::ARG_FILES)
-            .value_name(options::ARG_FILES)
-            .multiple_occurrences(true)
-            .takes_value(true)
-            .required(true)
-            .min_values(1),
-    );
-    let matches = app.get_matches_from(args);
-
-    let files: Vec<String> = matches
-        .values_of(options::ARG_FILES)
-        .map(|v| v.map(ToString::to_string).collect())
-        .unwrap_or_default();
-
-    let preserve_root = matches.is_present(options::preserve_root::PRESERVE);
-
-    let mut dereference = if matches.is_present(options::dereference::DEREFERENCE) {
-        Some(true)
-    } else if matches.is_present(options::dereference::NO_DEREFERENCE) {
-        Some(false)
-    } else {
-        None
-    };
-
-    let mut traverse_symlinks = if matches.is_present(options::traverse::TRAVERSE) {
-        TraverseSymlinks::First
-    } else if matches.is_present(options::traverse::EVERY) {
-        TraverseSymlinks::All
-    } else {
-        TraverseSymlinks::None
-    };
-
-    let recursive = matches.is_present(options::RECURSIVE);
-    if recursive {
-        if traverse_symlinks == TraverseSymlinks::None {
-            if dereference == Some(true) {
-                return Err(USimpleError::new(1, "-R --dereference requires -H or -L"));
-            }
-            dereference = Some(false);
-        }
-    } else {
-        traverse_symlinks = TraverseSymlinks::None;
-    }
-
-    let verbosity_level = if matches.is_present(options::verbosity::CHANGES) {
-        VerbosityLevel::Changes
-    } else if matches.is_present(options::verbosity::SILENT)
-        || matches.is_present(options::verbosity::QUIET)
-    {
-        VerbosityLevel::Silent
-    } else if matches.is_present(options::verbosity::VERBOSE) {
-        VerbosityLevel::Verbose
-    } else {
-        VerbosityLevel::Normal
-    };
-    let (dest_gid, dest_uid, filter) = parse_gid_uid_and_filter(&matches)?;
-
-    let executor = ChownExecutor {
-        traverse_symlinks,
-        dest_gid,
-        dest_uid,
-        verbosity: Verbosity {
-            groups_only,
-            level: verbosity_level,
-        },
-        recursive,
-        dereference: dereference.unwrap_or(true),
-        preserve_root,
-        files,
-        filter,
-    };
-    executor.exec()
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/pipes.rs.html b/src/uucore/features/pipes.rs.html deleted file mode 100644 index f43bd5a58..000000000 --- a/src/uucore/features/pipes.rs.html +++ /dev/null @@ -1,142 +0,0 @@ -pipes.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-
/// Thin pipe-related wrappers around functions from the `nix` crate.
-use std::fs::File;
-#[cfg(any(target_os = "linux", target_os = "android"))]
-use std::os::unix::io::AsRawFd;
-use std::os::unix::io::FromRawFd;
-
-#[cfg(any(target_os = "linux", target_os = "android"))]
-use nix::{fcntl::SpliceFFlags, sys::uio::IoVec};
-
-pub use nix::{Error, Result};
-
-/// A wrapper around [`nix::unistd::Pipe`] that ensures the pipe is cleaned up.
-///
-/// Returns two `File` objects: everything written to the second can be read
-/// from the first.
-pub fn pipe() -> Result<(File, File)> {
-    let (read, write) = nix::unistd::pipe()?;
-    // SAFETY: The file descriptors do not have other owners.
-    unsafe { Ok((File::from_raw_fd(read), File::from_raw_fd(write))) }
-}
-
-/// Less noisy wrapper around [`nix::fcntl::splice`].
-///
-/// Up to `len` bytes are moved from `source` to `target`. Returns the number
-/// of successfully moved bytes.
-///
-/// At least one of `source` and `target` must be some sort of pipe.
-/// To get around this requirement, consider splicing from your source into
-/// a [`pipe`] and then from the pipe into your target (with `splice_exact`):
-/// this is still very efficient.
-#[cfg(any(target_os = "linux", target_os = "android"))]
-pub fn splice(source: &impl AsRawFd, target: &impl AsRawFd, len: usize) -> Result<usize> {
-    nix::fcntl::splice(
-        source.as_raw_fd(),
-        None,
-        target.as_raw_fd(),
-        None,
-        len,
-        SpliceFFlags::empty(),
-    )
-}
-
-/// Splice wrapper which fully finishes the write.
-///
-/// Exactly `len` bytes are moved from `source` into `target`.
-///
-/// Panics if `source` runs out of data before `len` bytes have been moved.
-#[cfg(any(target_os = "linux", target_os = "android"))]
-pub fn splice_exact(source: &impl AsRawFd, target: &impl AsRawFd, len: usize) -> Result<()> {
-    let mut left = len;
-    while left != 0 {
-        let written = splice(source, target, left)?;
-        assert_ne!(written, 0, "unexpected end of data");
-        left -= written;
-    }
-    Ok(())
-}
-
-/// Copy data from `bytes` into `target`, which must be a pipe.
-///
-/// Returns the number of successfully copied bytes.
-#[cfg(any(target_os = "linux", target_os = "android"))]
-pub fn vmsplice(target: &impl AsRawFd, bytes: &[u8]) -> Result<usize> {
-    nix::fcntl::vmsplice(
-        target.as_raw_fd(),
-        &[IoVec::from_slice(bytes)],
-        SpliceFFlags::empty(),
-    )
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/process.rs.html b/src/uucore/features/process.rs.html deleted file mode 100644 index 59a0b32ae..000000000 --- a/src/uucore/features/process.rs.html +++ /dev/null @@ -1,298 +0,0 @@ -process.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-138
-139
-140
-141
-142
-143
-144
-145
-146
-147
-
// This file is part of the uutils coreutils package.
-//
-// (c) Maciej Dziardziel <fiedzia@gmail.com>
-// (c) Jian Zeng <anonymousknight96 AT gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-// spell-checker:ignore (vars) cvar exitstatus
-// spell-checker:ignore (sys/unix) WIFSIGNALED
-
-//! Set of functions to manage IDs
-
-use libc::{gid_t, pid_t, uid_t};
-use std::fmt;
-use std::io;
-use std::process::Child;
-use std::process::ExitStatus as StdExitStatus;
-use std::thread;
-use std::time::{Duration, Instant};
-
-// SAFETY: These functions always succeed and return simple integers.
-
-/// `geteuid()` returns the effective user ID of the calling process.
-pub fn geteuid() -> uid_t {
-    unsafe { libc::geteuid() }
-}
-
-/// `getegid()` returns the effective group ID of the calling process.
-pub fn getegid() -> gid_t {
-    unsafe { libc::getegid() }
-}
-
-/// `getgid()` returns the real group ID of the calling process.
-pub fn getgid() -> gid_t {
-    unsafe { libc::getgid() }
-}
-
-/// `getuid()` returns the real user ID of the calling process.
-pub fn getuid() -> uid_t {
-    unsafe { libc::getuid() }
-}
-
-// This is basically sys::unix::process::ExitStatus
-#[derive(PartialEq, Eq, Clone, Copy, Debug)]
-pub enum ExitStatus {
-    Code(i32),
-    Signal(i32),
-}
-
-#[allow(clippy::trivially_copy_pass_by_ref)]
-impl ExitStatus {
-    fn from_std_status(status: StdExitStatus) -> Self {
-        #[cfg(unix)]
-        {
-            use std::os::unix::process::ExitStatusExt;
-
-            if let Some(signal) = status.signal() {
-                return ExitStatus::Signal(signal);
-            }
-        }
-
-        // NOTE: this should never fail as we check if the program exited through a signal above
-        ExitStatus::Code(status.code().unwrap())
-    }
-
-    pub fn success(&self) -> bool {
-        match *self {
-            ExitStatus::Code(code) => code == 0,
-            _ => false,
-        }
-    }
-
-    pub fn code(&self) -> Option<i32> {
-        match *self {
-            ExitStatus::Code(code) => Some(code),
-            _ => None,
-        }
-    }
-
-    pub fn signal(&self) -> Option<i32> {
-        match *self {
-            ExitStatus::Signal(code) => Some(code),
-            _ => None,
-        }
-    }
-}
-
-impl fmt::Display for ExitStatus {
-    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-        match *self {
-            ExitStatus::Code(code) => write!(f, "exit code: {}", code),
-            ExitStatus::Signal(code) => write!(f, "exit code: {}", code),
-        }
-    }
-}
-
-/// Missing methods for Child objects
-pub trait ChildExt {
-    /// Send a signal to a Child process.
-    ///
-    /// Caller beware: if the process already exited then you may accidentally
-    /// send the signal to an unrelated process that recycled the PID.
-    fn send_signal(&mut self, signal: usize) -> io::Result<()>;
-
-    /// Wait for a process to finish or return after the specified duration.
-    /// A `timeout` of zero disables the timeout.
-    fn wait_or_timeout(&mut self, timeout: Duration) -> io::Result<Option<ExitStatus>>;
-}
-
-impl ChildExt for Child {
-    fn send_signal(&mut self, signal: usize) -> io::Result<()> {
-        if unsafe { libc::kill(self.id() as pid_t, signal as i32) } != 0 {
-            Err(io::Error::last_os_error())
-        } else {
-            Ok(())
-        }
-    }
-
-    fn wait_or_timeout(&mut self, timeout: Duration) -> io::Result<Option<ExitStatus>> {
-        if timeout == Duration::from_micros(0) {
-            return self
-                .wait()
-                .map(|status| Some(ExitStatus::from_std_status(status)));
-        }
-        // .try_wait() doesn't drop stdin, so we do it manually
-        drop(self.stdin.take());
-
-        let start = Instant::now();
-        loop {
-            if let Some(status) = self.try_wait()? {
-                return Ok(Some(ExitStatus::from_std_status(status)));
-            }
-
-            if start.elapsed() >= timeout {
-                break;
-            }
-
-            // XXX: this is kinda gross, but it's cleaner than starting a thread just to wait
-            //      (which was the previous solution).  We might want to use a different duration
-            //      here as well
-            thread::sleep(Duration::from_millis(100));
-        }
-
-        Ok(None)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/ringbuffer.rs.html b/src/uucore/features/ringbuffer.rs.html deleted file mode 100644 index 73bc2585d..000000000 --- a/src/uucore/features/ringbuffer.rs.html +++ /dev/null @@ -1,270 +0,0 @@ -ringbuffer.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-
//! A fixed-size ring buffer.
-use std::collections::VecDeque;
-
-/// A fixed-size ring buffer backed by a `VecDeque`.
-///
-/// If the ring buffer is not full, then calling the [`push_back`]
-/// method appends elements, as in a [`VecDeque`]. If the ring buffer
-/// is full, then calling [`push_back`] removes the element at the
-/// front of the buffer (in a first-in, first-out manner) before
-/// appending the new element to the back of the buffer.
-///
-/// Use [`from_iter`] to take the last `size` elements from an
-/// iterator.
-///
-/// # Examples
-///
-/// After exceeding the size limit, the oldest elements are dropped in
-/// favor of the newest element:
-///
-/// ```rust,ignore
-/// let mut buffer: RingBuffer<u8> = RingBuffer::new(2);
-/// buffer.push_back(0);
-/// buffer.push_back(1);
-/// buffer.push_back(2);
-/// assert_eq!(vec![1, 2], buffer.data);
-/// ```
-///
-/// Take the last `n` elements from an iterator:
-///
-/// ```rust,ignore
-/// let iter = [0, 1, 2].iter();
-/// let actual = RingBuffer::from_iter(iter, 2).data;
-/// let expected = VecDeque::from_iter([1, 2].iter());
-/// assert_eq!(expected, actual);
-/// ```
-pub struct RingBuffer<T> {
-    pub data: VecDeque<T>,
-    size: usize,
-}
-
-impl<T> RingBuffer<T> {
-    pub fn new(size: usize) -> RingBuffer<T> {
-        RingBuffer {
-            data: VecDeque::new(),
-            size,
-        }
-    }
-
-    pub fn from_iter(iter: impl Iterator<Item = T>, size: usize) -> RingBuffer<T> {
-        let mut ring_buffer = RingBuffer::new(size);
-        for value in iter {
-            ring_buffer.push_back(value);
-        }
-        ring_buffer
-    }
-
-    /// Append a value to the end of the ring buffer.
-    ///
-    /// If the ring buffer is not full, this method return [`None`]. If
-    /// the ring buffer is full, appending a new element will cause the
-    /// oldest element to be evicted. In that case this method returns
-    /// that element, or `None`.
-    ///
-    /// In the special case where the size limit is zero, each call to
-    /// this method with input `value` returns `Some(value)`, because
-    /// the input is immediately evicted.
-    ///
-    /// # Examples
-    ///
-    /// Appending an element when the buffer is full returns the oldest
-    /// element:
-    ///
-    /// ```rust,ignore
-    /// let mut buf = RingBuffer::new(3);
-    /// assert_eq!(None, buf.push_back(0));
-    /// assert_eq!(None, buf.push_back(1));
-    /// assert_eq!(None, buf.push_back(2));
-    /// assert_eq!(Some(0), buf.push_back(3));
-    /// ```
-    ///
-    /// If the size limit is zero, then this method always returns the
-    /// input value:
-    ///
-    /// ```rust,ignore
-    /// let mut buf = RingBuffer::new(0);
-    /// assert_eq!(Some(0), buf.push_back(0));
-    /// assert_eq!(Some(1), buf.push_back(1));
-    /// assert_eq!(Some(2), buf.push_back(2));
-    /// ```
-    pub fn push_back(&mut self, value: T) -> Option<T> {
-        if self.size == 0 {
-            return Some(value);
-        }
-        let result = if self.size <= self.data.len() {
-            self.data.pop_front()
-        } else {
-            None
-        };
-        self.data.push_back(value);
-        result
-    }
-}
-
-#[cfg(test)]
-mod tests {
-
-    use crate::ringbuffer::RingBuffer;
-    use std::collections::VecDeque;
-
-    #[test]
-    fn test_size_limit_zero() {
-        let mut buf = RingBuffer::new(0);
-        assert_eq!(Some(0), buf.push_back(0));
-        assert_eq!(Some(1), buf.push_back(1));
-        assert_eq!(Some(2), buf.push_back(2));
-    }
-
-    #[test]
-    fn test_evict_oldest() {
-        let mut buf = RingBuffer::new(2);
-        assert_eq!(None, buf.push_back(0));
-        assert_eq!(None, buf.push_back(1));
-        assert_eq!(Some(0), buf.push_back(2));
-    }
-
-    #[test]
-    fn test_from_iter() {
-        let iter = [0, 1, 2].iter();
-        let actual = RingBuffer::from_iter(iter, 2).data;
-        let expected: VecDeque<&i32> = [1, 2].iter().collect();
-        assert_eq!(expected, actual);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/signals.rs.html b/src/uucore/features/signals.rs.html deleted file mode 100644 index 095c6d9b4..000000000 --- a/src/uucore/features/signals.rs.html +++ /dev/null @@ -1,268 +0,0 @@ -signals.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-
// This file is part of the uutils coreutils package.
-//
-// (c) Maciej Dziardziel <fiedzia@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE file
-// that was distributed with this source code.
-
-// spell-checker:ignore (vars/api) fcntl setrlimit setitimer
-// spell-checker:ignore (vars/signals) ABRT ALRM CHLD SEGV SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGEMT SIGFPE SIGHUP SIGILL SIGINFO SIGINT SIGIO SIGIOT SIGKILL SIGPIPE SIGPROF SIGQUIT SIGSEGV SIGSTOP SIGSYS SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR SIGVTALRM SIGWINCH SIGXCPU SIGXFSZ STKFLT TSTP TTIN TTOU VTALRM XCPU XFSZ
-
-pub static DEFAULT_SIGNAL: usize = 15;
-
-/*
-
-Linux Programmer's Manual
-
- 1 HUP      2 INT      3 QUIT     4 ILL      5 TRAP     6 ABRT     7 BUS
- 8 FPE      9 KILL    10 USR1    11 SEGV    12 USR2    13 PIPE    14 ALRM
-15 TERM    16 STKFLT  17 CHLD    18 CONT    19 STOP    20 TSTP    21 TTIN
-22 TTOU    23 URG     24 XCPU    25 XFSZ    26 VTALRM  27 PROF    28 WINCH
-29 POLL    30 PWR     31 SYS
-
-
-*/
-
-#[cfg(target_os = "linux")]
-pub static ALL_SIGNALS: [&str; 32] = [
-    "EXIT", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "BUS", "FPE", "KILL", "USR1", "SEGV",
-    "USR2", "PIPE", "ALRM", "TERM", "STKFLT", "CHLD", "CONT", "STOP", "TSTP", "TTIN", "TTOU",
-    "URG", "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "POLL", "PWR", "SYS",
-];
-
-/*
-
-
-https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man3/signal.3.html
-
-
-No    Name         Default Action       Description
-1     SIGHUP       terminate process    terminal line hangup
-2     SIGINT       terminate process    interrupt program
-3     SIGQUIT      create core image    quit program
-4     SIGILL       create core image    illegal instruction
-5     SIGTRAP      create core image    trace trap
-6     SIGABRT      create core image    abort program (formerly SIGIOT)
-7     SIGEMT       create core image    emulate instruction executed
-8     SIGFPE       create core image    floating-point exception
-9     SIGKILL      terminate process    kill program
-10    SIGBUS       create core image    bus error
-11    SIGSEGV      create core image    segmentation violation
-12    SIGSYS       create core image    non-existent system call invoked
-13    SIGPIPE      terminate process    write on a pipe with no reader
-14    SIGALRM      terminate process    real-time timer expired
-15    SIGTERM      terminate process    software termination signal
-16    SIGURG       discard signal       urgent condition present on socket
-17    SIGSTOP      stop process         stop (cannot be caught or ignored)
-18    SIGTSTP      stop process         stop signal generated from keyboard
-19    SIGCONT      discard signal       continue after stop
-20    SIGCHLD      discard signal       child status has changed
-21    SIGTTIN      stop process         background read attempted from control terminal
-22    SIGTTOU      stop process         background write attempted to control terminal
-23    SIGIO        discard signal       I/O is possible on a descriptor (see fcntl(2))
-24    SIGXCPU      terminate process    cpu time limit exceeded (see setrlimit(2))
-25    SIGXFSZ      terminate process    file size limit exceeded (see setrlimit(2))
-26    SIGVTALRM    terminate process    virtual time alarm (see setitimer(2))
-27    SIGPROF      terminate process    profiling timer alarm (see setitimer(2))
-28    SIGWINCH     discard signal       Window size change
-29    SIGINFO      discard signal       status request from keyboard
-30    SIGUSR1      terminate process    User defined signal 1
-31    SIGUSR2      terminate process    User defined signal 2
-
-*/
-
-#[cfg(any(target_vendor = "apple", target_os = "freebsd"))]
-pub static ALL_SIGNALS: [&str; 32] = [
-    "EXIT", "HUP", "INT", "QUIT", "ILL", "TRAP", "ABRT", "EMT", "FPE", "KILL", "BUS", "SEGV",
-    "SYS", "PIPE", "ALRM", "TERM", "URG", "STOP", "TSTP", "CONT", "CHLD", "TTIN", "TTOU", "IO",
-    "XCPU", "XFSZ", "VTALRM", "PROF", "WINCH", "INFO", "USR1", "USR2",
-];
-
-pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option<usize> {
-    if let Ok(value) = signal_name_or_value.parse() {
-        if is_signal(value) {
-            return Some(value);
-        } else {
-            return None;
-        }
-    }
-    let signal_name = signal_name_or_value.trim_start_matches("SIG");
-
-    ALL_SIGNALS.iter().position(|&s| s == signal_name)
-}
-
-pub fn is_signal(num: usize) -> bool {
-    num < ALL_SIGNALS.len()
-}
-
-pub fn signal_name_by_value(signal_value: usize) -> Option<&'static str> {
-    ALL_SIGNALS.get(signal_value).copied()
-}
-
-#[test]
-fn signal_by_value() {
-    assert_eq!(signal_by_name_or_value("0"), Some(0));
-    for (value, _signal) in ALL_SIGNALS.iter().enumerate() {
-        assert_eq!(signal_by_name_or_value(&value.to_string()), Some(value));
-    }
-}
-
-#[test]
-fn signal_by_short_name() {
-    for (value, signal) in ALL_SIGNALS.iter().enumerate() {
-        assert_eq!(signal_by_name_or_value(signal), Some(value));
-    }
-}
-
-#[test]
-fn signal_by_long_name() {
-    for (value, signal) in ALL_SIGNALS.iter().enumerate() {
-        assert_eq!(
-            signal_by_name_or_value(&format!("SIG{}", signal)),
-            Some(value)
-        );
-    }
-}
-
-#[test]
-fn name() {
-    for (value, signal) in ALL_SIGNALS.iter().enumerate() {
-        assert_eq!(signal_name_by_value(value), Some(*signal));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/mod.rs.html b/src/uucore/features/tokenize/mod.rs.html deleted file mode 100644 index 118b347a4..000000000 --- a/src/uucore/features/tokenize/mod.rs.html +++ /dev/null @@ -1,14 +0,0 @@ -mod.rs - source -
1
-2
-3
-4
-5
-
#[allow(clippy::module_inception)]
-mod num_format;
-pub mod sub;
-pub mod token;
-pub mod unescaped_text;
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/format_field.rs.html b/src/uucore/features/tokenize/num_format/format_field.rs.html deleted file mode 100644 index 680390fa9..000000000 --- a/src/uucore/features/tokenize/num_format/format_field.rs.html +++ /dev/null @@ -1,90 +0,0 @@ -format_field.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-
-//! Primitives used by Sub Tokenizer
-//! and num_format modules
-#[derive(Clone)]
-pub enum FieldType {
-    Strf,
-    Floatf,
-    CninetyNineHexFloatf,
-    Scif,
-    Decf,
-    Intf,
-    Charf,
-}
-
-// #[allow(non_camel_case_types)]
-// pub enum FChar {
-// d,
-// e,
-// E,
-// i,
-// f,
-// F,
-// g,
-// G,
-// u,
-// x,
-// X,
-// o
-// }
-//
-
-// a Sub Tokens' fields are stored
-// as a single object so they can be more simply
-// passed by ref to num_format in a Sub method
-#[derive(Clone)]
-pub struct FormatField<'a> {
-    pub min_width: Option<isize>,
-    pub second_field: Option<u32>,
-    pub field_char: &'a char,
-    pub field_type: &'a FieldType,
-    pub orig: &'a String,
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatter.rs.html b/src/uucore/features/tokenize/num_format/formatter.rs.html deleted file mode 100644 index a3ba8173a..000000000 --- a/src/uucore/features/tokenize/num_format/formatter.rs.html +++ /dev/null @@ -1,122 +0,0 @@ -formatter.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-
//! Primitives used by num_format and sub_modules.
-//! never dealt with above (e.g. Sub Tokenizer never uses these)
-
-use crate::{display::Quotable, show_error};
-use itertools::{put_back_n, PutBackN};
-use std::str::Chars;
-
-use super::format_field::FormatField;
-
-// contains the rough ingredients to final
-// output for a number, organized together
-// to allow for easy generalization of output manipulation
-// (e.g. max number of digits after decimal)
-#[derive(Default)]
-pub struct FormatPrimitive {
-    pub prefix: Option<String>,
-    pub pre_decimal: Option<String>,
-    pub post_decimal: Option<String>,
-    pub suffix: Option<String>,
-}
-
-#[derive(Clone, PartialEq)]
-pub enum Base {
-    Ten = 10,
-    Hex = 16,
-    Octal = 8,
-}
-
-// information from the beginning of a numeric argument
-// the precedes the beginning of a numeric value
-pub struct InitialPrefix {
-    pub radix_in: Base,
-    pub sign: i8,
-    pub offset: usize,
-}
-
-pub trait Formatter {
-    //  return a FormatPrimitive for
-    // particular field char(s), given the argument
-    // string and prefix information (sign, radix)
-    fn get_primitive(
-        &self,
-        field: &FormatField,
-        in_prefix: &InitialPrefix,
-        str_in: &str,
-    ) -> Option<FormatPrimitive>;
-    // return a string from a FormatPrimitive,
-    // given information about the field
-    fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String;
-}
-pub fn get_it_at(offset: usize, str_in: &str) -> PutBackN<Chars> {
-    put_back_n(str_in[offset..].chars())
-}
-
-// TODO: put this somewhere better
-pub fn warn_incomplete_conv(pf_arg: &str) {
-    // important: keep println here not print
-    show_error!("{}: value not completely converted", pf_arg.maybe_quote());
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/base_conv/mod.rs.html b/src/uucore/features/tokenize/num_format/formatters/base_conv/mod.rs.html deleted file mode 100644 index 01b0b3ea4..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/base_conv/mod.rs.html +++ /dev/null @@ -1,544 +0,0 @@ -mod.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-
// spell-checker:ignore (ToDO) arrnum arr_num mult basenum bufferval refd vals arrfloat conv intermed addl
-
-pub fn arrnum_int_mult(arr_num: &[u8], basenum: u8, base_ten_int_fact: u8) -> Vec<u8> {
-    let mut carry: u16 = 0;
-    let mut rem: u16;
-    let mut new_amount: u16;
-    let fact: u16 = u16::from(base_ten_int_fact);
-    let base: u16 = u16::from(basenum);
-
-    let mut ret_rev: Vec<u8> = Vec::new();
-    let mut it = arr_num.iter().rev();
-    loop {
-        let i = it.next();
-        match i {
-            Some(u) => {
-                new_amount = (u16::from(*u) * fact) + carry;
-                rem = new_amount % base;
-                carry = (new_amount - rem) / base;
-                ret_rev.push(rem as u8)
-            }
-            None => {
-                while carry != 0 {
-                    rem = carry % base;
-                    carry = (carry - rem) / base;
-                    ret_rev.push(rem as u8);
-                }
-                break;
-            }
-        }
-    }
-    let ret: Vec<u8> = ret_rev.into_iter().rev().collect();
-    ret
-}
-
-#[allow(dead_code)]
-pub struct Remainder<'a> {
-    pub position: usize,
-    pub replace: Vec<u8>,
-    pub arr_num: &'a Vec<u8>,
-}
-
-#[allow(dead_code)]
-pub struct DivOut<'a> {
-    pub quotient: u8,
-    pub remainder: Remainder<'a>,
-}
-
-#[allow(dead_code)]
-pub fn arrnum_int_div_step(
-    rem_in: Remainder,
-    radix_in: u8,
-    base_ten_int_divisor: u8,
-    after_decimal: bool,
-) -> DivOut {
-    let mut rem_out = Remainder {
-        position: rem_in.position,
-        replace: Vec::new(),
-        arr_num: rem_in.arr_num,
-    };
-
-    let mut bufferval: u16 = 0;
-    let base: u16 = u16::from(radix_in);
-    let divisor: u16 = u16::from(base_ten_int_divisor);
-    let mut traversed = 0;
-
-    let mut quotient = 0;
-    let refd_vals = &rem_in.arr_num[rem_in.position + rem_in.replace.len()..];
-    let mut it_replace = rem_in.replace.iter();
-    let mut it_f = refd_vals.iter();
-    loop {
-        let u = match it_replace.next() {
-            Some(u_rep) => u16::from(*u_rep),
-            None => match it_f.next() {
-                Some(u_orig) => u16::from(*u_orig),
-                None => {
-                    if !after_decimal {
-                        break;
-                    }
-                    0
-                }
-            },
-        };
-        traversed += 1;
-        bufferval += u;
-        if bufferval > divisor {
-            while bufferval >= divisor {
-                quotient += 1;
-                bufferval -= divisor;
-            }
-            rem_out.replace = if bufferval == 0 {
-                Vec::new()
-            } else {
-                let remainder_as_arrnum = unsigned_to_arrnum(bufferval);
-                base_conv_vec(&remainder_as_arrnum, 10, radix_in)
-            };
-            rem_out.position += 1 + (traversed - rem_out.replace.len());
-            break;
-        } else {
-            bufferval *= base;
-        }
-    }
-    DivOut {
-        quotient,
-        remainder: rem_out,
-    }
-}
-pub fn arrnum_int_add(arrnum: &[u8], basenum: u8, base_ten_int_term: u8) -> Vec<u8> {
-    let mut carry: u16 = u16::from(base_ten_int_term);
-    let mut rem: u16;
-    let mut new_amount: u16;
-    let base: u16 = u16::from(basenum);
-
-    let mut ret_rev: Vec<u8> = Vec::new();
-    let mut it = arrnum.iter().rev();
-    loop {
-        let i = it.next();
-        match i {
-            Some(u) => {
-                new_amount = u16::from(*u) + carry;
-                rem = new_amount % base;
-                carry = (new_amount - rem) / base;
-                ret_rev.push(rem as u8)
-            }
-            None => {
-                while carry != 0 {
-                    rem = carry % base;
-                    carry = (carry - rem) / base;
-                    ret_rev.push(rem as u8);
-                }
-                break;
-            }
-        }
-    }
-    let ret: Vec<u8> = ret_rev.into_iter().rev().collect();
-    ret
-}
-
-pub fn base_conv_vec(src: &[u8], radix_src: u8, radix_dest: u8) -> Vec<u8> {
-    let mut result = vec![0];
-    for i in src {
-        result = arrnum_int_mult(&result, radix_dest, radix_src);
-        result = arrnum_int_add(&result, radix_dest, *i);
-    }
-    result
-}
-
-#[allow(dead_code)]
-pub fn unsigned_to_arrnum(src: u16) -> Vec<u8> {
-    let mut result: Vec<u8> = Vec::new();
-    let mut src_tmp: u16 = src;
-    while src_tmp > 0 {
-        result.push((src_tmp % 10) as u8);
-        src_tmp /= 10;
-    }
-    result.reverse();
-    result
-}
-
-// temporary needs-improvement-function
-pub fn base_conv_float(src: &[u8], radix_src: u8, _radix_dest: u8) -> f64 {
-    // it would require a lot of addl code
-    // to implement this for arbitrary string input.
-    // until then, the below operates as an outline
-    // of how it would work.
-    let mut factor: f64 = 1_f64;
-    let radix_src_float: f64 = f64::from(radix_src);
-    let mut r: f64 = 0_f64;
-    for (i, u) in src.iter().enumerate() {
-        if i > 15 {
-            break;
-        }
-        factor /= radix_src_float;
-        r += factor * f64::from(*u)
-    }
-    r
-}
-
-pub fn str_to_arrnum(src: &str, radix_def_src: &dyn RadixDef) -> Vec<u8> {
-    let mut intermed_in: Vec<u8> = Vec::new();
-    for c in src.chars() {
-        #[allow(clippy::single_match)]
-        match radix_def_src.from_char(c) {
-            Some(u) => {
-                intermed_in.push(u);
-            }
-            None => {} //todo err msg on incorrect
-        }
-    }
-    intermed_in
-}
-
-pub fn arrnum_to_str(src: &[u8], radix_def_dest: &dyn RadixDef) -> String {
-    let mut str_out = String::new();
-    for u in src.iter() {
-        #[allow(clippy::single_match)]
-        match radix_def_dest.from_u8(*u) {
-            Some(c) => {
-                str_out.push(c);
-            }
-            None => {} //todo
-        }
-    }
-    str_out
-}
-
-pub fn base_conv_str(
-    src: &str,
-    radix_def_src: &dyn RadixDef,
-    radix_def_dest: &dyn RadixDef,
-) -> String {
-    let intermed_in: Vec<u8> = str_to_arrnum(src, radix_def_src);
-    let intermed_out = base_conv_vec(
-        &intermed_in,
-        radix_def_src.get_max(),
-        radix_def_dest.get_max(),
-    );
-    arrnum_to_str(&intermed_out, radix_def_dest)
-}
-
-pub trait RadixDef {
-    fn get_max(&self) -> u8;
-    fn from_char(&self, x: char) -> Option<u8>;
-    fn from_u8(&self, x: u8) -> Option<char>;
-}
-pub struct RadixTen;
-
-const ZERO_ASC: u8 = b'0';
-const UPPER_A_ASC: u8 = b'A';
-const LOWER_A_ASC: u8 = b'a';
-
-impl RadixDef for RadixTen {
-    fn get_max(&self) -> u8 {
-        10
-    }
-    fn from_char(&self, c: char) -> Option<u8> {
-        match c {
-            '0'..='9' => Some(c as u8 - ZERO_ASC),
-            _ => None,
-        }
-    }
-    fn from_u8(&self, u: u8) -> Option<char> {
-        match u {
-            0..=9 => Some((ZERO_ASC + u) as char),
-            _ => None,
-        }
-    }
-}
-pub struct RadixHex;
-impl RadixDef for RadixHex {
-    fn get_max(&self) -> u8 {
-        16
-    }
-    fn from_char(&self, c: char) -> Option<u8> {
-        match c {
-            '0'..='9' => Some(c as u8 - ZERO_ASC),
-            'A'..='F' => Some(c as u8 + 10 - UPPER_A_ASC),
-            'a'..='f' => Some(c as u8 + 10 - LOWER_A_ASC),
-            _ => None,
-        }
-    }
-    fn from_u8(&self, u: u8) -> Option<char> {
-        match u {
-            0..=9 => Some((ZERO_ASC + u) as char),
-            10..=15 => Some((UPPER_A_ASC + (u - 10)) as char),
-            _ => None,
-        }
-    }
-}
-
-mod tests;
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/base_conv/tests.rs.html b/src/uucore/features/tokenize/num_format/formatters/base_conv/tests.rs.html deleted file mode 100644 index 8b6bcbb47..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/base_conv/tests.rs.html +++ /dev/null @@ -1,116 +0,0 @@ -tests.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-
// spell-checker:ignore (ToDO) arrnum mult
-
-#[cfg(test)]
-use super::*;
-
-#[test]
-fn test_arrnum_int_mult() {
-    // (in base 10) 12 * 4 = 48
-    let factor: Vec<u8> = vec![1, 2];
-    let base_num = 10;
-    let base_ten_int_fact: u8 = 4;
-    let should_output: Vec<u8> = vec![4, 8];
-
-    let product = arrnum_int_mult(&factor, base_num, base_ten_int_fact);
-    assert!(product == should_output);
-}
-
-#[test]
-fn test_arrnum_int_non_base_10() {
-    // (in base 3)
-    // 5 * 4 = 20
-    let factor: Vec<u8> = vec![1, 2];
-    let base_num = 3;
-    let base_ten_int_fact: u8 = 4;
-    let should_output: Vec<u8> = vec![2, 0, 2];
-
-    let product = arrnum_int_mult(&factor, base_num, base_ten_int_fact);
-    assert!(product == should_output);
-}
-
-#[test]
-fn test_arrnum_int_div_short_circuit() {
-    // (
-    let arrnum: Vec<u8> = vec![5, 5, 5, 5, 0];
-    let base_num = 10;
-    let base_ten_int_divisor: u8 = 41;
-    let remainder_passed_in = Remainder {
-        position: 1,
-        replace: vec![1, 3],
-        arr_num: &arrnum,
-    };
-
-    // the "replace" should mean the number being divided
-    // is 1350, the first time you can get 41 to go into
-    // 1350, its at 135, where you can get a quotient of
-    // 3 and a remainder of 12;
-
-    let quotient_should_be: u8 = 3;
-    let remainder_position_should_be: usize = 3;
-    let remainder_replace_should_be = vec![1, 2];
-
-    let result = arrnum_int_div_step(remainder_passed_in, base_num, base_ten_int_divisor, false);
-    assert!(quotient_should_be == result.quotient);
-    assert!(remainder_position_should_be == result.remainder.position);
-    assert!(remainder_replace_should_be == result.remainder.replace);
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/cninetyninehexfloatf.rs.html b/src/uucore/features/tokenize/num_format/formatters/cninetyninehexfloatf.rs.html deleted file mode 100644 index 11bdca83b..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/cninetyninehexfloatf.rs.html +++ /dev/null @@ -1,232 +0,0 @@ -cninetyninehexfloatf.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-// spell-checker:ignore (ToDO) arrnum
-
-//! formatter for %a %F C99 Hex-floating-point subs
-use super::super::format_field::FormatField;
-use super::super::formatter::{FormatPrimitive, Formatter, InitialPrefix};
-use super::base_conv;
-use super::base_conv::RadixDef;
-use super::float_common::{primitive_to_str_common, FloatAnalysis};
-
-pub struct CninetyNineHexFloatf {
-    #[allow(dead_code)]
-    as_num: f64,
-}
-impl CninetyNineHexFloatf {
-    pub fn new() -> CninetyNineHexFloatf {
-        CninetyNineHexFloatf { as_num: 0.0 }
-    }
-}
-
-impl Formatter for CninetyNineHexFloatf {
-    fn get_primitive(
-        &self,
-        field: &FormatField,
-        initial_prefix: &InitialPrefix,
-        str_in: &str,
-    ) -> Option<FormatPrimitive> {
-        let second_field = field.second_field.unwrap_or(6) + 1;
-        let analysis = FloatAnalysis::analyze(
-            str_in,
-            initial_prefix,
-            Some(second_field as usize),
-            None,
-            true,
-        );
-        let f = get_primitive_hex(
-            initial_prefix,
-            &str_in[initial_prefix.offset..],
-            &analysis,
-            second_field as usize,
-            *field.field_char == 'A',
-        );
-        Some(f)
-    }
-    fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String {
-        primitive_to_str_common(prim, &field)
-    }
-}
-
-// c99 hex has unique requirements of all floating point subs in pretty much every part of building a primitive, from prefix and suffix to need for base conversion (in all other cases if you don't have decimal you must have decimal, here it's the other way around)
-
-// on the todo list is to have a trait for get_primitive that is implemented by each float formatter and can override a default. when that happens we can take the parts of get_primitive_dec specific to dec and spin them out to their own functions that can be overridden.
-fn get_primitive_hex(
-    initial_prefix: &InitialPrefix,
-    _str_in: &str,
-    _analysis: &FloatAnalysis,
-    _last_dec_place: usize,
-    capitalized: bool,
-) -> FormatPrimitive {
-    let prefix = Some(String::from(if initial_prefix.sign == -1 {
-        "-0x"
-    } else {
-        "0x"
-    }));
-
-    // TODO actual conversion, make sure to get back mantissa.
-    // for hex to hex, it's really just a matter of moving the
-    // decimal point and calculating the mantissa by its initial
-    // position and its moves, with every position counting for
-    // the addition or subtraction of 4 (2**4, because 4 bits in a hex digit)
-    // to the exponent.
-    // decimal's going to be a little more complicated. correct simulation
-    // of glibc will require after-decimal division to a specified precision.
-    // the difficult part of this (arrnum_int_div_step) is already implemented.
-
-    // the hex float name may be a bit misleading in terms of how to go about the
-    // conversion. The best way to do it is to just convert the float number
-    // directly to base 2 and then at the end translate back to hex.
-    let mantissa = 0;
-    let suffix = Some({
-        let ind = if capitalized { "P" } else { "p" };
-        if mantissa >= 0 {
-            format!("{}+{}", ind, mantissa)
-        } else {
-            format!("{}{}", ind, mantissa)
-        }
-    });
-    FormatPrimitive {
-        prefix,
-        suffix,
-        ..Default::default()
-    }
-}
-
-#[allow(dead_code)]
-fn to_hex(src: &str, before_decimal: bool) -> String {
-    let radix_ten = base_conv::RadixTen;
-    let radix_hex = base_conv::RadixHex;
-    if before_decimal {
-        base_conv::base_conv_str(src, &radix_ten, &radix_hex)
-    } else {
-        let as_arrnum_ten = base_conv::str_to_arrnum(src, &radix_ten);
-        let s = format!(
-            "{}",
-            base_conv::base_conv_float(&as_arrnum_ten, radix_ten.get_max(), radix_hex.get_max())
-        );
-        if s.len() > 2 {
-            String::from(&s[2..])
-        } else {
-            // zero
-            s
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/decf.rs.html b/src/uucore/features/tokenize/num_format/formatters/decf.rs.html deleted file mode 100644 index 488f4936f..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/decf.rs.html +++ /dev/null @@ -1,166 +0,0 @@ -decf.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-70
-71
-72
-73
-74
-75
-76
-77
-78
-79
-80
-81
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-
-//! formatter for %g %G decimal subs
-use super::super::format_field::FormatField;
-use super::super::formatter::{FormatPrimitive, Formatter, InitialPrefix};
-use super::float_common::{get_primitive_dec, primitive_to_str_common, FloatAnalysis};
-
-fn get_len_fmt_primitive(fmt: &FormatPrimitive) -> usize {
-    let mut len = 0;
-    if let Some(ref s) = fmt.prefix {
-        len += s.len();
-    }
-    if let Some(ref s) = fmt.pre_decimal {
-        len += s.len();
-    }
-    if let Some(ref s) = fmt.post_decimal {
-        len += s.len();
-    }
-    if let Some(ref s) = fmt.suffix {
-        len += s.len();
-    }
-    len
-}
-
-pub struct Decf;
-
-impl Decf {
-    pub fn new() -> Decf {
-        Decf
-    }
-}
-impl Formatter for Decf {
-    fn get_primitive(
-        &self,
-        field: &FormatField,
-        initial_prefix: &InitialPrefix,
-        str_in: &str,
-    ) -> Option<FormatPrimitive> {
-        let second_field = field.second_field.unwrap_or(6) + 1;
-        // default to scif interpretation so as to not truncate input vals
-        // (that would be displayed in scif) based on relation to decimal place
-        let analysis = FloatAnalysis::analyze(
-            str_in,
-            initial_prefix,
-            Some(second_field as usize + 1),
-            None,
-            false,
-        );
-        let mut f_sci = get_primitive_dec(
-            initial_prefix,
-            &str_in[initial_prefix.offset..],
-            &analysis,
-            second_field as usize,
-            Some(*field.field_char == 'G'),
-        );
-        // strip trailing zeroes
-        if let Some(ref post_dec) = f_sci.post_decimal {
-            let trimmed = post_dec.trim_end_matches('0');
-            if trimmed.len() != post_dec.len() {
-                f_sci.post_decimal = Some(trimmed.to_owned());
-            }
-        }
-        let f_fl = get_primitive_dec(
-            initial_prefix,
-            &str_in[initial_prefix.offset..],
-            &analysis,
-            second_field as usize,
-            None,
-        );
-        Some(
-            if get_len_fmt_primitive(&f_fl) >= get_len_fmt_primitive(&f_sci) {
-                f_sci
-            } else {
-                f_fl
-            },
-        )
-    }
-    fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String {
-        primitive_to_str_common(prim, &field)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/float_common.rs.html b/src/uucore/features/tokenize/num_format/formatters/float_common.rs.html deleted file mode 100644 index d92e128b4..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/float_common.rs.html +++ /dev/null @@ -1,704 +0,0 @@ -float_common.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-// spell-checker:ignore (ToDO) arrnum
-
-use super::super::format_field::FormatField;
-use super::super::formatter::{
-    get_it_at, warn_incomplete_conv, Base, FormatPrimitive, InitialPrefix,
-};
-use super::base_conv;
-use super::base_conv::RadixDef;
-
-// if the memory, copy, and comparison cost of chars
-//  becomes an issue, we can always operate in vec<u8> here
-//  rather than just at de_hex
-
-pub struct FloatAnalysis {
-    pub len_important: usize,
-    // none means no decimal point.
-    pub decimal_pos: Option<usize>,
-    pub follow: Option<char>,
-}
-fn has_enough_digits(
-    hex_input: bool,
-    hex_output: bool,
-    string_position: usize,
-    starting_position: usize,
-    limit: usize,
-) -> bool {
-    // -1s are for rounding
-    if hex_output {
-        if hex_input {
-            (string_position - 1) - starting_position >= limit
-        } else {
-            false //undecidable without converting
-        }
-    } else if hex_input {
-        (((string_position - 1) - starting_position) * 9) / 8 >= limit
-    } else {
-        (string_position - 1) - starting_position >= limit
-    }
-}
-
-impl FloatAnalysis {
-    pub fn analyze(
-        str_in: &str,
-        initial_prefix: &InitialPrefix,
-        max_sd_opt: Option<usize>,
-        max_after_dec_opt: Option<usize>,
-        hex_output: bool,
-    ) -> FloatAnalysis {
-        // this fn assumes
-        // the input string
-        // has no leading spaces or 0s
-        let str_it = get_it_at(initial_prefix.offset, str_in);
-        let mut ret = FloatAnalysis {
-            len_important: 0,
-            decimal_pos: None,
-            follow: None,
-        };
-        let hex_input = match initial_prefix.radix_in {
-            Base::Hex => true,
-            Base::Ten => false,
-            Base::Octal => {
-                panic!("this should never happen: floats should never receive octal input");
-            }
-        };
-        let mut i = 0;
-        let mut pos_before_first_nonzero_after_decimal: Option<usize> = None;
-        for c in str_it {
-            match c {
-                e @ '0'..='9' | e @ 'A'..='F' | e @ 'a'..='f' => {
-                    if !hex_input {
-                        match e {
-                            '0'..='9' => {}
-                            _ => {
-                                warn_incomplete_conv(str_in);
-                                break;
-                            }
-                        }
-                    }
-                    if ret.decimal_pos.is_some()
-                        && pos_before_first_nonzero_after_decimal.is_none()
-                        && e != '0'
-                    {
-                        pos_before_first_nonzero_after_decimal = Some(i - 1);
-                    }
-                    if let Some(max_sd) = max_sd_opt {
-                        if i == max_sd {
-                            // follow is used in cases of %g
-                            // where the character right after the last
-                            // sd is considered is rounded affecting
-                            // the previous digit in 1/2 of instances
-                            ret.follow = Some(e);
-                        } else if ret.decimal_pos.is_some() && i > max_sd {
-                            break;
-                        }
-                    }
-                    if let Some(max_after_dec) = max_after_dec_opt {
-                        if let Some(p) = ret.decimal_pos {
-                            if has_enough_digits(hex_input, hex_output, i, p, max_after_dec) {
-                                break;
-                            }
-                        }
-                    } else if let Some(max_sd) = max_sd_opt {
-                        if let Some(p) = pos_before_first_nonzero_after_decimal {
-                            if has_enough_digits(hex_input, hex_output, i, p, max_sd) {
-                                break;
-                            }
-                        }
-                    }
-                }
-                '.' => {
-                    if ret.decimal_pos.is_none() {
-                        ret.decimal_pos = Some(i);
-                    } else {
-                        warn_incomplete_conv(str_in);
-                        break;
-                    }
-                }
-                _ => {
-                    warn_incomplete_conv(str_in);
-                    break;
-                }
-            };
-            i += 1;
-        }
-        ret.len_important = i;
-        ret
-    }
-}
-
-fn de_hex(src: &str, before_decimal: bool) -> String {
-    let radix_ten = base_conv::RadixTen;
-    let radix_hex = base_conv::RadixHex;
-    if before_decimal {
-        base_conv::base_conv_str(src, &radix_hex, &radix_ten)
-    } else {
-        let as_arrnum_hex = base_conv::str_to_arrnum(src, &radix_hex);
-        let s = format!(
-            "{}",
-            base_conv::base_conv_float(&as_arrnum_hex, radix_hex.get_max(), radix_ten.get_max())
-        );
-        if s.len() > 2 {
-            String::from(&s[2..])
-        } else {
-            // zero
-            s
-        }
-    }
-}
-
-// takes a string in,
-// truncates to a position,
-// bumps the last digit up one,
-// and if the digit was nine
-// propagate to the next, etc.
-fn _round_str_from(in_str: &str, position: usize) -> (String, bool) {
-    let mut it = in_str[0..position].chars();
-    let mut rev = String::new();
-    let mut i = position;
-    let mut finished_in_dec = false;
-    while let Some(c) = it.next_back() {
-        i -= 1;
-        match c {
-            '9' => {
-                rev.push('0');
-            }
-            e => {
-                rev.push(((e as u8) + 1) as char);
-                finished_in_dec = true;
-                break;
-            }
-        }
-    }
-    let mut fwd = String::from(&in_str[0..i]);
-    for ch in rev.chars().rev() {
-        fwd.push(ch);
-    }
-    (fwd, finished_in_dec)
-}
-
-fn round_terminal_digit(
-    before_dec: String,
-    after_dec: String,
-    position: usize,
-) -> (String, String) {
-    if position < after_dec.len() {
-        let digit_at_pos: char;
-        {
-            digit_at_pos = (&after_dec[position..=position]).chars().next().expect("");
-        }
-        if let '5'..='9' = digit_at_pos {
-            let (new_after_dec, finished_in_dec) = _round_str_from(&after_dec, position);
-            if finished_in_dec {
-                return (before_dec, new_after_dec);
-            } else {
-                let (new_before_dec, _) = _round_str_from(&before_dec, before_dec.len());
-                return (new_before_dec, new_after_dec);
-            }
-            // TODO
-        }
-    }
-    (before_dec, after_dec)
-}
-
-pub fn get_primitive_dec(
-    initial_prefix: &InitialPrefix,
-    str_in: &str,
-    analysis: &FloatAnalysis,
-    last_dec_place: usize,
-    sci_mode: Option<bool>,
-) -> FormatPrimitive {
-    let mut f: FormatPrimitive = Default::default();
-
-    // add negative sign section
-    if initial_prefix.sign == -1 {
-        f.prefix = Some(String::from("-"));
-    }
-
-    // assign the digits before and after the decimal points
-    // to separate slices. If no digits after decimal point,
-    // assign 0
-    let (mut first_segment_raw, second_segment_raw) = match analysis.decimal_pos {
-        Some(pos) => (&str_in[..pos], &str_in[pos + 1..]),
-        None => (str_in, "0"),
-    };
-    if first_segment_raw.is_empty() {
-        first_segment_raw = "0";
-    }
-    // convert to string, de_hexifying if input is in hex   // spell-checker:disable-line
-    let (first_segment, second_segment) = match initial_prefix.radix_in {
-        Base::Hex => (
-            de_hex(first_segment_raw, true),
-            de_hex(second_segment_raw, false),
-        ),
-        _ => (
-            String::from(first_segment_raw),
-            String::from(second_segment_raw),
-        ),
-    };
-    let (pre_dec_unrounded, post_dec_unrounded, mantissa) = if sci_mode.is_some() {
-        if first_segment.len() > 1 {
-            let mut post_dec = String::from(&first_segment[1..]);
-            post_dec.push_str(&second_segment);
-            (
-                String::from(&first_segment[0..1]),
-                post_dec,
-                first_segment.len() as isize - 1,
-            )
-        } else {
-            match first_segment
-                .chars()
-                .next()
-                .expect("float_common: no chars in first segment.")
-            {
-                '0' => {
-                    let it = second_segment.chars().enumerate();
-                    let mut m: isize = 0;
-                    let mut pre = String::from("0");
-                    let mut post = String::from("0");
-                    for (i, c) in it {
-                        match c {
-                            '0' => {}
-                            _ => {
-                                m = -((i as isize) + 1);
-                                pre = String::from(&second_segment[i..=i]);
-                                post = String::from(&second_segment[i + 1..]);
-                                break;
-                            }
-                        }
-                    }
-                    (pre, post, m)
-                }
-                _ => (first_segment, second_segment, 0),
-            }
-        }
-    } else {
-        (first_segment, second_segment, 0)
-    };
-
-    let (pre_dec_draft, post_dec_draft) =
-        round_terminal_digit(pre_dec_unrounded, post_dec_unrounded, last_dec_place - 1);
-
-    f.pre_decimal = Some(pre_dec_draft);
-    f.post_decimal = Some(post_dec_draft);
-    if let Some(capitalized) = sci_mode {
-        let si_ind = if capitalized { 'E' } else { 'e' };
-        f.suffix = Some(if mantissa >= 0 {
-            format!("{}+{:02}", si_ind, mantissa)
-        } else {
-            // negative sign is considered in format!s
-            // leading zeroes
-            format!("{}{:03}", si_ind, mantissa)
-        });
-    }
-
-    f
-}
-
-pub fn primitive_to_str_common(prim: &FormatPrimitive, field: &FormatField) -> String {
-    let mut final_str = String::new();
-    if let Some(ref prefix) = prim.prefix {
-        final_str.push_str(prefix);
-    }
-    match prim.pre_decimal {
-        Some(ref pre_decimal) => {
-            final_str.push_str(pre_decimal);
-        }
-        None => {
-            panic!(
-                "error, format primitives provided to int, will, incidentally under correct \
-                 behavior, always have a pre_dec value."
-            );
-        }
-    }
-    let decimal_places = field.second_field.unwrap_or(6);
-    match prim.post_decimal {
-        Some(ref post_decimal) => {
-            if !post_decimal.is_empty() && decimal_places > 0 {
-                final_str.push('.');
-                let len_avail = post_decimal.len() as u32;
-
-                if decimal_places >= len_avail {
-                    // println!("dec {}, len avail {}", decimal_places, len_avail);
-                    final_str.push_str(post_decimal);
-
-                    if *field.field_char != 'g' && *field.field_char != 'G' {
-                        let diff = decimal_places - len_avail;
-                        for _ in 0..diff {
-                            final_str.push('0');
-                        }
-                    }
-                } else {
-                    // println!("printing to only {}", decimal_places);
-                    final_str.push_str(&post_decimal[0..decimal_places as usize]);
-                }
-            }
-        }
-        None => {
-            panic!(
-                "error, format primitives provided to int, will, incidentally under correct \
-                 behavior, always have a pre_dec value."
-            );
-        }
-    }
-    if let Some(ref suffix) = prim.suffix {
-        final_str.push_str(suffix);
-    }
-
-    final_str
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/floatf.rs.html b/src/uucore/features/tokenize/num_format/formatters/floatf.rs.html deleted file mode 100644 index 2e5baa86e..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/floatf.rs.html +++ /dev/null @@ -1,88 +0,0 @@ -floatf.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-// spell-checker:ignore (ToDO) arrnum
-
-//! formatter for %f %F common-notation floating-point subs
-use super::super::format_field::FormatField;
-use super::super::formatter::{FormatPrimitive, Formatter, InitialPrefix};
-use super::float_common::{get_primitive_dec, primitive_to_str_common, FloatAnalysis};
-
-pub struct Floatf;
-impl Floatf {
-    pub fn new() -> Floatf {
-        Floatf
-    }
-}
-impl Formatter for Floatf {
-    fn get_primitive(
-        &self,
-        field: &FormatField,
-        initial_prefix: &InitialPrefix,
-        str_in: &str,
-    ) -> Option<FormatPrimitive> {
-        let second_field = field.second_field.unwrap_or(6) + 1;
-        let analysis = FloatAnalysis::analyze(
-            str_in,
-            initial_prefix,
-            None,
-            Some(second_field as usize),
-            false,
-        );
-        let f = get_primitive_dec(
-            initial_prefix,
-            &str_in[initial_prefix.offset..],
-            &analysis,
-            second_field as usize,
-            None,
-        );
-        Some(f)
-    }
-    fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String {
-        primitive_to_str_common(prim, &field)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/intf.rs.html b/src/uucore/features/tokenize/num_format/formatters/intf.rs.html deleted file mode 100644 index 064379b54..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/intf.rs.html +++ /dev/null @@ -1,564 +0,0 @@ -intf.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-// spell-checker:ignore (ToDO) arrnum
-
-//! formatter for unsigned and signed int subs
-//! unsigned int: %X %x (hex u64) %o (octal u64) %u (base ten u64)
-//! signed int: %i %d (both base ten i64)
-use super::super::format_field::FormatField;
-use super::super::formatter::{
-    get_it_at, warn_incomplete_conv, Base, FormatPrimitive, Formatter, InitialPrefix,
-};
-use std::i64;
-use std::u64;
-
-pub struct Intf {
-    _a: u32,
-}
-
-// see the Intf::analyze() function below
-struct IntAnalysis {
-    check_past_max: bool,
-    past_max: bool,
-    is_zero: bool,
-    len_digits: u8,
-}
-
-impl Intf {
-    pub fn new() -> Intf {
-        Intf { _a: 0 }
-    }
-    // take a ref to argument string, and basic information
-    // about prefix (offset, radix, sign), and analyze string
-    // to gain the IntAnalysis information above
-    // check_past_max: true if the number *may* be above max,
-    //   but we don't know either way. One of several reasons
-    //   we may have to parse as int.
-    // past_max: true if the object is past max, false if not
-    //  in the future we should probably combine these into an
-    //  Option<bool>
-    // is_zero: true if number is zero, false otherwise
-    // len_digits: length of digits used to create the int
-    //   important, for example, if we run into a non-valid character
-    fn analyze(str_in: &str, signed_out: bool, initial_prefix: &InitialPrefix) -> IntAnalysis {
-        // the maximum number of digits we could conceivably
-        // have before the decimal point without exceeding the
-        // max
-        let mut str_it = get_it_at(initial_prefix.offset, str_in);
-        let max_sd_in = if signed_out {
-            match initial_prefix.radix_in {
-                Base::Ten => 19,
-                Base::Octal => 21,
-                Base::Hex => 16,
-            }
-        } else {
-            match initial_prefix.radix_in {
-                Base::Ten => 20,
-                Base::Octal => 22,
-                Base::Hex => 16,
-            }
-        };
-        let mut ret = IntAnalysis {
-            check_past_max: false,
-            past_max: false,
-            is_zero: false,
-            len_digits: 0,
-        };
-
-        // todo turn this to a while let now that we know
-        // no special behavior on EOI break
-        loop {
-            let c_opt = str_it.next();
-            if let Some(c) = c_opt {
-                match c {
-                    '0'..='9' | 'a'..='f' | 'A'..='F' => {
-                        if ret.len_digits == 0 && c == '0' {
-                            ret.is_zero = true;
-                        } else if ret.is_zero {
-                            ret.is_zero = false;
-                        }
-                        ret.len_digits += 1;
-                        if ret.len_digits == max_sd_in {
-                            if let Some(next_ch) = str_it.next() {
-                                match next_ch {
-                                    '0'..='9' => {
-                                        ret.past_max = true;
-                                    }
-                                    _ => {
-                                        // force conversion
-                                        // to check if its above max.
-                                        // todo: spin out convert
-                                        // into fn, call it here to try
-                                        // read val, on Ok()
-                                        // save val for reuse later
-                                        // that way on same-base in and out
-                                        // we don't needlessly convert int
-                                        // to str, we can just copy it over.
-                                        ret.check_past_max = true;
-                                        str_it.put_back(next_ch);
-                                    }
-                                }
-                                if ret.past_max {
-                                    break;
-                                }
-                            } else {
-                                ret.check_past_max = true;
-                            }
-                        }
-                    }
-                    _ => {
-                        warn_incomplete_conv(str_in);
-                        break;
-                    }
-                }
-            } else {
-                // breaks on EOL
-                break;
-            }
-        }
-        ret
-    }
-    // get a FormatPrimitive of the maximum value for the field char
-    //  and given sign
-    fn get_max(field_char: char, sign: i8) -> FormatPrimitive {
-        let mut fmt_primitive: FormatPrimitive = Default::default();
-        fmt_primitive.pre_decimal = Some(String::from(match field_char {
-            'd' | 'i' => match sign {
-                1 => "9223372036854775807",
-                _ => {
-                    fmt_primitive.prefix = Some(String::from("-"));
-                    "9223372036854775808"
-                }
-            },
-            'x' | 'X' => "ffffffffffffffff",
-            'o' => "1777777777777777777777",
-            /* 'u' | */ _ => "18446744073709551615",
-        }));
-        fmt_primitive
-    }
-    // conv_from_segment contract:
-    // 1. takes
-    // - a string that begins with a non-zero digit, and proceeds
-    //  with zero or more following digits until the end of the string
-    // - a radix to interpret those digits as
-    // - a char that communicates:
-    //     whether to interpret+output the string as an i64 or u64
-    //     what radix to write the parsed number as.
-    // 2. parses it as a rust integral type
-    // 3. outputs FormatPrimitive with:
-    // - if the string falls within bounds:
-    //   number parsed and written in the correct radix
-    // - if the string falls outside bounds:
-    //   for i64 output, the int minimum or int max (depending on sign)
-    //   for u64 output, the u64 max in the output radix
-    fn conv_from_segment(
-        segment: &str,
-        radix_in: Base,
-        field_char: char,
-        sign: i8,
-    ) -> FormatPrimitive {
-        match field_char {
-            'i' | 'd' => match i64::from_str_radix(segment, radix_in as u32) {
-                Ok(i) => {
-                    let mut fmt_prim: FormatPrimitive = Default::default();
-                    if sign == -1 {
-                        fmt_prim.prefix = Some(String::from("-"));
-                    }
-                    fmt_prim.pre_decimal = Some(format!("{}", i));
-                    fmt_prim
-                }
-                Err(_) => Intf::get_max(field_char, sign),
-            },
-            _ => match u64::from_str_radix(segment, radix_in as u32) {
-                Ok(u) => {
-                    let mut fmt_prim: FormatPrimitive = Default::default();
-                    let u_f = if sign == -1 { u64::MAX - (u - 1) } else { u };
-                    fmt_prim.pre_decimal = Some(match field_char {
-                        'X' => format!("{:X}", u_f),
-                        'x' => format!("{:x}", u_f),
-                        'o' => format!("{:o}", u_f),
-                        _ => format!("{}", u_f),
-                    });
-                    fmt_prim
-                }
-                Err(_) => Intf::get_max(field_char, sign),
-            },
-        }
-    }
-}
-impl Formatter for Intf {
-    fn get_primitive(
-        &self,
-        field: &FormatField,
-        initial_prefix: &InitialPrefix,
-        str_in: &str,
-    ) -> Option<FormatPrimitive> {
-        let begin = initial_prefix.offset;
-
-        // get information about the string. see Intf::Analyze
-        // def above.
-        let convert_hints = Intf::analyze(
-            str_in,
-            *field.field_char == 'i' || *field.field_char == 'd',
-            initial_prefix,
-        );
-        // We always will have a format primitive to return
-        Some(if convert_hints.len_digits == 0 || convert_hints.is_zero {
-            // if non-digit or end is reached before a non-zero digit
-            FormatPrimitive {
-                pre_decimal: Some(String::from("0")),
-                ..Default::default()
-            }
-        } else if !convert_hints.past_max {
-            // if the number is or may be below the bounds limit
-            let radix_out = match *field.field_char {
-                'd' | 'i' | 'u' => Base::Ten,
-                'x' | 'X' => Base::Hex,
-                /* 'o' | */ _ => Base::Octal,
-            };
-            let radix_mismatch = !radix_out.eq(&initial_prefix.radix_in);
-            let decrease_from_max: bool = initial_prefix.sign == -1 && *field.field_char != 'i';
-            let end = begin + convert_hints.len_digits as usize;
-
-            // convert to int if any one of these is true:
-            // - number of digits in int indicates it may be past max
-            // - we're subtracting from the max
-            // - we're converting the base
-            if convert_hints.check_past_max || decrease_from_max || radix_mismatch {
-                // radix of in and out is the same.
-                let segment = String::from(&str_in[begin..end]);
-                Intf::conv_from_segment(
-                    &segment,
-                    initial_prefix.radix_in.clone(),
-                    *field.field_char,
-                    initial_prefix.sign,
-                )
-            } else {
-                // otherwise just do a straight string copy.
-                let mut fmt_prim: FormatPrimitive = Default::default();
-
-                // this is here and not earlier because
-                // zero doesn't get a sign, and conv_from_segment
-                // creates its format primitive separately
-                if initial_prefix.sign == -1 && *field.field_char == 'i' {
-                    fmt_prim.prefix = Some(String::from("-"));
-                }
-                fmt_prim.pre_decimal = Some(String::from(&str_in[begin..end]));
-                fmt_prim
-            }
-        } else {
-            Intf::get_max(*field.field_char, initial_prefix.sign)
-        })
-    }
-    fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String {
-        let mut final_str: String = String::new();
-        if let Some(ref prefix) = prim.prefix {
-            final_str.push_str(prefix);
-        }
-        // integral second fields is zero-padded minimum-width
-        // which gets handled before general minimum-width
-        match prim.pre_decimal {
-            Some(ref pre_decimal) => {
-                if let Some(min) = field.second_field {
-                    let mut i = min;
-                    let len = pre_decimal.len() as u32;
-                    while i > len {
-                        final_str.push('0');
-                        i -= 1;
-                    }
-                }
-                final_str.push_str(pre_decimal);
-            }
-            None => {
-                panic!(
-                    "error, format primitives provided to int, will, incidentally under \
-                     correct behavior, always have a pre_dec value."
-                );
-            }
-        }
-        final_str
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/mod.rs.html b/src/uucore/features/tokenize/num_format/formatters/mod.rs.html deleted file mode 100644 index a972e765c..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/mod.rs.html +++ /dev/null @@ -1,22 +0,0 @@ -mod.rs - source -
1
-2
-3
-4
-5
-6
-7
-8
-9
-
// spell-checker:ignore (vars) charf cninetyninehexfloatf decf floatf intf scif strf Cninety
-
-mod base_conv;
-pub mod cninetyninehexfloatf;
-pub mod decf;
-mod float_common;
-pub mod floatf;
-pub mod intf;
-pub mod scif;
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/formatters/scif.rs.html b/src/uucore/features/tokenize/num_format/formatters/scif.rs.html deleted file mode 100644 index 39ad5504d..000000000 --- a/src/uucore/features/tokenize/num_format/formatters/scif.rs.html +++ /dev/null @@ -1,88 +0,0 @@ -scif.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-
// spell-checker:ignore (vars) charf cninetyninehexfloatf decf floatf intf scif strf Cninety
-
-//! formatter for %e %E scientific notation subs
-use super::super::format_field::FormatField;
-use super::super::formatter::{FormatPrimitive, Formatter, InitialPrefix};
-use super::float_common::{get_primitive_dec, primitive_to_str_common, FloatAnalysis};
-
-pub struct Scif;
-
-impl Scif {
-    pub fn new() -> Scif {
-        Scif
-    }
-}
-impl Formatter for Scif {
-    fn get_primitive(
-        &self,
-        field: &FormatField,
-        initial_prefix: &InitialPrefix,
-        str_in: &str,
-    ) -> Option<FormatPrimitive> {
-        let second_field = field.second_field.unwrap_or(6) + 1;
-        let analysis = FloatAnalysis::analyze(
-            str_in,
-            initial_prefix,
-            Some(second_field as usize + 1),
-            None,
-            false,
-        );
-        let f = get_primitive_dec(
-            initial_prefix,
-            &str_in[initial_prefix.offset..],
-            &analysis,
-            second_field as usize,
-            Some(*field.field_char == 'E'),
-        );
-        Some(f)
-    }
-    fn primitive_to_str(&self, prim: &FormatPrimitive, field: FormatField) -> String {
-        primitive_to_str_common(prim, &field)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/mod.rs.html b/src/uucore/features/tokenize/num_format/mod.rs.html deleted file mode 100644 index 3ec0ddbc0..000000000 --- a/src/uucore/features/tokenize/num_format/mod.rs.html +++ /dev/null @@ -1,12 +0,0 @@ -mod.rs - source -
1
-2
-3
-4
-
pub mod format_field;
-mod formatter;
-mod formatters;
-pub mod num_format;
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/num_format/num_format.rs.html b/src/uucore/features/tokenize/num_format/num_format.rs.html deleted file mode 100644 index 735cf6e7b..000000000 --- a/src/uucore/features/tokenize/num_format/num_format.rs.html +++ /dev/null @@ -1,544 +0,0 @@ -num_format.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-
// spell-checker:ignore (vars) charf cninetyninehexfloatf decf floatf intf scif strf Cninety
-
-//! handles creating printed output for numeric substitutions
-
-// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-
-use std::env;
-use std::vec::Vec;
-
-use crate::display::Quotable;
-use crate::{show_error, show_warning};
-
-use super::format_field::{FieldType, FormatField};
-use super::formatter::{Base, FormatPrimitive, Formatter, InitialPrefix};
-use super::formatters::cninetyninehexfloatf::CninetyNineHexFloatf;
-use super::formatters::decf::Decf;
-use super::formatters::floatf::Floatf;
-use super::formatters::intf::Intf;
-use super::formatters::scif::Scif;
-
-pub fn warn_expected_numeric(pf_arg: &str) {
-    // important: keep println here not print
-    show_error!("{}: expected a numeric value", pf_arg.maybe_quote());
-}
-
-// when character constant arguments have excess characters
-// issue a warning when POSIXLY_CORRECT is not set
-fn warn_char_constant_ign(remaining_bytes: Vec<u8>) {
-    match env::var("POSIXLY_CORRECT") {
-        Ok(_) => {}
-        Err(e) => {
-            if let env::VarError::NotPresent = e {
-                show_warning!(
-                    "{:?}: character(s) following character \
-                     constant have been ignored",
-                    &*remaining_bytes
-                );
-            }
-        }
-    }
-}
-
-// this function looks at the first few
-// characters of an argument and returns a value if we can learn
-// a value from that (e.g. no argument? return 0, char constant? ret value)
-fn get_provided(str_in_opt: Option<&String>) -> Option<u8> {
-    const C_S_QUOTE: u8 = 39;
-    const C_D_QUOTE: u8 = 34;
-    match str_in_opt {
-        Some(str_in) => {
-            let mut byte_it = str_in.bytes();
-            if let Some(ch) = byte_it.next() {
-                match ch {
-                    C_S_QUOTE | C_D_QUOTE => {
-                        Some(match byte_it.next() {
-                            Some(second_byte) => {
-                                let mut ignored: Vec<u8> = Vec::new();
-                                for cont in byte_it {
-                                    ignored.push(cont);
-                                }
-                                if !ignored.is_empty() {
-                                    warn_char_constant_ign(ignored);
-                                }
-                                second_byte as u8
-                            }
-                            // no byte after quote
-                            None => {
-                                let so_far = (ch as u8 as char).to_string();
-                                warn_expected_numeric(&so_far);
-                                0_u8
-                            }
-                        })
-                    }
-                    // first byte is not quote
-                    _ => None, // no first byte
-                }
-            } else {
-                Some(0_u8)
-            }
-        }
-        None => Some(0),
-    }
-}
-
-// takes a string and returns
-// a sign,
-// a base,
-// and an offset for index after all
-//  initial spacing, sign, base prefix, and leading zeroes
-fn get_initial_prefix(str_in: &str, field_type: &FieldType) -> InitialPrefix {
-    let mut str_it = str_in.chars();
-    let mut ret = InitialPrefix {
-        radix_in: Base::Ten,
-        sign: 1,
-        offset: 0,
-    };
-    let mut top_char = str_it.next();
-    // skip spaces and ensure top_char is the first non-space char
-    // (or None if none exists)
-    while let Some(' ') = top_char {
-        ret.offset += 1;
-        top_char = str_it.next();
-    }
-    // parse sign
-    match top_char {
-        Some('+') => {
-            ret.offset += 1;
-            top_char = str_it.next();
-        }
-        Some('-') => {
-            ret.sign = -1;
-            ret.offset += 1;
-            top_char = str_it.next();
-        }
-        _ => {}
-    }
-    // we want to exit with offset being
-    // the index of the first non-zero
-    // digit before the decimal point or
-    // if there is none, the zero before the
-    // decimal point, or, if there is none,
-    // the decimal point.
-
-    // while we are determining the offset
-    // we will ensure as a convention
-    // the offset is always on the first character
-    // that we are yet unsure if it is the
-    // final offset. If the zero could be before
-    // a decimal point we don't move past the zero.
-    let mut is_hex = false;
-    if Some('0') == top_char {
-        if let Some(base) = str_it.next() {
-            // lead zeroes can only exist in
-            // octal and hex base
-            let mut do_clean_lead_zeroes = false;
-            match base {
-                'x' | 'X' => {
-                    is_hex = true;
-                    ret.offset += 2;
-                    ret.radix_in = Base::Hex;
-                    do_clean_lead_zeroes = true;
-                }
-                e @ '0'..='9' => {
-                    ret.offset += 1;
-                    if let FieldType::Intf = *field_type {
-                        ret.radix_in = Base::Octal;
-                    }
-                    if e == '0' {
-                        do_clean_lead_zeroes = true;
-                    }
-                }
-                _ => {}
-            }
-            if do_clean_lead_zeroes {
-                let mut first = true;
-                for ch_zero in str_it {
-                    // see notes on offset above:
-                    // this is why the offset for octal and decimal numbers
-                    // that reach this branch is 1 even though
-                    // they have already eaten the characters '00'
-                    // this is also why when hex encounters its
-                    // first zero it does not move its offset
-                    // forward because it does not know for sure
-                    // that it's current offset (of that zero)
-                    // is not the final offset,
-                    // whereas at that point octal knows its
-                    // current offset is not the final offset.
-                    match ch_zero {
-                        '0' => {
-                            if !(is_hex && first) {
-                                ret.offset += 1;
-                            }
-                        }
-                        // if decimal, keep last zero if one exists
-                        // (it's possible for last zero to
-                        // not exist at this branch if we're in hex input)
-                        '.' => break,
-                        // other digit, etc.
-                        _ => {
-                            if !(is_hex && first) {
-                                ret.offset += 1;
-                            }
-                            break;
-                        }
-                    }
-                    if first {
-                        first = false;
-                    }
-                }
-            }
-        }
-    }
-    ret
-}
-
-// this is the function a Sub's print will delegate to
-// if it is a numeric field, passing the field details
-// and an iterator to the argument
-pub fn num_format(field: &FormatField, in_str_opt: Option<&String>) -> Option<String> {
-    let field_char = field.field_char;
-
-    // num format mainly operates by further delegating to one of
-    // several Formatter structs depending on the field
-    // see formatter.rs for more details
-
-    // to do switch to static dispatch
-    let formatter: Box<dyn Formatter> = match *field.field_type {
-        FieldType::Intf => Box::new(Intf::new()),
-        FieldType::Floatf => Box::new(Floatf::new()),
-        FieldType::CninetyNineHexFloatf => Box::new(CninetyNineHexFloatf::new()),
-        FieldType::Scif => Box::new(Scif::new()),
-        FieldType::Decf => Box::new(Decf::new()),
-        _ => {
-            panic!("asked to do num format with non-num field type");
-        }
-    };
-    let prim_opt=
-        // if we can get an assumed value from looking at the first
-        // few characters, use that value to create the FormatPrimitive
-        if let Some(provided_num) = get_provided(in_str_opt) {
-            let mut tmp : FormatPrimitive = Default::default();
-            match field_char {
-                'u' | 'i' | 'd' => {
-                    tmp.pre_decimal = Some(
-                        format!("{}", provided_num));
-                },
-                'x' | 'X' => {
-                    tmp.pre_decimal = Some(
-                        format!("{:x}", provided_num));
-                },
-                'o' => {
-                    tmp.pre_decimal = Some(
-                        format!("{:o}", provided_num));
-                },
-                'e' | 'E' | 'g' | 'G' => {
-                    let as_str = format!("{}", provided_num);
-                    let initial_prefix = get_initial_prefix(
-                        &as_str,
-                        field.field_type
-                    );
-                    tmp=formatter.get_primitive(field, &initial_prefix, &as_str)
-                        .expect("err during default provided num");
-                },
-                _ => {
-                    tmp.pre_decimal = Some(
-                        format!("{}", provided_num));
-                    tmp.post_decimal = Some(String::from("0"));
-                }
-            }
-            Some(tmp)
-        } else {
-            // otherwise we'll interpret the argument as a number
-            // using the appropriate Formatter
-            let in_str = in_str_opt.expect(
-                "please send the devs this message:
-                \n get_provided is failing to ret as Some(0) on no str ");
-            // first get information about the beginning of the
-            // numeric argument that would be useful for
-            // any formatter (int or float)
-            let initial_prefix = get_initial_prefix(
-                in_str,
-                field.field_type
-            );
-            // then get the FormatPrimitive from the Formatter
-            formatter.get_primitive(field, &initial_prefix, in_str)
-        };
-    // if we have a formatPrimitive, print its results
-    // according to the field-char appropriate Formatter
-    prim_opt.map(|prim| formatter.primitive_to_str(&prim, field.clone()))
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/sub.rs.html b/src/uucore/features/tokenize/sub.rs.html deleted file mode 100644 index ba7abe3f1..000000000 --- a/src/uucore/features/tokenize/sub.rs.html +++ /dev/null @@ -1,844 +0,0 @@ -sub.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-
// spell-checker:ignore (vars) charf decf floatf intf scif strf Cninety
-
-//! Sub is a token that represents a
-//! segment of the format string that is a substitution
-//! it is created by Sub's implementation of the Tokenizer trait
-//! Subs which have numeric field chars make use of the num_format
-//! submodule
-use crate::show_error;
-use itertools::{put_back_n, PutBackN};
-use std::iter::Peekable;
-use std::process::exit;
-use std::slice::Iter;
-use std::str::Chars;
-// use std::collections::HashSet;
-
-use super::num_format::format_field::{FieldType, FormatField};
-use super::num_format::num_format;
-use super::token;
-use super::unescaped_text::UnescapedText;
-
-const EXIT_ERR: i32 = 1;
-
-fn err_conv(sofar: &str) {
-    show_error!("%{}: invalid conversion specification", sofar);
-    exit(EXIT_ERR);
-}
-
-fn convert_asterisk_arg_int(asterisk_arg: &str) -> isize {
-    // this is a costly way to parse the
-    // args used for asterisk values into integers
-    // from various bases. Actually doing it correctly
-    // (going through the pipeline to intf, but returning
-    // the integer instead of writing it to string and then
-    // back) is on the refactoring TODO
-    let field_type = FieldType::Intf;
-    let field_char = 'i';
-    let field_info = FormatField {
-        min_width: Some(0),
-        second_field: Some(0),
-        orig: &asterisk_arg.to_string(),
-        field_type: &field_type,
-        field_char: &field_char,
-    };
-    num_format::num_format(&field_info, Some(&asterisk_arg.to_string()))
-        .unwrap()
-        .parse::<isize>()
-        .unwrap()
-}
-
-pub enum CanAsterisk<T> {
-    Fixed(T),
-    Asterisk,
-}
-
-// Sub is a tokenizer which creates tokens
-// for substitution segments of a format string
-pub struct Sub {
-    min_width: CanAsterisk<Option<isize>>,
-    second_field: CanAsterisk<Option<u32>>,
-    field_char: char,
-    field_type: FieldType,
-    orig: String,
-}
-impl Sub {
-    pub fn new(
-        min_width: CanAsterisk<Option<isize>>,
-        second_field: CanAsterisk<Option<u32>>,
-        field_char: char,
-        orig: String,
-    ) -> Sub {
-        // for more dry printing, field characters are grouped
-        // in initialization of token.
-        let field_type = match field_char {
-            's' | 'b' => FieldType::Strf,
-            'd' | 'i' | 'u' | 'o' | 'x' | 'X' => FieldType::Intf,
-            'f' | 'F' => FieldType::Floatf,
-            'a' | 'A' => FieldType::CninetyNineHexFloatf,
-            'e' | 'E' => FieldType::Scif,
-            'g' | 'G' => FieldType::Decf,
-            'c' => FieldType::Charf,
-            _ => {
-                // should be unreachable.
-                println!("Invalid field type");
-                exit(EXIT_ERR);
-            }
-        };
-        Sub {
-            min_width,
-            second_field,
-            field_char,
-            field_type,
-            orig,
-        }
-    }
-}
-
-struct SubParser {
-    min_width_tmp: Option<String>,
-    min_width_is_asterisk: bool,
-    past_decimal: bool,
-    second_field_tmp: Option<String>,
-    second_field_is_asterisk: bool,
-    specifiers_found: bool,
-    field_char: Option<char>,
-    text_so_far: String,
-}
-
-impl SubParser {
-    fn new() -> SubParser {
-        SubParser {
-            min_width_tmp: None,
-            min_width_is_asterisk: false,
-            past_decimal: false,
-            second_field_tmp: None,
-            second_field_is_asterisk: false,
-            specifiers_found: false,
-            field_char: None,
-            text_so_far: String::new(),
-        }
-    }
-    fn from_it(
-        it: &mut PutBackN<Chars>,
-        args: &mut Peekable<Iter<String>>,
-    ) -> Option<Box<dyn token::Token>> {
-        let mut parser = SubParser::new();
-        if parser.sub_vals_retrieved(it) {
-            let t: Box<dyn token::Token> = SubParser::build_token(parser);
-            t.print(args);
-            Some(t)
-        } else {
-            None
-        }
-    }
-    fn build_token(parser: SubParser) -> Box<dyn token::Token> {
-        // not a self method so as to allow move of sub-parser vals.
-        // return new Sub struct as token
-        let t: Box<dyn token::Token> = Box::new(Sub::new(
-            if parser.min_width_is_asterisk {
-                CanAsterisk::Asterisk
-            } else {
-                CanAsterisk::Fixed(parser.min_width_tmp.map(|x| x.parse::<isize>().unwrap()))
-            },
-            if parser.second_field_is_asterisk {
-                CanAsterisk::Asterisk
-            } else {
-                CanAsterisk::Fixed(parser.second_field_tmp.map(|x| x.parse::<u32>().unwrap()))
-            },
-            parser.field_char.unwrap(),
-            parser.text_so_far,
-        ));
-        t
-    }
-    fn sub_vals_retrieved(&mut self, it: &mut PutBackN<Chars>) -> bool {
-        if !SubParser::successfully_eat_prefix(it, &mut self.text_so_far) {
-            return false;
-        }
-        // this fn in particular is much longer than it needs to be
-        // .could get a lot
-        // of code savings just by cleaning it up. shouldn't use a regex
-        // though, as we want to mimic the original behavior of printing
-        // the field as interpreted up until the error in the field.
-
-        let mut legal_fields = vec![
-            // 'a', 'A', //c99 hex float implementation not yet complete
-            'b', 'c', 'd', 'e', 'E', 'f', 'F', 'g', 'G', 'i', 'o', 's', 'u', 'x', 'X',
-        ];
-        let mut specifiers = vec!['h', 'j', 'l', 'L', 't', 'z'];
-        legal_fields.sort_unstable();
-        specifiers.sort_unstable();
-
-        // divide substitution from %([0-9]+)?(.[0-9+])?([a-zA-Z])
-        // into min_width, second_field, field_char
-        for ch in it {
-            self.text_so_far.push(ch);
-            match ch as char {
-                '-' | '*' | '0'..='9' => {
-                    if !self.past_decimal {
-                        if self.min_width_is_asterisk || self.specifiers_found {
-                            err_conv(&self.text_so_far);
-                        }
-                        if self.min_width_tmp.is_none() {
-                            self.min_width_tmp = Some(String::new());
-                        }
-                        match self.min_width_tmp.as_mut() {
-                            Some(x) => {
-                                if (ch == '-' || ch == '*') && !x.is_empty() {
-                                    err_conv(&self.text_so_far);
-                                }
-                                if ch == '*' {
-                                    self.min_width_is_asterisk = true;
-                                }
-                                x.push(ch);
-                            }
-                            None => {
-                                panic!("should be unreachable");
-                            }
-                        }
-                    } else {
-                        // second field should never have a
-                        // negative value
-                        if self.second_field_is_asterisk || ch == '-' || self.specifiers_found {
-                            err_conv(&self.text_so_far);
-                        }
-                        if self.second_field_tmp.is_none() {
-                            self.second_field_tmp = Some(String::new());
-                        }
-                        match self.second_field_tmp.as_mut() {
-                            Some(x) => {
-                                if ch == '*' && !x.is_empty() {
-                                    err_conv(&self.text_so_far);
-                                }
-                                if ch == '*' {
-                                    self.second_field_is_asterisk = true;
-                                }
-                                x.push(ch);
-                            }
-                            None => {
-                                panic!("should be unreachable");
-                            }
-                        }
-                    }
-                }
-                '.' => {
-                    if !self.past_decimal {
-                        self.past_decimal = true;
-                    } else {
-                        err_conv(&self.text_so_far);
-                    }
-                }
-                x if legal_fields.binary_search(&x).is_ok() => {
-                    self.field_char = Some(ch);
-                    self.text_so_far.push(ch);
-                    break;
-                }
-                x if specifiers.binary_search(&x).is_ok() => {
-                    if !self.past_decimal {
-                        self.past_decimal = true;
-                    }
-                    if !self.specifiers_found {
-                        self.specifiers_found = true;
-                    }
-                }
-                _ => {
-                    err_conv(&self.text_so_far);
-                }
-            }
-        }
-        if self.field_char.is_none() {
-            err_conv(&self.text_so_far);
-        }
-        let field_char_retrieved = self.field_char.unwrap();
-        if self.past_decimal && self.second_field_tmp.is_none() {
-            self.second_field_tmp = Some(String::from("0"));
-        }
-        self.validate_field_params(field_char_retrieved);
-        // if the dot is provided without a second field
-        // printf interprets it as 0.
-        if let Some(x) = self.second_field_tmp.as_mut() {
-            if x.is_empty() {
-                self.min_width_tmp = Some(String::from("0"));
-            }
-        }
-
-        true
-    }
-    fn successfully_eat_prefix(it: &mut PutBackN<Chars>, text_so_far: &mut String) -> bool {
-        // get next two chars,
-        // if they're '%%' we're not tokenizing it
-        // else put chars back
-        let preface = it.next();
-        let n_ch = it.next();
-        if preface == Some('%') && n_ch != Some('%') {
-            match n_ch {
-                Some(x) => {
-                    it.put_back(x);
-                    true
-                }
-                None => {
-                    text_so_far.push('%');
-                    err_conv(text_so_far);
-                    false
-                }
-            }
-        } else {
-            if let Some(x) = n_ch {
-                it.put_back(x)
-            };
-            if let Some(x) = preface {
-                it.put_back(x)
-            };
-            false
-        }
-    }
-    fn validate_field_params(&self, field_char: char) {
-        // check for illegal combinations here when possible vs
-        // on each application so we check less per application
-        // to do: move these checks to Sub::new
-        if (field_char == 's' && self.min_width_tmp == Some(String::from("0")))
-            || (field_char == 'c'
-                && (self.min_width_tmp == Some(String::from("0")) || self.past_decimal))
-            || (field_char == 'b'
-                && (self.min_width_tmp.is_some()
-                    || self.past_decimal
-                    || self.second_field_tmp.is_some()))
-        {
-            err_conv(&self.text_so_far);
-        }
-    }
-}
-
-impl token::Tokenizer for Sub {
-    fn from_it(
-        it: &mut PutBackN<Chars>,
-        args: &mut Peekable<Iter<String>>,
-    ) -> Option<Box<dyn token::Token>> {
-        SubParser::from_it(it, args)
-    }
-}
-impl token::Token for Sub {
-    fn print(&self, pf_args_it: &mut Peekable<Iter<String>>) {
-        let field = FormatField {
-            min_width: match self.min_width {
-                CanAsterisk::Fixed(x) => x,
-                CanAsterisk::Asterisk => {
-                    match pf_args_it.next() {
-                        // temporary, use intf.rs instead
-                        Some(x) => Some(convert_asterisk_arg_int(x)),
-                        None => Some(0),
-                    }
-                }
-            },
-            second_field: match self.second_field {
-                CanAsterisk::Fixed(x) => x,
-                CanAsterisk::Asterisk => {
-                    match pf_args_it.next() {
-                        // temporary, use intf.rs instead
-                        Some(x) => {
-                            let result = convert_asterisk_arg_int(x);
-                            if result < 0 {
-                                None
-                            } else {
-                                Some(result as u32)
-                            }
-                        }
-                        None => Some(0),
-                    }
-                }
-            },
-            field_char: &self.field_char,
-            field_type: &self.field_type,
-            orig: &self.orig,
-        };
-        let pf_arg = pf_args_it.next();
-
-        // minimum width is handled independently of actual
-        // field char
-        let pre_min_width_opt: Option<String> = match *field.field_type {
-            // if %s just return arg
-            // if %b use UnescapedText module's unescape-fn
-            // if %c return first char of arg
-            FieldType::Strf | FieldType::Charf => {
-                match pf_arg {
-                    Some(arg_string) => {
-                        match *field.field_char {
-                            's' => Some(match field.second_field {
-                                Some(max) => String::from(&arg_string[..max as usize]),
-                                None => arg_string.clone(),
-                            }),
-                            'b' => {
-                                let mut a_it = put_back_n(arg_string.chars());
-                                UnescapedText::from_it_core(&mut a_it, true);
-                                None
-                            }
-                            // for 'c': get iter of string vals,
-                            // get opt<char> of first val
-                            // and map it to opt<String>
-                            /* 'c' | */
-                            _ => arg_string.chars().next().map(|x| x.to_string()),
-                        }
-                    }
-                    None => None,
-                }
-            }
-            _ => {
-                // non string/char fields are delegated to num_format
-                num_format::num_format(&field, pf_arg)
-            }
-        };
-        if let Some(pre_min_width) = pre_min_width_opt {
-            // if have a string, print it, ensuring minimum width is met.
-            print!(
-                "{}",
-                match field.min_width {
-                    Some(min_width) => {
-                        let diff: isize = min_width.abs() as isize - pre_min_width.len() as isize;
-                        if diff > 0 {
-                            let mut final_str = String::new();
-                            // definitely more efficient ways
-                            //  to do this.
-                            let pad_before = min_width > 0;
-                            if !pad_before {
-                                final_str.push_str(&pre_min_width);
-                            }
-                            for _ in 0..diff {
-                                final_str.push(' ');
-                            }
-                            if pad_before {
-                                final_str.push_str(&pre_min_width);
-                            }
-                            final_str
-                        } else {
-                            pre_min_width
-                        }
-                    }
-                    None => pre_min_width,
-                }
-            );
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/token.rs.html b/src/uucore/features/tokenize/token.rs.html deleted file mode 100644 index a2d1bfaf8..000000000 --- a/src/uucore/features/tokenize/token.rs.html +++ /dev/null @@ -1,66 +0,0 @@ -token.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-
//! Traits and enums dealing with Tokenization of printf Format String
-use itertools::PutBackN;
-use std::iter::Peekable;
-use std::slice::Iter;
-use std::str::Chars;
-
-// A token object is an object that can print the expected output
-// of a contiguous segment of the format string, and
-// requires at most 1 argument
-pub trait Token {
-    fn print(&self, args: &mut Peekable<Iter<String>>);
-}
-
-// A tokenizer object is an object that takes an iterator
-// at a position in a format string, and sees whether
-// it can return a token of a type it knows how to produce
-// if so, return the token, move the iterator past the
-// format string text the token represents, and if an
-// argument is used move the argument iter forward one
-
-// creating token of a format string segment should also cause
-// printing of that token's value. Essentially tokenizing
-// a whole format string will print the format string and consume
-// a number of arguments equal to the number of argument-using tokens
-
-pub trait Tokenizer {
-    fn from_it(
-        it: &mut PutBackN<Chars>,
-        args: &mut Peekable<Iter<String>>,
-    ) -> Option<Box<dyn Token>>;
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/tokenize/unescaped_text.rs.html b/src/uucore/features/tokenize/unescaped_text.rs.html deleted file mode 100644 index e0f2e0531..000000000 --- a/src/uucore/features/tokenize/unescaped_text.rs.html +++ /dev/null @@ -1,556 +0,0 @@ -unescaped_text.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-
//! UnescapedText is a tokenizer impl
-//! for tokenizing character literals,
-//! and escaped character literals (of allowed escapes),
-//! into an unescaped text byte array
-
-// spell-checker:ignore (ToDO) retval hexchars octals printf's bvec vals coreutil addchar eval bytecode bslice
-
-use itertools::PutBackN;
-use std::char::from_u32;
-use std::io::{stdout, Write};
-use std::iter::Peekable;
-use std::process::exit;
-use std::slice::Iter;
-use std::str::Chars;
-
-use super::token;
-
-const EXIT_OK: i32 = 0;
-const EXIT_ERR: i32 = 1;
-
-// by default stdout only flushes
-// to console when a newline is passed.
-fn flush_char(c: char) {
-    print!("{}", c);
-    let _ = stdout().flush();
-}
-
-fn flush_str(s: &str) {
-    print!("{}", s);
-    let _ = stdout().flush();
-}
-
-fn flush_bytes(bslice: &[u8]) {
-    let _ = stdout().write(bslice);
-    let _ = stdout().flush();
-}
-
-pub struct UnescapedText(Vec<u8>);
-impl UnescapedText {
-    fn new() -> UnescapedText {
-        UnescapedText(Vec::new())
-    }
-    // take an iterator to the format string
-    // consume between min and max chars
-    // and return it as a base-X number
-    fn base_to_u32(min_chars: u8, max_chars: u8, base: u32, it: &mut PutBackN<Chars>) -> u32 {
-        let mut retval: u32 = 0;
-        let mut found = 0;
-        while found < max_chars {
-            // if end of input break
-            let nc = it.next();
-            match nc {
-                Some(digit) => {
-                    // if end of hexchars break
-                    match digit.to_digit(base) {
-                        Some(d) => {
-                            found += 1;
-                            retval *= base;
-                            retval += d;
-                        }
-                        None => {
-                            it.put_back(digit);
-                            break;
-                        }
-                    }
-                }
-                None => {
-                    break;
-                }
-            }
-        }
-        if found < min_chars {
-            // only ever expected for hex
-            println!("missing hexadecimal number in escape"); //todo stderr
-            exit(EXIT_ERR);
-        }
-        retval
-    }
-    // validates against valid
-    // IEC 10646 vals - these values
-    // are pinned against the more popular
-    // printf so as to not disrupt when
-    // dropped-in as a replacement.
-    fn validate_iec(val: u32, eight_word: bool) {
-        let mut preface = 'u';
-        let leading_zeros = if eight_word {
-            preface = 'U';
-            8
-        } else {
-            4
-        };
-        let err_msg = format!(
-            "invalid universal character name {0}{1:02$x}",
-            preface, val, leading_zeros
-        );
-        if (val < 159 && (val != 36 && val != 64 && val != 96)) || (val > 55296 && val < 57343) {
-            println!("{}", err_msg); //todo stderr
-            exit(EXIT_ERR);
-        }
-    }
-    // pass an iterator that succeeds an '/',
-    // and process the remaining character
-    // adding the unescaped bytes
-    // to the passed byte_vec
-    // in subs_mode change octal behavior
-    fn handle_escaped(byte_vec: &mut Vec<u8>, it: &mut PutBackN<Chars>, subs_mode: bool) {
-        let ch = it.next().unwrap_or('\\');
-        match ch {
-            '0'..='9' | 'x' => {
-                let min_len = 1;
-                let mut max_len = 2;
-                let mut base = 16;
-                let ignore = false;
-                match ch {
-                    'x' => {}
-                    e @ '0'..='9' => {
-                        max_len = 3;
-                        base = 8;
-                        // in practice, gnu coreutils printf
-                        // interprets octals without a
-                        // leading zero in %b
-                        // but it only skips leading zeros
-                        // in %b mode.
-                        // if we ever want to match gnu coreutil
-                        // printf's docs instead of its behavior
-                        // we'd set this to true.
-                        // if subs_mode && e != '0'
-                        //  { ignore = true; }
-                        if !subs_mode || e != '0' {
-                            it.put_back(ch);
-                        }
-                    }
-                    _ => {}
-                }
-                if !ignore {
-                    let val = (UnescapedText::base_to_u32(min_len, max_len, base, it) % 256) as u8;
-                    byte_vec.push(val);
-                    let bvec = [val];
-                    flush_bytes(&bvec);
-                } else {
-                    byte_vec.push(ch as u8);
-                }
-            }
-            e => {
-                // only for hex and octal
-                // is byte encoding specified.
-                // otherwise, why not leave the door open
-                // for other encodings unless it turns out
-                // a bottleneck.
-                let mut s = String::new();
-                let ch = match e {
-                    '\\' => '\\',
-                    '"' => '"',
-                    'n' => '\n',
-                    'r' => '\r',
-                    't' => '\t',
-                    // bell
-                    'a' => '\x07',
-                    // backspace
-                    'b' => '\x08',
-                    // vertical tab
-                    'v' => '\x0B',
-                    // form feed
-                    'f' => '\x0C',
-                    // escape character
-                    'e' => '\x1B',
-                    'c' => exit(EXIT_OK),
-                    'u' | 'U' => {
-                        let len = match e {
-                            'u' => 4,
-                            /* 'U' | */ _ => 8,
-                        };
-                        let val = UnescapedText::base_to_u32(len, len, 16, it);
-                        UnescapedText::validate_iec(val, false);
-                        if let Some(c) = from_u32(val) {
-                            c
-                        } else {
-                            '-'
-                        }
-                    }
-                    _ => {
-                        s.push('\\');
-                        ch
-                    }
-                };
-                s.push(ch);
-                flush_str(&s);
-                byte_vec.extend(s.bytes());
-            }
-        };
-    }
-
-    // take an iterator to a string,
-    // and return a wrapper around a Vec<u8> of unescaped bytes
-    // break on encounter of sub symbol ('%[^%]') unless called
-    // through %b subst.
-    pub fn from_it_core(
-        it: &mut PutBackN<Chars>,
-        subs_mode: bool,
-    ) -> Option<Box<dyn token::Token>> {
-        let mut addchar = false;
-        let mut new_text = UnescapedText::new();
-        let mut tmp_str = String::new();
-        {
-            let new_vec: &mut Vec<u8> = &mut (new_text.0);
-            while let Some(ch) = it.next() {
-                if !addchar {
-                    addchar = true;
-                }
-                match ch as char {
-                    x if x != '\\' && x != '%' => {
-                        // lazy branch eval
-                        // remember this fn could be called
-                        // many times in a single exec through %b
-                        flush_char(ch);
-                        tmp_str.push(ch);
-                    }
-                    '\\' => {
-                        // the literal may be a literal bytecode
-                        // and not valid utf-8. Str only supports
-                        // valid utf-8.
-                        // if we find the unnecessary drain
-                        // on non hex or octal escapes is costly
-                        // then we can make it faster/more complex
-                        // with as-necessary draining.
-                        if !tmp_str.is_empty() {
-                            new_vec.extend(tmp_str.bytes());
-                            tmp_str = String::new();
-                        }
-                        UnescapedText::handle_escaped(new_vec, it, subs_mode)
-                    }
-                    x if x == '%' && !subs_mode => {
-                        if let Some(follow) = it.next() {
-                            if follow == '%' {
-                                flush_char(ch);
-                                tmp_str.push(ch);
-                            } else {
-                                it.put_back(follow);
-                                it.put_back(ch);
-                                break;
-                            }
-                        } else {
-                            it.put_back(ch);
-                            break;
-                        }
-                    }
-                    _ => {
-                        flush_char(ch);
-                        tmp_str.push(ch);
-                    }
-                }
-            }
-            if !tmp_str.is_empty() {
-                new_vec.extend(tmp_str.bytes());
-            }
-        }
-        if addchar {
-            Some(Box::new(new_text))
-        } else {
-            None
-        }
-    }
-}
-impl token::Tokenizer for UnescapedText {
-    fn from_it(
-        it: &mut PutBackN<Chars>,
-        _: &mut Peekable<Iter<String>>,
-    ) -> Option<Box<dyn token::Token>> {
-        UnescapedText::from_it_core(it, false)
-    }
-}
-impl token::Token for UnescapedText {
-    fn print(&self, _: &mut Peekable<Iter<String>>) {
-        flush_bytes(&self.0[..]);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/features/utmpx.rs.html b/src/uucore/features/utmpx.rs.html deleted file mode 100644 index 6ed9c95c8..000000000 --- a/src/uucore/features/utmpx.rs.html +++ /dev/null @@ -1,720 +0,0 @@ -utmpx.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-
// This file is part of the uutils coreutils package.
-//
-// (c) Jian Zeng <anonymousknight96@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-//
-//! Aims to provide platform-independent methods to obtain login records
-//!
-//! **ONLY** support linux, macos and freebsd for the time being
-//!
-//! # Examples:
-//!
-//! ```
-//! use uucore::utmpx::Utmpx;
-//! for ut in Utmpx::iter_all_records() {
-//!     if ut.is_user_process() {
-//!         println!("{}: {}", ut.host(), ut.user())
-//!     }
-//! }
-//! ```
-//!
-//! Specifying the path to login record:
-//!
-//! ```
-//! use uucore::utmpx::Utmpx;
-//! for ut in Utmpx::iter_all_records_from("/some/where/else") {
-//!     if ut.is_user_process() {
-//!         println!("{}: {}", ut.host(), ut.user())
-//!     }
-//! }
-//! ```
-
-pub extern crate time;
-use self::time::{Timespec, Tm};
-
-use std::ffi::CString;
-use std::io::Result as IOResult;
-use std::marker::PhantomData;
-use std::os::unix::ffi::OsStrExt;
-use std::path::Path;
-use std::ptr;
-use std::sync::{Mutex, MutexGuard};
-
-pub use self::ut::*;
-use libc::utmpx;
-// pub use libc::getutxid;
-// pub use libc::getutxline;
-// pub use libc::pututxline;
-pub use libc::endutxent;
-pub use libc::getutxent;
-pub use libc::setutxent;
-#[cfg(any(target_vendor = "apple", target_os = "linux", target_os = "netbsd"))]
-pub use libc::utmpxname;
-#[cfg(target_os = "freebsd")]
-pub unsafe extern "C" fn utmpxname(_file: *const libc::c_char) -> libc::c_int {
-    0
-}
-
-use once_cell::sync::Lazy;
-
-use crate::*; // import macros from `../../macros.rs`
-
-// In case the c_char array doesn't end with NULL
-macro_rules! chars2string {
-    ($arr:expr) => {
-        $arr.iter()
-            .take_while(|i| **i > 0)
-            .map(|&i| i as u8 as char)
-            .collect::<String>()
-    };
-}
-
-#[cfg(target_os = "linux")]
-mod ut {
-    pub static DEFAULT_FILE: &str = "/var/run/utmp";
-
-    pub use libc::__UT_HOSTSIZE as UT_HOSTSIZE;
-    pub use libc::__UT_LINESIZE as UT_LINESIZE;
-    pub use libc::__UT_NAMESIZE as UT_NAMESIZE;
-    pub const UT_IDSIZE: usize = 4;
-
-    pub use libc::ACCOUNTING;
-    pub use libc::BOOT_TIME;
-    pub use libc::DEAD_PROCESS;
-    pub use libc::EMPTY;
-    pub use libc::INIT_PROCESS;
-    pub use libc::LOGIN_PROCESS;
-    pub use libc::NEW_TIME;
-    pub use libc::OLD_TIME;
-    pub use libc::RUN_LVL;
-    pub use libc::USER_PROCESS;
-}
-
-#[cfg(target_vendor = "apple")]
-mod ut {
-    pub static DEFAULT_FILE: &str = "/var/run/utmpx";
-
-    pub use libc::_UTX_HOSTSIZE as UT_HOSTSIZE;
-    pub use libc::_UTX_IDSIZE as UT_IDSIZE;
-    pub use libc::_UTX_LINESIZE as UT_LINESIZE;
-    pub use libc::_UTX_USERSIZE as UT_NAMESIZE;
-
-    pub use libc::ACCOUNTING;
-    pub use libc::BOOT_TIME;
-    pub use libc::DEAD_PROCESS;
-    pub use libc::EMPTY;
-    pub use libc::INIT_PROCESS;
-    pub use libc::LOGIN_PROCESS;
-    pub use libc::NEW_TIME;
-    pub use libc::OLD_TIME;
-    pub use libc::RUN_LVL;
-    pub use libc::SHUTDOWN_TIME;
-    pub use libc::SIGNATURE;
-    pub use libc::USER_PROCESS;
-}
-
-#[cfg(target_os = "freebsd")]
-mod ut {
-    pub static DEFAULT_FILE: &str = "";
-
-    pub const UT_LINESIZE: usize = 16;
-    pub const UT_NAMESIZE: usize = 32;
-    pub const UT_IDSIZE: usize = 8;
-    pub const UT_HOSTSIZE: usize = 128;
-
-    pub use libc::BOOT_TIME;
-    pub use libc::DEAD_PROCESS;
-    pub use libc::EMPTY;
-    pub use libc::INIT_PROCESS;
-    pub use libc::LOGIN_PROCESS;
-    pub use libc::NEW_TIME;
-    pub use libc::OLD_TIME;
-    pub use libc::SHUTDOWN_TIME;
-    pub use libc::USER_PROCESS;
-}
-
-#[cfg(target_os = "netbsd")]
-mod ut {
-    pub static DEFAULT_FILE: &str = "/var/run/utmpx";
-
-    pub const ACCOUNTING: usize = 9;
-    pub const SHUTDOWN_TIME: usize = 11;
-
-    pub use libc::_UTX_HOSTSIZE as UT_HOSTSIZE;
-    pub use libc::_UTX_IDSIZE as UT_IDSIZE;
-    pub use libc::_UTX_LINESIZE as UT_LINESIZE;
-    pub use libc::_UTX_USERSIZE as UT_NAMESIZE;
-
-    pub use libc::ACCOUNTING;
-    pub use libc::DEAD_PROCESS;
-    pub use libc::EMPTY;
-    pub use libc::INIT_PROCESS;
-    pub use libc::LOGIN_PROCESS;
-    pub use libc::NEW_TIME;
-    pub use libc::OLD_TIME;
-    pub use libc::RUN_LVL;
-    pub use libc::SIGNATURE;
-    pub use libc::USER_PROCESS;
-}
-
-pub struct Utmpx {
-    inner: utmpx,
-}
-
-impl Utmpx {
-    /// A.K.A. ut.ut_type
-    pub fn record_type(&self) -> i16 {
-        self.inner.ut_type as i16
-    }
-    /// A.K.A. ut.ut_pid
-    pub fn pid(&self) -> i32 {
-        self.inner.ut_pid as i32
-    }
-    /// A.K.A. ut.ut_id
-    pub fn terminal_suffix(&self) -> String {
-        chars2string!(self.inner.ut_id)
-    }
-    /// A.K.A. ut.ut_user
-    pub fn user(&self) -> String {
-        chars2string!(self.inner.ut_user)
-    }
-    /// A.K.A. ut.ut_host
-    pub fn host(&self) -> String {
-        chars2string!(self.inner.ut_host)
-    }
-    /// A.K.A. ut.ut_line
-    pub fn tty_device(&self) -> String {
-        chars2string!(self.inner.ut_line)
-    }
-    /// A.K.A. ut.ut_tv
-    pub fn login_time(&self) -> Tm {
-        time::at(Timespec::new(
-            self.inner.ut_tv.tv_sec as i64,
-            self.inner.ut_tv.tv_usec as i32,
-        ))
-    }
-    /// A.K.A. ut.ut_exit
-    ///
-    /// Return (e_termination, e_exit)
-    #[cfg(any(target_os = "linux", target_os = "android"))]
-    pub fn exit_status(&self) -> (i16, i16) {
-        (self.inner.ut_exit.e_termination, self.inner.ut_exit.e_exit)
-    }
-    /// A.K.A. ut.ut_exit
-    ///
-    /// Return (0, 0) on Non-Linux platform
-    #[cfg(not(any(target_os = "linux", target_os = "android")))]
-    pub fn exit_status(&self) -> (i16, i16) {
-        (0, 0)
-    }
-    /// Consumes the `Utmpx`, returning the underlying C struct utmpx
-    pub fn into_inner(self) -> utmpx {
-        self.inner
-    }
-    pub fn is_user_process(&self) -> bool {
-        !self.user().is_empty() && self.record_type() == USER_PROCESS
-    }
-
-    /// Canonicalize host name using DNS
-    pub fn canon_host(&self) -> IOResult<String> {
-        let host = self.host();
-
-        // TODO: change to use `split_once` when MSRV hits 1.52.0
-        // let (hostname, display) = host.split_once(':').unwrap_or((&host, ""));
-        let mut h = host.split(':');
-        let hostname = h.next().unwrap_or(&host);
-        let display = h.next().unwrap_or("");
-
-        if !hostname.is_empty() {
-            extern crate dns_lookup;
-            use dns_lookup::{getaddrinfo, AddrInfoHints};
-
-            const AI_CANONNAME: i32 = 0x2;
-            let hints = AddrInfoHints {
-                flags: AI_CANONNAME,
-                ..AddrInfoHints::default()
-            };
-            if let Ok(sockets) = getaddrinfo(Some(hostname), None, Some(hints)) {
-                let sockets = sockets.collect::<IOResult<Vec<_>>>()?;
-                for socket in sockets {
-                    if let Some(ai_canonname) = socket.canonname {
-                        return Ok(if display.is_empty() {
-                            ai_canonname
-                        } else {
-                            format!("{}:{}", ai_canonname, display)
-                        });
-                    }
-                }
-            } else {
-                // GNU coreutils has this behavior
-                return Ok(hostname.to_string());
-            }
-        }
-
-        Ok(host.to_string())
-    }
-
-    /// Iterate through all the utmp records.
-    ///
-    /// This will use the default location, or the path [`Utmpx::iter_all_records_from`]
-    /// was most recently called with.
-    ///
-    /// Only one instance of [`UtmpxIter`] may be active at a time. This
-    /// function will block as long as one is still active. Beware!
-    pub fn iter_all_records() -> UtmpxIter {
-        let iter = UtmpxIter::new();
-        unsafe {
-            // This can technically fail, and it would be nice to detect that,
-            // but it doesn't return anything so we'd have to do nasty things
-            // with errno.
-            setutxent();
-        }
-        iter
-    }
-
-    /// Iterate through all the utmp records from a specific file.
-    ///
-    /// No failure is reported or detected.
-    ///
-    /// This function affects subsequent calls to [`Utmpx::iter_all_records`].
-    ///
-    /// The same caveats as for [`Utmpx::iter_all_records`] apply.
-    pub fn iter_all_records_from<P: AsRef<Path>>(path: P) -> UtmpxIter {
-        let iter = UtmpxIter::new();
-        let path = CString::new(path.as_ref().as_os_str().as_bytes()).unwrap();
-        unsafe {
-            // In glibc, utmpxname() only fails if there's not enough memory
-            // to copy the string.
-            // Solaris returns 1 on success instead of 0. Supposedly there also
-            // exist systems where it returns void.
-            // GNU who on Debian seems to output nothing if an invalid filename
-            // is specified, no warning or anything.
-            // So this function is pretty crazy and we don't try to detect errors.
-            // Not much we can do besides pray.
-            utmpxname(path.as_ptr());
-            setutxent();
-        }
-        iter
-    }
-}
-
-// On some systems these functions are not thread-safe. On others they're
-// thread-local. Therefore we use a mutex to allow only one guard to exist at
-// a time, and make sure UtmpxIter cannot be sent across threads.
-//
-// I believe the only technical memory unsafety that could happen is a data
-// race while copying the data out of the pointer returned by getutxent(), but
-// ordinary race conditions are also very much possible.
-static LOCK: Lazy<Mutex<()>> = Lazy::new(|| Mutex::new(()));
-
-/// Iterator of login records
-pub struct UtmpxIter {
-    #[allow(dead_code)]
-    guard: MutexGuard<'static, ()>,
-    /// Ensure UtmpxIter is !Send. Technically redundant because MutexGuard
-    /// is also !Send.
-    phantom: PhantomData<std::rc::Rc<()>>,
-}
-
-impl UtmpxIter {
-    fn new() -> Self {
-        // PoisonErrors can safely be ignored
-        let guard = LOCK.lock().unwrap_or_else(|err| err.into_inner());
-        UtmpxIter {
-            guard,
-            phantom: PhantomData,
-        }
-    }
-}
-
-impl Iterator for UtmpxIter {
-    type Item = Utmpx;
-    fn next(&mut self) -> Option<Self::Item> {
-        unsafe {
-            let res = getutxent();
-            if !res.is_null() {
-                // The data behind this pointer will be replaced by the next
-                // call to getutxent(), so we have to read it now.
-                // All the strings live inline in the struct as arrays, which
-                // makes things easier.
-                Some(Utmpx {
-                    inner: ptr::read(res as *const _),
-                })
-            } else {
-                None
-            }
-        }
-    }
-}
-
-impl Drop for UtmpxIter {
-    fn drop(&mut self) {
-        unsafe {
-            endutxent();
-        }
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/lib.rs.html b/src/uucore/lib.rs.html deleted file mode 100644 index 7c524d01c..000000000 --- a/src/uucore/lib.rs.html +++ /dev/null @@ -1,610 +0,0 @@ -lib.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-
// library ~ (core/bundler file)
-
-// Copyright (C) ~ Alex Lyon <arcterus@mail.com>
-// Copyright (C) ~ Roy Ivy III <rivy.dev@gmail.com>; MIT license
-
-// * feature-gated external crates (re-shared as public internal modules)
-#[cfg(feature = "libc")]
-pub extern crate libc;
-#[cfg(feature = "winapi")]
-pub extern crate winapi;
-
-//## internal modules
-
-mod features; // feature-gated code modules
-mod macros; // crate macros (macro_rules-type; exported to `crate::...`)
-mod mods; // core cross-platform modules
-mod parser; // string parsing modules
-
-// * cross-platform modules
-pub use crate::mods::backup_control;
-pub use crate::mods::display;
-pub use crate::mods::error;
-pub use crate::mods::os;
-pub use crate::mods::panic;
-pub use crate::mods::ranges;
-pub use crate::mods::version_cmp;
-
-// * string parsing modules
-pub use crate::parser::parse_size;
-pub use crate::parser::parse_time;
-
-// * feature-gated modules
-#[cfg(feature = "encoding")]
-pub use crate::features::encoding;
-#[cfg(feature = "fs")]
-pub use crate::features::fs;
-#[cfg(feature = "fsext")]
-pub use crate::features::fsext;
-#[cfg(feature = "memo")]
-pub use crate::features::memo;
-#[cfg(feature = "ringbuffer")]
-pub use crate::features::ringbuffer;
-
-// * (platform-specific) feature-gated modules
-// ** non-windows (i.e. Unix + Fuchsia)
-#[cfg(all(not(windows), feature = "mode"))]
-pub use crate::features::mode;
-// ** unix-only
-#[cfg(all(unix, feature = "entries"))]
-pub use crate::features::entries;
-#[cfg(all(unix, feature = "perms"))]
-pub use crate::features::perms;
-#[cfg(all(unix, feature = "pipes"))]
-pub use crate::features::pipes;
-#[cfg(all(unix, feature = "process"))]
-pub use crate::features::process;
-#[cfg(all(unix, not(target_os = "fuchsia"), feature = "signals"))]
-pub use crate::features::signals;
-#[cfg(all(
-    unix,
-    not(target_os = "fuchsia"),
-    not(target_os = "redox"),
-    not(target_env = "musl"),
-    feature = "utmpx"
-))]
-pub use crate::features::utmpx;
-// ** windows-only
-#[cfg(all(windows, feature = "wide"))]
-pub use crate::features::wide;
-
-//## core functions
-
-use std::ffi::OsString;
-use std::sync::atomic::Ordering;
-
-use once_cell::sync::Lazy;
-
-use crate::display::Quotable;
-
-pub fn get_utility_is_second_arg() -> bool {
-    crate::macros::UTILITY_IS_SECOND_ARG.load(Ordering::SeqCst)
-}
-
-pub fn set_utility_is_second_arg() {
-    crate::macros::UTILITY_IS_SECOND_ARG.store(true, Ordering::SeqCst)
-}
-
-// args_os() can be expensive to call, it copies all of argv before iterating.
-// So if we want only the first arg or so it's overkill. We cache it.
-static ARGV: Lazy<Vec<OsString>> = Lazy::new(|| wild::args_os().collect());
-
-static UTIL_NAME: Lazy<String> = Lazy::new(|| {
-    if get_utility_is_second_arg() {
-        &ARGV[1]
-    } else {
-        &ARGV[0]
-    }
-    .to_string_lossy()
-    .into_owned()
-});
-
-/// Derive the utility name.
-pub fn util_name() -> &'static str {
-    &UTIL_NAME
-}
-
-static EXECUTION_PHRASE: Lazy<String> = Lazy::new(|| {
-    if get_utility_is_second_arg() {
-        ARGV.iter()
-            .take(2)
-            .map(|os_str| os_str.to_string_lossy().into_owned())
-            .collect::<Vec<_>>()
-            .join(" ")
-    } else {
-        ARGV[0].to_string_lossy().into_owned()
-    }
-});
-
-/// Derive the complete execution phrase for "usage".
-pub fn execution_phrase() -> &'static str {
-    &EXECUTION_PHRASE
-}
-
-pub enum InvalidEncodingHandling {
-    Ignore,
-    ConvertLossy,
-    Panic,
-}
-
-#[must_use]
-pub enum ConversionResult {
-    Complete(Vec<String>),
-    Lossy(Vec<String>),
-}
-
-impl ConversionResult {
-    pub fn accept_any(self) -> Vec<String> {
-        match self {
-            Self::Complete(result) => result,
-            Self::Lossy(result) => result,
-        }
-    }
-
-    pub fn expect_lossy(self, msg: &str) -> Vec<String> {
-        match self {
-            Self::Lossy(result) => result,
-            Self::Complete(_) => {
-                panic!("{}", msg);
-            }
-        }
-    }
-
-    pub fn expect_complete(self, msg: &str) -> Vec<String> {
-        match self {
-            Self::Complete(result) => result,
-            Self::Lossy(_) => {
-                panic!("{}", msg);
-            }
-        }
-    }
-}
-
-pub trait Args: Iterator<Item = OsString> + Sized {
-    /// Converts each iterator item to a String and collects these into a vector
-    /// On invalid encoding, the result will depend on the argument. This method allows to either drop entries with illegal encoding
-    /// completely (```InvalidEncodingHandling::Ignore```), convert them using lossy-conversion (```InvalidEncodingHandling::Lossy```) which will
-    /// result in strange strings or can chosen to panic (```InvalidEncodingHandling::Panic```).
-    /// # Arguments
-    /// * `handling` - This switch allows to switch the behavior, when invalid encoding is encountered
-    /// # Panics
-    /// * Occurs, when invalid encoding is encountered and handling is set to ```InvalidEncodingHandling::Panic```
-    fn collect_str(self, handling: InvalidEncodingHandling) -> ConversionResult {
-        let mut full_conversion = true;
-        let result_vector: Vec<String> = self
-            .map(|s| match s.into_string() {
-                Ok(string) => Ok(string),
-                Err(s_ret) => {
-                    full_conversion = false;
-                    eprintln!(
-                        "Input with broken encoding occurred! (s = {}) ",
-                        s_ret.quote()
-                    );
-                    match handling {
-                        InvalidEncodingHandling::Ignore => Err(String::new()),
-                        InvalidEncodingHandling::ConvertLossy => {
-                            Err(s_ret.to_string_lossy().into_owned())
-                        }
-                        InvalidEncodingHandling::Panic => {
-                            panic!("Broken encoding found but caller cannot handle it")
-                        }
-                    }
-                }
-            })
-            .filter(|s| match handling {
-                InvalidEncodingHandling::Ignore => s.is_ok(),
-                _ => true,
-            })
-            .map(|s| match s {
-                Ok(v) => v,
-                Err(e) => e,
-            })
-            .collect();
-
-        if full_conversion {
-            ConversionResult::Complete(result_vector)
-        } else {
-            ConversionResult::Lossy(result_vector)
-        }
-    }
-
-    /// convenience function for a more slim interface
-    fn collect_str_lossy(self) -> ConversionResult {
-        self.collect_str(InvalidEncodingHandling::ConvertLossy)
-    }
-}
-
-impl<T: Iterator<Item = OsString> + Sized> Args for T {}
-
-pub fn args_os() -> impl Iterator<Item = OsString> {
-    ARGV.iter().cloned()
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use std::ffi::OsStr;
-
-    fn make_os_vec(os_str: &OsStr) -> Vec<OsString> {
-        vec![
-            OsString::from("test"),
-            OsString::from("สวัสดี"), // spell-checker:disable-line
-            os_str.to_os_string(),
-        ]
-    }
-
-    fn collect_os_str(vec: Vec<OsString>, handling: InvalidEncodingHandling) -> ConversionResult {
-        vec.into_iter().collect_str(handling)
-    }
-
-    #[cfg(any(unix, target_os = "redox"))]
-    fn test_invalid_utf8_args_lossy(os_str: &OsStr) {
-        //assert our string is invalid utf8
-        assert!(os_str.to_os_string().into_string().is_err());
-        let test_vec = make_os_vec(os_str);
-        let collected_to_str =
-            collect_os_str(test_vec.clone(), InvalidEncodingHandling::ConvertLossy)
-                .expect_lossy("Lossy conversion expected in this test: bad encoding entries should be converted as good as possible");
-        //conservation of length - when accepting lossy conversion no arguments may be dropped
-        assert_eq!(collected_to_str.len(), test_vec.len());
-        //first indices identical
-        for index in 0..2 {
-            assert_eq!(
-                collected_to_str.get(index).unwrap(),
-                test_vec.get(index).unwrap().to_str().unwrap()
-            );
-        }
-        //lossy conversion for string with illegal encoding is done
-        assert_eq!(
-            *collected_to_str.get(2).unwrap(),
-            os_str.to_os_string().to_string_lossy()
-        );
-    }
-
-    #[cfg(any(unix, target_os = "redox"))]
-    fn test_invalid_utf8_args_ignore(os_str: &OsStr) {
-        //assert our string is invalid utf8
-        assert!(os_str.to_os_string().into_string().is_err());
-        let test_vec = make_os_vec(os_str);
-        let collected_to_str = collect_os_str(test_vec.clone(), InvalidEncodingHandling::Ignore)
-            .expect_lossy(
-                "Lossy conversion expected in this test: bad encoding entries should be filtered",
-            );
-        //assert that the broken entry is filtered out
-        assert_eq!(collected_to_str.len(), test_vec.len() - 1);
-        //assert that the unbroken indices are converted as expected
-        for index in 0..2 {
-            assert_eq!(
-                collected_to_str.get(index).unwrap(),
-                test_vec.get(index).unwrap().to_str().unwrap()
-            );
-        }
-    }
-
-    #[test]
-    fn valid_utf8_encoding_args() {
-        //create a vector containing only correct encoding
-        let test_vec = make_os_vec(&OsString::from("test2"));
-        //expect complete conversion without losses, even when lossy conversion is accepted
-        let _ = collect_os_str(test_vec, InvalidEncodingHandling::ConvertLossy)
-            .expect_complete("Lossy conversion not expected in this test");
-    }
-
-    #[cfg(any(unix, target_os = "redox"))]
-    #[test]
-    fn invalid_utf8_args_unix() {
-        use std::os::unix::ffi::OsStrExt;
-
-        let source = [0x66, 0x6f, 0x80, 0x6f];
-        let os_str = OsStr::from_bytes(&source[..]);
-        test_invalid_utf8_args_lossy(os_str);
-        test_invalid_utf8_args_ignore(os_str);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/macros.rs.html b/src/uucore/macros.rs.html deleted file mode 100644 index f6a3f8e8c..000000000 --- a/src/uucore/macros.rs.html +++ /dev/null @@ -1,556 +0,0 @@ -macros.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-
//! Macros for the uucore utilities.
-//!
-//! This module bundles all macros used across the uucore utilities. These
-//! include macros for reporting errors in various formats, aborting program
-//! execution and more.
-//!
-//! To make use of all macros in this module, they must be imported like so:
-//!
-//! ```ignore
-//! #[macro_use]
-//! extern crate uucore;
-//! ```
-//!
-//! Alternatively, you can import single macros by importing them through their
-//! fully qualified name like this:
-//!
-//! ```no_run
-//! use uucore::{show, crash};
-//! ```
-//!
-//! Here's an overview of the macros sorted by purpose
-//!
-//! - Print errors
-//!   - From types implementing [`crate::error::UError`]: [`show!`],
-//!     [`show_if_err!`]
-//!   - From custom messages: [`show_error!`], [`show_usage_error!`]
-//! - Print warnings: [`show_warning!`]
-//! - Terminate util execution
-//!   - Crash program: [`crash!`], [`crash_if_err!`]
-
-// spell-checker:ignore sourcepath targetpath
-
-use std::sync::atomic::AtomicBool;
-
-// This file is part of the uutils coreutils package.
-//
-// (c) Alex Lyon <arcterus@mail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-/// Whether we were called as a multicall binary ("coreutils <utility>")
-pub static UTILITY_IS_SECOND_ARG: AtomicBool = AtomicBool::new(false);
-
-//====
-
-/// Display a [`crate::error::UError`] and set global exit code.
-///
-/// Prints the error message contained in an [`crate::error::UError`] to stderr
-/// and sets the exit code through [`crate::error::set_exit_code`]. The printed
-/// error message is prepended with the calling utility's name. A call to this
-/// macro will not finish program execution.
-///
-/// # Examples
-///
-/// The following example would print a message "Some error occurred" and set
-/// the utility's exit code to 2.
-///
-/// ```
-/// # #[macro_use]
-/// # extern crate uucore;
-///
-/// use uucore::error::{self, USimpleError};
-///
-/// fn main() {
-///     let err = USimpleError::new(2, "Some error occurred.");
-///     show!(err);
-///     assert_eq!(error::get_exit_code(), 2);
-/// }
-/// ```
-///
-/// If not using [`crate::error::UError`], one may achieve the same behavior
-/// like this:
-///
-/// ```
-/// # #[macro_use]
-/// # extern crate uucore;
-///
-/// use uucore::error::set_exit_code;
-///
-/// fn main() {
-///     set_exit_code(2);
-///     show_error!("Some error occurred.");
-/// }
-/// ```
-#[macro_export]
-macro_rules! show(
-    ($err:expr) => ({
-        let e = $err;
-        $crate::error::set_exit_code(e.code());
-        eprintln!("{}: {}", $crate::util_name(), e);
-    })
-);
-
-/// Display an error and set global exit code in error case.
-///
-/// Wraps around [`show!`] and takes a [`crate::error::UResult`] instead of a
-/// [`crate::error::UError`] type. This macro invokes [`show!`] if the
-/// [`crate::error::UResult`] is an `Err`-variant. This can be invoked directly
-/// on the result of a function call, like in the `install` utility:
-///
-/// ```ignore
-/// show_if_err!(copy(sourcepath, &targetpath, b));
-/// ```
-///
-/// # Examples
-///
-/// ```ignore
-/// # #[macro_use]
-/// # extern crate uucore;
-/// # use uucore::error::{UError, UIoError, UResult, USimpleError};
-///
-/// # fn main() {
-/// let is_ok = Ok(1);
-/// // This does nothing at all
-/// show_if_err!(is_ok);
-///
-/// let is_err = Err(USimpleError::new(1, "I'm an error").into());
-/// // Calls `show!` on the contained USimpleError
-/// show_if_err!(is_err);
-/// # }
-/// ```
-///
-///
-#[macro_export]
-macro_rules! show_if_err(
-    ($res:expr) => ({
-        if let Err(e) = $res {
-            show!(e);
-        }
-    })
-);
-
-/// Show an error to stderr in a similar style to GNU coreutils.
-///
-/// Takes a [`format!`]-like input and prints it to stderr. The output is
-/// prepended with the current utility's name.
-///
-/// # Examples
-///
-/// ```
-/// # #[macro_use]
-/// # extern crate uucore;
-/// # fn main() {
-/// show_error!("Couldn't apply {} to {}", "foo", "bar");
-/// # }
-/// ```
-#[macro_export]
-macro_rules! show_error(
-    ($($args:tt)+) => ({
-        eprint!("{}: ", $crate::util_name());
-        eprintln!($($args)+);
-    })
-);
-
-/// Show a warning to stderr in a similar style to GNU coreutils.
-///
-/// Is this really required? Used in the following locations:
-///
-/// ./src/uu/head/src/head.rs:12
-/// ./src/uu/head/src/head.rs:424
-/// ./src/uu/head/src/head.rs:427
-/// ./src/uu/head/src/head.rs:430
-/// ./src/uu/head/src/head.rs:453
-/// ./src/uu/du/src/du.rs:339
-/// ./src/uu/wc/src/wc.rs:270
-/// ./src/uu/wc/src/wc.rs:273
-#[macro_export]
-macro_rules! show_error_custom_description (
-    ($err:expr,$($args:tt)+) => ({
-        eprint!("{}: {}: ", $crate::util_name(), $err);
-        eprintln!($($args)+);
-    })
-);
-
-/// Print a warning message to stderr.
-///
-/// Takes [`format!`]-compatible input and prepends it with the current
-/// utility's name and "warning: " before printing to stderr.
-///
-/// # Examples
-///
-/// ```
-/// # #[macro_use]
-/// # extern crate uucore;
-/// # fn main() {
-/// // outputs <name>: warning: Couldn't apply foo to bar
-/// show_warning!("Couldn't apply {} to {}", "foo", "bar");
-/// # }
-/// ```
-#[macro_export]
-macro_rules! show_warning(
-    ($($args:tt)+) => ({
-        eprint!("{}: warning: ", $crate::util_name());
-        eprintln!($($args)+);
-    })
-);
-
-/// Show a bad invocation help message in a similar style to GNU coreutils.
-///
-/// Takes a [`format!`]-compatible input and prepends it with the current
-/// utility's name before printing to stderr.
-///
-/// # Examples
-///
-/// ```
-/// # #[macro_use]
-/// # extern crate uucore;
-/// # fn main() {
-/// // outputs <name>: Couldn't apply foo to bar
-/// //         Try '<name> --help' for more information.
-/// show_usage_error!("Couldn't apply {} to {}", "foo", "bar");
-/// # }
-/// ```
-#[macro_export]
-macro_rules! show_usage_error(
-    ($($args:tt)+) => ({
-        eprint!("{}: ", $crate::util_name());
-        eprintln!($($args)+);
-        eprintln!("Try '{} --help' for more information.", $crate::execution_phrase());
-    })
-);
-
-/// Display an error and [`exit!`]
-///
-/// Displays the provided error message using [`show_error!`], then invokes
-/// [`std::process::exit`] with the provided exit code.
-///
-/// # Examples
-///
-/// ```should_panic
-/// # #[macro_use]
-/// # extern crate uucore;
-/// # fn main() {
-/// // outputs <name>: Couldn't apply foo to bar
-/// // and terminates execution
-/// crash!(1, "Couldn't apply {} to {}", "foo", "bar");
-/// # }
-/// ```
-#[macro_export]
-macro_rules! crash(
-    ($exit_code:expr, $($args:tt)+) => ({
-        $crate::show_error!($($args)+);
-        std::process::exit($exit_code);
-    })
-);
-
-/// Unwrap a [`std::result::Result`], crashing instead of panicking.
-///
-/// If the result is an `Ok`-variant, returns the value contained inside. If it
-/// is an `Err`-variant, invokes [`crash!`] with the formatted error instead.
-///
-/// # Examples
-///
-/// ```should_panic
-/// # #[macro_use]
-/// # extern crate uucore;
-/// # fn main() {
-/// let is_ok: Result<u32, &str> = Ok(1);
-/// // Does nothing
-/// crash_if_err!(1, is_ok);
-///
-/// let is_err: Result<u32, &str> = Err("This didn't work...");
-/// // Calls `crash!`
-/// crash_if_err!(1, is_err);
-/// # }
-/// ```
-#[macro_export]
-macro_rules! crash_if_err(
-    ($exit_code:expr, $exp:expr) => (
-        match $exp {
-            Ok(m) => m,
-            Err(f) => $crate::crash!($exit_code, "{}", f),
-        }
-    )
-);
-
-
- \ No newline at end of file diff --git a/src/uucore/mods.rs.html b/src/uucore/mods.rs.html deleted file mode 100644 index 4631b08aa..000000000 --- a/src/uucore/mods.rs.html +++ /dev/null @@ -1,22 +0,0 @@ -mods.rs - source -
1
-2
-3
-4
-5
-6
-7
-8
-9
-
// mods ~ cross-platforms modules (core/bundler file)
-
-pub mod backup_control;
-pub mod display;
-pub mod error;
-pub mod os;
-pub mod panic;
-pub mod ranges;
-pub mod version_cmp;
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/backup_control.rs.html b/src/uucore/mods/backup_control.rs.html deleted file mode 100644 index 1f03fcd91..000000000 --- a/src/uucore/mods/backup_control.rs.html +++ /dev/null @@ -1,1246 +0,0 @@ -backup_control.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-618
-619
-620
-621
-
//! Implement GNU-style backup functionality.
-//!
-//! This module implements the backup functionality as described in the [GNU
-//! manual][1]. It provides
-//!
-//! - pre-defined [`clap`-Arguments][2] for inclusion in utilities that
-//!   implement backups
-//! - determination of the [backup mode][3]
-//! - determination of the [backup suffix][4]
-//! - [backup target path construction][5]
-//! - [Error types][6] for backup-related errors
-//! - GNU-compliant [help texts][7] for backup-related errors
-//!
-//! Backup-functionality is implemented by the following utilities:
-//!
-//! - `cp`
-//! - `install`
-//! - `ln`
-//! - `mv`
-//!
-//!
-//! [1]: https://www.gnu.org/software/coreutils/manual/html_node/Backup-options.html
-//! [2]: arguments
-//! [3]: `determine_backup_mode()`
-//! [4]: `determine_backup_suffix()`
-//! [5]: `get_backup_path()`
-//! [6]: `BackupError`
-//! [7]: `BACKUP_CONTROL_LONG_HELP`
-//!
-//!
-//! # Usage example
-//!
-//! ```
-//! #[macro_use]
-//! extern crate uucore;
-//!
-//! use clap::{App, Arg, ArgMatches};
-//! use std::path::{Path, PathBuf};
-//! use uucore::backup_control::{self, BackupMode};
-//! use uucore::error::{UError, UResult};
-//!
-//! fn main() {
-//!     let usage = String::from("app [OPTION]... ARG");
-//!     let long_usage = String::from("And here's a detailed explanation");
-//!
-//!     let matches = App::new("app")
-//!         .arg(backup_control::arguments::backup())
-//!         .arg(backup_control::arguments::backup_no_args())
-//!         .arg(backup_control::arguments::suffix())
-//!         .override_usage(&usage[..])
-//!         .after_help(&*format!(
-//!             "{}\n{}",
-//!             long_usage,
-//!             backup_control::BACKUP_CONTROL_LONG_HELP
-//!         ))
-//!         .get_matches_from(vec![
-//!             "app", "--backup=t", "--suffix=bak~"
-//!         ]);
-//!
-//!     let backup_mode = match backup_control::determine_backup_mode(&matches) {
-//!         Err(e) => {
-//!             show!(e);
-//!             return;
-//!         },
-//!         Ok(mode) => mode,
-//!     };
-//!     let backup_suffix = backup_control::determine_backup_suffix(&matches);
-//!     let target_path = Path::new("/tmp/example");
-//!
-//!     let backup_path = backup_control::get_backup_path(
-//!         backup_mode, target_path, &backup_suffix
-//!     );
-//!
-//!     // Perform your backups here.
-//!
-//! }
-//! ```
-
-// spell-checker:ignore backupopt
-
-use crate::{
-    display::Quotable,
-    error::{UError, UResult},
-};
-use clap::ArgMatches;
-use std::{
-    env,
-    error::Error,
-    fmt::{Debug, Display},
-    path::{Path, PathBuf},
-};
-
-pub static BACKUP_CONTROL_VALUES: &[&str] = &[
-    "simple", "never", "numbered", "t", "existing", "nil", "none", "off",
-];
-
-pub static BACKUP_CONTROL_LONG_HELP: &str =
-    "The backup suffix is '~', unless set with --suffix or SIMPLE_BACKUP_SUFFIX.
-The version control method may be selected via the --backup option or through
-the VERSION_CONTROL environment variable.  Here are the values:
-
-  none, off       never make backups (even if --backup is given)
-  numbered, t     make numbered backups
-  existing, nil   numbered if numbered backups exist, simple otherwise
-  simple, never   always make simple backups";
-
-static VALID_ARGS_HELP: &str = "Valid arguments are:
-  - 'none', 'off'
-  - 'simple', 'never'
-  - 'existing', 'nil'
-  - 'numbered', 't'";
-
-/// Available backup modes.
-///
-/// The mapping of the backup modes to the CLI arguments is annotated on the
-/// enum variants.
-#[derive(Debug, Clone, Copy, Eq, PartialEq)]
-pub enum BackupMode {
-    /// Argument 'none', 'off'
-    NoBackup,
-    /// Argument 'simple', 'never'
-    SimpleBackup,
-    /// Argument 'numbered', 't'
-    NumberedBackup,
-    /// Argument 'existing', 'nil'
-    ExistingBackup,
-}
-
-/// Backup error types.
-///
-/// Errors are currently raised by [`determine_backup_mode`] only. All errors
-/// are implemented as [`UCustomError`] for uniform handling across utilities.
-#[derive(Debug, Eq, PartialEq)]
-pub enum BackupError {
-    /// An invalid argument (e.g. 'foo') was given as backup type. First
-    /// parameter is the argument, second is the arguments origin (CLI or
-    /// ENV-var)
-    InvalidArgument(String, String),
-    /// An ambiguous argument (e.g. 'n') was given as backup type. First
-    /// parameter is the argument, second is the arguments origin (CLI or
-    /// ENV-var)
-    AmbiguousArgument(String, String),
-    /// Currently unused
-    BackupImpossible(),
-    // BackupFailed(PathBuf, PathBuf, std::io::Error),
-}
-
-impl UError for BackupError {
-    fn code(&self) -> i32 {
-        match self {
-            BackupError::BackupImpossible() => 2,
-            _ => 1,
-        }
-    }
-
-    fn usage(&self) -> bool {
-        // Suggested by clippy.
-        matches!(
-            self,
-            BackupError::InvalidArgument(_, _) | BackupError::AmbiguousArgument(_, _)
-        )
-    }
-}
-
-impl Error for BackupError {}
-
-impl Display for BackupError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        use BackupError as BE;
-        match self {
-            BE::InvalidArgument(arg, origin) => write!(
-                f,
-                "invalid argument {} for '{}'\n{}",
-                arg.quote(),
-                origin,
-                VALID_ARGS_HELP
-            ),
-            BE::AmbiguousArgument(arg, origin) => write!(
-                f,
-                "ambiguous argument {} for '{}'\n{}",
-                arg.quote(),
-                origin,
-                VALID_ARGS_HELP
-            ),
-            BE::BackupImpossible() => write!(f, "cannot create backup"),
-            // Placeholder for later
-            // BE::BackupFailed(from, to, e) => Display::fmt(
-            //     &uio_error!(e, "failed to backup {} to {}", from.quote(), to.quote()),
-            //     f
-            // ),
-        }
-    }
-}
-
-/// Arguments for backup-related functionality.
-///
-/// Rather than implementing the `clap`-Arguments for every utility, it is
-/// recommended to include the `clap` arguments via the functions provided here.
-/// This way the backup-specific arguments are handled uniformly across
-/// utilities and can be maintained in one central place.
-pub mod arguments {
-    extern crate clap;
-
-    pub static OPT_BACKUP: &str = "backupopt_backup";
-    pub static OPT_BACKUP_NO_ARG: &str = "backupopt_b";
-    pub static OPT_SUFFIX: &str = "backupopt_suffix";
-
-    /// '--backup' argument
-    pub fn backup<'a>() -> clap::Arg<'a> {
-        clap::Arg::new(OPT_BACKUP)
-            .long("backup")
-            .help("make a backup of each existing destination file")
-            .takes_value(true)
-            .require_equals(true)
-            .min_values(0)
-            .value_name("CONTROL")
-    }
-
-    /// '-b' argument
-    pub fn backup_no_args<'a>() -> clap::Arg<'a> {
-        clap::Arg::new(OPT_BACKUP_NO_ARG)
-            .short('b')
-            .help("like --backup but does not accept an argument")
-    }
-
-    /// '-S, --suffix' argument
-    pub fn suffix<'a>() -> clap::Arg<'a> {
-        clap::Arg::new(OPT_SUFFIX)
-            .short('S')
-            .long("suffix")
-            .help("override the usual backup suffix")
-            .takes_value(true)
-            .value_name("SUFFIX")
-    }
-}
-
-/// Obtain the suffix to use for a backup.
-///
-/// In order of precedence, this function obtains the backup suffix
-///
-/// 1. From the '-S' or '--suffix' CLI argument, if present
-/// 2. From the "SIMPLE_BACKUP_SUFFIX" environment variable, if present
-/// 3. By using the default '~' if none of the others apply
-///
-/// This function directly takes [`clap::ArgMatches`] as argument and looks for
-/// the '-S' and '--suffix' arguments itself.
-pub fn determine_backup_suffix(matches: &ArgMatches) -> String {
-    let supplied_suffix = matches.value_of(arguments::OPT_SUFFIX);
-    if let Some(suffix) = supplied_suffix {
-        String::from(suffix)
-    } else {
-        env::var("SIMPLE_BACKUP_SUFFIX").unwrap_or_else(|_| "~".to_owned())
-    }
-}
-
-/// Determine the "mode" for the backup operation to perform, if any.
-///
-/// Parses the backup options according to the [GNU manual][1], and converts
-/// them to an instance of `BackupMode` for further processing.
-///
-/// Takes [`clap::ArgMatches`] as argument which **must** contain the options
-/// from [`arguments::backup()`] and [`arguments::backup_no_args()`]. Otherwise
-/// the `NoBackup` mode is returned unconditionally.
-///
-/// It is recommended for anyone who would like to implement the
-/// backup-functionality to use the arguments prepared in the `arguments`
-/// submodule (see examples)
-///
-/// [1]: https://www.gnu.org/software/coreutils/manual/html_node/Backup-options.html
-///
-///
-/// # Errors
-///
-/// If an argument supplied directly to the long `backup` option, or read in
-/// through the `VERSION CONTROL` env var is ambiguous (i.e. may resolve to
-/// multiple backup modes) or invalid, an [`InvalidArgument`][10] or
-/// [`AmbiguousArgument`][11] error is returned, respectively.
-///
-/// [10]: BackupError::InvalidArgument
-/// [11]: BackupError::AmbiguousArgument
-///
-///
-/// # Examples
-///
-/// Here's how one would integrate the backup mode determination into an
-/// application.
-///
-/// ```
-/// #[macro_use]
-/// extern crate uucore;
-/// use uucore::backup_control::{self, BackupMode};
-/// use clap::{App, Arg, ArgMatches};
-///
-/// fn main() {
-///     let matches = App::new("app")
-///         .arg(backup_control::arguments::backup())
-///         .arg(backup_control::arguments::backup_no_args())
-///         .get_matches_from(vec![
-///             "app", "-b", "--backup=t"
-///         ]);
-///
-///     let backup_mode = backup_control::determine_backup_mode(&matches).unwrap();
-///     assert_eq!(backup_mode, BackupMode::NumberedBackup)
-/// }
-/// ```
-///
-/// This example shows an ambiguous input, as 'n' may resolve to 4 different
-/// backup modes.
-///
-///
-/// ```
-/// #[macro_use]
-/// extern crate uucore;
-/// use uucore::backup_control::{self, BackupMode, BackupError};
-/// use clap::{App, Arg, ArgMatches};
-///
-/// fn main() {
-///     let matches = App::new("app")
-///         .arg(backup_control::arguments::backup())
-///         .arg(backup_control::arguments::backup_no_args())
-///         .get_matches_from(vec![
-///             "app", "-b", "--backup=n"
-///         ]);
-///
-///     let backup_mode = backup_control::determine_backup_mode(&matches);
-///
-///     assert!(backup_mode.is_err());
-///     let err = backup_mode.unwrap_err();
-///     // assert_eq!(err, BackupError::AmbiguousArgument);
-///     // Use uucore functionality to show the error to the user
-///     show!(err);
-/// }
-/// ```
-pub fn determine_backup_mode(matches: &ArgMatches) -> UResult<BackupMode> {
-    if matches.is_present(arguments::OPT_BACKUP) {
-        // Use method to determine the type of backups to make. When this option
-        // is used but method is not specified, then the value of the
-        // VERSION_CONTROL environment variable is used. And if VERSION_CONTROL
-        // is not set, the default backup type is 'existing'.
-        if let Some(method) = matches.value_of(arguments::OPT_BACKUP) {
-            // Second argument is for the error string that is returned.
-            match_method(method, "backup type")
-        } else if let Ok(method) = env::var("VERSION_CONTROL") {
-            // Second argument is for the error string that is returned.
-            match_method(&method, "$VERSION_CONTROL")
-        } else {
-            // Default if no argument is provided to '--backup'
-            Ok(BackupMode::ExistingBackup)
-        }
-    } else if matches.is_present(arguments::OPT_BACKUP_NO_ARG) {
-        // the short form of this option, -b does not accept any argument.
-        // Using -b is equivalent to using --backup=existing.
-        Ok(BackupMode::ExistingBackup)
-    } else {
-        // No option was present at all
-        Ok(BackupMode::NoBackup)
-    }
-}
-
-/// Match a backup option string to a `BackupMode`.
-///
-/// The GNU manual specifies that abbreviations to options are valid as long as
-/// they aren't ambiguous. This function matches the given `method` argument
-/// against all valid backup options (via `starts_with`), and returns a valid
-/// [`BackupMode`] if exactly one backup option matches the `method` given.
-///
-/// `origin` is required in order to format the generated error message
-/// properly, when an error occurs.
-///
-///
-/// # Errors
-///
-/// If `method` is invalid or ambiguous (i.e. may resolve to multiple backup
-/// modes), an [`InvalidArgument`][10] or [`AmbiguousArgument`][11] error is
-/// returned, respectively.
-///
-/// [10]: BackupError::InvalidArgument
-/// [11]: BackupError::AmbiguousArgument
-fn match_method(method: &str, origin: &str) -> UResult<BackupMode> {
-    let matches: Vec<&&str> = BACKUP_CONTROL_VALUES
-        .iter()
-        .filter(|val| val.starts_with(method))
-        .collect();
-    if matches.len() == 1 {
-        match *matches[0] {
-            "simple" | "never" => Ok(BackupMode::SimpleBackup),
-            "numbered" | "t" => Ok(BackupMode::NumberedBackup),
-            "existing" | "nil" => Ok(BackupMode::ExistingBackup),
-            "none" | "off" => Ok(BackupMode::NoBackup),
-            _ => unreachable!(), // cannot happen as we must have exactly one match
-                                 // from the list above.
-        }
-    } else if matches.is_empty() {
-        Err(BackupError::InvalidArgument(method.to_string(), origin.to_string()).into())
-    } else {
-        Err(BackupError::AmbiguousArgument(method.to_string(), origin.to_string()).into())
-    }
-}
-
-pub fn get_backup_path(
-    backup_mode: BackupMode,
-    backup_path: &Path,
-    suffix: &str,
-) -> Option<PathBuf> {
-    match backup_mode {
-        BackupMode::NoBackup => None,
-        BackupMode::SimpleBackup => Some(simple_backup_path(backup_path, suffix)),
-        BackupMode::NumberedBackup => Some(numbered_backup_path(backup_path)),
-        BackupMode::ExistingBackup => Some(existing_backup_path(backup_path, suffix)),
-    }
-}
-
-fn simple_backup_path(path: &Path, suffix: &str) -> PathBuf {
-    let mut p = path.to_string_lossy().into_owned();
-    p.push_str(suffix);
-    PathBuf::from(p)
-}
-
-fn numbered_backup_path(path: &Path) -> PathBuf {
-    for i in 1_u64.. {
-        let path_str = &format!("{}.~{}~", path.to_string_lossy(), i);
-        let path = Path::new(path_str);
-        if !path.exists() {
-            return path.to_path_buf();
-        }
-    }
-    panic!("cannot create backup")
-}
-
-fn existing_backup_path(path: &Path, suffix: &str) -> PathBuf {
-    let test_path_str = &format!("{}.~1~", path.to_string_lossy());
-    let test_path = Path::new(test_path_str);
-    if test_path.exists() {
-        numbered_backup_path(path)
-    } else {
-        simple_backup_path(path, suffix)
-    }
-}
-
-//
-// Tests for this module
-//
-#[cfg(test)]
-mod tests {
-    use super::*;
-    use std::env;
-    // Required to instantiate mutex in shared context
-    use clap::App;
-    use lazy_static::lazy_static;
-    use std::sync::Mutex;
-
-    // The mutex is required here as by default all tests are run as separate
-    // threads under the same parent process. As environment variables are
-    // specific to processes (and thus shared among threads), data races *will*
-    // occur if no precautions are taken. Thus we have all tests that rely on
-    // environment variables lock this empty mutex to ensure they don't access
-    // it concurrently.
-    lazy_static! {
-        static ref TEST_MUTEX: Mutex<()> = Mutex::new(());
-    }
-
-    // Environment variable for "VERSION_CONTROL"
-    static ENV_VERSION_CONTROL: &str = "VERSION_CONTROL";
-
-    fn make_app() -> clap::App<'static> {
-        App::new("app")
-            .arg(arguments::backup())
-            .arg(arguments::backup_no_args())
-            .arg(arguments::suffix())
-    }
-
-    // Defaults to --backup=existing
-    #[test]
-    fn test_backup_mode_short_only() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "-b"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::ExistingBackup);
-    }
-
-    // --backup takes precedence over -b
-    #[test]
-    fn test_backup_mode_long_preferred_over_short() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "-b", "--backup=none"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::NoBackup);
-    }
-
-    // --backup can be passed without an argument
-    #[test]
-    fn test_backup_mode_long_without_args_no_env() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "--backup"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::ExistingBackup);
-    }
-
-    // --backup can be passed with an argument only
-    #[test]
-    fn test_backup_mode_long_with_args() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "--backup=simple"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::SimpleBackup);
-    }
-
-    // --backup errors on invalid argument
-    #[test]
-    fn test_backup_mode_long_with_args_invalid() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "--backup=foobar"]);
-
-        let result = determine_backup_mode(&matches);
-
-        assert!(result.is_err());
-        let text = format!("{}", result.unwrap_err());
-        assert!(text.contains("invalid argument 'foobar' for 'backup type'"));
-    }
-
-    // --backup errors on ambiguous argument
-    #[test]
-    fn test_backup_mode_long_with_args_ambiguous() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "--backup=n"]);
-
-        let result = determine_backup_mode(&matches);
-
-        assert!(result.is_err());
-        let text = format!("{}", result.unwrap_err());
-        assert!(text.contains("ambiguous argument 'n' for 'backup type'"));
-    }
-
-    // --backup accepts shortened arguments (si for simple)
-    #[test]
-    fn test_backup_mode_long_with_arg_shortened() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        let matches = make_app().get_matches_from(vec!["app", "--backup=si"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::SimpleBackup);
-    }
-
-    // -b ignores the "VERSION_CONTROL" environment variable
-    #[test]
-    fn test_backup_mode_short_only_ignore_env() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        env::set_var(ENV_VERSION_CONTROL, "none");
-        let matches = make_app().get_matches_from(vec!["app", "-b"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::ExistingBackup);
-        env::remove_var(ENV_VERSION_CONTROL);
-    }
-
-    // --backup can be passed without an argument, but reads env var if existent
-    #[test]
-    fn test_backup_mode_long_without_args_with_env() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        env::set_var(ENV_VERSION_CONTROL, "none");
-        let matches = make_app().get_matches_from(vec!["app", "--backup"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::NoBackup);
-        env::remove_var(ENV_VERSION_CONTROL);
-    }
-
-    // --backup errors on invalid VERSION_CONTROL env var
-    #[test]
-    fn test_backup_mode_long_with_env_var_invalid() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        env::set_var(ENV_VERSION_CONTROL, "foobar");
-        let matches = make_app().get_matches_from(vec!["app", "--backup"]);
-
-        let result = determine_backup_mode(&matches);
-
-        assert!(result.is_err());
-        let text = format!("{}", result.unwrap_err());
-        assert!(text.contains("invalid argument 'foobar' for '$VERSION_CONTROL'"));
-        env::remove_var(ENV_VERSION_CONTROL);
-    }
-
-    // --backup errors on ambiguous VERSION_CONTROL env var
-    #[test]
-    fn test_backup_mode_long_with_env_var_ambiguous() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        env::set_var(ENV_VERSION_CONTROL, "n");
-        let matches = make_app().get_matches_from(vec!["app", "--backup"]);
-
-        let result = determine_backup_mode(&matches);
-
-        assert!(result.is_err());
-        let text = format!("{}", result.unwrap_err());
-        assert!(text.contains("ambiguous argument 'n' for '$VERSION_CONTROL'"));
-        env::remove_var(ENV_VERSION_CONTROL);
-    }
-
-    // --backup accepts shortened env vars (si for simple)
-    #[test]
-    fn test_backup_mode_long_with_env_var_shortened() {
-        let _dummy = TEST_MUTEX.lock().unwrap();
-        env::set_var(ENV_VERSION_CONTROL, "si");
-        let matches = make_app().get_matches_from(vec!["app", "--backup"]);
-
-        let result = determine_backup_mode(&matches).unwrap();
-
-        assert_eq!(result, BackupMode::SimpleBackup);
-        env::remove_var(ENV_VERSION_CONTROL);
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/display.rs.html b/src/uucore/mods/display.rs.html deleted file mode 100644 index 9157880c9..000000000 --- a/src/uucore/mods/display.rs.html +++ /dev/null @@ -1,142 +0,0 @@ -display.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-44
-45
-46
-47
-48
-49
-50
-51
-52
-53
-54
-55
-56
-57
-58
-59
-60
-61
-62
-63
-64
-65
-66
-67
-68
-69
-
/// Utilities for printing paths, with special attention paid to special
-/// characters and invalid unicode.
-///
-/// For displaying paths in informational messages use `Quotable::quote`. This
-/// will wrap quotes around the filename and add the necessary escapes to make
-/// it copy/paste-able into a shell.
-///
-/// For writing raw paths to stdout when the output should not be quoted or escaped,
-/// use `println_verbatim`. This will preserve invalid unicode.
-///
-/// # Examples
-/// ```
-/// use std::path::Path;
-/// use uucore::display::{Quotable, println_verbatim};
-///
-/// let path = Path::new("foo/bar.baz");
-///
-/// println!("Found file {}", path.quote()); // Prints "Found file 'foo/bar.baz'"
-/// println_verbatim(path)?; // Prints "foo/bar.baz"
-/// # Ok::<(), std::io::Error>(())
-/// ```
-use std::ffi::OsStr;
-use std::io::{self, Write as IoWrite};
-
-#[cfg(unix)]
-use std::os::unix::ffi::OsStrExt;
-#[cfg(target_os = "wasi")]
-use std::os::wasi::ffi::OsStrExt;
-
-// These used to be defined here, but they live in their own crate now.
-pub use os_display::{Quotable, Quoted};
-
-/// Print a path (or `OsStr`-like object) directly to stdout, with a trailing newline,
-/// without losing any information if its encoding is invalid.
-///
-/// This function is appropriate for commands where printing paths is the point and the
-/// output is likely to be captured, like `pwd` and `basename`. For informational output
-/// use `Quotable::quote`.
-///
-/// FIXME: This is lossy on Windows. It could probably be implemented using some low-level
-/// API that takes UTF-16, without going through io::Write. This is not a big priority
-/// because broken filenames are much rarer on Windows than on Unix.
-pub fn println_verbatim<S: AsRef<OsStr>>(text: S) -> io::Result<()> {
-    let stdout = io::stdout();
-    let mut stdout = stdout.lock();
-    #[cfg(any(unix, target_os = "wasi"))]
-    {
-        stdout.write_all(text.as_ref().as_bytes())?;
-        stdout.write_all(b"\n")?;
-    }
-    #[cfg(not(any(unix, target_os = "wasi")))]
-    {
-        writeln!(stdout, "{}", std::path::Path::new(text.as_ref()).display())?;
-    }
-    Ok(())
-}
-
-/// Like `println_verbatim`, without the trailing newline.
-pub fn print_verbatim<S: AsRef<OsStr>>(text: S) -> io::Result<()> {
-    let mut stdout = io::stdout();
-    #[cfg(any(unix, target_os = "wasi"))]
-    {
-        stdout.write_all(text.as_ref().as_bytes())
-    }
-    #[cfg(not(any(unix, target_os = "wasi")))]
-    {
-        write!(stdout, "{}", std::path::Path::new(text.as_ref()).display())
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/error.rs.html b/src/uucore/mods/error.rs.html deleted file mode 100644 index c8a0a1f0a..000000000 --- a/src/uucore/mods/error.rs.html +++ /dev/null @@ -1,1238 +0,0 @@ -error.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-362
-363
-364
-365
-366
-367
-368
-369
-370
-371
-372
-373
-374
-375
-376
-377
-378
-379
-380
-381
-382
-383
-384
-385
-386
-387
-388
-389
-390
-391
-392
-393
-394
-395
-396
-397
-398
-399
-400
-401
-402
-403
-404
-405
-406
-407
-408
-409
-410
-411
-412
-413
-414
-415
-416
-417
-418
-419
-420
-421
-422
-423
-424
-425
-426
-427
-428
-429
-430
-431
-432
-433
-434
-435
-436
-437
-438
-439
-440
-441
-442
-443
-444
-445
-446
-447
-448
-449
-450
-451
-452
-453
-454
-455
-456
-457
-458
-459
-460
-461
-462
-463
-464
-465
-466
-467
-468
-469
-470
-471
-472
-473
-474
-475
-476
-477
-478
-479
-480
-481
-482
-483
-484
-485
-486
-487
-488
-489
-490
-491
-492
-493
-494
-495
-496
-497
-498
-499
-500
-501
-502
-503
-504
-505
-506
-507
-508
-509
-510
-511
-512
-513
-514
-515
-516
-517
-518
-519
-520
-521
-522
-523
-524
-525
-526
-527
-528
-529
-530
-531
-532
-533
-534
-535
-536
-537
-538
-539
-540
-541
-542
-543
-544
-545
-546
-547
-548
-549
-550
-551
-552
-553
-554
-555
-556
-557
-558
-559
-560
-561
-562
-563
-564
-565
-566
-567
-568
-569
-570
-571
-572
-573
-574
-575
-576
-577
-578
-579
-580
-581
-582
-583
-584
-585
-586
-587
-588
-589
-590
-591
-592
-593
-594
-595
-596
-597
-598
-599
-600
-601
-602
-603
-604
-605
-606
-607
-608
-609
-610
-611
-612
-613
-614
-615
-616
-617
-
//! All utils return exit with an exit code. Usually, the following scheme is used:
-//! * `0`: succeeded
-//! * `1`: minor problems
-//! * `2`: major problems
-//!
-//! This module provides types to reconcile these exit codes with idiomatic Rust error
-//! handling. This has a couple advantages over manually using [`std::process::exit`]:
-//! 1. It enables the use of `?`, `map_err`, `unwrap_or`, etc. in `uumain`.
-//! 1. It encourages the use of [`UResult`]/[`Result`] in functions in the utils.
-//! 1. The error messages are largely standardized across utils.
-//! 1. Standardized error messages can be created from external result types
-//!    (i.e. [`std::io::Result`] & `clap::ClapResult`).
-//! 1. [`set_exit_code`] takes away the burden of manually tracking exit codes for non-fatal errors.
-//!
-//! # Usage
-//! The signature of a typical util should be:
-//! ```ignore
-//! fn uumain(args: impl uucore::Args) -> UResult<()> {
-//!     ...
-//! }
-//! ```
-//! [`UResult`] is a simple wrapper around [`Result`] with a custom error trait: [`UError`]. The
-//! most important difference with types implementing [`std::error::Error`] is that [`UError`]s
-//! can specify the exit code of the program when they are returned from `uumain`:
-//! * When `Ok` is returned, the code set with [`set_exit_code`] is used as exit code. If
-//!   [`set_exit_code`] was not used, then `0` is used.
-//! * When `Err` is returned, the code corresponding with the error is used as exit code and the
-//! error message is displayed.
-//!
-//! Additionally, the errors can be displayed manually with the [`show`] and [`show_if_err`] macros:
-//! ```ignore
-//! let res = Err(USimpleError::new(1, "Error!!"));
-//! show_if_err!(res);
-//! // or
-//! if let Err(e) = res {
-//!    show!(e);
-//! }
-//! ```
-//!
-//! **Note**: The [`show`] and [`show_if_err`] macros set the exit code of the program using
-//! [`set_exit_code`]. See the documentation on that function for more information.
-//!
-//! # Guidelines
-//! * Use error types from `uucore` where possible.
-//! * Add error types to `uucore` if an error appears in multiple utils.
-//! * Prefer proper custom error types over [`ExitCode`] and [`USimpleError`].
-//! * [`USimpleError`] may be used in small utils with simple error handling.
-//! * Using [`ExitCode`] is not recommended but can be useful for converting utils to use
-//!   [`UResult`].
-
-// spell-checker:ignore uioerror
-
-use std::{
-    error::Error,
-    fmt::{Display, Formatter},
-    sync::atomic::{AtomicI32, Ordering},
-};
-
-static EXIT_CODE: AtomicI32 = AtomicI32::new(0);
-
-/// Get the last exit code set with [`set_exit_code`].
-/// The default value is `0`.
-pub fn get_exit_code() -> i32 {
-    EXIT_CODE.load(Ordering::SeqCst)
-}
-
-/// Set the exit code for the program if `uumain` returns `Ok(())`.
-///
-/// This function is most useful for non-fatal errors, for example when applying an operation to
-/// multiple files:
-/// ```ignore
-/// use uucore::error::{UResult, set_exit_code};
-///
-/// fn uumain(args: impl uucore::Args) -> UResult<()> {
-///     ...
-///     for file in files {
-///         let res = some_operation_that_might_fail(file);
-///         match res {
-///             Ok() => {},
-///             Err(_) => set_exit_code(1),
-///         }
-///     }
-///     Ok(()) // If any of the operations failed, 1 is returned.
-/// }
-/// ```
-pub fn set_exit_code(code: i32) {
-    EXIT_CODE.store(code, Ordering::SeqCst);
-}
-
-/// Result type that should be returned by all utils.
-pub type UResult<T> = Result<T, Box<dyn UError>>;
-
-/// Custom errors defined by the utils and `uucore`.
-///
-/// All errors should implement [`std::error::Error`], [`std::fmt::Display`] and
-/// [`std::fmt::Debug`] and have an additional `code` method that specifies the
-/// exit code of the program if the error is returned from `uumain`.
-///
-/// An example of a custom error from `ls`:
-///
-/// ```
-/// use uucore::{
-///     display::Quotable,
-///     error::{UError, UResult}
-/// };
-/// use std::{
-///     error::Error,
-///     fmt::{Display, Debug},
-///     path::PathBuf
-/// };
-///
-/// #[derive(Debug)]
-/// enum LsError {
-///     InvalidLineWidth(String),
-///     NoMetadata(PathBuf),
-/// }
-///
-/// impl UError for LsError {
-///     fn code(&self) -> i32 {
-///         match self {
-///             LsError::InvalidLineWidth(_) => 2,
-///             LsError::NoMetadata(_) => 1,
-///         }
-///     }
-/// }
-///
-/// impl Error for LsError {}
-///
-/// impl Display for LsError {
-///     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-///         match self {
-///             LsError::InvalidLineWidth(s) => write!(f, "invalid line width: {}", s.quote()),
-///             LsError::NoMetadata(p) => write!(f, "could not open file: {}", p.quote()),
-///         }
-///     }
-/// }
-/// ```
-///
-/// The main routine would look like this:
-///
-/// ```ignore
-/// #[uucore_procs::gen_uumain]
-/// pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-///     // Perform computations here ...
-///     return Err(LsError::InvalidLineWidth(String::from("test")).into())
-/// }
-/// ```
-///
-/// The call to `into()` is required to convert the `LsError` to
-/// [`Box<dyn UError>`]. The implementation for `From` is provided automatically.
-///
-/// A crate like [`quick_error`](https://crates.io/crates/quick-error) might
-/// also be used, but will still require an `impl` for the `code` method.
-pub trait UError: Error + Send {
-    /// Error code of a custom error.
-    ///
-    /// Set a return value for each variant of an enum-type to associate an
-    /// error code (which is returned to the system shell) with an error
-    /// variant.
-    ///
-    /// # Example
-    ///
-    /// ```
-    /// use uucore::{
-    ///     display::Quotable,
-    ///     error::UError
-    /// };
-    /// use std::{
-    ///     error::Error,
-    ///     fmt::{Display, Debug},
-    ///     path::PathBuf
-    /// };
-    ///
-    /// #[derive(Debug)]
-    /// enum MyError {
-    ///     Foo(String),
-    ///     Bar(PathBuf),
-    ///     Bing(),
-    /// }
-    ///
-    /// impl UError for MyError {
-    ///     fn code(&self) -> i32 {
-    ///         match self {
-    ///             MyError::Foo(_) => 2,
-    ///             // All other errors yield the same error code, there's no
-    ///             // need to list them explicitly.
-    ///             _ => 1,
-    ///         }
-    ///     }
-    /// }
-    ///
-    /// impl Error for MyError {}
-    ///
-    /// impl Display for MyError {
-    ///     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-    ///         use MyError as ME;
-    ///         match self {
-    ///             ME::Foo(s) => write!(f, "Unknown Foo: {}", s.quote()),
-    ///             ME::Bar(p) => write!(f, "Couldn't find Bar: {}", p.quote()),
-    ///             ME::Bing() => write!(f, "Exterminate!"),
-    ///         }
-    ///     }
-    /// }
-    /// ```
-    fn code(&self) -> i32 {
-        1
-    }
-
-    /// Print usage help to a custom error.
-    ///
-    /// Return true or false to control whether a short usage help is printed
-    /// below the error message. The usage help is in the format: "Try `{name}
-    /// --help` for more information." and printed only if `true` is returned.
-    ///
-    /// # Example
-    ///
-    /// ```
-    /// use uucore::{
-    ///     display::Quotable,
-    ///     error::UError
-    /// };
-    /// use std::{
-    ///     error::Error,
-    ///     fmt::{Display, Debug},
-    ///     path::PathBuf
-    /// };
-    ///
-    /// #[derive(Debug)]
-    /// enum MyError {
-    ///     Foo(String),
-    ///     Bar(PathBuf),
-    ///     Bing(),
-    /// }
-    ///
-    /// impl UError for MyError {
-    ///     fn usage(&self) -> bool {
-    ///         match self {
-    ///             // This will have a short usage help appended
-    ///             MyError::Bar(_) => true,
-    ///             // These matches won't have a short usage help appended
-    ///             _ => false,
-    ///         }
-    ///     }
-    /// }
-    ///
-    /// impl Error for MyError {}
-    ///
-    /// impl Display for MyError {
-    ///     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-    ///         use MyError as ME;
-    ///         match self {
-    ///             ME::Foo(s) => write!(f, "Unknown Foo: {}", s.quote()),
-    ///             ME::Bar(p) => write!(f, "Couldn't find Bar: {}", p.quote()),
-    ///             ME::Bing() => write!(f, "Exterminate!"),
-    ///         }
-    ///     }
-    /// }
-    /// ```
-    fn usage(&self) -> bool {
-        false
-    }
-}
-
-impl<T> From<T> for Box<dyn UError>
-where
-    T: UError + 'static,
-{
-    fn from(t: T) -> Box<dyn UError> {
-        Box::new(t)
-    }
-}
-
-/// A simple error type with an exit code and a message that implements [`UError`].
-///
-/// ```
-/// use uucore::error::{UResult, USimpleError};
-/// let err = USimpleError { code: 1, message: "error!".into()};
-/// let res: UResult<()> = Err(err.into());
-/// // or using the `new` method:
-/// let res: UResult<()> = Err(USimpleError::new(1, "error!"));
-/// ```
-#[derive(Debug)]
-pub struct USimpleError {
-    pub code: i32,
-    pub message: String,
-}
-
-impl USimpleError {
-    #[allow(clippy::new_ret_no_self)]
-    pub fn new<S: Into<String>>(code: i32, message: S) -> Box<dyn UError> {
-        Box::new(Self {
-            code,
-            message: message.into(),
-        })
-    }
-}
-
-impl Error for USimpleError {}
-
-impl Display for USimpleError {
-    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
-        self.message.fmt(f)
-    }
-}
-
-impl UError for USimpleError {
-    fn code(&self) -> i32 {
-        self.code
-    }
-}
-
-#[derive(Debug)]
-pub struct UUsageError {
-    pub code: i32,
-    pub message: String,
-}
-
-impl UUsageError {
-    #[allow(clippy::new_ret_no_self)]
-    pub fn new<S: Into<String>>(code: i32, message: S) -> Box<dyn UError> {
-        Box::new(Self {
-            code,
-            message: message.into(),
-        })
-    }
-}
-
-impl Error for UUsageError {}
-
-impl Display for UUsageError {
-    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
-        self.message.fmt(f)
-    }
-}
-
-impl UError for UUsageError {
-    fn code(&self) -> i32 {
-        self.code
-    }
-
-    fn usage(&self) -> bool {
-        true
-    }
-}
-
-/// Wrapper type around [`std::io::Error`].
-///
-/// The messages displayed by [`UIoError`] should match the error messages displayed by GNU
-/// coreutils.
-///
-/// There are two ways to construct this type: with [`UIoError::new`] or by calling the
-/// [`FromIo::map_err_context`] method on a [`std::io::Result`] or [`std::io::Error`].
-/// ```
-/// use uucore::{
-///     display::Quotable,
-///     error::{FromIo, UResult, UIoError, UError}
-/// };
-/// use std::fs::File;
-/// use std::path::Path;
-/// let path = Path::new("test.txt");
-///
-/// // Manual construction
-/// let e: Box<dyn UError> = UIoError::new(
-///     std::io::ErrorKind::NotFound,
-///     format!("cannot access {}", path.quote())
-/// );
-/// let res: UResult<()> = Err(e.into());
-///
-/// // Converting from an `std::io::Error`.
-/// let res: UResult<File> = File::open(path).map_err_context(|| format!("cannot access {}", path.quote()));
-/// ```
-#[derive(Debug)]
-pub struct UIoError {
-    context: Option<String>,
-    inner: std::io::Error,
-}
-
-impl UIoError {
-    #[allow(clippy::new_ret_no_self)]
-    pub fn new<S: Into<String>>(kind: std::io::ErrorKind, context: S) -> Box<dyn UError> {
-        Box::new(Self {
-            context: Some(context.into()),
-            inner: kind.into(),
-        })
-    }
-}
-
-impl UError for UIoError {}
-
-impl Error for UIoError {}
-
-impl Display for UIoError {
-    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
-        use std::io::ErrorKind::*;
-
-        let mut message;
-        let message = if self.inner.raw_os_error().is_some() {
-            // These are errors that come directly from the OS.
-            // We want to normalize their messages across systems,
-            // and we want to strip the "(os error X)" suffix.
-            match self.inner.kind() {
-                NotFound => "No such file or directory",
-                PermissionDenied => "Permission denied",
-                ConnectionRefused => "Connection refused",
-                ConnectionReset => "Connection reset",
-                ConnectionAborted => "Connection aborted",
-                NotConnected => "Not connected",
-                AddrInUse => "Address in use",
-                AddrNotAvailable => "Address not available",
-                BrokenPipe => "Broken pipe",
-                AlreadyExists => "Already exists",
-                WouldBlock => "Would block",
-                InvalidInput => "Invalid input",
-                InvalidData => "Invalid data",
-                TimedOut => "Timed out",
-                WriteZero => "Write zero",
-                Interrupted => "Interrupted",
-                UnexpectedEof => "Unexpected end of file",
-                _ => {
-                    // TODO: When the new error variants
-                    // (https://github.com/rust-lang/rust/issues/86442)
-                    // are stabilized, we should add them to the match statement.
-                    message = strip_errno(&self.inner);
-                    capitalize(&mut message);
-                    &message
-                }
-            }
-        } else {
-            // These messages don't need as much normalization, and the above
-            // messages wouldn't always be a good substitute.
-            // For example, ErrorKind::NotFound doesn't necessarily mean it was
-            // a file that was not found.
-            // There are also errors with entirely custom messages.
-            message = self.inner.to_string();
-            capitalize(&mut message);
-            &message
-        };
-        if let Some(ctx) = &self.context {
-            write!(f, "{}: {}", ctx, message)
-        } else {
-            write!(f, "{}", message)
-        }
-    }
-}
-
-/// Capitalize the first character of an ASCII string.
-fn capitalize(text: &mut str) {
-    if let Some(first) = text.get_mut(..1) {
-        first.make_ascii_uppercase();
-    }
-}
-
-/// Strip the trailing " (os error XX)" from io error strings.
-pub fn strip_errno(err: &std::io::Error) -> String {
-    let mut msg = err.to_string();
-    if let Some(pos) = msg.find(" (os error ") {
-        msg.truncate(pos);
-    }
-    msg
-}
-
-/// Enables the conversion from [`std::io::Error`] to [`UError`] and from [`std::io::Result`] to
-/// [`UResult`].
-pub trait FromIo<T> {
-    fn map_err_context(self, context: impl FnOnce() -> String) -> T;
-}
-
-impl FromIo<Box<UIoError>> for std::io::Error {
-    fn map_err_context(self, context: impl FnOnce() -> String) -> Box<UIoError> {
-        Box::new(UIoError {
-            context: Some((context)()),
-            inner: self,
-        })
-    }
-}
-
-impl<T> FromIo<UResult<T>> for std::io::Result<T> {
-    fn map_err_context(self, context: impl FnOnce() -> String) -> UResult<T> {
-        self.map_err(|e| e.map_err_context(context) as Box<dyn UError>)
-    }
-}
-
-impl FromIo<Box<UIoError>> for std::io::ErrorKind {
-    fn map_err_context(self, context: impl FnOnce() -> String) -> Box<UIoError> {
-        Box::new(UIoError {
-            context: Some((context)()),
-            inner: std::io::Error::new(self, ""),
-        })
-    }
-}
-
-impl From<std::io::Error> for UIoError {
-    fn from(f: std::io::Error) -> UIoError {
-        UIoError {
-            context: None,
-            inner: f,
-        }
-    }
-}
-
-impl From<std::io::Error> for Box<dyn UError> {
-    fn from(f: std::io::Error) -> Box<dyn UError> {
-        let u_error: UIoError = f.into();
-        Box::new(u_error) as Box<dyn UError>
-    }
-}
-
-/// Shorthand to construct [`UIoError`]-instances.
-///
-/// This macro serves as a convenience call to quickly construct instances of
-/// [`UIoError`]. It takes:
-///
-/// - An instance of [`std::io::Error`]
-/// - A `format!`-compatible string and
-/// - An arbitrary number of arguments to the format string
-///
-/// In exactly this order. It is equivalent to the more verbose code seen in the
-/// example.
-///
-/// # Examples
-///
-/// ```
-/// use uucore::error::UIoError;
-/// use uucore::uio_error;
-///
-/// let io_err = std::io::Error::new(
-///     std::io::ErrorKind::PermissionDenied, "fix me please!"
-/// );
-///
-/// let uio_err = UIoError::new(
-///     io_err.kind(),
-///     format!("Error code: {}", 2)
-/// );
-///
-/// let other_uio_err = uio_error!(io_err, "Error code: {}", 2);
-///
-/// // prints "fix me please!: Permission denied"
-/// println!("{}", uio_err);
-/// // prints "Error code: 2: Permission denied"
-/// println!("{}", other_uio_err);
-/// ```
-///
-/// The [`std::fmt::Display`] impl of [`UIoError`] will then ensure that an
-/// appropriate error message relating to the actual error kind of the
-/// [`std::io::Error`] is appended to whatever error message is defined in
-/// addition (as secondary argument).
-///
-/// If you want to show only the error message for the [`std::io::ErrorKind`]
-/// that's contained in [`UIoError`], pass the second argument as empty string:
-///
-/// ```
-/// use uucore::error::UIoError;
-/// use uucore::uio_error;
-///
-/// let io_err = std::io::Error::new(
-///     std::io::ErrorKind::PermissionDenied, "fix me please!"
-/// );
-///
-/// let other_uio_err = uio_error!(io_err, "");
-///
-/// // prints: ": Permission denied"
-/// println!("{}", other_uio_err);
-/// ```
-//#[macro_use]
-#[macro_export]
-macro_rules! uio_error(
-    ($err:expr, $($args:tt)+) => ({
-        UIoError::new(
-            $err.kind(),
-            format!($($args)+)
-        )
-    })
-);
-
-/// A special error type that does not print any message when returned from
-/// `uumain`. Especially useful for porting utilities to using [`UResult`].
-///
-/// There are two ways to construct an [`ExitCode`]:
-/// ```
-/// use uucore::error::{ExitCode, UResult};
-/// // Explicit
-/// let res: UResult<()> = Err(ExitCode(1).into());
-///
-/// // Using into on `i32`:
-/// let res: UResult<()> = Err(1.into());
-/// ```
-/// This type is especially useful for a trivial conversion from utils returning [`i32`] to
-/// returning [`UResult`].
-#[derive(Debug)]
-pub struct ExitCode(pub i32);
-
-impl ExitCode {
-    #[allow(clippy::new_ret_no_self)]
-    pub fn new(code: i32) -> Box<dyn UError> {
-        Box::new(Self(code))
-    }
-}
-
-impl Error for ExitCode {}
-
-impl Display for ExitCode {
-    fn fmt(&self, _: &mut Formatter<'_>) -> Result<(), std::fmt::Error> {
-        Ok(())
-    }
-}
-
-impl UError for ExitCode {
-    fn code(&self) -> i32 {
-        self.0
-    }
-}
-
-impl From<i32> for Box<dyn UError> {
-    fn from(i: i32) -> Self {
-        ExitCode::new(i)
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/os.rs.html b/src/uucore/mods/os.rs.html deleted file mode 100644 index 47bcca390..000000000 --- a/src/uucore/mods/os.rs.html +++ /dev/null @@ -1,70 +0,0 @@ -os.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-
/// Test if the program is running under WSL
-// ref: <https://github.com/microsoft/WSL/issues/4555> @@ <https://archive.is/dP0bz>
-
-// spell-checker:ignore (path) osrelease
-
-pub fn is_wsl_1() -> bool {
-    #[cfg(target_os = "linux")]
-    {
-        if is_wsl_2() {
-            return false;
-        }
-        if let Ok(b) = std::fs::read("/proc/sys/kernel/osrelease") {
-            if let Ok(s) = std::str::from_utf8(&b) {
-                let a = s.to_ascii_lowercase();
-                return a.contains("microsoft") || a.contains("wsl");
-            }
-        }
-    }
-    false
-}
-
-pub fn is_wsl_2() -> bool {
-    #[cfg(target_os = "linux")]
-    {
-        if let Ok(b) = std::fs::read("/proc/sys/kernel/osrelease") {
-            if let Ok(s) = std::str::from_utf8(&b) {
-                let a = s.to_ascii_lowercase();
-                return a.contains("wsl2");
-            }
-        }
-    }
-    false
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/panic.rs.html b/src/uucore/mods/panic.rs.html deleted file mode 100644 index b70cafcee..000000000 --- a/src/uucore/mods/panic.rs.html +++ /dev/null @@ -1,88 +0,0 @@ -panic.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-
//! Custom panic hooks that allow silencing certain types of errors.
-//!
-//! Use the [`mute_sigpipe_panic`] function to silence panics caused by
-//! broken pipe errors. This can happen when a process is still
-//! producing data when the consuming process terminates and closes the
-//! pipe. For example,
-//!
-//! ```sh
-//! $ seq inf | head -n 1
-//! ```
-//!
-use std::panic;
-use std::panic::PanicInfo;
-
-/// Decide whether a panic was caused by a broken pipe (SIGPIPE) error.
-fn is_broken_pipe(info: &PanicInfo) -> bool {
-    if let Some(res) = info.payload().downcast_ref::<String>() {
-        if res.contains("BrokenPipe") || res.contains("Broken pipe") {
-            return true;
-        }
-    }
-    false
-}
-
-/// Terminate without error on panics that occur due to broken pipe errors.
-///
-/// For background discussions on `SIGPIPE` handling, see
-///
-/// * https://github.com/uutils/coreutils/issues/374
-/// * https://github.com/uutils/coreutils/pull/1106
-/// * https://github.com/rust-lang/rust/issues/62569
-/// * https://github.com/BurntSushi/ripgrep/issues/200
-/// * https://github.com/crev-dev/cargo-crev/issues/287
-///
-pub fn mute_sigpipe_panic() {
-    let hook = panic::take_hook();
-    panic::set_hook(Box::new(move |info| {
-        if !is_broken_pipe(info) {
-            hook(info)
-        }
-    }));
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/ranges.rs.html b/src/uucore/mods/ranges.rs.html deleted file mode 100644 index 30ef29da5..000000000 --- a/src/uucore/mods/ranges.rs.html +++ /dev/null @@ -1,354 +0,0 @@ -ranges.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-
// This file is part of the uutils coreutils package.
-//
-// (c) Rolf Morel <rolfmorel@gmail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) inval
-
-use std::str::FromStr;
-
-use crate::display::Quotable;
-
-#[derive(PartialEq, Eq, PartialOrd, Ord, Debug)]
-pub struct Range {
-    pub low: usize,
-    pub high: usize,
-}
-
-impl FromStr for Range {
-    type Err = &'static str;
-
-    fn from_str(s: &str) -> Result<Range, &'static str> {
-        use std::usize::MAX;
-
-        let mut parts = s.splitn(2, '-');
-
-        let field = "fields and positions are numbered from 1";
-        let order = "high end of range less than low end";
-        let inval = "failed to parse range";
-
-        match (parts.next(), parts.next()) {
-            (Some(nm), None) => {
-                if let Ok(nm) = nm.parse::<usize>() {
-                    if nm > 0 {
-                        Ok(Range { low: nm, high: nm })
-                    } else {
-                        Err(field)
-                    }
-                } else {
-                    Err(inval)
-                }
-            }
-            (Some(n), Some(m)) if m.is_empty() => {
-                if let Ok(low) = n.parse::<usize>() {
-                    if low > 0 {
-                        Ok(Range { low, high: MAX - 1 })
-                    } else {
-                        Err(field)
-                    }
-                } else {
-                    Err(inval)
-                }
-            }
-            (Some(n), Some(m)) if n.is_empty() => {
-                if let Ok(high) = m.parse::<usize>() {
-                    if high > 0 {
-                        Ok(Range { low: 1, high })
-                    } else {
-                        Err(field)
-                    }
-                } else {
-                    Err(inval)
-                }
-            }
-            (Some(n), Some(m)) => match (n.parse::<usize>(), m.parse::<usize>()) {
-                (Ok(low), Ok(high)) => {
-                    if low > 0 && low <= high {
-                        Ok(Range { low, high })
-                    } else if low == 0 {
-                        Err(field)
-                    } else {
-                        Err(order)
-                    }
-                }
-                _ => Err(inval),
-            },
-            _ => unreachable!(),
-        }
-    }
-}
-
-impl Range {
-    pub fn from_list(list: &str) -> Result<Vec<Range>, String> {
-        use std::cmp::max;
-
-        let mut ranges: Vec<Range> = vec![];
-
-        for item in list.split(',') {
-            let range_item = FromStr::from_str(item)
-                .map_err(|e| format!("range {} was invalid: {}", item.quote(), e))?;
-            ranges.push(range_item);
-        }
-
-        ranges.sort();
-
-        // merge overlapping ranges
-        for i in 0..ranges.len() {
-            let j = i + 1;
-
-            while j < ranges.len() && ranges[j].low <= ranges[i].high {
-                let j_high = ranges.remove(j).high;
-                ranges[i].high = max(ranges[i].high, j_high);
-            }
-        }
-
-        Ok(ranges)
-    }
-}
-
-pub fn complement(ranges: &[Range]) -> Vec<Range> {
-    use std::usize;
-
-    let mut complements = Vec::with_capacity(ranges.len() + 1);
-
-    if !ranges.is_empty() && ranges[0].low > 1 {
-        complements.push(Range {
-            low: 1,
-            high: ranges[0].low - 1,
-        });
-    }
-
-    let mut ranges_iter = ranges.iter().peekable();
-    loop {
-        match (ranges_iter.next(), ranges_iter.peek()) {
-            (Some(left), Some(right)) => {
-                if left.high + 1 != right.low {
-                    complements.push(Range {
-                        low: left.high + 1,
-                        high: right.low - 1,
-                    });
-                }
-            }
-            (Some(last), None) => {
-                if last.high < usize::MAX - 1 {
-                    complements.push(Range {
-                        low: last.high + 1,
-                        high: usize::MAX - 1,
-                    });
-                }
-            }
-            _ => break,
-        }
-    }
-
-    complements
-}
-
-/// Test if at least one of the given Ranges contain the supplied value.
-///
-/// Examples:
-///
-/// ```
-/// let ranges = uucore::ranges::Range::from_list("11,2,6-8").unwrap();
-///
-/// assert!(!uucore::ranges::contain(&ranges, 0));
-/// assert!(!uucore::ranges::contain(&ranges, 1));
-/// assert!(!uucore::ranges::contain(&ranges, 5));
-/// assert!(!uucore::ranges::contain(&ranges, 10));
-///
-/// assert!(uucore::ranges::contain(&ranges, 2));
-/// assert!(uucore::ranges::contain(&ranges, 6));
-/// assert!(uucore::ranges::contain(&ranges, 7));
-/// assert!(uucore::ranges::contain(&ranges, 8));
-/// assert!(uucore::ranges::contain(&ranges, 11));
-/// ```
-pub fn contain(ranges: &[Range], n: usize) -> bool {
-    for range in ranges {
-        if n >= range.low && n <= range.high {
-            return true;
-        }
-    }
-
-    false
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/mods/version_cmp.rs.html b/src/uucore/mods/version_cmp.rs.html deleted file mode 100644 index 07ce0609f..000000000 --- a/src/uucore/mods/version_cmp.rs.html +++ /dev/null @@ -1,726 +0,0 @@ -version_cmp.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-333
-334
-335
-336
-337
-338
-339
-340
-341
-342
-343
-344
-345
-346
-347
-348
-349
-350
-351
-352
-353
-354
-355
-356
-357
-358
-359
-360
-361
-
use std::cmp::Ordering;
-
-/// Compares the non-digit parts of a version.
-/// Special cases: ~ are before everything else, even ends ("a~" < "a")
-/// Letters are before non-letters
-fn version_non_digit_cmp(a: &str, b: &str) -> Ordering {
-    let mut a_chars = a.chars();
-    let mut b_chars = b.chars();
-    loop {
-        match (a_chars.next(), b_chars.next()) {
-            (Some(c1), Some(c2)) if c1 == c2 => {}
-            (None, None) => return Ordering::Equal,
-            (_, Some('~')) => return Ordering::Greater,
-            (Some('~'), _) => return Ordering::Less,
-            (None, Some(_)) => return Ordering::Less,
-            (Some(_), None) => return Ordering::Greater,
-            (Some(c1), Some(c2)) if c1.is_ascii_alphabetic() && !c2.is_ascii_alphabetic() => {
-                return Ordering::Less
-            }
-            (Some(c1), Some(c2)) if !c1.is_ascii_alphabetic() && c2.is_ascii_alphabetic() => {
-                return Ordering::Greater
-            }
-            (Some(c1), Some(c2)) => return c1.cmp(&c2),
-        }
-    }
-}
-
-/// Remove file endings matching the regex (\.[A-Za-z~][A-Za-z0-9~]*)*$
-fn remove_file_ending(a: &str) -> &str {
-    let mut ending_start = None;
-    let mut prev_was_dot = false;
-    for (idx, char) in a.char_indices() {
-        if char == '.' {
-            if ending_start.is_none() || prev_was_dot {
-                ending_start = Some(idx);
-            }
-            prev_was_dot = true;
-        } else if prev_was_dot {
-            prev_was_dot = false;
-            if !char.is_ascii_alphabetic() && char != '~' {
-                ending_start = None;
-            }
-        } else if !char.is_ascii_alphanumeric() && char != '~' {
-            ending_start = None;
-        }
-    }
-    if prev_was_dot {
-        ending_start = None;
-    }
-    if let Some(ending_start) = ending_start {
-        &a[..ending_start]
-    } else {
-        a
-    }
-}
-
-pub fn version_cmp(mut a: &str, mut b: &str) -> Ordering {
-    let str_cmp = a.cmp(b);
-    if str_cmp == Ordering::Equal {
-        return str_cmp;
-    }
-
-    // Special cases:
-    // 1. Empty strings
-    match (a.is_empty(), b.is_empty()) {
-        (true, false) => return Ordering::Less,
-        (false, true) => return Ordering::Greater,
-        (true, true) => unreachable!(),
-        (false, false) => {}
-    }
-    // 2. Dots
-    match (a == ".", b == ".") {
-        (true, false) => return Ordering::Less,
-        (false, true) => return Ordering::Greater,
-        (true, true) => unreachable!(),
-        (false, false) => {}
-    }
-    // 3. Two Dots
-    match (a == "..", b == "..") {
-        (true, false) => return Ordering::Less,
-        (false, true) => return Ordering::Greater,
-        (true, true) => unreachable!(),
-        (false, false) => {}
-    }
-    // 4. Strings starting with a dot
-    match (a.starts_with('.'), b.starts_with('.')) {
-        (true, false) => return Ordering::Less,
-        (false, true) => return Ordering::Greater,
-        (true, true) => {
-            // Strip the leading dot for later comparisons
-            a = &a[1..];
-            b = &b[1..];
-        }
-        _ => {}
-    }
-
-    // Try to strip file extensions
-    let (mut a, mut b) = match (remove_file_ending(a), remove_file_ending(b)) {
-        (a_stripped, b_stripped) if a_stripped == b_stripped => {
-            // If both would be the same after stripping file extensions, don't strip them.
-            (a, b)
-        }
-        stripped => stripped,
-    };
-
-    // 1. Compare leading non-numerical part
-    // 2. Compare leading numerical part
-    // 3. Repeat
-    loop {
-        let a_numerical_start = a.find(|c: char| c.is_ascii_digit()).unwrap_or(a.len());
-        let b_numerical_start = b.find(|c: char| c.is_ascii_digit()).unwrap_or(b.len());
-
-        let a_str = &a[..a_numerical_start];
-        let b_str = &b[..b_numerical_start];
-
-        match version_non_digit_cmp(a_str, b_str) {
-            Ordering::Equal => {}
-            ord => return ord,
-        }
-
-        a = &a[a_numerical_start..];
-        b = &b[a_numerical_start..];
-
-        let a_numerical_end = a.find(|c: char| !c.is_ascii_digit()).unwrap_or(a.len());
-        let b_numerical_end = b.find(|c: char| !c.is_ascii_digit()).unwrap_or(b.len());
-
-        let a_str = a[..a_numerical_end].trim_start_matches('0');
-        let b_str = b[..b_numerical_end].trim_start_matches('0');
-
-        match a_str.len().cmp(&b_str.len()) {
-            Ordering::Equal => {}
-            ord => return ord,
-        }
-
-        match a_str.cmp(b_str) {
-            Ordering::Equal => {}
-            ord => return ord,
-        }
-
-        a = &a[a_numerical_end..];
-        b = &b[b_numerical_end..];
-
-        if a.is_empty() && b.is_empty() {
-            // Default to the lexical comparison.
-            return str_cmp;
-        }
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use crate::version_cmp::version_cmp;
-    use std::cmp::Ordering;
-    #[test]
-    fn test_version_cmp() {
-        // Identical strings
-        assert_eq!(version_cmp("hello", "hello"), Ordering::Equal);
-
-        assert_eq!(version_cmp("file12", "file12"), Ordering::Equal);
-
-        assert_eq!(
-            version_cmp("file12-suffix", "file12-suffix"),
-            Ordering::Equal
-        );
-
-        assert_eq!(
-            version_cmp("file12-suffix24", "file12-suffix24"),
-            Ordering::Equal
-        );
-
-        // Shortened names
-        assert_eq!(version_cmp("world", "wo"), Ordering::Greater,);
-
-        assert_eq!(version_cmp("hello10wo", "hello10world"), Ordering::Less,);
-
-        // Simple names
-        assert_eq!(version_cmp("world", "hello"), Ordering::Greater,);
-
-        assert_eq!(version_cmp("hello", "world"), Ordering::Less);
-
-        assert_eq!(version_cmp("apple", "ant"), Ordering::Greater);
-
-        assert_eq!(version_cmp("ant", "apple"), Ordering::Less);
-
-        // Uppercase letters
-        assert_eq!(
-            version_cmp("Beef", "apple"),
-            Ordering::Less,
-            "Uppercase letters are sorted before all lowercase letters"
-        );
-
-        assert_eq!(version_cmp("Apple", "apple"), Ordering::Less);
-
-        assert_eq!(version_cmp("apple", "aPple"), Ordering::Greater);
-
-        // Numbers
-        assert_eq!(
-            version_cmp("100", "20"),
-            Ordering::Greater,
-            "Greater numbers are greater even if they start with a smaller digit",
-        );
-
-        assert_eq!(
-            version_cmp("20", "20"),
-            Ordering::Equal,
-            "Equal numbers are equal"
-        );
-
-        assert_eq!(
-            version_cmp("15", "200"),
-            Ordering::Less,
-            "Small numbers are smaller"
-        );
-
-        // Comparing numbers with other characters
-        assert_eq!(
-            version_cmp("1000", "apple"),
-            Ordering::Less,
-            "Numbers are sorted before other characters"
-        );
-
-        assert_eq!(
-            // spell-checker:disable-next-line
-            version_cmp("file1000", "fileapple"),
-            Ordering::Less,
-            "Numbers in the middle of the name are sorted before other characters"
-        );
-
-        // Leading zeroes
-        assert_eq!(
-            version_cmp("012", "12"),
-            Ordering::Less,
-            "A single leading zero can make a difference"
-        );
-
-        assert_eq!(
-            version_cmp("000800", "0000800"),
-            Ordering::Greater,
-            "Leading number of zeroes is used even if both non-zero number of zeros"
-        );
-
-        // Numbers and other characters combined
-        assert_eq!(version_cmp("ab10", "aa11"), Ordering::Greater);
-
-        assert_eq!(
-            version_cmp("aa10", "aa11"),
-            Ordering::Less,
-            "Numbers after other characters are handled correctly."
-        );
-
-        assert_eq!(
-            version_cmp("aa2", "aa100"),
-            Ordering::Less,
-            "Numbers after alphabetical characters are handled correctly."
-        );
-
-        assert_eq!(
-            version_cmp("aa10bb", "aa11aa"),
-            Ordering::Less,
-            "Number is used even if alphabetical characters after it differ."
-        );
-
-        assert_eq!(
-            version_cmp("aa10aa0010", "aa11aa1"),
-            Ordering::Less,
-            "Second number is ignored if the first number differs."
-        );
-
-        assert_eq!(
-            version_cmp("aa10aa0010", "aa10aa1"),
-            Ordering::Greater,
-            "Second number is used if the rest is equal."
-        );
-
-        assert_eq!(
-            version_cmp("aa10aa0010", "aa00010aa1"),
-            Ordering::Greater,
-            "Second number is used if the rest is equal up to leading zeroes of the first number."
-        );
-
-        assert_eq!(
-            version_cmp("aa10aa0022", "aa010aa022"),
-            Ordering::Greater,
-            "The leading zeroes of the first number has priority."
-        );
-
-        assert_eq!(
-            version_cmp("aa10aa0022", "aa10aa022"),
-            Ordering::Less,
-            "The leading zeroes of other numbers than the first are used."
-        );
-
-        assert_eq!(
-            version_cmp("file-1.4", "file-1.13"),
-            Ordering::Less,
-            "Periods are handled as normal text, not as a decimal point."
-        );
-
-        // Greater than u64::Max
-        // u64 == 18446744073709551615 so this should be plenty:
-        //        20000000000000000000000
-        assert_eq!(
-            version_cmp("aa2000000000000000000000bb", "aa002000000000000000000001bb"),
-            Ordering::Less,
-            "Numbers larger than u64::MAX are handled correctly without crashing"
-        );
-
-        assert_eq!(
-            version_cmp("aa2000000000000000000000bb", "aa002000000000000000000000bb"),
-            Ordering::Greater,
-            "Leading zeroes for numbers larger than u64::MAX are \
-            handled correctly without crashing"
-        );
-
-        assert_eq!(
-            version_cmp("  a", "a"),
-            Ordering::Greater,
-            "Whitespace is after letters because letters are before non-letters"
-        );
-
-        assert_eq!(
-            version_cmp("a~", "ab"),
-            Ordering::Less,
-            "A tilde is before other letters"
-        );
-
-        assert_eq!(
-            version_cmp("a~", "a"),
-            Ordering::Less,
-            "A tilde is before the line end"
-        );
-        assert_eq!(
-            version_cmp("~", ""),
-            Ordering::Greater,
-            "A tilde is after the empty string"
-        );
-        assert_eq!(
-            version_cmp(".f", ".1"),
-            Ordering::Greater,
-            "if both start with a dot it is ignored for the comparison"
-        );
-
-        // The following tests are incompatible with GNU as of 2021/06.
-        // I think that's because of a bug in GNU, reported as https://lists.gnu.org/archive/html/bug-coreutils/2021-06/msg00045.html
-        assert_eq!(
-            version_cmp("a..a", "a.+"),
-            Ordering::Less,
-            ".a is stripped before the comparison"
-        );
-        assert_eq!(
-            version_cmp("a.", "a+"),
-            Ordering::Greater,
-            ". is not stripped before the comparison"
-        );
-        assert_eq!(
-            version_cmp("a\0a", "a"),
-            Ordering::Greater,
-            "NULL bytes are handled comparison"
-        );
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/parser.rs.html b/src/uucore/parser.rs.html deleted file mode 100644 index 685b54cd0..000000000 --- a/src/uucore/parser.rs.html +++ /dev/null @@ -1,8 +0,0 @@ -parser.rs - source -
1
-2
-
pub mod parse_size;
-pub mod parse_time;
-
-
- \ No newline at end of file diff --git a/src/uucore/parser/parse_size.rs.html b/src/uucore/parser/parse_size.rs.html deleted file mode 100644 index 04516abe5..000000000 --- a/src/uucore/parser/parse_size.rs.html +++ /dev/null @@ -1,668 +0,0 @@ -parse_size.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-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
-213
-214
-215
-216
-217
-218
-219
-220
-221
-222
-223
-224
-225
-226
-227
-228
-229
-230
-231
-232
-233
-234
-235
-236
-237
-238
-239
-240
-241
-242
-243
-244
-245
-246
-247
-248
-249
-250
-251
-252
-253
-254
-255
-256
-257
-258
-259
-260
-261
-262
-263
-264
-265
-266
-267
-268
-269
-270
-271
-272
-273
-274
-275
-276
-277
-278
-279
-280
-281
-282
-283
-284
-285
-286
-287
-288
-289
-290
-291
-292
-293
-294
-295
-296
-297
-298
-299
-300
-301
-302
-303
-304
-305
-306
-307
-308
-309
-310
-311
-312
-313
-314
-315
-316
-317
-318
-319
-320
-321
-322
-323
-324
-325
-326
-327
-328
-329
-330
-331
-332
-
//  * This file is part of the uutils coreutils package.
-//  *
-//  * For the full copyright and license information, please view the LICENSE
-//  * file that was distributed with this source code.
-
-// spell-checker:ignore (ToDO) hdsf ghead gtail
-
-use std::convert::TryFrom;
-use std::error::Error;
-use std::fmt;
-
-use crate::display::Quotable;
-
-/// Parse a size string into a number of bytes.
-///
-/// A size string comprises an integer and an optional unit. The unit
-/// may be K, M, G, T, P, E, Z or Y (powers of 1024), or KB, MB,
-/// etc. (powers of 1000), or b which is 512.
-/// Binary prefixes can be used, too: KiB=K, MiB=M, and so on.
-///
-/// # Errors
-///
-/// Will return `ParseSizeError` if it's not possible to parse this
-/// string into a number, e.g. if the string does not begin with a
-/// numeral, or if the unit is not one of the supported units described
-/// in the preceding section.
-///
-/// # Examples
-///
-/// ```rust
-/// use uucore::parse_size::parse_size;
-/// assert_eq!(Ok(123), parse_size("123"));
-/// assert_eq!(Ok(9 * 1000), parse_size("9kB")); // kB is 1000
-/// assert_eq!(Ok(2 * 1024), parse_size("2K")); // K is 1024
-/// ```
-pub fn parse_size(size: &str) -> Result<usize, ParseSizeError> {
-    if size.is_empty() {
-        return Err(ParseSizeError::parse_failure(size));
-    }
-    // Get the numeric part of the size argument. For example, if the
-    // argument is "123K", then the numeric part is "123".
-    let numeric_string: String = size.chars().take_while(|c| c.is_digit(10)).collect();
-    let number: usize = if !numeric_string.is_empty() {
-        match numeric_string.parse() {
-            Ok(n) => n,
-            Err(_) => return Err(ParseSizeError::parse_failure(size)),
-        }
-    } else {
-        1
-    };
-
-    // Get the alphabetic units part of the size argument and compute
-    // the factor it represents. For example, if the argument is "123K",
-    // then the unit part is "K" and the factor is 1024. This may be the
-    // empty string, in which case, the factor is 1.
-    let unit = &size[numeric_string.len()..];
-    let (base, exponent): (u128, u32) = match unit {
-        "" => (1, 0),
-        "b" => (512, 1), // (`od`, `head` and `tail` use "b")
-        "KiB" | "kiB" | "K" | "k" => (1024, 1),
-        "MiB" | "miB" | "M" | "m" => (1024, 2),
-        "GiB" | "giB" | "G" | "g" => (1024, 3),
-        "TiB" | "tiB" | "T" | "t" => (1024, 4),
-        "PiB" | "piB" | "P" | "p" => (1024, 5),
-        "EiB" | "eiB" | "E" | "e" => (1024, 6),
-        "ZiB" | "ziB" | "Z" | "z" => (1024, 7),
-        "YiB" | "yiB" | "Y" | "y" => (1024, 8),
-        "KB" | "kB" => (1000, 1),
-        "MB" | "mB" => (1000, 2),
-        "GB" | "gB" => (1000, 3),
-        "TB" | "tB" => (1000, 4),
-        "PB" | "pB" => (1000, 5),
-        "EB" | "eB" => (1000, 6),
-        "ZB" | "zB" => (1000, 7),
-        "YB" | "yB" => (1000, 8),
-        _ => return Err(ParseSizeError::parse_failure(size)),
-    };
-    let factor = match usize::try_from(base.pow(exponent)) {
-        Ok(n) => n,
-        Err(_) => return Err(ParseSizeError::size_too_big(size)),
-    };
-    number
-        .checked_mul(factor)
-        .ok_or_else(|| ParseSizeError::size_too_big(size))
-}
-
-#[derive(Debug, PartialEq, Eq)]
-pub enum ParseSizeError {
-    ParseFailure(String), // Syntax
-    SizeTooBig(String),   // Overflow
-}
-
-impl Error for ParseSizeError {
-    fn description(&self) -> &str {
-        match *self {
-            ParseSizeError::ParseFailure(ref s) => &*s,
-            ParseSizeError::SizeTooBig(ref s) => &*s,
-        }
-    }
-}
-
-impl fmt::Display for ParseSizeError {
-    fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
-        let s = match self {
-            ParseSizeError::ParseFailure(s) => s,
-            ParseSizeError::SizeTooBig(s) => s,
-        };
-        write!(f, "{}", s)
-    }
-}
-
-// FIXME: It's more idiomatic to move the formatting into the Display impl,
-// but there's a lot of downstream code that constructs these errors manually
-// that would be affected
-impl ParseSizeError {
-    fn parse_failure(s: &str) -> ParseSizeError {
-        // stderr on linux (GNU coreutils 8.32) (LC_ALL=C)
-        // has to be handled in the respective uutils because strings differ, e.g.:
-        //
-        // `NUM`
-        // head:     invalid number of bytes: '1fb'
-        // tail:     invalid number of bytes: '1fb'
-        //
-        // `SIZE`
-        // split:    invalid number of bytes: '1fb'
-        // truncate: Invalid number: '1fb'
-        //
-        // `MODE`
-        // stdbuf:   invalid mode '1fb'
-        //
-        // `SIZE`
-        // sort:     invalid suffix in --buffer-size argument '1fb'
-        // sort:     invalid --buffer-size argument 'fb'
-        //
-        // `SIZE`
-        // du:       invalid suffix in --buffer-size argument '1fb'
-        // du:       invalid suffix in --threshold argument '1fb'
-        // du:       invalid --buffer-size argument 'fb'
-        // du:       invalid --threshold argument 'fb'
-        //
-        // `BYTES`
-        // od:       invalid suffix in --read-bytes argument '1fb'
-        // od:       invalid --read-bytes argument  argument 'fb'
-        //                   --skip-bytes
-        //                   --width
-        //                   --strings
-        // etc.
-        ParseSizeError::ParseFailure(format!("{}", s.quote()))
-    }
-
-    fn size_too_big(s: &str) -> ParseSizeError {
-        // stderr on linux (GNU coreutils 8.32) (LC_ALL=C)
-        // has to be handled in the respective uutils because strings differ, e.g.:
-        //
-        // head:     invalid number of bytes: '1Y': Value too large for defined data type
-        // tail:     invalid number of bytes: '1Y': Value too large for defined data type
-        // split:    invalid number of bytes: '1Y': Value too large for defined data type
-        // truncate:          Invalid number: '1Y': Value too large for defined data type
-        // stdbuf:               invalid mode '1Y': Value too large for defined data type
-        // sort:     -S argument '1Y' too large
-        // du:       -B argument '1Y' too large
-        // od:       -N argument '1Y' too large
-        // etc.
-        //
-        // stderr on macos (brew - GNU coreutils 8.32) also differs for the same version, e.g.:
-        // ghead:   invalid number of bytes: '1Y': Value too large to be stored in data type
-        // gtail:   invalid number of bytes: '1Y': Value too large to be stored in data type
-        ParseSizeError::SizeTooBig(format!(
-            "{}: Value too large for defined data type",
-            s.quote()
-        ))
-    }
-}
-
-#[cfg(test)]
-mod tests {
-    use super::*;
-
-    fn variant_eq(a: &ParseSizeError, b: &ParseSizeError) -> bool {
-        std::mem::discriminant(a) == std::mem::discriminant(b)
-    }
-
-    #[test]
-    fn all_suffixes() {
-        // Units  are  K,M,G,T,P,E,Z,Y  (powers  of 1024) or KB,MB,... (powers of 1000).
-        // Binary prefixes can be used, too: KiB=K, MiB=M, and so on.
-        let suffixes = [
-            ('K', 1u32),
-            ('M', 2u32),
-            ('G', 3u32),
-            ('T', 4u32),
-            ('P', 5u32),
-            ('E', 6u32),
-            #[cfg(target_pointer_width = "128")]
-            ('Z', 7u32), // ParseSizeError::SizeTooBig on x64
-            #[cfg(target_pointer_width = "128")]
-            ('Y', 8u32), // ParseSizeError::SizeTooBig on x64
-        ];
-
-        for &(c, exp) in &suffixes {
-            let s = format!("2{}B", c); // KB
-            assert_eq!(Ok((2 * (1000_u128).pow(exp)) as usize), parse_size(&s));
-            let s = format!("2{}", c); // K
-            assert_eq!(Ok((2 * (1024_u128).pow(exp)) as usize), parse_size(&s));
-            let s = format!("2{}iB", c); // KiB
-            assert_eq!(Ok((2 * (1024_u128).pow(exp)) as usize), parse_size(&s));
-            let s = format!("2{}iB", c.to_lowercase()); // kiB
-            assert_eq!(Ok((2 * (1024_u128).pow(exp)) as usize), parse_size(&s));
-
-            // suffix only
-            let s = format!("{}B", c); // KB
-            assert_eq!(Ok(((1000_u128).pow(exp)) as usize), parse_size(&s));
-            let s = format!("{}", c); // K
-            assert_eq!(Ok(((1024_u128).pow(exp)) as usize), parse_size(&s));
-            let s = format!("{}iB", c); // KiB
-            assert_eq!(Ok(((1024_u128).pow(exp)) as usize), parse_size(&s));
-            let s = format!("{}iB", c.to_lowercase()); // kiB
-            assert_eq!(Ok(((1024_u128).pow(exp)) as usize), parse_size(&s));
-        }
-    }
-
-    #[test]
-    #[cfg(not(target_pointer_width = "128"))]
-    fn overflow_x64() {
-        assert!(parse_size("10000000000000000000000").is_err());
-        assert!(parse_size("1000000000T").is_err());
-        assert!(parse_size("100000P").is_err());
-        assert!(parse_size("100E").is_err());
-        assert!(parse_size("1Z").is_err());
-        assert!(parse_size("1Y").is_err());
-
-        assert!(variant_eq(
-            &parse_size("1Z").unwrap_err(),
-            &ParseSizeError::SizeTooBig(String::new())
-        ));
-
-        assert_eq!(
-            ParseSizeError::SizeTooBig("'1Y': Value too large for defined data type".to_string()),
-            parse_size("1Y").unwrap_err()
-        );
-    }
-
-    #[test]
-    #[cfg(target_pointer_width = "32")]
-    fn overflow_x32() {
-        assert!(variant_eq(
-            &parse_size("1T").unwrap_err(),
-            &ParseSizeError::SizeTooBig(String::new())
-        ));
-        assert!(variant_eq(
-            &parse_size("1000G").unwrap_err(),
-            &ParseSizeError::SizeTooBig(String::new())
-        ));
-    }
-
-    #[test]
-    fn invalid_syntax() {
-        let test_strings = [
-            "328hdsf3290",
-            "5MiB nonsense",
-            "5mib",
-            "biB",
-            "-",
-            "+",
-            "",
-            "-1",
-            "1e2",
-            "∞",
-        ];
-        for &test_string in &test_strings {
-            assert_eq!(
-                parse_size(test_string).unwrap_err(),
-                ParseSizeError::ParseFailure(format!("{}", test_string.quote()))
-            );
-        }
-    }
-
-    #[test]
-    fn b_suffix() {
-        assert_eq!(Ok(3 * 512), parse_size("3b")); // b is 512
-    }
-
-    #[test]
-    fn no_suffix() {
-        assert_eq!(Ok(1234), parse_size("1234"));
-        assert_eq!(Ok(0), parse_size("0"));
-        assert_eq!(Ok(5), parse_size("5"));
-        assert_eq!(Ok(999), parse_size("999"));
-    }
-
-    #[test]
-    fn kilobytes_suffix() {
-        assert_eq!(Ok(123 * 1000), parse_size("123KB")); // KB is 1000
-        assert_eq!(Ok(9 * 1000), parse_size("9kB")); // kB is 1000
-        assert_eq!(Ok(2 * 1024), parse_size("2K")); // K is 1024
-        assert_eq!(Ok(0), parse_size("0K"));
-        assert_eq!(Ok(0), parse_size("0KB"));
-        assert_eq!(Ok(1000), parse_size("KB"));
-        assert_eq!(Ok(1024), parse_size("K"));
-        assert_eq!(Ok(2000), parse_size("2kB"));
-        assert_eq!(Ok(4000), parse_size("4KB"));
-    }
-
-    #[test]
-    fn megabytes_suffix() {
-        assert_eq!(Ok(123 * 1024 * 1024), parse_size("123M"));
-        assert_eq!(Ok(123 * 1000 * 1000), parse_size("123MB"));
-        assert_eq!(Ok(1024 * 1024), parse_size("M"));
-        assert_eq!(Ok(1000 * 1000), parse_size("MB"));
-        assert_eq!(Ok(2 * 1_048_576), parse_size("2m"));
-        assert_eq!(Ok(4 * 1_048_576), parse_size("4M"));
-        assert_eq!(Ok(2_000_000), parse_size("2mB"));
-        assert_eq!(Ok(4_000_000), parse_size("4MB"));
-    }
-
-    #[test]
-    fn gigabytes_suffix() {
-        assert_eq!(Ok(1_073_741_824), parse_size("1G"));
-        assert_eq!(Ok(2_000_000_000), parse_size("2GB"));
-    }
-
-    #[test]
-    #[cfg(target_pointer_width = "64")]
-    fn x64() {
-        assert_eq!(Ok(1_099_511_627_776), parse_size("1T"));
-        assert_eq!(Ok(1_125_899_906_842_624), parse_size("1P"));
-        assert_eq!(Ok(1_152_921_504_606_846_976), parse_size("1E"));
-        assert_eq!(Ok(2_000_000_000_000), parse_size("2TB"));
-        assert_eq!(Ok(2_000_000_000_000_000), parse_size("2PB"));
-        assert_eq!(Ok(2_000_000_000_000_000_000), parse_size("2EB"));
-    }
-}
-
-
- \ No newline at end of file diff --git a/src/uucore/parser/parse_time.rs.html b/src/uucore/parser/parse_time.rs.html deleted file mode 100644 index e282eafd5..000000000 --- a/src/uucore/parser/parse_time.rs.html +++ /dev/null @@ -1,90 +0,0 @@ -parse_time.rs - source -
 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
-10
-11
-12
-13
-14
-15
-16
-17
-18
-19
-20
-21
-22
-23
-24
-25
-26
-27
-28
-29
-30
-31
-32
-33
-34
-35
-36
-37
-38
-39
-40
-41
-42
-43
-
// This file is part of the uutils coreutils package.
-//
-// (c) Alex Lyon <arcterus@mail.com>
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-// spell-checker:ignore (vars) NANOS numstr
-
-use std::time::Duration;
-
-use crate::display::Quotable;
-
-pub fn from_str(string: &str) -> Result<Duration, String> {
-    let len = string.len();
-    if len == 0 {
-        return Err("empty string".to_owned());
-    }
-    let slice = &string[..len - 1];
-    let (numstr, times) = match string.chars().next_back().unwrap() {
-        's' | 'S' => (slice, 1),
-        'm' | 'M' => (slice, 60),
-        'h' | 'H' => (slice, 60 * 60),
-        'd' | 'D' => (slice, 60 * 60 * 24),
-        val if !val.is_alphabetic() => (string, 1),
-        _ => {
-            if string == "inf" || string == "infinity" {
-                ("inf", 1)
-            } else {
-                return Err(format!("invalid time interval {}", string.quote()));
-            }
-        }
-    };
-    let num = numstr
-        .parse::<f64>()
-        .map_err(|e| format!("invalid time interval {}: {}", string.quote(), e))?;
-
-    const NANOS_PER_SEC: u32 = 1_000_000_000;
-    let whole_secs = num.trunc();
-    let nanos = (num.fract() * (NANOS_PER_SEC as f64)).trunc();
-    let duration = Duration::new(whole_secs as u64, nanos as u32);
-    Ok(duration * times)
-}
-
-
- \ No newline at end of file diff --git a/src/uucore_procs/lib.rs.html b/src/uucore_procs/lib.rs.html deleted file mode 100644 index 8a4bba6dd..000000000 --- a/src/uucore_procs/lib.rs.html +++ /dev/null @@ -1,236 +0,0 @@ -lib.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-
// Copyright (C) ~ Roy Ivy III <rivy.dev@gmail.com>; MIT license
-
-extern crate proc_macro;
-use proc_macro::TokenStream;
-use proc_macro2::{Ident, Span};
-use quote::quote;
-use syn::{self, parse_macro_input, ItemFn};
-
-//## rust proc-macro background info
-//* ref: <https://dev.to/naufraghi/procedural-macro-in-rust-101-k3f> @@ <http://archive.is/Vbr5e>
-//* ref: [path construction from LitStr](https://oschwald.github.io/maxminddb-rust/syn/struct.LitStr.html) @@ <http://archive.is/8YDua>
-
-//## proc_dbg macro
-//* used to help debug the compile-time proc_macro code
-
-#[cfg(feature = "debug")]
-macro_rules! proc_dbg {
-    ($x:expr) => {
-        dbg!($x)
-    };
-}
-#[cfg(not(feature = "debug"))]
-macro_rules! proc_dbg {
-    ($x:expr) => {};
-}
-
-//## main!()
-
-// main!( EXPR )
-// generates a `main()` function for utilities within the uutils group
-// EXPR == syn::Expr::Lit::String | syn::Expr::Path::Ident ~ EXPR contains the lexical path to the utility `uumain()` function
-//* NOTE: EXPR is ultimately expected to be a multi-segment lexical path (eg, `crate::func`); so, if a single segment path is provided, a trailing "::uumain" is automatically added
-//* for more generic use (and future use of "eager" macros), EXPR may be in either STRING or IDENT form
-
-struct Tokens {
-    expr: syn::Expr,
-}
-
-impl syn::parse::Parse for Tokens {
-    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
-        Ok(Tokens {
-            expr: input.parse()?,
-        })
-    }
-}
-
-#[proc_macro]
-pub fn main(stream: TokenStream) -> TokenStream {
-    let Tokens { expr } = syn::parse_macro_input!(stream as Tokens);
-    proc_dbg!(&expr);
-
-    const ARG_PANIC_TEXT: &str =
-        "expected ident lexical path (or a literal string version) to 'uumain()' as argument";
-
-    // match EXPR as a string literal or an ident path, o/w panic!()
-    let mut expr = match expr {
-        syn::Expr::Lit(expr_lit) => match expr_lit.lit {
-            syn::Lit::Str(ref lit_str) => lit_str.parse::<syn::ExprPath>().unwrap(),
-            _ => panic!("{}", ARG_PANIC_TEXT),
-        },
-        syn::Expr::Path(expr_path) => expr_path,
-        _ => panic!("{}", ARG_PANIC_TEXT),
-    };
-    proc_dbg!(&expr);
-
-    // for a single segment ExprPath argument, add trailing '::uumain' segment
-    if expr.path.segments.len() < 2 {
-        expr = syn::parse_quote!( #expr::uumain );
-    };
-    proc_dbg!(&expr);
-
-    let f = quote::quote! { #expr(uucore::args_os()) };
-    proc_dbg!(&f);
-
-    // generate a uutils utility `main()` function, tailored for the calling utility
-    let result = quote::quote! {
-        fn main() {
-            use std::io::Write;
-            uucore::panic::mute_sigpipe_panic(); // suppress extraneous error output for SIGPIPE failures/panics
-            let code = #f; // execute utility code
-            std::io::stdout().flush().expect("could not flush stdout"); // (defensively) flush stdout for utility prior to exit; see <https://github.com/rust-lang/rust/issues/23818>
-            std::process::exit(code);
-        }
-    };
-    TokenStream::from(result)
-}
-
-#[proc_macro_attribute]
-pub fn gen_uumain(_args: TokenStream, stream: TokenStream) -> TokenStream {
-    let mut ast = parse_macro_input!(stream as ItemFn);
-
-    // Change the name of the function to "uumain_result" to prevent name-conflicts
-    ast.sig.ident = Ident::new("uumain_result", Span::call_site());
-
-    let new = quote!(
-        pub fn uumain(args: impl uucore::Args) -> i32 {
-            #ast
-            let result = uumain_result(args);
-            match result {
-                Ok(()) => uucore::error::get_exit_code(),
-                Err(e) => {
-                    let s = format!("{}", e);
-                    if s != "" {
-                        uucore::show_error!("{}", s);
-                    }
-                    if e.usage() {
-                        eprintln!("Try '{} --help' for more information.", uucore::execution_phrase());
-                    }
-                    e.code()
-                }
-            }
-        }
-    );
-
-    TokenStream::from(new)
-}
-
-
- \ No newline at end of file diff --git a/src/uudoc/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html b/src/uudoc/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html deleted file mode 100644 index c8a44583b..000000000 --- a/src/uudoc/home/runner/work/coreutils-docs/coreutils-docs/coreutils/target/debug/build/coreutils-dd6562bffd685764/out/uutils_map.rs.html +++ /dev/null @@ -1,248 +0,0 @@ -uutils_map.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-
type UtilityMap<T> = HashMap<&'static str, (fn(T) -> i32, fn() -> App<'static>)>;
-
-fn util_map<T: uucore::Args>() -> UtilityMap<T> {
-	#[allow(unused_mut)]
-	#[allow(clippy::let_and_return)]
-	let mut map = UtilityMap::new();
-	map.insert("arch", (arch::uumain, arch::uu_app));
-	map.insert("base32", (base32::uumain, base32::uu_app));
-	map.insert("base64", (base64::uumain, base64::uu_app));
-	map.insert("basename", (basename::uumain, basename::uu_app));
-	map.insert("basenc", (basenc::uumain, basenc::uu_app));
-	map.insert("cat", (cat::uumain, cat::uu_app));
-	map.insert("chcon", (chcon::uumain, chcon::uu_app));
-	map.insert("chgrp", (chgrp::uumain, chgrp::uu_app));
-	map.insert("chmod", (chmod::uumain, chmod::uu_app));
-	map.insert("chown", (chown::uumain, chown::uu_app));
-	map.insert("chroot", (chroot::uumain, chroot::uu_app));
-	map.insert("cksum", (cksum::uumain, cksum::uu_app));
-	map.insert("comm", (comm::uumain, comm::uu_app));
-	map.insert("cp", (cp::uumain, cp::uu_app));
-	map.insert("csplit", (csplit::uumain, csplit::uu_app));
-	map.insert("cut", (cut::uumain, cut::uu_app));
-	map.insert("date", (date::uumain, date::uu_app));
-	map.insert("dd", (dd::uumain, dd::uu_app));
-	map.insert("df", (df::uumain, df::uu_app));
-	map.insert("dircolors", (dircolors::uumain, dircolors::uu_app));
-	map.insert("dirname", (dirname::uumain, dirname::uu_app));
-	map.insert("du", (du::uumain, du::uu_app));
-	map.insert("echo", (echo::uumain, echo::uu_app));
-	map.insert("env", (env::uumain, env::uu_app));
-	map.insert("expand", (expand::uumain, expand::uu_app));
-	map.insert("expr", (expr::uumain, expr::uu_app));
-	map.insert("factor", (factor::uumain, factor::uu_app));
-	map.insert("false", (r#false::uumain, r#false::uu_app));
-	map.insert("fmt", (fmt::uumain, fmt::uu_app));
-	map.insert("fold", (fold::uumain, fold::uu_app));
-	map.insert("groups", (groups::uumain, groups::uu_app));
-	map.insert("hashsum", (hashsum::uumain, hashsum::uu_app_custom));
-		map.insert("md5sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha1sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha224sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha256sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha384sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha512sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-224sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-256sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-384sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("sha3-512sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("shake128sum", (hashsum::uumain, hashsum::uu_app_common));
-		map.insert("shake256sum", (hashsum::uumain, hashsum::uu_app_common));
-	map.insert("head", (head::uumain, head::uu_app));
-	map.insert("hostid", (hostid::uumain, hostid::uu_app));
-	map.insert("hostname", (hostname::uumain, hostname::uu_app));
-	map.insert("id", (id::uumain, id::uu_app));
-	map.insert("install", (install::uumain, install::uu_app));
-	map.insert("join", (join::uumain, join::uu_app));
-	map.insert("kill", (kill::uumain, kill::uu_app));
-	map.insert("link", (link::uumain, link::uu_app));
-	map.insert("ln", (ln::uumain, ln::uu_app));
-	map.insert("logname", (logname::uumain, logname::uu_app));
-	map.insert("ls", (ls::uumain, ls::uu_app));
-	map.insert("mkdir", (mkdir::uumain, mkdir::uu_app));
-	map.insert("mkfifo", (mkfifo::uumain, mkfifo::uu_app));
-	map.insert("mknod", (mknod::uumain, mknod::uu_app));
-	map.insert("mktemp", (mktemp::uumain, mktemp::uu_app));
-	map.insert("more", (more::uumain, more::uu_app));
-	map.insert("mv", (mv::uumain, mv::uu_app));
-	map.insert("nice", (nice::uumain, nice::uu_app));
-	map.insert("nl", (nl::uumain, nl::uu_app));
-	map.insert("nohup", (nohup::uumain, nohup::uu_app));
-	map.insert("nproc", (nproc::uumain, nproc::uu_app));
-	map.insert("numfmt", (numfmt::uumain, numfmt::uu_app));
-	map.insert("od", (od::uumain, od::uu_app));
-	map.insert("paste", (paste::uumain, paste::uu_app));
-	map.insert("pathchk", (pathchk::uumain, pathchk::uu_app));
-	map.insert("pinky", (pinky::uumain, pinky::uu_app));
-	map.insert("pr", (pr::uumain, pr::uu_app));
-	map.insert("printenv", (printenv::uumain, printenv::uu_app));
-	map.insert("printf", (printf::uumain, printf::uu_app));
-	map.insert("ptx", (ptx::uumain, ptx::uu_app));
-	map.insert("pwd", (pwd::uumain, pwd::uu_app));
-	map.insert("readlink", (readlink::uumain, readlink::uu_app));
-	map.insert("realpath", (realpath::uumain, realpath::uu_app));
-	map.insert("relpath", (relpath::uumain, relpath::uu_app));
-	map.insert("rm", (rm::uumain, rm::uu_app));
-	map.insert("rmdir", (rmdir::uumain, rmdir::uu_app));
-	map.insert("runcon", (runcon::uumain, runcon::uu_app));
-	map.insert("seq", (seq::uumain, seq::uu_app));
-	map.insert("shred", (shred::uumain, shred::uu_app));
-	map.insert("shuf", (shuf::uumain, shuf::uu_app));
-	map.insert("sleep", (sleep::uumain, sleep::uu_app));
-	map.insert("sort", (sort::uumain, sort::uu_app));
-	map.insert("split", (split::uumain, split::uu_app));
-	map.insert("stat", (stat::uumain, stat::uu_app));
-	map.insert("stdbuf", (stdbuf::uumain, stdbuf::uu_app));
-	map.insert("sum", (sum::uumain, sum::uu_app));
-	map.insert("sync", (sync::uumain, sync::uu_app));
-	map.insert("tac", (tac::uumain, tac::uu_app));
-	map.insert("tail", (tail::uumain, tail::uu_app));
-	map.insert("tee", (tee::uumain, tee::uu_app));
-	map.insert("timeout", (timeout::uumain, timeout::uu_app));
-	map.insert("touch", (touch::uumain, touch::uu_app));
-	map.insert("tr", (tr::uumain, tr::uu_app));
-	map.insert("true", (r#true::uumain, r#true::uu_app));
-	map.insert("truncate", (truncate::uumain, truncate::uu_app));
-	map.insert("tsort", (tsort::uumain, tsort::uu_app));
-	map.insert("tty", (tty::uumain, tty::uu_app));
-	map.insert("uname", (uname::uumain, uname::uu_app));
-	map.insert("unexpand", (unexpand::uumain, unexpand::uu_app));
-	map.insert("uniq", (uniq::uumain, uniq::uu_app));
-	map.insert("unlink", (unlink::uumain, unlink::uu_app));
-	map.insert("uptime", (uptime::uumain, uptime::uu_app));
-	map.insert("users", (users::uumain, users::uu_app));
-	map.insert("test", (uu_test::uumain, uu_test::uu_app));
-		map.insert("[", (uu_test::uumain, uu_test::uu_app));
-	map.insert("wc", (wc::uumain, wc::uu_app));
-	map.insert("who", (who::uumain, who::uu_app));
-	map.insert("whoami", (whoami::uumain, whoami::uu_app));
-	map.insert("yes", (yes::uumain, yes::uu_app));
-map
-}
-
-
- \ No newline at end of file diff --git a/src/uudoc/uudoc.rs.html b/src/uudoc/uudoc.rs.html deleted file mode 100644 index 37ba86a11..000000000 --- a/src/uudoc/uudoc.rs.html +++ /dev/null @@ -1,278 +0,0 @@ -uudoc.rs - source -
  1
-  2
-  3
-  4
-  5
-  6
-  7
-  8
-  9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
-100
-101
-102
-103
-104
-105
-106
-107
-108
-109
-110
-111
-112
-113
-114
-115
-116
-117
-118
-119
-120
-121
-122
-123
-124
-125
-126
-127
-128
-129
-130
-131
-132
-133
-134
-135
-136
-137
-
// This file is part of the uutils coreutils package.
-//
-// For the full copyright and license information, please view the LICENSE
-// file that was distributed with this source code.
-
-use clap::App;
-use std::collections::hash_map::HashMap;
-use std::ffi::OsString;
-use std::fs::File;
-use std::io::{self, Write};
-
-include!(concat!(env!("OUT_DIR"), "/uutils_map.rs"));
-
-fn main() -> io::Result<()> {
-    let utils = util_map::<Box<dyn Iterator<Item = OsString>>>();
-    match std::fs::create_dir("docs/src/utils/") {
-        Err(e) if e.kind() == std::io::ErrorKind::AlreadyExists => Ok(()),
-        x => x,
-    }?;
-
-    let mut summary = File::create("docs/src/SUMMARY.md")?;
-
-    let _ = write!(
-        summary,
-        "# Summary\n\
-        \n\
-        [Introduction](index.md)\n\
-        * [Installation](installation.md)\n\
-        * [Contributing](contributing.md)\n\
-        \n\
-        # Reference\n\
-        * [Multi-call binary](multicall.md)\n",
-    );
-
-    let mut utils = utils.iter().collect::<Vec<_>>();
-    utils.sort();
-    for (&name, (_, app)) in utils {
-        if name == "[" {
-            continue;
-        }
-        let p = format!("docs/src/utils/{}.md", name);
-        if let Ok(f) = File::create(&p) {
-            write_markdown(f, &mut app(), name)?;
-            println!("Wrote to '{}'", p);
-        } else {
-            println!("Error writing to {}", p);
-        }
-        writeln!(summary, "* [{0}](utils/{0}.md)", name)?
-    }
-    Ok(())
-}
-
-fn write_markdown(mut w: impl Write, app: &mut App, name: &str) -> io::Result<()> {
-    write!(w, "# {}\n\n", name)?;
-    write_version(&mut w, app)?;
-    write_usage(&mut w, app, name)?;
-    write_description(&mut w, app)?;
-    write_options(&mut w, app)
-}
-
-fn write_version(w: &mut impl Write, app: &App) -> io::Result<()> {
-    writeln!(
-        w,
-        "<div class=\"version\">version: {}</div>",
-        app.render_version().split_once(' ').unwrap().1
-    )
-}
-
-fn write_usage(w: &mut impl Write, app: &mut App, name: &str) -> io::Result<()> {
-    writeln!(w, "\n```")?;
-    let mut usage: String = app.render_usage().lines().nth(1).unwrap().trim().into();
-    usage = usage.replace(app.get_name(), name);
-    writeln!(w, "{}", usage)?;
-    writeln!(w, "```")
-}
-
-fn write_description(w: &mut impl Write, app: &App) -> io::Result<()> {
-    if let Some(about) = app.get_long_about().or_else(|| app.get_about()) {
-        writeln!(w, "{}", about)
-    } else {
-        Ok(())
-    }
-}
-
-fn write_options(w: &mut impl Write, app: &App) -> io::Result<()> {
-    writeln!(w, "<h2>Options</h2>")?;
-    write!(w, "<dl>")?;
-    for arg in app.get_arguments() {
-        write!(w, "<dt>")?;
-        let mut first = true;
-        for l in arg.get_long_and_visible_aliases().unwrap_or_default() {
-            if !first {
-                write!(w, ", ")?;
-            } else {
-                first = false;
-            }
-            write!(w, "<code>")?;
-            write!(w, "--{}", l)?;
-            if let Some(names) = arg.get_value_names() {
-                write!(
-                    w,
-                    "={}",
-                    names
-                        .iter()
-                        .map(|x| format!("&lt;{}&gt;", x))
-                        .collect::<Vec<_>>()
-                        .join(" ")
-                )?;
-            }
-            write!(w, "</code>")?;
-        }
-        for s in arg.get_short_and_visible_aliases().unwrap_or_default() {
-            if !first {
-                write!(w, ", ")?;
-            } else {
-                first = false;
-            }
-            write!(w, "<code>")?;
-            write!(w, "-{}", s)?;
-            if let Some(names) = arg.get_value_names() {
-                write!(
-                    w,
-                    " {}",
-                    names
-                        .iter()
-                        .map(|x| format!("&lt;{}&gt;", x))
-                        .collect::<Vec<_>>()
-                        .join(" ")
-                )?;
-            }
-            write!(w, "</code>")?;
-        }
-        writeln!(w, "</dt>")?;
-        writeln!(w, "<dd>\n\n{}\n\n</dd>", arg.get_help().unwrap_or_default())?;
-    }
-    writeln!(w, "</dl>")
-}
-
-
- \ No newline at end of file diff --git a/src/wc/main.rs.html b/src/wc/main.rs.html deleted file mode 100644 index d215d4534..000000000 --- a/src/wc/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_wc);
-
-
- \ No newline at end of file diff --git a/src/who/main.rs.html b/src/who/main.rs.html deleted file mode 100644 index f1acd16d8..000000000 --- a/src/who/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_who);
-
-
- \ No newline at end of file diff --git a/src/whoami/main.rs.html b/src/whoami/main.rs.html deleted file mode 100644 index 4513b3cac..000000000 --- a/src/whoami/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_whoami);
-
-
- \ No newline at end of file diff --git a/src/yes/main.rs.html b/src/yes/main.rs.html deleted file mode 100644 index bdb0bca60..000000000 --- a/src/yes/main.rs.html +++ /dev/null @@ -1,6 +0,0 @@ -main.rs - source -
1
-
uucore_procs::main!(uu_yes);
-
-
- \ No newline at end of file diff --git a/stat/all.html b/stat/all.html deleted file mode 100644 index e3ad0c762..000000000 --- a/stat/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/stat/fn.main.html b/stat/fn.main.html deleted file mode 100644 index 821267d4e..000000000 --- a/stat/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in stat - Rust -

Function stat::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/stat/index.html b/stat/index.html deleted file mode 100644 index 28397ec89..000000000 --- a/stat/index.html +++ /dev/null @@ -1,4 +0,0 @@ -stat - Rust -

Crate stat[][src]

Functions

-
- \ No newline at end of file diff --git a/stat/sidebar-items.js b/stat/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/stat/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/stdbuf/all.html b/stdbuf/all.html deleted file mode 100644 index f9c6b1b09..000000000 --- a/stdbuf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/stdbuf/fn.main.html b/stdbuf/fn.main.html deleted file mode 100644 index bcd905f30..000000000 --- a/stdbuf/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in stdbuf - Rust -

Function stdbuf::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/stdbuf/index.html b/stdbuf/index.html deleted file mode 100644 index 03b8cc923..000000000 --- a/stdbuf/index.html +++ /dev/null @@ -1,4 +0,0 @@ -stdbuf - Rust -

Crate stdbuf[][src]

Functions

-
- \ No newline at end of file diff --git a/stdbuf/sidebar-items.js b/stdbuf/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/stdbuf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/storage.js b/storage.js deleted file mode 100644 index 6b16cbd83..000000000 --- a/storage.js +++ /dev/null @@ -1 +0,0 @@ -var resourcesSuffix="";var darkThemes=["dark","ayu"];window.currentTheme=document.getElementById("themeStyle");window.mainTheme=document.getElementById("mainThemeStyle");var settingsDataset=(function(){var settingsElement=document.getElementById("default-settings");if(settingsElement===null){return null}var dataset=settingsElement.dataset;if(dataset===undefined){return null}return dataset})();function getSettingValue(settingName){var current=getCurrentValue('rustdoc-'+settingName);if(current!==null){return current}if(settingsDataset!==null){var def=settingsDataset[settingName.replace(/-/g,'_')];if(def!==undefined){return def}}return null}var localStoredTheme=getSettingValue("theme");var savedHref=[];function hasClass(elem,className){return elem&&elem.classList&&elem.classList.contains(className)}function addClass(elem,className){if(!elem||!elem.classList){return}elem.classList.add(className)}function removeClass(elem,className){if(!elem||!elem.classList){return}elem.classList.remove(className)}function onEach(arr,func,reversed){if(arr&&arr.length>0&&func){var length=arr.length;var i;if(reversed){for(i=length-1;i>=0;--i){if(func(arr[i])){return true}}}else{for(i=0;i=0){updateLocalStorage("rustdoc-preferred-dark-theme",localStoredTheme)}updateSystemTheme()}else{switchTheme(window.currentTheme,window.mainTheme,getSettingValue("theme")||"light",false)} \ No newline at end of file diff --git a/sum/all.html b/sum/all.html deleted file mode 100644 index 012c54986..000000000 --- a/sum/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/sum/fn.main.html b/sum/fn.main.html deleted file mode 100644 index 5f4377724..000000000 --- a/sum/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in sum - Rust -

Function sum::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/sum/index.html b/sum/index.html deleted file mode 100644 index 80b814c5a..000000000 --- a/sum/index.html +++ /dev/null @@ -1,4 +0,0 @@ -sum - Rust -

Crate sum[][src]

Functions

-
- \ No newline at end of file diff --git a/sum/sidebar-items.js b/sum/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/sum/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/sync/all.html b/sync/all.html deleted file mode 100644 index bd95982bc..000000000 --- a/sync/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/sync/fn.main.html b/sync/fn.main.html deleted file mode 100644 index c55103db3..000000000 --- a/sync/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in sync - Rust -

Function sync::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/sync/index.html b/sync/index.html deleted file mode 100644 index ebd771131..000000000 --- a/sync/index.html +++ /dev/null @@ -1,4 +0,0 @@ -sync - Rust -

Crate sync[][src]

Functions

-
- \ No newline at end of file diff --git a/sync/sidebar-items.js b/sync/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/sync/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/tac/all.html b/tac/all.html deleted file mode 100644 index 14661ff57..000000000 --- a/tac/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/tac/fn.main.html b/tac/fn.main.html deleted file mode 100644 index 55304e615..000000000 --- a/tac/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in tac - Rust -

Function tac::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/tac/index.html b/tac/index.html deleted file mode 100644 index e84cd59c1..000000000 --- a/tac/index.html +++ /dev/null @@ -1,4 +0,0 @@ -tac - Rust -

Crate tac[][src]

Functions

-
- \ No newline at end of file diff --git a/tac/sidebar-items.js b/tac/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/tac/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/tail/all.html b/tail/all.html deleted file mode 100644 index 4032cc7d4..000000000 --- a/tail/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/tail/fn.main.html b/tail/fn.main.html deleted file mode 100644 index e3d97ae7c..000000000 --- a/tail/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in tail - Rust -

Function tail::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/tail/index.html b/tail/index.html deleted file mode 100644 index cd74d700a..000000000 --- a/tail/index.html +++ /dev/null @@ -1,4 +0,0 @@ -tail - Rust -

Crate tail[][src]

Functions

-
- \ No newline at end of file diff --git a/tail/sidebar-items.js b/tail/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/tail/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/tee/all.html b/tee/all.html deleted file mode 100644 index 61090e081..000000000 --- a/tee/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/tee/fn.main.html b/tee/fn.main.html deleted file mode 100644 index 72b2205e0..000000000 --- a/tee/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in tee - Rust -

Function tee::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/tee/index.html b/tee/index.html deleted file mode 100644 index e1c2d0abd..000000000 --- a/tee/index.html +++ /dev/null @@ -1,4 +0,0 @@ -tee - Rust -

Crate tee[][src]

Functions

-
- \ No newline at end of file diff --git a/tee/sidebar-items.js b/tee/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/tee/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/test/all.html b/test/all.html deleted file mode 100644 index 3b994224f..000000000 --- a/test/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/test/fn.main.html b/test/fn.main.html deleted file mode 100644 index af57984f1..000000000 --- a/test/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in test - Rust -

Function test::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/test/index.html b/test/index.html deleted file mode 100644 index 6443b6f53..000000000 --- a/test/index.html +++ /dev/null @@ -1,4 +0,0 @@ -test - Rust -

Crate test[][src]

Functions

-
- \ No newline at end of file diff --git a/test/sidebar-items.js b/test/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/test/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/timeout/all.html b/timeout/all.html deleted file mode 100644 index 3744c8824..000000000 --- a/timeout/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/timeout/fn.main.html b/timeout/fn.main.html deleted file mode 100644 index 5b056efc2..000000000 --- a/timeout/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in timeout - Rust -

Function timeout::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/timeout/index.html b/timeout/index.html deleted file mode 100644 index 6e730d9ec..000000000 --- a/timeout/index.html +++ /dev/null @@ -1,4 +0,0 @@ -timeout - Rust -

Crate timeout[][src]

Functions

-
- \ No newline at end of file diff --git a/timeout/sidebar-items.js b/timeout/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/timeout/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/toggle-minus.svg b/toggle-minus.svg deleted file mode 100644 index 73154788a..000000000 --- a/toggle-minus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/toggle-plus.svg b/toggle-plus.svg deleted file mode 100644 index 08b17033e..000000000 --- a/toggle-plus.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/touch/all.html b/touch/all.html deleted file mode 100644 index 69570f1e5..000000000 --- a/touch/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/touch/fn.main.html b/touch/fn.main.html deleted file mode 100644 index b6ddbe858..000000000 --- a/touch/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in touch - Rust -

Function touch::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/touch/index.html b/touch/index.html deleted file mode 100644 index ad7c0cffd..000000000 --- a/touch/index.html +++ /dev/null @@ -1,4 +0,0 @@ -touch - Rust -

Crate touch[][src]

Functions

-
- \ No newline at end of file diff --git a/touch/sidebar-items.js b/touch/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/touch/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/tr/all.html b/tr/all.html deleted file mode 100644 index c73331efb..000000000 --- a/tr/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/tr/fn.main.html b/tr/fn.main.html deleted file mode 100644 index 110794d3e..000000000 --- a/tr/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in tr - Rust -

Function tr::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/tr/index.html b/tr/index.html deleted file mode 100644 index cf5496467..000000000 --- a/tr/index.html +++ /dev/null @@ -1,4 +0,0 @@ -tr - Rust -

Crate tr[][src]

Functions

-
- \ No newline at end of file diff --git a/tr/sidebar-items.js b/tr/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/tr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/true/all.html b/true/all.html deleted file mode 100644 index c07ecc6fc..000000000 --- a/true/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/true/fn.main.html b/true/fn.main.html deleted file mode 100644 index ead55860a..000000000 --- a/true/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in true - Rust -

Function true::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/true/index.html b/true/index.html deleted file mode 100644 index 558fc3170..000000000 --- a/true/index.html +++ /dev/null @@ -1,4 +0,0 @@ -true - Rust -

Crate true[][src]

Functions

-
- \ No newline at end of file diff --git a/true/sidebar-items.js b/true/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/true/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/truncate/all.html b/truncate/all.html deleted file mode 100644 index f3f8727b1..000000000 --- a/truncate/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/truncate/fn.main.html b/truncate/fn.main.html deleted file mode 100644 index 32a10f0af..000000000 --- a/truncate/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in truncate - Rust -

Function truncate::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/truncate/index.html b/truncate/index.html deleted file mode 100644 index ff20a5cd8..000000000 --- a/truncate/index.html +++ /dev/null @@ -1,4 +0,0 @@ -truncate - Rust -

Crate truncate[][src]

Functions

-
- \ No newline at end of file diff --git a/truncate/sidebar-items.js b/truncate/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/truncate/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/tsort/all.html b/tsort/all.html deleted file mode 100644 index bd8b7dea3..000000000 --- a/tsort/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/tsort/fn.main.html b/tsort/fn.main.html deleted file mode 100644 index dcfd7d318..000000000 --- a/tsort/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in tsort - Rust -

Function tsort::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/tsort/index.html b/tsort/index.html deleted file mode 100644 index 01f4afe75..000000000 --- a/tsort/index.html +++ /dev/null @@ -1,4 +0,0 @@ -tsort - Rust -

Crate tsort[][src]

Functions

-
- \ No newline at end of file diff --git a/tsort/sidebar-items.js b/tsort/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/tsort/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/tty/all.html b/tty/all.html deleted file mode 100644 index a667593a5..000000000 --- a/tty/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/tty/fn.main.html b/tty/fn.main.html deleted file mode 100644 index a3a41a55d..000000000 --- a/tty/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in tty - Rust -

Function tty::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/tty/index.html b/tty/index.html deleted file mode 100644 index e0c5a4c47..000000000 --- a/tty/index.html +++ /dev/null @@ -1,4 +0,0 @@ -tty - Rust -

Crate tty[][src]

Functions

-
- \ No newline at end of file diff --git a/tty/sidebar-items.js b/tty/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/tty/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/uname/all.html b/uname/all.html deleted file mode 100644 index 136227c40..000000000 --- a/uname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uname/fn.main.html b/uname/fn.main.html deleted file mode 100644 index e50052fd2..000000000 --- a/uname/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in uname - Rust -

Function uname::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/uname/index.html b/uname/index.html deleted file mode 100644 index 992830d2a..000000000 --- a/uname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uname - Rust -

Crate uname[][src]

Functions

-
- \ No newline at end of file diff --git a/uname/sidebar-items.js b/uname/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/uname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/unexpand/all.html b/unexpand/all.html deleted file mode 100644 index 1072950b1..000000000 --- a/unexpand/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/unexpand/fn.main.html b/unexpand/fn.main.html deleted file mode 100644 index e906aee4c..000000000 --- a/unexpand/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in unexpand - Rust -

Function unexpand::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/unexpand/index.html b/unexpand/index.html deleted file mode 100644 index 4d4338c6d..000000000 --- a/unexpand/index.html +++ /dev/null @@ -1,4 +0,0 @@ -unexpand - Rust -

Crate unexpand[][src]

Functions

-
- \ No newline at end of file diff --git a/unexpand/sidebar-items.js b/unexpand/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/unexpand/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/uniq/all.html b/uniq/all.html deleted file mode 100644 index 1a023b228..000000000 --- a/uniq/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uniq/fn.main.html b/uniq/fn.main.html deleted file mode 100644 index 15afe670c..000000000 --- a/uniq/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in uniq - Rust -

Function uniq::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/uniq/index.html b/uniq/index.html deleted file mode 100644 index 232093956..000000000 --- a/uniq/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uniq - Rust -

Crate uniq[][src]

Functions

-
- \ No newline at end of file diff --git a/uniq/sidebar-items.js b/uniq/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/uniq/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/unlink/all.html b/unlink/all.html deleted file mode 100644 index c60d3175b..000000000 --- a/unlink/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/unlink/fn.main.html b/unlink/fn.main.html deleted file mode 100644 index f804f51eb..000000000 --- a/unlink/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in unlink - Rust -

Function unlink::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/unlink/index.html b/unlink/index.html deleted file mode 100644 index 153a78523..000000000 --- a/unlink/index.html +++ /dev/null @@ -1,4 +0,0 @@ -unlink - Rust -

Crate unlink[][src]

Functions

-
- \ No newline at end of file diff --git a/unlink/sidebar-items.js b/unlink/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/unlink/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/uptime/all.html b/uptime/all.html deleted file mode 100644 index 3c554d588..000000000 --- a/uptime/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uptime/fn.main.html b/uptime/fn.main.html deleted file mode 100644 index b84b5d89c..000000000 --- a/uptime/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in uptime - Rust -

Function uptime::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/uptime/index.html b/uptime/index.html deleted file mode 100644 index 5771501ee..000000000 --- a/uptime/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uptime - Rust -

Crate uptime[][src]

Functions

-
- \ No newline at end of file diff --git a/uptime/sidebar-items.js b/uptime/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/uptime/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/users/all.html b/users/all.html deleted file mode 100644 index 9d14be803..000000000 --- a/users/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/users/fn.main.html b/users/fn.main.html deleted file mode 100644 index cacad4372..000000000 --- a/users/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in users - Rust -

Function users::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/users/index.html b/users/index.html deleted file mode 100644 index 4ef3239e6..000000000 --- a/users/index.html +++ /dev/null @@ -1,4 +0,0 @@ -users - Rust -

Crate users[][src]

Functions

-
- \ No newline at end of file diff --git a/users/sidebar-items.js b/users/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/users/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/uu_arch/all.html b/uu_arch/all.html deleted file mode 100644 index 7ea52f69c..000000000 --- a/uu_arch/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_arch/fn.uu_app.html b/uu_arch/fn.uu_app.html deleted file mode 100644 index 1f060f8f9..000000000 --- a/uu_arch/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_arch - Rust -

Function uu_arch::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_arch/fn.uumain.html b/uu_arch/fn.uumain.html deleted file mode 100644 index 82f9271ee..000000000 --- a/uu_arch/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_arch - Rust -

Function uu_arch::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_arch/index.html b/uu_arch/index.html deleted file mode 100644 index f6682a524..000000000 --- a/uu_arch/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_arch - Rust -

Crate uu_arch[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_arch/sidebar-items.js b/uu_arch/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_arch/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_base32/all.html b/uu_base32/all.html deleted file mode 100644 index 8ed0e2ff2..000000000 --- a/uu_base32/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Functions

Statics

- \ No newline at end of file diff --git a/uu_base32/base_common/fn.base_app.html b/uu_base32/base_common/fn.base_app.html deleted file mode 100644 index 16d75da19..000000000 --- a/uu_base32/base_common/fn.base_app.html +++ /dev/null @@ -1,3 +0,0 @@ -base_app in uu_base32::base_common - Rust -

Function uu_base32::base_common::base_app[][src]

pub fn base_app(about: &str) -> App<'_>
- \ No newline at end of file diff --git a/uu_base32/base_common/fn.get_input.html b/uu_base32/base_common/fn.get_input.html deleted file mode 100644 index 14032752e..000000000 --- a/uu_base32/base_common/fn.get_input.html +++ /dev/null @@ -1,3 +0,0 @@ -get_input in uu_base32::base_common - Rust -

Function uu_base32::base_common::get_input[][src]

pub fn get_input<'a>(
    config: &Config,
    stdin_ref: &'a Stdin
) -> UResult<Box<dyn Read + 'a>>
- \ No newline at end of file diff --git a/uu_base32/base_common/fn.handle_input.html b/uu_base32/base_common/fn.handle_input.html deleted file mode 100644 index 6ef668594..000000000 --- a/uu_base32/base_common/fn.handle_input.html +++ /dev/null @@ -1,3 +0,0 @@ -handle_input in uu_base32::base_common - Rust -

Function uu_base32::base_common::handle_input[][src]

pub fn handle_input<R: Read>(
    input: &mut R,
    format: Format,
    line_wrap: Option<usize>,
    ignore_garbage: bool,
    decode: bool
) -> UResult<()>
- \ No newline at end of file diff --git a/uu_base32/base_common/fn.parse_base_cmd_args.html b/uu_base32/base_common/fn.parse_base_cmd_args.html deleted file mode 100644 index 21e64dd2b..000000000 --- a/uu_base32/base_common/fn.parse_base_cmd_args.html +++ /dev/null @@ -1,3 +0,0 @@ -parse_base_cmd_args in uu_base32::base_common - Rust -

Function uu_base32::base_common::parse_base_cmd_args[][src]

pub fn parse_base_cmd_args(
    args: impl Args,
    about: &str,
    usage: &str
) -> UResult<Config>
- \ No newline at end of file diff --git a/uu_base32/base_common/index.html b/uu_base32/base_common/index.html deleted file mode 100644 index 602a964c7..000000000 --- a/uu_base32/base_common/index.html +++ /dev/null @@ -1,7 +0,0 @@ -uu_base32::base_common - Rust -

Module uu_base32::base_common[][src]

Modules

-

Structs

-

Statics

-

Functions

-
- \ No newline at end of file diff --git a/uu_base32/base_common/options/index.html b/uu_base32/base_common/options/index.html deleted file mode 100644 index cac38153d..000000000 --- a/uu_base32/base_common/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_base32::base_common::options - Rust -

Module uu_base32::base_common::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_base32/base_common/options/sidebar-items.js b/uu_base32/base_common/options/sidebar-items.js deleted file mode 100644 index 8dee405b2..000000000 --- a/uu_base32/base_common/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["DECODE",""],["FILE",""],["IGNORE_GARBAGE",""],["WRAP",""]]}); \ No newline at end of file diff --git a/uu_base32/base_common/options/static.DECODE.html b/uu_base32/base_common/options/static.DECODE.html deleted file mode 100644 index 48d963e36..000000000 --- a/uu_base32/base_common/options/static.DECODE.html +++ /dev/null @@ -1,3 +0,0 @@ -DECODE in uu_base32::base_common::options - Rust -

Static uu_base32::base_common::options::DECODE[][src]

pub static DECODE: &str
- \ No newline at end of file diff --git a/uu_base32/base_common/options/static.FILE.html b/uu_base32/base_common/options/static.FILE.html deleted file mode 100644 index d8e1de1b7..000000000 --- a/uu_base32/base_common/options/static.FILE.html +++ /dev/null @@ -1,3 +0,0 @@ -FILE in uu_base32::base_common::options - Rust -

Static uu_base32::base_common::options::FILE[][src]

pub static FILE: &str
- \ No newline at end of file diff --git a/uu_base32/base_common/options/static.IGNORE_GARBAGE.html b/uu_base32/base_common/options/static.IGNORE_GARBAGE.html deleted file mode 100644 index 951cf2df4..000000000 --- a/uu_base32/base_common/options/static.IGNORE_GARBAGE.html +++ /dev/null @@ -1,3 +0,0 @@ -IGNORE_GARBAGE in uu_base32::base_common::options - Rust -

Static uu_base32::base_common::options::IGNORE_GARBAGE[][src]

pub static IGNORE_GARBAGE: &str
- \ No newline at end of file diff --git a/uu_base32/base_common/options/static.WRAP.html b/uu_base32/base_common/options/static.WRAP.html deleted file mode 100644 index 7f7f0a4c2..000000000 --- a/uu_base32/base_common/options/static.WRAP.html +++ /dev/null @@ -1,3 +0,0 @@ -WRAP in uu_base32::base_common::options - Rust -

Static uu_base32::base_common::options::WRAP[][src]

pub static WRAP: &str
- \ No newline at end of file diff --git a/uu_base32/base_common/sidebar-items.js b/uu_base32/base_common/sidebar-items.js deleted file mode 100644 index bf56ad908..000000000 --- a/uu_base32/base_common/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["base_app",""],["get_input",""],["handle_input",""],["parse_base_cmd_args",""]],"mod":[["options",""]],"static":[["BASE_CMD_PARSE_ERROR",""]],"struct":[["Config",""]]}); \ No newline at end of file diff --git a/uu_base32/base_common/static.BASE_CMD_PARSE_ERROR.html b/uu_base32/base_common/static.BASE_CMD_PARSE_ERROR.html deleted file mode 100644 index 47bfb2105..000000000 --- a/uu_base32/base_common/static.BASE_CMD_PARSE_ERROR.html +++ /dev/null @@ -1,3 +0,0 @@ -BASE_CMD_PARSE_ERROR in uu_base32::base_common - Rust -

Static uu_base32::base_common::BASE_CMD_PARSE_ERROR[][src]

pub static BASE_CMD_PARSE_ERROR: i32
- \ No newline at end of file diff --git a/uu_base32/base_common/struct.Config.html b/uu_base32/base_common/struct.Config.html deleted file mode 100644 index 660a4da89..000000000 --- a/uu_base32/base_common/struct.Config.html +++ /dev/null @@ -1,17 +0,0 @@ -Config in uu_base32::base_common - Rust -

Struct uu_base32::base_common::Config[][src]

pub struct Config {
-    pub decode: bool,
-    pub ignore_garbage: bool,
-    pub wrap_cols: Option<usize>,
-    pub to_read: Option<String>,
-}

Fields

decode: boolignore_garbage: boolwrap_cols: Option<usize>to_read: Option<String>

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_base32/fn.uu_app.html b/uu_base32/fn.uu_app.html deleted file mode 100644 index d52088c8f..000000000 --- a/uu_base32/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_base32 - Rust -

Function uu_base32::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_base32/fn.uumain.html b/uu_base32/fn.uumain.html deleted file mode 100644 index 74f49c8d5..000000000 --- a/uu_base32/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_base32 - Rust -

Function uu_base32::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_base32/index.html b/uu_base32/index.html deleted file mode 100644 index 9e0953cab..000000000 --- a/uu_base32/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_base32 - Rust -

Crate uu_base32[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_base32/sidebar-items.js b/uu_base32/sidebar-items.js deleted file mode 100644 index 3254ad0dc..000000000 --- a/uu_base32/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["base_common",""]]}); \ No newline at end of file diff --git a/uu_base64/all.html b/uu_base64/all.html deleted file mode 100644 index a746d6885..000000000 --- a/uu_base64/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_base64/fn.uu_app.html b/uu_base64/fn.uu_app.html deleted file mode 100644 index 1768dd8a1..000000000 --- a/uu_base64/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_base64 - Rust -

Function uu_base64::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_base64/fn.uumain.html b/uu_base64/fn.uumain.html deleted file mode 100644 index d43ab1fef..000000000 --- a/uu_base64/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_base64 - Rust -

Function uu_base64::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_base64/index.html b/uu_base64/index.html deleted file mode 100644 index b048be0aa..000000000 --- a/uu_base64/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_base64 - Rust -

Crate uu_base64[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_base64/sidebar-items.js b/uu_base64/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_base64/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_basename/all.html b/uu_basename/all.html deleted file mode 100644 index ff3f1adea..000000000 --- a/uu_basename/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_basename/fn.uu_app.html b/uu_basename/fn.uu_app.html deleted file mode 100644 index 48adea25e..000000000 --- a/uu_basename/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_basename - Rust -

Function uu_basename::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_basename/fn.uumain.html b/uu_basename/fn.uumain.html deleted file mode 100644 index 4102b18e5..000000000 --- a/uu_basename/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_basename - Rust -

Function uu_basename::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_basename/index.html b/uu_basename/index.html deleted file mode 100644 index 396e4e26d..000000000 --- a/uu_basename/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_basename - Rust -

Crate uu_basename[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_basename/options/index.html b/uu_basename/options/index.html deleted file mode 100644 index e84b8ba87..000000000 --- a/uu_basename/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_basename::options - Rust -

Module uu_basename::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_basename/options/sidebar-items.js b/uu_basename/options/sidebar-items.js deleted file mode 100644 index 0d028f0a4..000000000 --- a/uu_basename/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["MULTIPLE",""],["NAME",""],["SUFFIX",""],["ZERO",""]]}); \ No newline at end of file diff --git a/uu_basename/options/static.MULTIPLE.html b/uu_basename/options/static.MULTIPLE.html deleted file mode 100644 index dc9bfd940..000000000 --- a/uu_basename/options/static.MULTIPLE.html +++ /dev/null @@ -1,3 +0,0 @@ -MULTIPLE in uu_basename::options - Rust -

Static uu_basename::options::MULTIPLE[][src]

pub static MULTIPLE: &str
- \ No newline at end of file diff --git a/uu_basename/options/static.NAME.html b/uu_basename/options/static.NAME.html deleted file mode 100644 index 417eb27e4..000000000 --- a/uu_basename/options/static.NAME.html +++ /dev/null @@ -1,3 +0,0 @@ -NAME in uu_basename::options - Rust -

Static uu_basename::options::NAME[][src]

pub static NAME: &str
- \ No newline at end of file diff --git a/uu_basename/options/static.SUFFIX.html b/uu_basename/options/static.SUFFIX.html deleted file mode 100644 index 1df7eec53..000000000 --- a/uu_basename/options/static.SUFFIX.html +++ /dev/null @@ -1,3 +0,0 @@ -SUFFIX in uu_basename::options - Rust -

Static uu_basename::options::SUFFIX[][src]

pub static SUFFIX: &str
- \ No newline at end of file diff --git a/uu_basename/options/static.ZERO.html b/uu_basename/options/static.ZERO.html deleted file mode 100644 index 35fadcf38..000000000 --- a/uu_basename/options/static.ZERO.html +++ /dev/null @@ -1,3 +0,0 @@ -ZERO in uu_basename::options - Rust -

Static uu_basename::options::ZERO[][src]

pub static ZERO: &str
- \ No newline at end of file diff --git a/uu_basename/sidebar-items.js b/uu_basename/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_basename/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_basenc/all.html b/uu_basenc/all.html deleted file mode 100644 index 4852ae803..000000000 --- a/uu_basenc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_basenc/fn.uu_app.html b/uu_basenc/fn.uu_app.html deleted file mode 100644 index 80c3ac7aa..000000000 --- a/uu_basenc/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_basenc - Rust -

Function uu_basenc::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_basenc/fn.uumain.html b/uu_basenc/fn.uumain.html deleted file mode 100644 index 003740a70..000000000 --- a/uu_basenc/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_basenc - Rust -

Function uu_basenc::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_basenc/index.html b/uu_basenc/index.html deleted file mode 100644 index 72cd9f74f..000000000 --- a/uu_basenc/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_basenc - Rust -

Crate uu_basenc[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_basenc/sidebar-items.js b/uu_basenc/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_basenc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_cat/all.html b/uu_cat/all.html deleted file mode 100644 index efc1c8fcf..000000000 --- a/uu_cat/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_cat/fn.uu_app.html b/uu_cat/fn.uu_app.html deleted file mode 100644 index 917328bb6..000000000 --- a/uu_cat/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_cat - Rust -

Function uu_cat::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_cat/fn.uumain.html b/uu_cat/fn.uumain.html deleted file mode 100644 index 0dca8251e..000000000 --- a/uu_cat/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_cat - Rust -

Function uu_cat::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_cat/index.html b/uu_cat/index.html deleted file mode 100644 index 5032f1d87..000000000 --- a/uu_cat/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_cat - Rust -

Crate uu_cat[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_cat/sidebar-items.js b/uu_cat/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_cat/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_chcon/all.html b/uu_chcon/all.html deleted file mode 100644 index 493c0bc5d..000000000 --- a/uu_chcon/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_chcon/fn.uu_app.html b/uu_chcon/fn.uu_app.html deleted file mode 100644 index a15603eb1..000000000 --- a/uu_chcon/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_chcon - Rust -

Function uu_chcon::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_chcon/fn.uumain.html b/uu_chcon/fn.uumain.html deleted file mode 100644 index d62ac820a..000000000 --- a/uu_chcon/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_chcon - Rust -

Function uu_chcon::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_chcon/index.html b/uu_chcon/index.html deleted file mode 100644 index c632b8d6b..000000000 --- a/uu_chcon/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_chcon - Rust -

Crate uu_chcon[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_chcon/options/dereference/index.html b/uu_chcon/options/dereference/index.html deleted file mode 100644 index 42f003f80..000000000 --- a/uu_chcon/options/dereference/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_chcon::options::dereference - Rust -

Module uu_chcon::options::dereference[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_chcon/options/dereference/sidebar-items.js b/uu_chcon/options/dereference/sidebar-items.js deleted file mode 100644 index dc0806b40..000000000 --- a/uu_chcon/options/dereference/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["DEREFERENCE",""],["NO_DEREFERENCE",""]]}); \ No newline at end of file diff --git a/uu_chcon/options/dereference/static.DEREFERENCE.html b/uu_chcon/options/dereference/static.DEREFERENCE.html deleted file mode 100644 index ab179c541..000000000 --- a/uu_chcon/options/dereference/static.DEREFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -DEREFERENCE in uu_chcon::options::dereference - Rust -

Static uu_chcon::options::dereference::DEREFERENCE[][src]

pub static DEREFERENCE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/dereference/static.NO_DEREFERENCE.html b/uu_chcon/options/dereference/static.NO_DEREFERENCE.html deleted file mode 100644 index 52597ea9f..000000000 --- a/uu_chcon/options/dereference/static.NO_DEREFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_DEREFERENCE in uu_chcon::options::dereference - Rust -

Static uu_chcon::options::dereference::NO_DEREFERENCE[][src]

pub static NO_DEREFERENCE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/index.html b/uu_chcon/options/index.html deleted file mode 100644 index 759c2182c..000000000 --- a/uu_chcon/options/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_chcon::options - Rust -

Module uu_chcon::options[][src]

Modules

-

Statics

-
- \ No newline at end of file diff --git a/uu_chcon/options/preserve_root/index.html b/uu_chcon/options/preserve_root/index.html deleted file mode 100644 index bb10455b1..000000000 --- a/uu_chcon/options/preserve_root/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_chcon::options::preserve_root - Rust -

Module uu_chcon::options::preserve_root[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_chcon/options/preserve_root/sidebar-items.js b/uu_chcon/options/preserve_root/sidebar-items.js deleted file mode 100644 index 9a112f7b4..000000000 --- a/uu_chcon/options/preserve_root/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["NO_PRESERVE_ROOT",""],["PRESERVE_ROOT",""]]}); \ No newline at end of file diff --git a/uu_chcon/options/preserve_root/static.NO_PRESERVE_ROOT.html b/uu_chcon/options/preserve_root/static.NO_PRESERVE_ROOT.html deleted file mode 100644 index 4d3e1ce74..000000000 --- a/uu_chcon/options/preserve_root/static.NO_PRESERVE_ROOT.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_PRESERVE_ROOT in uu_chcon::options::preserve_root - Rust -

Static uu_chcon::options::preserve_root::NO_PRESERVE_ROOT[][src]

pub static NO_PRESERVE_ROOT: &str
- \ No newline at end of file diff --git a/uu_chcon/options/preserve_root/static.PRESERVE_ROOT.html b/uu_chcon/options/preserve_root/static.PRESERVE_ROOT.html deleted file mode 100644 index fa25a94fc..000000000 --- a/uu_chcon/options/preserve_root/static.PRESERVE_ROOT.html +++ /dev/null @@ -1,3 +0,0 @@ -PRESERVE_ROOT in uu_chcon::options::preserve_root - Rust -

Static uu_chcon::options::preserve_root::PRESERVE_ROOT[][src]

pub static PRESERVE_ROOT: &str
- \ No newline at end of file diff --git a/uu_chcon/options/sidebar-items.js b/uu_chcon/options/sidebar-items.js deleted file mode 100644 index 3a5433974..000000000 --- a/uu_chcon/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"mod":[["dereference",""],["preserve_root",""],["sym_links",""]],"static":[["RANGE",""],["RECURSIVE",""],["REFERENCE",""],["ROLE",""],["TYPE",""],["USER",""],["VERBOSE",""]]}); \ No newline at end of file diff --git a/uu_chcon/options/static.RANGE.html b/uu_chcon/options/static.RANGE.html deleted file mode 100644 index a647a651b..000000000 --- a/uu_chcon/options/static.RANGE.html +++ /dev/null @@ -1,3 +0,0 @@ -RANGE in uu_chcon::options - Rust -

Static uu_chcon::options::RANGE[][src]

pub static RANGE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/static.RECURSIVE.html b/uu_chcon/options/static.RECURSIVE.html deleted file mode 100644 index fc8107652..000000000 --- a/uu_chcon/options/static.RECURSIVE.html +++ /dev/null @@ -1,3 +0,0 @@ -RECURSIVE in uu_chcon::options - Rust -

Static uu_chcon::options::RECURSIVE[][src]

pub static RECURSIVE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/static.REFERENCE.html b/uu_chcon/options/static.REFERENCE.html deleted file mode 100644 index 7e2534cb5..000000000 --- a/uu_chcon/options/static.REFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -REFERENCE in uu_chcon::options - Rust -

Static uu_chcon::options::REFERENCE[][src]

pub static REFERENCE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/static.ROLE.html b/uu_chcon/options/static.ROLE.html deleted file mode 100644 index cc48224d9..000000000 --- a/uu_chcon/options/static.ROLE.html +++ /dev/null @@ -1,3 +0,0 @@ -ROLE in uu_chcon::options - Rust -

Static uu_chcon::options::ROLE[][src]

pub static ROLE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/static.TYPE.html b/uu_chcon/options/static.TYPE.html deleted file mode 100644 index 61eeab77c..000000000 --- a/uu_chcon/options/static.TYPE.html +++ /dev/null @@ -1,3 +0,0 @@ -TYPE in uu_chcon::options - Rust -

Static uu_chcon::options::TYPE[][src]

pub static TYPE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/static.USER.html b/uu_chcon/options/static.USER.html deleted file mode 100644 index 6ff530a9c..000000000 --- a/uu_chcon/options/static.USER.html +++ /dev/null @@ -1,3 +0,0 @@ -USER in uu_chcon::options - Rust -

Static uu_chcon::options::USER[][src]

pub static USER: &str
- \ No newline at end of file diff --git a/uu_chcon/options/static.VERBOSE.html b/uu_chcon/options/static.VERBOSE.html deleted file mode 100644 index 39458b511..000000000 --- a/uu_chcon/options/static.VERBOSE.html +++ /dev/null @@ -1,3 +0,0 @@ -VERBOSE in uu_chcon::options - Rust -

Static uu_chcon::options::VERBOSE[][src]

pub static VERBOSE: &str
- \ No newline at end of file diff --git a/uu_chcon/options/sym_links/index.html b/uu_chcon/options/sym_links/index.html deleted file mode 100644 index cd036a5b6..000000000 --- a/uu_chcon/options/sym_links/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_chcon::options::sym_links - Rust -

Module uu_chcon::options::sym_links[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_chcon/options/sym_links/sidebar-items.js b/uu_chcon/options/sym_links/sidebar-items.js deleted file mode 100644 index 31938c8e8..000000000 --- a/uu_chcon/options/sym_links/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["FOLLOW_ARG_DIR_SYM_LINK",""],["FOLLOW_DIR_SYM_LINKS",""],["NO_FOLLOW_SYM_LINKS",""]]}); \ No newline at end of file diff --git a/uu_chcon/options/sym_links/static.FOLLOW_ARG_DIR_SYM_LINK.html b/uu_chcon/options/sym_links/static.FOLLOW_ARG_DIR_SYM_LINK.html deleted file mode 100644 index 3f9c6b75d..000000000 --- a/uu_chcon/options/sym_links/static.FOLLOW_ARG_DIR_SYM_LINK.html +++ /dev/null @@ -1,3 +0,0 @@ -FOLLOW_ARG_DIR_SYM_LINK in uu_chcon::options::sym_links - Rust -

Static uu_chcon::options::sym_links::FOLLOW_ARG_DIR_SYM_LINK[][src]

pub static FOLLOW_ARG_DIR_SYM_LINK: &str
- \ No newline at end of file diff --git a/uu_chcon/options/sym_links/static.FOLLOW_DIR_SYM_LINKS.html b/uu_chcon/options/sym_links/static.FOLLOW_DIR_SYM_LINKS.html deleted file mode 100644 index 66ce52b8e..000000000 --- a/uu_chcon/options/sym_links/static.FOLLOW_DIR_SYM_LINKS.html +++ /dev/null @@ -1,3 +0,0 @@ -FOLLOW_DIR_SYM_LINKS in uu_chcon::options::sym_links - Rust -

Static uu_chcon::options::sym_links::FOLLOW_DIR_SYM_LINKS[][src]

pub static FOLLOW_DIR_SYM_LINKS: &str
- \ No newline at end of file diff --git a/uu_chcon/options/sym_links/static.NO_FOLLOW_SYM_LINKS.html b/uu_chcon/options/sym_links/static.NO_FOLLOW_SYM_LINKS.html deleted file mode 100644 index f426d30f6..000000000 --- a/uu_chcon/options/sym_links/static.NO_FOLLOW_SYM_LINKS.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_FOLLOW_SYM_LINKS in uu_chcon::options::sym_links - Rust -

Static uu_chcon::options::sym_links::NO_FOLLOW_SYM_LINKS[][src]

pub static NO_FOLLOW_SYM_LINKS: &str
- \ No newline at end of file diff --git a/uu_chcon/sidebar-items.js b/uu_chcon/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_chcon/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_chgrp/all.html b/uu_chgrp/all.html deleted file mode 100644 index 07506e556..000000000 --- a/uu_chgrp/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Traits

Functions

- \ No newline at end of file diff --git a/uu_chgrp/entries/fn.get_groups.html b/uu_chgrp/entries/fn.get_groups.html deleted file mode 100644 index a028b4bf5..000000000 --- a/uu_chgrp/entries/fn.get_groups.html +++ /dev/null @@ -1,12 +0,0 @@ -get_groups in uu_chgrp::entries - Rust -

Function uu_chgrp::entries::get_groups[][src]

pub fn get_groups() -> Result<Vec<u32, Global>, Error>
Expand description

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-
-

getgroups() returns the supplementary group IDs of the calling -process in list. -If size is zero, list is not modified, but the total number of -supplementary group IDs for the process is returned. This allows -the caller to determine the size of a dynamically allocated list -to be used in a further call to getgroups().

-
-
- \ No newline at end of file diff --git a/uu_chgrp/entries/fn.get_groups_gnu.html b/uu_chgrp/entries/fn.get_groups_gnu.html deleted file mode 100644 index 886107664..000000000 --- a/uu_chgrp/entries/fn.get_groups_gnu.html +++ /dev/null @@ -1,25 +0,0 @@ -get_groups_gnu in uu_chgrp::entries - Rust -

Function uu_chgrp::entries::get_groups_gnu[][src]

pub fn get_groups_gnu(arg_id: Option<u32>) -> Result<Vec<u32, Global>, Error>
Expand description

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-

If arg_id is None (default), get_groups_gnu moves the effective -group id (egid) to the first entry in the returned Vector. -If arg_id is Some(x), get_groups_gnu moves the id with value x -to the first entry in the returned Vector. This might be necessary -for id --groups --real if gid and egid are not equal.

-

From: <https://www.man7.org/linux/man-pages/man3/getgroups.3p.html>

-
-

As implied by the definition of supplementary groups, the -effective group ID may appear in the array returned by -getgroups() or it may be returned only by getegid(). Duplication -may exist, but the application needs to call getegid() to be sure -of getting all of the information. Various implementation -variations and administrative sequences cause the set of groups -appearing in the result of getgroups() to vary in order and as to -whether the effective group ID is included, even when the set of -groups is the same (in the mathematical sense of ``set’’). (The -history of a process and its parents could affect the details of -the result.)

-
-
- \ No newline at end of file diff --git a/uu_chgrp/entries/fn.gid2grp.html b/uu_chgrp/entries/fn.gid2grp.html deleted file mode 100644 index afe49d5b0..000000000 --- a/uu_chgrp/entries/fn.gid2grp.html +++ /dev/null @@ -1,3 +0,0 @@ -gid2grp in uu_chgrp::entries - Rust -

Function uu_chgrp::entries::gid2grp[][src]

pub fn gid2grp(id: u32) -> Result<String, Error>
- \ No newline at end of file diff --git a/uu_chgrp/entries/fn.grp2gid.html b/uu_chgrp/entries/fn.grp2gid.html deleted file mode 100644 index 7c1295790..000000000 --- a/uu_chgrp/entries/fn.grp2gid.html +++ /dev/null @@ -1,3 +0,0 @@ -grp2gid in uu_chgrp::entries - Rust -

Function uu_chgrp::entries::grp2gid[][src]

pub fn grp2gid(name: &str) -> Result<u32, Error>
- \ No newline at end of file diff --git a/uu_chgrp/entries/fn.uid2usr.html b/uu_chgrp/entries/fn.uid2usr.html deleted file mode 100644 index bc7363051..000000000 --- a/uu_chgrp/entries/fn.uid2usr.html +++ /dev/null @@ -1,3 +0,0 @@ -uid2usr in uu_chgrp::entries - Rust -

Function uu_chgrp::entries::uid2usr[][src]

pub fn uid2usr(id: u32) -> Result<String, Error>
- \ No newline at end of file diff --git a/uu_chgrp/entries/fn.usr2uid.html b/uu_chgrp/entries/fn.usr2uid.html deleted file mode 100644 index 2404dab9f..000000000 --- a/uu_chgrp/entries/fn.usr2uid.html +++ /dev/null @@ -1,3 +0,0 @@ -usr2uid in uu_chgrp::entries - Rust -

Function uu_chgrp::entries::usr2uid[][src]

pub fn usr2uid(name: &str) -> Result<u32, Error>
- \ No newline at end of file diff --git a/uu_chgrp/entries/index.html b/uu_chgrp/entries/index.html deleted file mode 100644 index a474ab29a..000000000 --- a/uu_chgrp/entries/index.html +++ /dev/null @@ -1,33 +0,0 @@ -uu_chgrp::entries - Rust -

Module uu_chgrp::entries[][src]

Expand description

Get password/group file entry

-

Examples:

-
use uucore::entries::{self, Locate};
-
-let root_group = if cfg!(any(target_os = "linux", target_os = "android")) {
-    "root"
-} else {
-    "wheel"
-};
-
-assert_eq!("root", entries::uid2usr(0).unwrap());
-assert_eq!(0, entries::usr2uid("root").unwrap());
-assert!(entries::gid2grp(0).is_ok());
-assert!(entries::grp2gid(root_group).is_ok());
-
-assert!(entries::Passwd::locate(0).is_ok());
-assert!(entries::Passwd::locate("0").is_ok());
-assert!(entries::Passwd::locate("root").is_ok());
-
-assert!(entries::Group::locate(0).is_ok());
-assert!(entries::Group::locate("0").is_ok());
-assert!(entries::Group::locate(root_group).is_ok());
-

Structs

-

Traits

-

Fetch desired entry.

-

Functions

-

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-
- \ No newline at end of file diff --git a/uu_chgrp/entries/sidebar-items.js b/uu_chgrp/entries/sidebar-items.js deleted file mode 100644 index 6dbed1e4a..000000000 --- a/uu_chgrp/entries/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["get_groups","From: ``"],["get_groups_gnu","The list of group IDs returned from GNU’s `groups` and GNU’s `id --groups` starts with the effective group ID (egid). This is a wrapper for `get_groups()` to mimic this behavior."],["gid2grp",""],["grp2gid",""],["uid2usr",""],["usr2uid",""]],"struct":[["Group",""],["Passwd",""]],"trait":[["Locate","Fetch desired entry."]]}); \ No newline at end of file diff --git a/uu_chgrp/entries/struct.Group.html b/uu_chgrp/entries/struct.Group.html deleted file mode 100644 index 360c36367..000000000 --- a/uu_chgrp/entries/struct.Group.html +++ /dev/null @@ -1,23 +0,0 @@ -Group in uu_chgrp::entries - Rust -

Struct uu_chgrp::entries::Group[][src]

pub struct Group {
-    pub name: String,
-    pub gid: u32,
-}

Fields

name: String

AKA group.gr_name

-
gid: u32

AKA group.gr_gid

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_chgrp/entries/struct.Passwd.html b/uu_chgrp/entries/struct.Passwd.html deleted file mode 100644 index 33fd4306d..000000000 --- a/uu_chgrp/entries/struct.Passwd.html +++ /dev/null @@ -1,47 +0,0 @@ -Passwd in uu_chgrp::entries - Rust -

Struct uu_chgrp::entries::Passwd[][src]

pub struct Passwd {
-    pub name: String,
-    pub uid: u32,
-    pub gid: u32,
-    pub user_info: String,
-    pub user_shell: String,
-    pub user_dir: String,
-    pub user_passwd: String,
-}

Fields

name: String

AKA passwd.pw_name

-
uid: u32

AKA passwd.pw_uid

-
gid: u32

AKA passwd.pw_gid

-
user_info: String

AKA passwd.pw_gecos

-
user_shell: String

AKA passwd.pw_shell

-
user_dir: String

AKA passwd.pw_dir

-
user_passwd: String

AKA passwd.pw_passwd

-

Implementations

This is a wrapper function for libc::getgrouplist.

-

From: <https://man7.org/linux/man-pages/man3/getgrouplist.3.html>

-
-

If the number of groups of which user is a member is less than or -equal to *ngroups, then the value *ngroups is returned. -If the user is a member of more than *ngroups groups, then -getgrouplist() returns -1. In this case, the value returned in -*ngroups can be used to resize the buffer passed to a further -call getgrouplist().

-
-

However, on macOS/darwin (and maybe others?) getgrouplist does -not update ngroups if ngroups is too small. Therefore, if not -updated by getgrouplist, ngroups needs to be increased in a -loop until getgrouplist stops returning -1.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_chgrp/entries/trait.Locate.html b/uu_chgrp/entries/trait.Locate.html deleted file mode 100644 index d3e0f99e6..000000000 --- a/uu_chgrp/entries/trait.Locate.html +++ /dev/null @@ -1,6 +0,0 @@ -Locate in uu_chgrp::entries - Rust -

Trait uu_chgrp::entries::Locate[][src]

pub trait Locate<K> {
-    fn locate(key: K) -> Result<Self, Error>;
-}
Expand description

Fetch desired entry.

-

Required methods

Implementors

- \ No newline at end of file diff --git a/uu_chgrp/fn.uu_app.html b/uu_chgrp/fn.uu_app.html deleted file mode 100644 index 94c430764..000000000 --- a/uu_chgrp/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_chgrp - Rust -

Function uu_chgrp::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_chgrp/fn.uumain.html b/uu_chgrp/fn.uumain.html deleted file mode 100644 index ab30a2f7b..000000000 --- a/uu_chgrp/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_chgrp - Rust -

Function uu_chgrp::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_chgrp/index.html b/uu_chgrp/index.html deleted file mode 100644 index d3ce79402..000000000 --- a/uu_chgrp/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_chgrp - Rust -

Crate uu_chgrp[][src]

Modules

-

Get password/group file entry

-

Functions

-
- \ No newline at end of file diff --git a/uu_chgrp/sidebar-items.js b/uu_chgrp/sidebar-items.js deleted file mode 100644 index e30b59134..000000000 --- a/uu_chgrp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["entries","Get password/group file entry"]]}); \ No newline at end of file diff --git a/uu_chmod/all.html b/uu_chmod/all.html deleted file mode 100644 index eeadce93e..000000000 --- a/uu_chmod/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_chmod/fn.is_symlink.html b/uu_chmod/fn.is_symlink.html deleted file mode 100644 index efd503eaf..000000000 --- a/uu_chmod/fn.is_symlink.html +++ /dev/null @@ -1,3 +0,0 @@ -is_symlink in uu_chmod - Rust -

Function uu_chmod::is_symlink[][src]

pub fn is_symlink<P: AsRef<Path>>(path: P) -> bool
- \ No newline at end of file diff --git a/uu_chmod/fn.uu_app.html b/uu_chmod/fn.uu_app.html deleted file mode 100644 index 8536f44c1..000000000 --- a/uu_chmod/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_chmod - Rust -

Function uu_chmod::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_chmod/fn.uumain.html b/uu_chmod/fn.uumain.html deleted file mode 100644 index 6d0444064..000000000 --- a/uu_chmod/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_chmod - Rust -

Function uu_chmod::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_chmod/index.html b/uu_chmod/index.html deleted file mode 100644 index ecd9fb279..000000000 --- a/uu_chmod/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_chmod - Rust -

Crate uu_chmod[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_chmod/sidebar-items.js b/uu_chmod/sidebar-items.js deleted file mode 100644 index 831b93634..000000000 --- a/uu_chmod/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["is_symlink",""],["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_chown/all.html b/uu_chown/all.html deleted file mode 100644 index d04d9f5fc..000000000 --- a/uu_chown/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Traits

Functions

- \ No newline at end of file diff --git a/uu_chown/entries/fn.get_groups.html b/uu_chown/entries/fn.get_groups.html deleted file mode 100644 index 8dc07d51e..000000000 --- a/uu_chown/entries/fn.get_groups.html +++ /dev/null @@ -1,12 +0,0 @@ -get_groups in uu_chown::entries - Rust -

Function uu_chown::entries::get_groups[][src]

pub fn get_groups() -> Result<Vec<u32, Global>, Error>
Expand description

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-
-

getgroups() returns the supplementary group IDs of the calling -process in list. -If size is zero, list is not modified, but the total number of -supplementary group IDs for the process is returned. This allows -the caller to determine the size of a dynamically allocated list -to be used in a further call to getgroups().

-
-
- \ No newline at end of file diff --git a/uu_chown/entries/fn.get_groups_gnu.html b/uu_chown/entries/fn.get_groups_gnu.html deleted file mode 100644 index 1857150ac..000000000 --- a/uu_chown/entries/fn.get_groups_gnu.html +++ /dev/null @@ -1,25 +0,0 @@ -get_groups_gnu in uu_chown::entries - Rust -

Function uu_chown::entries::get_groups_gnu[][src]

pub fn get_groups_gnu(arg_id: Option<u32>) -> Result<Vec<u32, Global>, Error>
Expand description

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-

If arg_id is None (default), get_groups_gnu moves the effective -group id (egid) to the first entry in the returned Vector. -If arg_id is Some(x), get_groups_gnu moves the id with value x -to the first entry in the returned Vector. This might be necessary -for id --groups --real if gid and egid are not equal.

-

From: <https://www.man7.org/linux/man-pages/man3/getgroups.3p.html>

-
-

As implied by the definition of supplementary groups, the -effective group ID may appear in the array returned by -getgroups() or it may be returned only by getegid(). Duplication -may exist, but the application needs to call getegid() to be sure -of getting all of the information. Various implementation -variations and administrative sequences cause the set of groups -appearing in the result of getgroups() to vary in order and as to -whether the effective group ID is included, even when the set of -groups is the same (in the mathematical sense of ``set’’). (The -history of a process and its parents could affect the details of -the result.)

-
-
- \ No newline at end of file diff --git a/uu_chown/entries/fn.gid2grp.html b/uu_chown/entries/fn.gid2grp.html deleted file mode 100644 index c46686594..000000000 --- a/uu_chown/entries/fn.gid2grp.html +++ /dev/null @@ -1,3 +0,0 @@ -gid2grp in uu_chown::entries - Rust -

Function uu_chown::entries::gid2grp[][src]

pub fn gid2grp(id: u32) -> Result<String, Error>
- \ No newline at end of file diff --git a/uu_chown/entries/fn.grp2gid.html b/uu_chown/entries/fn.grp2gid.html deleted file mode 100644 index 148bbd37f..000000000 --- a/uu_chown/entries/fn.grp2gid.html +++ /dev/null @@ -1,3 +0,0 @@ -grp2gid in uu_chown::entries - Rust -

Function uu_chown::entries::grp2gid[][src]

pub fn grp2gid(name: &str) -> Result<u32, Error>
- \ No newline at end of file diff --git a/uu_chown/entries/fn.uid2usr.html b/uu_chown/entries/fn.uid2usr.html deleted file mode 100644 index 5399c7177..000000000 --- a/uu_chown/entries/fn.uid2usr.html +++ /dev/null @@ -1,3 +0,0 @@ -uid2usr in uu_chown::entries - Rust -

Function uu_chown::entries::uid2usr[][src]

pub fn uid2usr(id: u32) -> Result<String, Error>
- \ No newline at end of file diff --git a/uu_chown/entries/fn.usr2uid.html b/uu_chown/entries/fn.usr2uid.html deleted file mode 100644 index 0716a5c33..000000000 --- a/uu_chown/entries/fn.usr2uid.html +++ /dev/null @@ -1,3 +0,0 @@ -usr2uid in uu_chown::entries - Rust -

Function uu_chown::entries::usr2uid[][src]

pub fn usr2uid(name: &str) -> Result<u32, Error>
- \ No newline at end of file diff --git a/uu_chown/entries/index.html b/uu_chown/entries/index.html deleted file mode 100644 index e889eff7f..000000000 --- a/uu_chown/entries/index.html +++ /dev/null @@ -1,33 +0,0 @@ -uu_chown::entries - Rust -

Module uu_chown::entries[][src]

Expand description

Get password/group file entry

-

Examples:

-
use uucore::entries::{self, Locate};
-
-let root_group = if cfg!(any(target_os = "linux", target_os = "android")) {
-    "root"
-} else {
-    "wheel"
-};
-
-assert_eq!("root", entries::uid2usr(0).unwrap());
-assert_eq!(0, entries::usr2uid("root").unwrap());
-assert!(entries::gid2grp(0).is_ok());
-assert!(entries::grp2gid(root_group).is_ok());
-
-assert!(entries::Passwd::locate(0).is_ok());
-assert!(entries::Passwd::locate("0").is_ok());
-assert!(entries::Passwd::locate("root").is_ok());
-
-assert!(entries::Group::locate(0).is_ok());
-assert!(entries::Group::locate("0").is_ok());
-assert!(entries::Group::locate(root_group).is_ok());
-

Structs

-

Traits

-

Fetch desired entry.

-

Functions

-

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-
- \ No newline at end of file diff --git a/uu_chown/entries/sidebar-items.js b/uu_chown/entries/sidebar-items.js deleted file mode 100644 index 6dbed1e4a..000000000 --- a/uu_chown/entries/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["get_groups","From: ``"],["get_groups_gnu","The list of group IDs returned from GNU’s `groups` and GNU’s `id --groups` starts with the effective group ID (egid). This is a wrapper for `get_groups()` to mimic this behavior."],["gid2grp",""],["grp2gid",""],["uid2usr",""],["usr2uid",""]],"struct":[["Group",""],["Passwd",""]],"trait":[["Locate","Fetch desired entry."]]}); \ No newline at end of file diff --git a/uu_chown/entries/struct.Group.html b/uu_chown/entries/struct.Group.html deleted file mode 100644 index a9f161df7..000000000 --- a/uu_chown/entries/struct.Group.html +++ /dev/null @@ -1,23 +0,0 @@ -Group in uu_chown::entries - Rust -

Struct uu_chown::entries::Group[][src]

pub struct Group {
-    pub name: String,
-    pub gid: u32,
-}

Fields

name: String

AKA group.gr_name

-
gid: u32

AKA group.gr_gid

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_chown/entries/struct.Passwd.html b/uu_chown/entries/struct.Passwd.html deleted file mode 100644 index 7d047e51e..000000000 --- a/uu_chown/entries/struct.Passwd.html +++ /dev/null @@ -1,47 +0,0 @@ -Passwd in uu_chown::entries - Rust -

Struct uu_chown::entries::Passwd[][src]

pub struct Passwd {
-    pub name: String,
-    pub uid: u32,
-    pub gid: u32,
-    pub user_info: String,
-    pub user_shell: String,
-    pub user_dir: String,
-    pub user_passwd: String,
-}

Fields

name: String

AKA passwd.pw_name

-
uid: u32

AKA passwd.pw_uid

-
gid: u32

AKA passwd.pw_gid

-
user_info: String

AKA passwd.pw_gecos

-
user_shell: String

AKA passwd.pw_shell

-
user_dir: String

AKA passwd.pw_dir

-
user_passwd: String

AKA passwd.pw_passwd

-

Implementations

This is a wrapper function for libc::getgrouplist.

-

From: <https://man7.org/linux/man-pages/man3/getgrouplist.3.html>

-
-

If the number of groups of which user is a member is less than or -equal to *ngroups, then the value *ngroups is returned. -If the user is a member of more than *ngroups groups, then -getgrouplist() returns -1. In this case, the value returned in -*ngroups can be used to resize the buffer passed to a further -call getgrouplist().

-
-

However, on macOS/darwin (and maybe others?) getgrouplist does -not update ngroups if ngroups is too small. Therefore, if not -updated by getgrouplist, ngroups needs to be increased in a -loop until getgrouplist stops returning -1.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_chown/entries/trait.Locate.html b/uu_chown/entries/trait.Locate.html deleted file mode 100644 index 0eb6c2033..000000000 --- a/uu_chown/entries/trait.Locate.html +++ /dev/null @@ -1,6 +0,0 @@ -Locate in uu_chown::entries - Rust -

Trait uu_chown::entries::Locate[][src]

pub trait Locate<K> {
-    fn locate(key: K) -> Result<Self, Error>;
-}
Expand description

Fetch desired entry.

-

Required methods

Implementors

- \ No newline at end of file diff --git a/uu_chown/fn.uu_app.html b/uu_chown/fn.uu_app.html deleted file mode 100644 index 04e0ad9fd..000000000 --- a/uu_chown/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_chown - Rust -

Function uu_chown::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_chown/fn.uumain.html b/uu_chown/fn.uumain.html deleted file mode 100644 index fc3d1b4d2..000000000 --- a/uu_chown/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_chown - Rust -

Function uu_chown::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_chown/index.html b/uu_chown/index.html deleted file mode 100644 index 0859f78f0..000000000 --- a/uu_chown/index.html +++ /dev/null @@ -1,9 +0,0 @@ -uu_chown - Rust -

Crate uu_chown[][src]

Modules

-

Get password/group file entry

-

Structs

-

Traits

-

Fetch desired entry.

-

Functions

-
- \ No newline at end of file diff --git a/uu_chown/sidebar-items.js b/uu_chown/sidebar-items.js deleted file mode 100644 index 355ce96f3..000000000 --- a/uu_chown/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["entries","Get password/group file entry"]],"struct":[["Group",""],["Passwd",""]],"trait":[["Locate","Fetch desired entry."]]}); \ No newline at end of file diff --git a/uu_chown/struct.Group.html b/uu_chown/struct.Group.html deleted file mode 100644 index 899be48d1..000000000 --- a/uu_chown/struct.Group.html +++ /dev/null @@ -1,23 +0,0 @@ -Group in uu_chown - Rust -

Struct uu_chown::Group[][src]

pub struct Group {
-    pub name: String,
-    pub gid: u32,
-}

Fields

name: String

AKA group.gr_name

-
gid: u32

AKA group.gr_gid

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_chown/struct.Passwd.html b/uu_chown/struct.Passwd.html deleted file mode 100644 index 7105e7f50..000000000 --- a/uu_chown/struct.Passwd.html +++ /dev/null @@ -1,47 +0,0 @@ -Passwd in uu_chown - Rust -

Struct uu_chown::Passwd[][src]

pub struct Passwd {
-    pub name: String,
-    pub uid: u32,
-    pub gid: u32,
-    pub user_info: String,
-    pub user_shell: String,
-    pub user_dir: String,
-    pub user_passwd: String,
-}

Fields

name: String

AKA passwd.pw_name

-
uid: u32

AKA passwd.pw_uid

-
gid: u32

AKA passwd.pw_gid

-
user_info: String

AKA passwd.pw_gecos

-
user_shell: String

AKA passwd.pw_shell

-
user_dir: String

AKA passwd.pw_dir

-
user_passwd: String

AKA passwd.pw_passwd

-

Implementations

This is a wrapper function for libc::getgrouplist.

-

From: <https://man7.org/linux/man-pages/man3/getgrouplist.3.html>

-
-

If the number of groups of which user is a member is less than or -equal to *ngroups, then the value *ngroups is returned. -If the user is a member of more than *ngroups groups, then -getgrouplist() returns -1. In this case, the value returned in -*ngroups can be used to resize the buffer passed to a further -call getgrouplist().

-
-

However, on macOS/darwin (and maybe others?) getgrouplist does -not update ngroups if ngroups is too small. Therefore, if not -updated by getgrouplist, ngroups needs to be increased in a -loop until getgrouplist stops returning -1.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_chown/trait.Locate.html b/uu_chown/trait.Locate.html deleted file mode 100644 index 4c5636f28..000000000 --- a/uu_chown/trait.Locate.html +++ /dev/null @@ -1,6 +0,0 @@ -Locate in uu_chown - Rust -

Trait uu_chown::Locate[][src]

pub trait Locate<K> {
-    fn locate(key: K) -> Result<Self, Error>;
-}
Expand description

Fetch desired entry.

-

Required methods

Implementors

- \ No newline at end of file diff --git a/uu_chroot/all.html b/uu_chroot/all.html deleted file mode 100644 index f10460921..000000000 --- a/uu_chroot/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_chroot/fn.uu_app.html b/uu_chroot/fn.uu_app.html deleted file mode 100644 index e8a502085..000000000 --- a/uu_chroot/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_chroot - Rust -

Function uu_chroot::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_chroot/fn.uumain.html b/uu_chroot/fn.uumain.html deleted file mode 100644 index de29b9454..000000000 --- a/uu_chroot/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_chroot - Rust -

Function uu_chroot::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_chroot/index.html b/uu_chroot/index.html deleted file mode 100644 index f051ce409..000000000 --- a/uu_chroot/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_chroot - Rust -

Crate uu_chroot[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_chroot/sidebar-items.js b/uu_chroot/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_chroot/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_cksum/all.html b/uu_cksum/all.html deleted file mode 100644 index 74a85f227..000000000 --- a/uu_cksum/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_cksum/fn.uu_app.html b/uu_cksum/fn.uu_app.html deleted file mode 100644 index e7eda179a..000000000 --- a/uu_cksum/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_cksum - Rust -

Function uu_cksum::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_cksum/fn.uumain.html b/uu_cksum/fn.uumain.html deleted file mode 100644 index 9eb9f3a9c..000000000 --- a/uu_cksum/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_cksum - Rust -

Function uu_cksum::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_cksum/index.html b/uu_cksum/index.html deleted file mode 100644 index 97b094ab8..000000000 --- a/uu_cksum/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_cksum - Rust -

Crate uu_cksum[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_cksum/sidebar-items.js b/uu_cksum/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_cksum/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_comm/all.html b/uu_comm/all.html deleted file mode 100644 index 5c98cda77..000000000 --- a/uu_comm/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_comm/fn.uu_app.html b/uu_comm/fn.uu_app.html deleted file mode 100644 index 6ba471962..000000000 --- a/uu_comm/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_comm - Rust -

Function uu_comm::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_comm/fn.uumain.html b/uu_comm/fn.uumain.html deleted file mode 100644 index bf2cf6144..000000000 --- a/uu_comm/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_comm - Rust -

Function uu_comm::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_comm/index.html b/uu_comm/index.html deleted file mode 100644 index fad07accf..000000000 --- a/uu_comm/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_comm - Rust -

Crate uu_comm[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_comm/sidebar-items.js b/uu_comm/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_comm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_cp/all.html b/uu_cp/all.html deleted file mode 100644 index 7911d5e76..000000000 --- a/uu_cp/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Functions

Typedefs

- \ No newline at end of file diff --git a/uu_cp/enum.Attribute.html b/uu_cp/enum.Attribute.html deleted file mode 100644 index 3c1ec9322..000000000 --- a/uu_cp/enum.Attribute.html +++ /dev/null @@ -1,42 +0,0 @@ -Attribute in uu_cp - Rust -

Enum uu_cp::Attribute[][src]

pub enum Attribute {
-    Ownership,
-    Mode,
-    Timestamps,
-    Context,
-    Links,
-    Xattr,
-}

Variants

Ownership

Mode

Timestamps

Context

Xattr

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

The associated error which can be returned from parsing.

-

Parses a string s to return a value of this type. Read more

-

This method returns an Ordering between self and other. Read more

-

Compares and returns the maximum of two values. Read more

-

Compares and returns the minimum of two values. Read more

-

Restrict a value to a certain interval. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

This method returns an ordering between self and other values if one exists. Read more

-

This method tests less than (for self and other) and is used by the < operator. Read more

-

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

-

This method tests greater than (for self and other) and is used by the > operator. Read more

-

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/enum.ClobberMode.html b/uu_cp/enum.ClobberMode.html deleted file mode 100644 index 652104ce9..000000000 --- a/uu_cp/enum.ClobberMode.html +++ /dev/null @@ -1,26 +0,0 @@ -ClobberMode in uu_cp - Rust -

Enum uu_cp::ClobberMode[][src]

pub enum ClobberMode {
-    Force,
-    RemoveDestination,
-    Standard,
-}
Expand description

Specifies whether when overwrite files

-

Variants

Force

RemoveDestination

Standard

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/enum.CopyMode.html b/uu_cp/enum.CopyMode.html deleted file mode 100644 index 993fdd1fa..000000000 --- a/uu_cp/enum.CopyMode.html +++ /dev/null @@ -1,19 +0,0 @@ -CopyMode in uu_cp - Rust -

Enum uu_cp::CopyMode[][src]

pub enum CopyMode {
-    Link,
-    SymLink,
-    Sparse,
-    Copy,
-    Update,
-    AttrOnly,
-}

Variants

Sparse

Copy

Update

AttrOnly

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/enum.Error.html b/uu_cp/enum.Error.html deleted file mode 100644 index c18c78eb5..000000000 --- a/uu_cp/enum.Error.html +++ /dev/null @@ -1,52 +0,0 @@ -Error in uu_cp - Rust -

Enum uu_cp::Error[][src]

pub enum Error {
-    IoErr(Error),
-    IoErrContext(ErrorString),
-    Error(String),
-    NotAllFilesCopied,
-    WalkDirErr(Error),
-    StripPrefixError(StripPrefixError),
-    Skipped(String),
-    InvalidArgument(String),
-    NotImplemented(String),
-    Backup(String),
-}

Variants

IoErr(Error)

Tuple Fields

0: Error

Simple io::Error wrapper

-

IoErrContext(ErrorString)

Tuple Fields

0: Error
1: String

Wrapper for io::Error with path context

-

Error(String)

Tuple Fields

0: String

General copy error

-

NotAllFilesCopied

Represents the state when a non-fatal error has occurred -and not all files were copied.

-

WalkDirErr(Error)

Tuple Fields

0: Error

Simple walkdir::Error wrapper

-

StripPrefixError(StripPrefixError)

Tuple Fields

Simple std::path::StripPrefixError wrapper

-

Skipped(String)

Tuple Fields

0: String

Result of a skipped file

-

InvalidArgument(String)

Tuple Fields

0: String

Result of a skipped file

-

NotImplemented(String)

Tuple Fields

0: String

All standard options are included as an an implementation -path, but those that are not implemented yet should return -a NotImplemented error.

-

Backup(String)

Tuple Fields

0: String

Invalid arguments to backup

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/enum.OverwriteMode.html b/uu_cp/enum.OverwriteMode.html deleted file mode 100644 index a6e95de4d..000000000 --- a/uu_cp/enum.OverwriteMode.html +++ /dev/null @@ -1,29 +0,0 @@ -OverwriteMode in uu_cp - Rust -

Enum uu_cp::OverwriteMode[][src]

pub enum OverwriteMode {
-    Clobber(ClobberMode),
-    Interactive(ClobberMode),
-    NoClobber,
-}
Expand description

Specifies whether when overwrite files

-

Variants

Clobber(ClobberMode)

Tuple Fields

Default Always overwrite existing files

-

Interactive(ClobberMode)

Tuple Fields

Prompt before overwriting a file

-

NoClobber

Never overwrite a file

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/enum.ReflinkMode.html b/uu_cp/enum.ReflinkMode.html deleted file mode 100644 index 4c949954b..000000000 --- a/uu_cp/enum.ReflinkMode.html +++ /dev/null @@ -1,26 +0,0 @@ -ReflinkMode in uu_cp - Rust -

Enum uu_cp::ReflinkMode[][src]

pub enum ReflinkMode {
-    Always,
-    Auto,
-    Never,
-}
Expand description

Possible arguments for --reflink.

-

Variants

Always

Auto

Never

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/enum.TargetType.html b/uu_cp/enum.TargetType.html deleted file mode 100644 index 95a425f75..000000000 --- a/uu_cp/enum.TargetType.html +++ /dev/null @@ -1,16 +0,0 @@ -TargetType in uu_cp - Rust -

Enum uu_cp::TargetType[][src]

pub enum TargetType {
-    Directory,
-    File,
-}
Expand description

Specifies the expected file type of copy target

-

Variants

Directory

File

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/fn.ficlone.html b/uu_cp/fn.ficlone.html deleted file mode 100644 index 83bee3e1a..000000000 --- a/uu_cp/fn.ficlone.html +++ /dev/null @@ -1,3 +0,0 @@ -ficlone in uu_cp - Rust -

Function uu_cp::ficlone[][src]

pub unsafe fn ficlone(fd: c_int, val: *const c_int) -> c_int
- \ No newline at end of file diff --git a/uu_cp/fn.localize_to_target.html b/uu_cp/fn.localize_to_target.html deleted file mode 100644 index b90b95aaa..000000000 --- a/uu_cp/fn.localize_to_target.html +++ /dev/null @@ -1,11 +0,0 @@ -localize_to_target in uu_cp - Rust -

Function uu_cp::localize_to_target[][src]

pub fn localize_to_target(
    root: &Path,
    source: &Path,
    target: &Path
) -> CopyResult<PathBuf>
Expand description

Remove the root prefix from source and prefix it with target -to create a file that is local to target

-

Examples

-
assert!(uu_cp::localize_to_target(
-    &Path::new("a/source/"),
-    &Path::new("a/source/c.txt"),
-    &Path::new("target/"),
-).unwrap() == Path::new("target/c.txt"))
-
- \ No newline at end of file diff --git a/uu_cp/fn.paths_refer_to_same_file.html b/uu_cp/fn.paths_refer_to_same_file.html deleted file mode 100644 index a48d405e2..000000000 --- a/uu_cp/fn.paths_refer_to_same_file.html +++ /dev/null @@ -1,3 +0,0 @@ -paths_refer_to_same_file in uu_cp - Rust -

Function uu_cp::paths_refer_to_same_file[][src]

pub fn paths_refer_to_same_file(p1: &Path, p2: &Path) -> Result<bool>
- \ No newline at end of file diff --git a/uu_cp/fn.uu_app.html b/uu_cp/fn.uu_app.html deleted file mode 100644 index 1335dcafc..000000000 --- a/uu_cp/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_cp - Rust -

Function uu_cp::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_cp/fn.uumain.html b/uu_cp/fn.uumain.html deleted file mode 100644 index e180a4c72..000000000 --- a/uu_cp/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_cp - Rust -

Function uu_cp::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_cp/fn.verify_target_type.html b/uu_cp/fn.verify_target_type.html deleted file mode 100644 index 210a2f87e..000000000 --- a/uu_cp/fn.verify_target_type.html +++ /dev/null @@ -1,4 +0,0 @@ -verify_target_type in uu_cp - Rust -

Function uu_cp::verify_target_type[][src]

pub fn verify_target_type(
    target: &Path,
    target_type: &TargetType
) -> CopyResult<()>
Expand description

Generate an error message if target is not the correct target_type

-
- \ No newline at end of file diff --git a/uu_cp/index.html b/uu_cp/index.html deleted file mode 100644 index 582e1659d..000000000 --- a/uu_cp/index.html +++ /dev/null @@ -1,15 +0,0 @@ -uu_cp - Rust -

Crate uu_cp[][src]

Structs

-

Re-usable, extensible copy options

-

Enums

-

Specifies whether when overwrite files

-

Specifies whether when overwrite files

-

Possible arguments for --reflink.

-

Specifies the expected file type of copy target

-

Functions

-

Remove the root prefix from source and prefix it with target -to create a file that is local to target

-

Generate an error message if target is not the correct target_type

-

Type Definitions

-
- \ No newline at end of file diff --git a/uu_cp/sidebar-items.js b/uu_cp/sidebar-items.js deleted file mode 100644 index 7da5667b4..000000000 --- a/uu_cp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["Attribute",""],["ClobberMode","Specifies whether when overwrite files"],["CopyMode",""],["Error",""],["OverwriteMode","Specifies whether when overwrite files"],["ReflinkMode","Possible arguments for `--reflink`."],["TargetType","Specifies the expected file type of copy target"]],"fn":[["ficlone",""],["localize_to_target","Remove the `root` prefix from `source` and prefix it with `target` to create a file that is local to `target`"],["paths_refer_to_same_file",""],["uu_app",""],["uumain",""],["verify_target_type","Generate an error message if `target` is not the correct `target_type`"]],"struct":[["Options","Re-usable, extensible copy options"]],"type":[["CopyResult",""],["Source",""],["SourceSlice",""],["Target",""],["TargetSlice",""]]}); \ No newline at end of file diff --git a/uu_cp/struct.Options.html b/uu_cp/struct.Options.html deleted file mode 100644 index 1a8c85469..000000000 --- a/uu_cp/struct.Options.html +++ /dev/null @@ -1,13 +0,0 @@ -Options in uu_cp - Rust -

Struct uu_cp::Options[][src]

pub struct Options { /* fields omitted */ }
Expand description

Re-usable, extensible copy options

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cp/type.CopyResult.html b/uu_cp/type.CopyResult.html deleted file mode 100644 index 66cf6d7f6..000000000 --- a/uu_cp/type.CopyResult.html +++ /dev/null @@ -1,3 +0,0 @@ -CopyResult in uu_cp - Rust -

Type Definition uu_cp::CopyResult[][src]

pub type CopyResult<T> = Result<T, Error>;
- \ No newline at end of file diff --git a/uu_cp/type.Source.html b/uu_cp/type.Source.html deleted file mode 100644 index 152efaf5b..000000000 --- a/uu_cp/type.Source.html +++ /dev/null @@ -1,3 +0,0 @@ -Source in uu_cp - Rust -

Type Definition uu_cp::Source[][src]

pub type Source = PathBuf;
- \ No newline at end of file diff --git a/uu_cp/type.SourceSlice.html b/uu_cp/type.SourceSlice.html deleted file mode 100644 index f743a4919..000000000 --- a/uu_cp/type.SourceSlice.html +++ /dev/null @@ -1,3 +0,0 @@ -SourceSlice in uu_cp - Rust -

Type Definition uu_cp::SourceSlice[][src]

pub type SourceSlice = Path;
- \ No newline at end of file diff --git a/uu_cp/type.Target.html b/uu_cp/type.Target.html deleted file mode 100644 index 62bc11c91..000000000 --- a/uu_cp/type.Target.html +++ /dev/null @@ -1,3 +0,0 @@ -Target in uu_cp - Rust -

Type Definition uu_cp::Target[][src]

pub type Target = PathBuf;
- \ No newline at end of file diff --git a/uu_cp/type.TargetSlice.html b/uu_cp/type.TargetSlice.html deleted file mode 100644 index 9ae4be7d0..000000000 --- a/uu_cp/type.TargetSlice.html +++ /dev/null @@ -1,3 +0,0 @@ -TargetSlice in uu_cp - Rust -

Type Definition uu_cp::TargetSlice[][src]

pub type TargetSlice = Path;
- \ No newline at end of file diff --git a/uu_csplit/all.html b/uu_csplit/all.html deleted file mode 100644 index e38061f5d..000000000 --- a/uu_csplit/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Functions

- \ No newline at end of file diff --git a/uu_csplit/fn.csplit.html b/uu_csplit/fn.csplit.html deleted file mode 100644 index 259579a88..000000000 --- a/uu_csplit/fn.csplit.html +++ /dev/null @@ -1,15 +0,0 @@ -csplit in uu_csplit - Rust -

Function uu_csplit::csplit[][src]

pub fn csplit<T>(
    options: &CsplitOptions,
    patterns: Vec<Pattern>,
    input: T
) -> Result<(), CsplitError> where
    T: BufRead
Expand description

Splits a file into severals according to the command line patterns.

-

Errors

-
    -
  • io::Error if there is some problem reading/writing from/to a file.
  • -
  • [::CsplitError::LineOutOfRange] if the line number pattern is larger than the number of input -lines.
  • -
  • [::CsplitError::LineOutOfRangeOnRepetition], like previous but after applying the pattern -more than once.
  • -
  • [::CsplitError::MatchNotFound] if no line matched a regular expression.
  • -
  • [::CsplitError::MatchNotFoundOnRepetition], like previous but after applying the pattern -more than once.
  • -
-
- \ No newline at end of file diff --git a/uu_csplit/fn.uu_app.html b/uu_csplit/fn.uu_app.html deleted file mode 100644 index b9114dc11..000000000 --- a/uu_csplit/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_csplit - Rust -

Function uu_csplit::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_csplit/fn.uumain.html b/uu_csplit/fn.uumain.html deleted file mode 100644 index 503ae15c9..000000000 --- a/uu_csplit/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_csplit - Rust -

Function uu_csplit::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_csplit/index.html b/uu_csplit/index.html deleted file mode 100644 index c50c3cfd3..000000000 --- a/uu_csplit/index.html +++ /dev/null @@ -1,7 +0,0 @@ -uu_csplit - Rust -

Crate uu_csplit[][src]

Structs

-

Command line options for csplit.

-

Functions

-

Splits a file into severals according to the command line patterns.

-
- \ No newline at end of file diff --git a/uu_csplit/sidebar-items.js b/uu_csplit/sidebar-items.js deleted file mode 100644 index c8ec30868..000000000 --- a/uu_csplit/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["csplit","Splits a file into severals according to the command line patterns."],["uu_app",""],["uumain",""]],"struct":[["CsplitOptions","Command line options for csplit."]]}); \ No newline at end of file diff --git a/uu_csplit/struct.CsplitOptions.html b/uu_csplit/struct.CsplitOptions.html deleted file mode 100644 index e6edfbe08..000000000 --- a/uu_csplit/struct.CsplitOptions.html +++ /dev/null @@ -1,13 +0,0 @@ -CsplitOptions in uu_csplit - Rust -

Struct uu_csplit::CsplitOptions[][src]

pub struct CsplitOptions { /* fields omitted */ }
Expand description

Command line options for csplit.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_cut/all.html b/uu_cut/all.html deleted file mode 100644 index abdc561c4..000000000 --- a/uu_cut/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_cut/fn.uu_app.html b/uu_cut/fn.uu_app.html deleted file mode 100644 index e3b3cd782..000000000 --- a/uu_cut/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_cut - Rust -

Function uu_cut::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_cut/fn.uumain.html b/uu_cut/fn.uumain.html deleted file mode 100644 index 6f70b29cc..000000000 --- a/uu_cut/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_cut - Rust -

Function uu_cut::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_cut/index.html b/uu_cut/index.html deleted file mode 100644 index 5cda67f6a..000000000 --- a/uu_cut/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_cut - Rust -

Crate uu_cut[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_cut/sidebar-items.js b/uu_cut/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_cut/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_date/all.html b/uu_date/all.html deleted file mode 100644 index d70dbc580..000000000 --- a/uu_date/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_date/fn.uu_app.html b/uu_date/fn.uu_app.html deleted file mode 100644 index 6ab77c6cc..000000000 --- a/uu_date/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_date - Rust -

Function uu_date::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_date/fn.uumain.html b/uu_date/fn.uumain.html deleted file mode 100644 index 193b50fb1..000000000 --- a/uu_date/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_date - Rust -

Function uu_date::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_date/index.html b/uu_date/index.html deleted file mode 100644 index 48f2dfeb5..000000000 --- a/uu_date/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_date - Rust -

Crate uu_date[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_date/sidebar-items.js b/uu_date/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_date/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_dd/all.html b/uu_dd/all.html deleted file mode 100644 index abef45249..000000000 --- a/uu_dd/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_dd/fn.uu_app.html b/uu_dd/fn.uu_app.html deleted file mode 100644 index 0c2c5b842..000000000 --- a/uu_dd/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_dd - Rust -

Function uu_dd::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_dd/fn.uumain.html b/uu_dd/fn.uumain.html deleted file mode 100644 index 18e5f57d9..000000000 --- a/uu_dd/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_dd - Rust -

Function uu_dd::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_dd/index.html b/uu_dd/index.html deleted file mode 100644 index c3a2db9ef..000000000 --- a/uu_dd/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_dd - Rust -

Crate uu_dd[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_dd/sidebar-items.js b/uu_dd/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_dd/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_df/all.html b/uu_df/all.html deleted file mode 100644 index 09fdfdb7f..000000000 --- a/uu_df/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_df/fn.uu_app.html b/uu_df/fn.uu_app.html deleted file mode 100644 index 6c74ef856..000000000 --- a/uu_df/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_df - Rust -

Function uu_df::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_df/fn.uumain.html b/uu_df/fn.uumain.html deleted file mode 100644 index 1eec9009c..000000000 --- a/uu_df/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_df - Rust -

Function uu_df::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_df/index.html b/uu_df/index.html deleted file mode 100644 index 376ad0ed1..000000000 --- a/uu_df/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_df - Rust -

Crate uu_df[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_df/sidebar-items.js b/uu_df/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_df/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_dircolors/all.html b/uu_dircolors/all.html deleted file mode 100644 index 732b605c9..000000000 --- a/uu_dircolors/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Enums

Traits

Functions

- \ No newline at end of file diff --git a/uu_dircolors/enum.OutputFmt.html b/uu_dircolors/enum.OutputFmt.html deleted file mode 100644 index 8efd24bb5..000000000 --- a/uu_dircolors/enum.OutputFmt.html +++ /dev/null @@ -1,20 +0,0 @@ -OutputFmt in uu_dircolors - Rust -

Enum uu_dircolors::OutputFmt[][src]

pub enum OutputFmt {
-    Shell,
-    CShell,
-    Unknown,
-}

Variants

Shell

CShell

Unknown

Trait Implementations

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_dircolors/fn.guess_syntax.html b/uu_dircolors/fn.guess_syntax.html deleted file mode 100644 index ff0914936..000000000 --- a/uu_dircolors/fn.guess_syntax.html +++ /dev/null @@ -1,3 +0,0 @@ -guess_syntax in uu_dircolors - Rust -

Function uu_dircolors::guess_syntax[][src]

pub fn guess_syntax() -> OutputFmt
- \ No newline at end of file diff --git a/uu_dircolors/fn.uu_app.html b/uu_dircolors/fn.uu_app.html deleted file mode 100644 index 0cdedaa43..000000000 --- a/uu_dircolors/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_dircolors - Rust -

Function uu_dircolors::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_dircolors/fn.uumain.html b/uu_dircolors/fn.uumain.html deleted file mode 100644 index e85ae2181..000000000 --- a/uu_dircolors/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_dircolors - Rust -

Function uu_dircolors::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_dircolors/index.html b/uu_dircolors/index.html deleted file mode 100644 index ef01c0dda..000000000 --- a/uu_dircolors/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_dircolors - Rust -

Crate uu_dircolors[][src]

Enums

-

Traits

-

Functions

-
- \ No newline at end of file diff --git a/uu_dircolors/sidebar-items.js b/uu_dircolors/sidebar-items.js deleted file mode 100644 index e76f8b9ab..000000000 --- a/uu_dircolors/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["OutputFmt",""]],"fn":[["guess_syntax",""],["uu_app",""],["uumain",""]],"trait":[["StrUtils",""]]}); \ No newline at end of file diff --git a/uu_dircolors/trait.StrUtils.html b/uu_dircolors/trait.StrUtils.html deleted file mode 100644 index ab1b3e4ac..000000000 --- a/uu_dircolors/trait.StrUtils.html +++ /dev/null @@ -1,9 +0,0 @@ -StrUtils in uu_dircolors - Rust -

Trait uu_dircolors::StrUtils[][src]

pub trait StrUtils {
-    fn purify(&self) -> &Self;
-
fn split_two(&self) -> (&str, &str); -
fn fnmatch(&self, pattern: &str) -> bool; -}

Required methods

Remove comments and trim whitespace

-

Like split_whitespace() but only produce 2 components

-

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uu_dirname/all.html b/uu_dirname/all.html deleted file mode 100644 index f9fff2cb4..000000000 --- a/uu_dirname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_dirname/fn.uu_app.html b/uu_dirname/fn.uu_app.html deleted file mode 100644 index 628b94348..000000000 --- a/uu_dirname/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_dirname - Rust -

Function uu_dirname::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_dirname/fn.uumain.html b/uu_dirname/fn.uumain.html deleted file mode 100644 index b97181ed6..000000000 --- a/uu_dirname/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_dirname - Rust -

Function uu_dirname::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_dirname/index.html b/uu_dirname/index.html deleted file mode 100644 index fc93ea434..000000000 --- a/uu_dirname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_dirname - Rust -

Crate uu_dirname[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_dirname/sidebar-items.js b/uu_dirname/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_dirname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_du/all.html b/uu_du/all.html deleted file mode 100644 index 3dce23fa4..000000000 --- a/uu_du/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_du/fn.uu_app.html b/uu_du/fn.uu_app.html deleted file mode 100644 index c379a4095..000000000 --- a/uu_du/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_du - Rust -

Function uu_du::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_du/fn.uumain.html b/uu_du/fn.uumain.html deleted file mode 100644 index c7e522737..000000000 --- a/uu_du/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_du - Rust -

Function uu_du::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_du/index.html b/uu_du/index.html deleted file mode 100644 index 0c5800098..000000000 --- a/uu_du/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_du - Rust -

Crate uu_du[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_du/sidebar-items.js b/uu_du/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_du/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_echo/all.html b/uu_echo/all.html deleted file mode 100644 index 13f7db4bd..000000000 --- a/uu_echo/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_echo/fn.uu_app.html b/uu_echo/fn.uu_app.html deleted file mode 100644 index 64c8e017e..000000000 --- a/uu_echo/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_echo - Rust -

Function uu_echo::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_echo/fn.uumain.html b/uu_echo/fn.uumain.html deleted file mode 100644 index 7b024e972..000000000 --- a/uu_echo/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_echo - Rust -

Function uu_echo::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_echo/index.html b/uu_echo/index.html deleted file mode 100644 index d14e3bb8f..000000000 --- a/uu_echo/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_echo - Rust -

Crate uu_echo[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_echo/sidebar-items.js b/uu_echo/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_echo/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_env/all.html b/uu_env/all.html deleted file mode 100644 index 017e36309..000000000 --- a/uu_env/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_env/fn.uu_app.html b/uu_env/fn.uu_app.html deleted file mode 100644 index 933fa1a75..000000000 --- a/uu_env/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_env - Rust -

Function uu_env::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_env/fn.uumain.html b/uu_env/fn.uumain.html deleted file mode 100644 index c4180dbc8..000000000 --- a/uu_env/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_env - Rust -

Function uu_env::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_env/index.html b/uu_env/index.html deleted file mode 100644 index 997051371..000000000 --- a/uu_env/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_env - Rust -

Crate uu_env[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_env/sidebar-items.js b/uu_env/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_env/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_expand/all.html b/uu_expand/all.html deleted file mode 100644 index 3c5daec62..000000000 --- a/uu_expand/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_expand/fn.uu_app.html b/uu_expand/fn.uu_app.html deleted file mode 100644 index cb57f6388..000000000 --- a/uu_expand/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_expand - Rust -

Function uu_expand::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_expand/fn.uumain.html b/uu_expand/fn.uumain.html deleted file mode 100644 index 2cfcaf3bd..000000000 --- a/uu_expand/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_expand - Rust -

Function uu_expand::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_expand/index.html b/uu_expand/index.html deleted file mode 100644 index 608a25295..000000000 --- a/uu_expand/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_expand - Rust -

Crate uu_expand[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_expand/options/index.html b/uu_expand/options/index.html deleted file mode 100644 index 66a5b74af..000000000 --- a/uu_expand/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_expand::options - Rust -

Module uu_expand::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_expand/options/sidebar-items.js b/uu_expand/options/sidebar-items.js deleted file mode 100644 index 91e3f1b67..000000000 --- a/uu_expand/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["FILES",""],["INITIAL",""],["NO_UTF8",""],["TABS",""]]}); \ No newline at end of file diff --git a/uu_expand/options/static.FILES.html b/uu_expand/options/static.FILES.html deleted file mode 100644 index 69110ae42..000000000 --- a/uu_expand/options/static.FILES.html +++ /dev/null @@ -1,3 +0,0 @@ -FILES in uu_expand::options - Rust -

Static uu_expand::options::FILES[][src]

pub static FILES: &str
- \ No newline at end of file diff --git a/uu_expand/options/static.INITIAL.html b/uu_expand/options/static.INITIAL.html deleted file mode 100644 index 4d230d4a4..000000000 --- a/uu_expand/options/static.INITIAL.html +++ /dev/null @@ -1,3 +0,0 @@ -INITIAL in uu_expand::options - Rust -

Static uu_expand::options::INITIAL[][src]

pub static INITIAL: &str
- \ No newline at end of file diff --git a/uu_expand/options/static.NO_UTF8.html b/uu_expand/options/static.NO_UTF8.html deleted file mode 100644 index 804de2a1e..000000000 --- a/uu_expand/options/static.NO_UTF8.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_UTF8 in uu_expand::options - Rust -

Static uu_expand::options::NO_UTF8[][src]

pub static NO_UTF8: &str
- \ No newline at end of file diff --git a/uu_expand/options/static.TABS.html b/uu_expand/options/static.TABS.html deleted file mode 100644 index 432c0f5e0..000000000 --- a/uu_expand/options/static.TABS.html +++ /dev/null @@ -1,3 +0,0 @@ -TABS in uu_expand::options - Rust -

Static uu_expand::options::TABS[][src]

pub static TABS: &str
- \ No newline at end of file diff --git a/uu_expand/sidebar-items.js b/uu_expand/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_expand/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_expr/all.html b/uu_expr/all.html deleted file mode 100644 index 802e9eae3..000000000 --- a/uu_expr/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_expr/fn.uu_app.html b/uu_expr/fn.uu_app.html deleted file mode 100644 index 7e771545a..000000000 --- a/uu_expr/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_expr - Rust -

Function uu_expr::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_expr/fn.uumain.html b/uu_expr/fn.uumain.html deleted file mode 100644 index ff696d2a6..000000000 --- a/uu_expr/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_expr - Rust -

Function uu_expr::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_expr/index.html b/uu_expr/index.html deleted file mode 100644 index 65d00ee8a..000000000 --- a/uu_expr/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_expr - Rust -

Crate uu_expr[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_expr/sidebar-items.js b/uu_expr/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_expr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_factor/all.html b/uu_factor/all.html deleted file mode 100644 index 05a61cc30..000000000 --- a/uu_factor/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Functions

Constants

- \ No newline at end of file diff --git a/uu_factor/factor/fn.factor.html b/uu_factor/factor/fn.factor.html deleted file mode 100644 index 758e9df31..000000000 --- a/uu_factor/factor/fn.factor.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../uu_factor/fn.factor.html...

- - - \ No newline at end of file diff --git a/uu_factor/factor/struct.Factors.html b/uu_factor/factor/struct.Factors.html deleted file mode 100644 index 0ef90f8a7..000000000 --- a/uu_factor/factor/struct.Factors.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../uu_factor/struct.Factors.html...

- - - \ No newline at end of file diff --git a/uu_factor/fn.factor.html b/uu_factor/fn.factor.html deleted file mode 100644 index 7a687dee5..000000000 --- a/uu_factor/fn.factor.html +++ /dev/null @@ -1,3 +0,0 @@ -factor in uu_factor - Rust -

Function uu_factor::factor[][src]

pub fn factor(n: u64) -> Factors
- \ No newline at end of file diff --git a/uu_factor/fn.uu_app.html b/uu_factor/fn.uu_app.html deleted file mode 100644 index 247ace305..000000000 --- a/uu_factor/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_factor - Rust -

Function uu_factor::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_factor/fn.uumain.html b/uu_factor/fn.uumain.html deleted file mode 100644 index 59dae90de..000000000 --- a/uu_factor/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_factor - Rust -

Function uu_factor::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_factor/index.html b/uu_factor/index.html deleted file mode 100644 index 2384dfdb9..000000000 --- a/uu_factor/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_factor - Rust -

Crate uu_factor[][src]

Modules

-

Structs

-

Functions

-
- \ No newline at end of file diff --git a/uu_factor/numeric/fn.gcd.html b/uu_factor/numeric/fn.gcd.html deleted file mode 100644 index 4101c6816..000000000 --- a/uu_factor/numeric/fn.gcd.html +++ /dev/null @@ -1,3 +0,0 @@ -gcd in uu_factor::numeric - Rust -

Function uu_factor::numeric::gcd[][src]

pub fn gcd(u: u64, v: u64) -> u64
- \ No newline at end of file diff --git a/uu_factor/numeric/gcd/fn.gcd.html b/uu_factor/numeric/gcd/fn.gcd.html deleted file mode 100644 index d45cf6d22..000000000 --- a/uu_factor/numeric/gcd/fn.gcd.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uu_factor/numeric/fn.gcd.html...

- - - \ No newline at end of file diff --git a/uu_factor/numeric/index.html b/uu_factor/numeric/index.html deleted file mode 100644 index 31454a1b1..000000000 --- a/uu_factor/numeric/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_factor::numeric - Rust -

Module uu_factor::numeric[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_factor/numeric/sidebar-items.js b/uu_factor/numeric/sidebar-items.js deleted file mode 100644 index 3fdde96f1..000000000 --- a/uu_factor/numeric/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["gcd",""]]}); \ No newline at end of file diff --git a/uu_factor/sidebar-items.js b/uu_factor/sidebar-items.js deleted file mode 100644 index 0787c5324..000000000 --- a/uu_factor/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["factor",""],["uu_app",""],["uumain",""]],"mod":[["numeric",""],["table",""]],"struct":[["Factors",""]]}); \ No newline at end of file diff --git a/uu_factor/struct.Factors.html b/uu_factor/struct.Factors.html deleted file mode 100644 index 28f9e2b60..000000000 --- a/uu_factor/struct.Factors.html +++ /dev/null @@ -1,24 +0,0 @@ -Factors in uu_factor - Rust -

Struct uu_factor::Factors[][src]

pub struct Factors(_);

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_factor/table/constant.CHUNK_SIZE.html b/uu_factor/table/constant.CHUNK_SIZE.html deleted file mode 100644 index 75c5d4825..000000000 --- a/uu_factor/table/constant.CHUNK_SIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -CHUNK_SIZE in uu_factor::table - Rust -

Constant uu_factor::table::CHUNK_SIZE[][src]

pub const CHUNK_SIZE: usize = 8;
- \ No newline at end of file diff --git a/uu_factor/table/constant.NEXT_PRIME.html b/uu_factor/table/constant.NEXT_PRIME.html deleted file mode 100644 index 020177b0d..000000000 --- a/uu_factor/table/constant.NEXT_PRIME.html +++ /dev/null @@ -1,3 +0,0 @@ -NEXT_PRIME in uu_factor::table - Rust -

Constant uu_factor::table::NEXT_PRIME[][src]

pub const NEXT_PRIME: u64 = 2137;
- \ No newline at end of file diff --git a/uu_factor/table/constant.PRIME_INVERSIONS_U64.html b/uu_factor/table/constant.PRIME_INVERSIONS_U64.html deleted file mode 100644 index c86c26347..000000000 --- a/uu_factor/table/constant.PRIME_INVERSIONS_U64.html +++ /dev/null @@ -1,3 +0,0 @@ -PRIME_INVERSIONS_U64 in uu_factor::table - Rust -

Constant uu_factor::table::PRIME_INVERSIONS_U64[][src]

pub const PRIME_INVERSIONS_U64: &[(u64, u64, u64)];
- \ No newline at end of file diff --git a/uu_factor/table/fn.factor.html b/uu_factor/table/fn.factor.html deleted file mode 100644 index ade927b73..000000000 --- a/uu_factor/table/fn.factor.html +++ /dev/null @@ -1,3 +0,0 @@ -factor in uu_factor::table - Rust -

Function uu_factor::table::factor[][src]

pub fn factor(num: &mut u64, factors: &mut Factors)
- \ No newline at end of file diff --git a/uu_factor/table/fn.factor_chunk.html b/uu_factor/table/fn.factor_chunk.html deleted file mode 100644 index be3702cae..000000000 --- a/uu_factor/table/fn.factor_chunk.html +++ /dev/null @@ -1,3 +0,0 @@ -factor_chunk in uu_factor::table - Rust -

Function uu_factor::table::factor_chunk[][src]

pub fn factor_chunk(n_s: &mut [u64; 8], f_s: &mut [Factors; 8])
- \ No newline at end of file diff --git a/uu_factor/table/index.html b/uu_factor/table/index.html deleted file mode 100644 index 9defef707..000000000 --- a/uu_factor/table/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_factor::table - Rust -

Module uu_factor::table[][src]

Constants

-

Functions

-
- \ No newline at end of file diff --git a/uu_factor/table/sidebar-items.js b/uu_factor/table/sidebar-items.js deleted file mode 100644 index 6aae4c331..000000000 --- a/uu_factor/table/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["CHUNK_SIZE",""],["NEXT_PRIME",""],["PRIME_INVERSIONS_U64",""]],"fn":[["factor",""],["factor_chunk",""]]}); \ No newline at end of file diff --git a/uu_false/all.html b/uu_false/all.html deleted file mode 100644 index 3fde40fc9..000000000 --- a/uu_false/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_false/fn.uu_app.html b/uu_false/fn.uu_app.html deleted file mode 100644 index 90a54a258..000000000 --- a/uu_false/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_false - Rust -

Function uu_false::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_false/fn.uumain.html b/uu_false/fn.uumain.html deleted file mode 100644 index ff3a9553a..000000000 --- a/uu_false/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_false - Rust -

Function uu_false::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_false/index.html b/uu_false/index.html deleted file mode 100644 index 1333a7bbc..000000000 --- a/uu_false/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_false - Rust -

Crate uu_false[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_false/sidebar-items.js b/uu_false/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_false/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_fmt/all.html b/uu_fmt/all.html deleted file mode 100644 index ff3c66746..000000000 --- a/uu_fmt/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Functions

Typedefs

- \ No newline at end of file diff --git a/uu_fmt/fn.uu_app.html b/uu_fmt/fn.uu_app.html deleted file mode 100644 index 5be83519e..000000000 --- a/uu_fmt/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_fmt - Rust -

Function uu_fmt::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_fmt/fn.uumain.html b/uu_fmt/fn.uumain.html deleted file mode 100644 index ae8852a6f..000000000 --- a/uu_fmt/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_fmt - Rust -

Function uu_fmt::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_fmt/index.html b/uu_fmt/index.html deleted file mode 100644 index 528035d39..000000000 --- a/uu_fmt/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_fmt - Rust -

Crate uu_fmt[][src]

Structs

-

Functions

-

Type Definitions

-
- \ No newline at end of file diff --git a/uu_fmt/sidebar-items.js b/uu_fmt/sidebar-items.js deleted file mode 100644 index 40ad9895f..000000000 --- a/uu_fmt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"struct":[["FmtOptions",""]],"type":[["FileOrStdReader",""]]}); \ No newline at end of file diff --git a/uu_fmt/struct.FmtOptions.html b/uu_fmt/struct.FmtOptions.html deleted file mode 100644 index 796e9d1e7..000000000 --- a/uu_fmt/struct.FmtOptions.html +++ /dev/null @@ -1,12 +0,0 @@ -FmtOptions in uu_fmt - Rust -

Struct uu_fmt::FmtOptions[][src]

pub struct FmtOptions { /* fields omitted */ }

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_fmt/type.FileOrStdReader.html b/uu_fmt/type.FileOrStdReader.html deleted file mode 100644 index cb82d0590..000000000 --- a/uu_fmt/type.FileOrStdReader.html +++ /dev/null @@ -1,3 +0,0 @@ -FileOrStdReader in uu_fmt - Rust -

Type Definition uu_fmt::FileOrStdReader[][src]

pub type FileOrStdReader = BufReader<Box<dyn Read + 'static>>;
- \ No newline at end of file diff --git a/uu_fold/all.html b/uu_fold/all.html deleted file mode 100644 index 0b19d61b3..000000000 --- a/uu_fold/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_fold/fn.uu_app.html b/uu_fold/fn.uu_app.html deleted file mode 100644 index 05752dd72..000000000 --- a/uu_fold/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_fold - Rust -

Function uu_fold::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_fold/fn.uumain.html b/uu_fold/fn.uumain.html deleted file mode 100644 index b7106fbbe..000000000 --- a/uu_fold/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_fold - Rust -

Function uu_fold::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_fold/index.html b/uu_fold/index.html deleted file mode 100644 index 1fee9525c..000000000 --- a/uu_fold/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_fold - Rust -

Crate uu_fold[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_fold/sidebar-items.js b/uu_fold/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_fold/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_groups/all.html b/uu_groups/all.html deleted file mode 100644 index ad89c5c75..000000000 --- a/uu_groups/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_groups/fn.uu_app.html b/uu_groups/fn.uu_app.html deleted file mode 100644 index ce9221bed..000000000 --- a/uu_groups/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_groups - Rust -

Function uu_groups::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_groups/fn.uumain.html b/uu_groups/fn.uumain.html deleted file mode 100644 index 4431e65e6..000000000 --- a/uu_groups/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_groups - Rust -

Function uu_groups::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_groups/index.html b/uu_groups/index.html deleted file mode 100644 index e9381dd7e..000000000 --- a/uu_groups/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_groups - Rust -

Crate uu_groups[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_groups/sidebar-items.js b/uu_groups/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_groups/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_hashsum/all.html b/uu_hashsum/all.html deleted file mode 100644 index 49e4065a9..000000000 --- a/uu_hashsum/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_hashsum/fn.uu_app_common.html b/uu_hashsum/fn.uu_app_common.html deleted file mode 100644 index f229fbddb..000000000 --- a/uu_hashsum/fn.uu_app_common.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app_common in uu_hashsum - Rust -

Function uu_hashsum::uu_app_common[][src]

pub fn uu_app_common<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_hashsum/fn.uu_app_custom.html b/uu_hashsum/fn.uu_app_custom.html deleted file mode 100644 index 5f47ad63d..000000000 --- a/uu_hashsum/fn.uu_app_custom.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app_custom in uu_hashsum - Rust -

Function uu_hashsum::uu_app_custom[][src]

pub fn uu_app_custom<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_hashsum/fn.uumain.html b/uu_hashsum/fn.uumain.html deleted file mode 100644 index 9cc269b2e..000000000 --- a/uu_hashsum/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_hashsum - Rust -

Function uu_hashsum::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_hashsum/index.html b/uu_hashsum/index.html deleted file mode 100644 index 7f7cfcde9..000000000 --- a/uu_hashsum/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_hashsum - Rust -

Crate uu_hashsum[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_hashsum/sidebar-items.js b/uu_hashsum/sidebar-items.js deleted file mode 100644 index 2aed11c4c..000000000 --- a/uu_hashsum/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app_common",""],["uu_app_custom",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_head/all.html b/uu_head/all.html deleted file mode 100644 index a41c25c0a..000000000 --- a/uu_head/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_head/fn.uu_app.html b/uu_head/fn.uu_app.html deleted file mode 100644 index f70f32da2..000000000 --- a/uu_head/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_head - Rust -

Function uu_head::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_head/fn.uumain.html b/uu_head/fn.uumain.html deleted file mode 100644 index dcdf4c627..000000000 --- a/uu_head/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_head - Rust -

Function uu_head::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_head/index.html b/uu_head/index.html deleted file mode 100644 index 2a58e9c9b..000000000 --- a/uu_head/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_head - Rust -

Crate uu_head[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_head/sidebar-items.js b/uu_head/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_head/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_hostid/all.html b/uu_hostid/all.html deleted file mode 100644 index 3613d3c4d..000000000 --- a/uu_hostid/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_hostid/fn.gethostid.html b/uu_hostid/fn.gethostid.html deleted file mode 100644 index 11ab3fc53..000000000 --- a/uu_hostid/fn.gethostid.html +++ /dev/null @@ -1,3 +0,0 @@ -gethostid in uu_hostid - Rust -

Function uu_hostid::gethostid[][src]

pub unsafe extern "C" fn gethostid() -> c_long
- \ No newline at end of file diff --git a/uu_hostid/fn.uu_app.html b/uu_hostid/fn.uu_app.html deleted file mode 100644 index 79e70f596..000000000 --- a/uu_hostid/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_hostid - Rust -

Function uu_hostid::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_hostid/fn.uumain.html b/uu_hostid/fn.uumain.html deleted file mode 100644 index adc578cc2..000000000 --- a/uu_hostid/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_hostid - Rust -

Function uu_hostid::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_hostid/index.html b/uu_hostid/index.html deleted file mode 100644 index 3aa2a2239..000000000 --- a/uu_hostid/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_hostid - Rust -

Crate uu_hostid[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_hostid/sidebar-items.js b/uu_hostid/sidebar-items.js deleted file mode 100644 index 74f15776b..000000000 --- a/uu_hostid/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["gethostid",""],["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_hostname/all.html b/uu_hostname/all.html deleted file mode 100644 index 54f4f6cd3..000000000 --- a/uu_hostname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_hostname/fn.uu_app.html b/uu_hostname/fn.uu_app.html deleted file mode 100644 index 61648cfe1..000000000 --- a/uu_hostname/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_hostname - Rust -

Function uu_hostname::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_hostname/fn.uumain.html b/uu_hostname/fn.uumain.html deleted file mode 100644 index 8dc30ffef..000000000 --- a/uu_hostname/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_hostname - Rust -

Function uu_hostname::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_hostname/index.html b/uu_hostname/index.html deleted file mode 100644 index 99254b487..000000000 --- a/uu_hostname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_hostname - Rust -

Crate uu_hostname[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_hostname/sidebar-items.js b/uu_hostname/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_hostname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_id/all.html b/uu_id/all.html deleted file mode 100644 index 750cdcd51..000000000 --- a/uu_id/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_id/fn.uu_app.html b/uu_id/fn.uu_app.html deleted file mode 100644 index 42aca7dac..000000000 --- a/uu_id/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_id - Rust -

Function uu_id::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_id/fn.uumain.html b/uu_id/fn.uumain.html deleted file mode 100644 index 7080ebc6f..000000000 --- a/uu_id/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_id - Rust -

Function uu_id::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_id/index.html b/uu_id/index.html deleted file mode 100644 index 901d29361..000000000 --- a/uu_id/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_id - Rust -

Crate uu_id[][src]

Re-exports

-
pub use uucore::libc;

Functions

-
- \ No newline at end of file diff --git a/uu_id/sidebar-items.js b/uu_id/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_id/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_install/all.html b/uu_install/all.html deleted file mode 100644 index d2ccb6d3a..000000000 --- a/uu_install/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Functions

- \ No newline at end of file diff --git a/uu_install/enum.MainFunction.html b/uu_install/enum.MainFunction.html deleted file mode 100644 index 7bef93dd4..000000000 --- a/uu_install/enum.MainFunction.html +++ /dev/null @@ -1,26 +0,0 @@ -MainFunction in uu_install - Rust -

Enum uu_install::MainFunction[][src]

pub enum MainFunction {
-    Directory,
-    Standard,
-}

Variants

Directory

Create directories

-

Standard

Install files to locations (primary functionality)

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_install/fn.uu_app.html b/uu_install/fn.uu_app.html deleted file mode 100644 index 2977c7858..000000000 --- a/uu_install/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_install - Rust -

Function uu_install::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_install/fn.uumain.html b/uu_install/fn.uumain.html deleted file mode 100644 index 71c44c5b6..000000000 --- a/uu_install/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_install - Rust -

Function uu_install::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_install/index.html b/uu_install/index.html deleted file mode 100644 index 2717ae19c..000000000 --- a/uu_install/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_install - Rust -

Crate uu_install[][src]

Structs

-

Enums

-

Functions

-
- \ No newline at end of file diff --git a/uu_install/sidebar-items.js b/uu_install/sidebar-items.js deleted file mode 100644 index 5fb8df705..000000000 --- a/uu_install/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["MainFunction",""]],"fn":[["uu_app",""],["uumain",""]],"struct":[["Behavior",""]]}); \ No newline at end of file diff --git a/uu_install/struct.Behavior.html b/uu_install/struct.Behavior.html deleted file mode 100644 index 00c9b2b21..000000000 --- a/uu_install/struct.Behavior.html +++ /dev/null @@ -1,13 +0,0 @@ -Behavior in uu_install - Rust -

Struct uu_install::Behavior[][src]

pub struct Behavior { /* fields omitted */ }

Implementations

Determine the mode for chmod after copy.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_join/all.html b/uu_join/all.html deleted file mode 100644 index d7abc35c1..000000000 --- a/uu_join/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_join/fn.uu_app.html b/uu_join/fn.uu_app.html deleted file mode 100644 index a66d9ec62..000000000 --- a/uu_join/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_join - Rust -

Function uu_join::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_join/fn.uumain.html b/uu_join/fn.uumain.html deleted file mode 100644 index aeaec21c8..000000000 --- a/uu_join/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_join - Rust -

Function uu_join::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_join/index.html b/uu_join/index.html deleted file mode 100644 index 7dbaa1a0e..000000000 --- a/uu_join/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_join - Rust -

Crate uu_join[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_join/sidebar-items.js b/uu_join/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_join/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_kill/all.html b/uu_kill/all.html deleted file mode 100644 index c328ec49f..000000000 --- a/uu_kill/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Enums

Functions

Statics

- \ No newline at end of file diff --git a/uu_kill/enum.Mode.html b/uu_kill/enum.Mode.html deleted file mode 100644 index 171e07498..000000000 --- a/uu_kill/enum.Mode.html +++ /dev/null @@ -1,21 +0,0 @@ -Mode in uu_kill - Rust -

Enum uu_kill::Mode[][src]

pub enum Mode {
-    Kill,
-    Table,
-    List,
-}

Variants

Kill

Table

List

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_kill/fn.uu_app.html b/uu_kill/fn.uu_app.html deleted file mode 100644 index 71a211ddd..000000000 --- a/uu_kill/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_kill - Rust -

Function uu_kill::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_kill/fn.uumain.html b/uu_kill/fn.uumain.html deleted file mode 100644 index b5df82ca7..000000000 --- a/uu_kill/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_kill - Rust -

Function uu_kill::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_kill/index.html b/uu_kill/index.html deleted file mode 100644 index 1cb2b9841..000000000 --- a/uu_kill/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_kill - Rust -

Crate uu_kill[][src]

Modules

-

Enums

-

Functions

-
- \ No newline at end of file diff --git a/uu_kill/options/index.html b/uu_kill/options/index.html deleted file mode 100644 index 67db2afe3..000000000 --- a/uu_kill/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_kill::options - Rust -

Module uu_kill::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_kill/options/sidebar-items.js b/uu_kill/options/sidebar-items.js deleted file mode 100644 index cc18172db..000000000 --- a/uu_kill/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["LIST",""],["PIDS_OR_SIGNALS",""],["SIGNAL",""],["TABLE",""],["TABLE_OLD",""]]}); \ No newline at end of file diff --git a/uu_kill/options/static.LIST.html b/uu_kill/options/static.LIST.html deleted file mode 100644 index dab314761..000000000 --- a/uu_kill/options/static.LIST.html +++ /dev/null @@ -1,3 +0,0 @@ -LIST in uu_kill::options - Rust -

Static uu_kill::options::LIST[][src]

pub static LIST: &str
- \ No newline at end of file diff --git a/uu_kill/options/static.PIDS_OR_SIGNALS.html b/uu_kill/options/static.PIDS_OR_SIGNALS.html deleted file mode 100644 index a34fc9c38..000000000 --- a/uu_kill/options/static.PIDS_OR_SIGNALS.html +++ /dev/null @@ -1,3 +0,0 @@ -PIDS_OR_SIGNALS in uu_kill::options - Rust -

Static uu_kill::options::PIDS_OR_SIGNALS[][src]

pub static PIDS_OR_SIGNALS: &str
- \ No newline at end of file diff --git a/uu_kill/options/static.SIGNAL.html b/uu_kill/options/static.SIGNAL.html deleted file mode 100644 index 6eb482171..000000000 --- a/uu_kill/options/static.SIGNAL.html +++ /dev/null @@ -1,3 +0,0 @@ -SIGNAL in uu_kill::options - Rust -

Static uu_kill::options::SIGNAL[][src]

pub static SIGNAL: &str
- \ No newline at end of file diff --git a/uu_kill/options/static.TABLE.html b/uu_kill/options/static.TABLE.html deleted file mode 100644 index 93d8ecf48..000000000 --- a/uu_kill/options/static.TABLE.html +++ /dev/null @@ -1,3 +0,0 @@ -TABLE in uu_kill::options - Rust -

Static uu_kill::options::TABLE[][src]

pub static TABLE: &str
- \ No newline at end of file diff --git a/uu_kill/options/static.TABLE_OLD.html b/uu_kill/options/static.TABLE_OLD.html deleted file mode 100644 index 49ead3370..000000000 --- a/uu_kill/options/static.TABLE_OLD.html +++ /dev/null @@ -1,3 +0,0 @@ -TABLE_OLD in uu_kill::options - Rust -

Static uu_kill::options::TABLE_OLD[][src]

pub static TABLE_OLD: &str
- \ No newline at end of file diff --git a/uu_kill/sidebar-items.js b/uu_kill/sidebar-items.js deleted file mode 100644 index f3592db17..000000000 --- a/uu_kill/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["Mode",""]],"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_link/all.html b/uu_link/all.html deleted file mode 100644 index 79f0e2e83..000000000 --- a/uu_link/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_link/fn.uu_app.html b/uu_link/fn.uu_app.html deleted file mode 100644 index 9ee368bc1..000000000 --- a/uu_link/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_link - Rust -

Function uu_link::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_link/fn.uumain.html b/uu_link/fn.uumain.html deleted file mode 100644 index 40c3e9e98..000000000 --- a/uu_link/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_link - Rust -

Function uu_link::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_link/index.html b/uu_link/index.html deleted file mode 100644 index cc2e88539..000000000 --- a/uu_link/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_link - Rust -

Crate uu_link[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_link/options/index.html b/uu_link/options/index.html deleted file mode 100644 index da5b0579a..000000000 --- a/uu_link/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_link::options - Rust -

Module uu_link::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_link/options/sidebar-items.js b/uu_link/options/sidebar-items.js deleted file mode 100644 index aadeb063e..000000000 --- a/uu_link/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["FILES",""]]}); \ No newline at end of file diff --git a/uu_link/options/static.FILES.html b/uu_link/options/static.FILES.html deleted file mode 100644 index 559c4117c..000000000 --- a/uu_link/options/static.FILES.html +++ /dev/null @@ -1,3 +0,0 @@ -FILES in uu_link::options - Rust -

Static uu_link::options::FILES[][src]

pub static FILES: &str
- \ No newline at end of file diff --git a/uu_link/sidebar-items.js b/uu_link/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_link/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_ln/all.html b/uu_ln/all.html deleted file mode 100644 index 32aec8d80..000000000 --- a/uu_ln/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Functions

- \ No newline at end of file diff --git a/uu_ln/enum.OverwriteMode.html b/uu_ln/enum.OverwriteMode.html deleted file mode 100644 index 038d4512f..000000000 --- a/uu_ln/enum.OverwriteMode.html +++ /dev/null @@ -1,26 +0,0 @@ -OverwriteMode in uu_ln - Rust -

Enum uu_ln::OverwriteMode[][src]

pub enum OverwriteMode {
-    NoClobber,
-    Interactive,
-    Force,
-}

Variants

NoClobber

Interactive

Force

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_ln/fn.is_symlink.html b/uu_ln/fn.is_symlink.html deleted file mode 100644 index 65fd98545..000000000 --- a/uu_ln/fn.is_symlink.html +++ /dev/null @@ -1,3 +0,0 @@ -is_symlink in uu_ln - Rust -

Function uu_ln::is_symlink[][src]

pub fn is_symlink<P: AsRef<Path>>(path: P) -> bool
- \ No newline at end of file diff --git a/uu_ln/fn.uu_app.html b/uu_ln/fn.uu_app.html deleted file mode 100644 index 2cbbff49d..000000000 --- a/uu_ln/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_ln - Rust -

Function uu_ln::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_ln/fn.uumain.html b/uu_ln/fn.uumain.html deleted file mode 100644 index e04e49985..000000000 --- a/uu_ln/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_ln - Rust -

Function uu_ln::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_ln/index.html b/uu_ln/index.html deleted file mode 100644 index be6775620..000000000 --- a/uu_ln/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_ln - Rust -

Crate uu_ln[][src]

Structs

-

Enums

-

Functions

-
- \ No newline at end of file diff --git a/uu_ln/sidebar-items.js b/uu_ln/sidebar-items.js deleted file mode 100644 index acc4dafc8..000000000 --- a/uu_ln/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["OverwriteMode",""]],"fn":[["is_symlink",""],["uu_app",""],["uumain",""]],"struct":[["Settings",""]]}); \ No newline at end of file diff --git a/uu_ln/struct.Settings.html b/uu_ln/struct.Settings.html deleted file mode 100644 index f3b4810ac..000000000 --- a/uu_ln/struct.Settings.html +++ /dev/null @@ -1,12 +0,0 @@ -Settings in uu_ln - Rust -

Struct uu_ln::Settings[][src]

pub struct Settings { /* fields omitted */ }

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_logname/all.html b/uu_logname/all.html deleted file mode 100644 index ac68210fc..000000000 --- a/uu_logname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_logname/fn.getlogin.html b/uu_logname/fn.getlogin.html deleted file mode 100644 index 92c8f91da..000000000 --- a/uu_logname/fn.getlogin.html +++ /dev/null @@ -1,3 +0,0 @@ -getlogin in uu_logname - Rust -

Function uu_logname::getlogin[][src]

pub unsafe extern "C" fn getlogin() -> *const c_char
- \ No newline at end of file diff --git a/uu_logname/fn.uu_app.html b/uu_logname/fn.uu_app.html deleted file mode 100644 index e71b033d7..000000000 --- a/uu_logname/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_logname - Rust -

Function uu_logname::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_logname/fn.uumain.html b/uu_logname/fn.uumain.html deleted file mode 100644 index 84ca96ff6..000000000 --- a/uu_logname/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_logname - Rust -

Function uu_logname::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_logname/index.html b/uu_logname/index.html deleted file mode 100644 index f96541c4c..000000000 --- a/uu_logname/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_logname - Rust -

Crate uu_logname[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_logname/sidebar-items.js b/uu_logname/sidebar-items.js deleted file mode 100644 index fca66c23c..000000000 --- a/uu_logname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["getlogin",""],["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_ls/all.html b/uu_ls/all.html deleted file mode 100644 index 95fe55529..000000000 --- a/uu_ls/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_ls/fn.uu_app.html b/uu_ls/fn.uu_app.html deleted file mode 100644 index e92454ac8..000000000 --- a/uu_ls/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_ls - Rust -

Function uu_ls::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_ls/fn.uumain.html b/uu_ls/fn.uumain.html deleted file mode 100644 index 6b8cba307..000000000 --- a/uu_ls/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_ls - Rust -

Function uu_ls::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_ls/index.html b/uu_ls/index.html deleted file mode 100644 index 5f6c85e22..000000000 --- a/uu_ls/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_ls - Rust -

Crate uu_ls[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_ls/options/dereference/index.html b/uu_ls/options/dereference/index.html deleted file mode 100644 index 0326d04e3..000000000 --- a/uu_ls/options/dereference/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::dereference - Rust -

Module uu_ls::options::dereference[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/dereference/sidebar-items.js b/uu_ls/options/dereference/sidebar-items.js deleted file mode 100644 index 0d6e7e761..000000000 --- a/uu_ls/options/dereference/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ALL",""],["ARGS",""],["DIR_ARGS",""]]}); \ No newline at end of file diff --git a/uu_ls/options/dereference/static.ALL.html b/uu_ls/options/dereference/static.ALL.html deleted file mode 100644 index 669cc7cde..000000000 --- a/uu_ls/options/dereference/static.ALL.html +++ /dev/null @@ -1,3 +0,0 @@ -ALL in uu_ls::options::dereference - Rust -

Static uu_ls::options::dereference::ALL[][src]

pub static ALL: &str
- \ No newline at end of file diff --git a/uu_ls/options/dereference/static.ARGS.html b/uu_ls/options/dereference/static.ARGS.html deleted file mode 100644 index 2d4e14203..000000000 --- a/uu_ls/options/dereference/static.ARGS.html +++ /dev/null @@ -1,3 +0,0 @@ -ARGS in uu_ls::options::dereference - Rust -

Static uu_ls::options::dereference::ARGS[][src]

pub static ARGS: &str
- \ No newline at end of file diff --git a/uu_ls/options/dereference/static.DIR_ARGS.html b/uu_ls/options/dereference/static.DIR_ARGS.html deleted file mode 100644 index ce711f5c8..000000000 --- a/uu_ls/options/dereference/static.DIR_ARGS.html +++ /dev/null @@ -1,3 +0,0 @@ -DIR_ARGS in uu_ls::options::dereference - Rust -

Static uu_ls::options::dereference::DIR_ARGS[][src]

pub static DIR_ARGS: &str
- \ No newline at end of file diff --git a/uu_ls/options/files/index.html b/uu_ls/options/files/index.html deleted file mode 100644 index 5735c041e..000000000 --- a/uu_ls/options/files/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::files - Rust -

Module uu_ls::options::files[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/files/sidebar-items.js b/uu_ls/options/files/sidebar-items.js deleted file mode 100644 index bdc8a28ce..000000000 --- a/uu_ls/options/files/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ALL",""],["ALMOST_ALL",""]]}); \ No newline at end of file diff --git a/uu_ls/options/files/static.ALL.html b/uu_ls/options/files/static.ALL.html deleted file mode 100644 index 4b8eb3199..000000000 --- a/uu_ls/options/files/static.ALL.html +++ /dev/null @@ -1,3 +0,0 @@ -ALL in uu_ls::options::files - Rust -

Static uu_ls::options::files::ALL[][src]

pub static ALL: &str
- \ No newline at end of file diff --git a/uu_ls/options/files/static.ALMOST_ALL.html b/uu_ls/options/files/static.ALMOST_ALL.html deleted file mode 100644 index a6a6e0fba..000000000 --- a/uu_ls/options/files/static.ALMOST_ALL.html +++ /dev/null @@ -1,3 +0,0 @@ -ALMOST_ALL in uu_ls::options::files - Rust -

Static uu_ls::options::files::ALMOST_ALL[][src]

pub static ALMOST_ALL: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/index.html b/uu_ls/options/format/index.html deleted file mode 100644 index fbfa7e5f7..000000000 --- a/uu_ls/options/format/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::format - Rust -

Module uu_ls::options::format[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/format/sidebar-items.js b/uu_ls/options/format/sidebar-items.js deleted file mode 100644 index 5de714568..000000000 --- a/uu_ls/options/format/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ACROSS",""],["COLUMNS",""],["COMMAS",""],["LONG",""],["LONG_NO_GROUP",""],["LONG_NO_OWNER",""],["LONG_NUMERIC_UID_GID",""],["ONE_LINE",""]]}); \ No newline at end of file diff --git a/uu_ls/options/format/static.ACROSS.html b/uu_ls/options/format/static.ACROSS.html deleted file mode 100644 index 6048b815e..000000000 --- a/uu_ls/options/format/static.ACROSS.html +++ /dev/null @@ -1,3 +0,0 @@ -ACROSS in uu_ls::options::format - Rust -

Static uu_ls::options::format::ACROSS[][src]

pub static ACROSS: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.COLUMNS.html b/uu_ls/options/format/static.COLUMNS.html deleted file mode 100644 index ca73e3706..000000000 --- a/uu_ls/options/format/static.COLUMNS.html +++ /dev/null @@ -1,3 +0,0 @@ -COLUMNS in uu_ls::options::format - Rust -

Static uu_ls::options::format::COLUMNS[][src]

pub static COLUMNS: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.COMMAS.html b/uu_ls/options/format/static.COMMAS.html deleted file mode 100644 index 99f39c926..000000000 --- a/uu_ls/options/format/static.COMMAS.html +++ /dev/null @@ -1,3 +0,0 @@ -COMMAS in uu_ls::options::format - Rust -

Static uu_ls::options::format::COMMAS[][src]

pub static COMMAS: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.LONG.html b/uu_ls/options/format/static.LONG.html deleted file mode 100644 index 9443045f9..000000000 --- a/uu_ls/options/format/static.LONG.html +++ /dev/null @@ -1,3 +0,0 @@ -LONG in uu_ls::options::format - Rust -

Static uu_ls::options::format::LONG[][src]

pub static LONG: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.LONG_NO_GROUP.html b/uu_ls/options/format/static.LONG_NO_GROUP.html deleted file mode 100644 index 714a7babe..000000000 --- a/uu_ls/options/format/static.LONG_NO_GROUP.html +++ /dev/null @@ -1,3 +0,0 @@ -LONG_NO_GROUP in uu_ls::options::format - Rust -

Static uu_ls::options::format::LONG_NO_GROUP[][src]

pub static LONG_NO_GROUP: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.LONG_NO_OWNER.html b/uu_ls/options/format/static.LONG_NO_OWNER.html deleted file mode 100644 index faf3e8ecf..000000000 --- a/uu_ls/options/format/static.LONG_NO_OWNER.html +++ /dev/null @@ -1,3 +0,0 @@ -LONG_NO_OWNER in uu_ls::options::format - Rust -

Static uu_ls::options::format::LONG_NO_OWNER[][src]

pub static LONG_NO_OWNER: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html b/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html deleted file mode 100644 index 2744a8d3e..000000000 --- a/uu_ls/options/format/static.LONG_NUMERIC_UID_GID.html +++ /dev/null @@ -1,3 +0,0 @@ -LONG_NUMERIC_UID_GID in uu_ls::options::format - Rust -

Static uu_ls::options::format::LONG_NUMERIC_UID_GID[][src]

pub static LONG_NUMERIC_UID_GID: &str
- \ No newline at end of file diff --git a/uu_ls/options/format/static.ONE_LINE.html b/uu_ls/options/format/static.ONE_LINE.html deleted file mode 100644 index a3bdcab8c..000000000 --- a/uu_ls/options/format/static.ONE_LINE.html +++ /dev/null @@ -1,3 +0,0 @@ -ONE_LINE in uu_ls::options::format - Rust -

Static uu_ls::options::format::ONE_LINE[][src]

pub static ONE_LINE: &str
- \ No newline at end of file diff --git a/uu_ls/options/index.html b/uu_ls/options/index.html deleted file mode 100644 index dd82131ed..000000000 --- a/uu_ls/options/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_ls::options - Rust -

Module uu_ls::options[][src]

Modules

-

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/indicator_style/index.html b/uu_ls/options/indicator_style/index.html deleted file mode 100644 index bf5ada8f7..000000000 --- a/uu_ls/options/indicator_style/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::indicator_style - Rust -

Module uu_ls::options::indicator_style[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/indicator_style/sidebar-items.js b/uu_ls/options/indicator_style/sidebar-items.js deleted file mode 100644 index 9fe7f9d1b..000000000 --- a/uu_ls/options/indicator_style/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["CLASSIFY",""],["FILE_TYPE",""],["SLASH",""]]}); \ No newline at end of file diff --git a/uu_ls/options/indicator_style/static.CLASSIFY.html b/uu_ls/options/indicator_style/static.CLASSIFY.html deleted file mode 100644 index 2ea09427f..000000000 --- a/uu_ls/options/indicator_style/static.CLASSIFY.html +++ /dev/null @@ -1,3 +0,0 @@ -CLASSIFY in uu_ls::options::indicator_style - Rust -

Static uu_ls::options::indicator_style::CLASSIFY[][src]

pub static CLASSIFY: &str
- \ No newline at end of file diff --git a/uu_ls/options/indicator_style/static.FILE_TYPE.html b/uu_ls/options/indicator_style/static.FILE_TYPE.html deleted file mode 100644 index a461e9652..000000000 --- a/uu_ls/options/indicator_style/static.FILE_TYPE.html +++ /dev/null @@ -1,3 +0,0 @@ -FILE_TYPE in uu_ls::options::indicator_style - Rust -

Static uu_ls::options::indicator_style::FILE_TYPE[][src]

pub static FILE_TYPE: &str
- \ No newline at end of file diff --git a/uu_ls/options/indicator_style/static.SLASH.html b/uu_ls/options/indicator_style/static.SLASH.html deleted file mode 100644 index 600c26b15..000000000 --- a/uu_ls/options/indicator_style/static.SLASH.html +++ /dev/null @@ -1,3 +0,0 @@ -SLASH in uu_ls::options::indicator_style - Rust -

Static uu_ls::options::indicator_style::SLASH[][src]

pub static SLASH: &str
- \ No newline at end of file diff --git a/uu_ls/options/quoting/index.html b/uu_ls/options/quoting/index.html deleted file mode 100644 index af5c61049..000000000 --- a/uu_ls/options/quoting/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::quoting - Rust -

Module uu_ls::options::quoting[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/quoting/sidebar-items.js b/uu_ls/options/quoting/sidebar-items.js deleted file mode 100644 index bf3fa2b3f..000000000 --- a/uu_ls/options/quoting/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["C",""],["ESCAPE",""],["LITERAL",""]]}); \ No newline at end of file diff --git a/uu_ls/options/quoting/static.C.html b/uu_ls/options/quoting/static.C.html deleted file mode 100644 index 2b1ea5d25..000000000 --- a/uu_ls/options/quoting/static.C.html +++ /dev/null @@ -1,3 +0,0 @@ -C in uu_ls::options::quoting - Rust -

Static uu_ls::options::quoting::C[][src]

pub static C: &str
- \ No newline at end of file diff --git a/uu_ls/options/quoting/static.ESCAPE.html b/uu_ls/options/quoting/static.ESCAPE.html deleted file mode 100644 index 7f88fde21..000000000 --- a/uu_ls/options/quoting/static.ESCAPE.html +++ /dev/null @@ -1,3 +0,0 @@ -ESCAPE in uu_ls::options::quoting - Rust -

Static uu_ls::options::quoting::ESCAPE[][src]

pub static ESCAPE: &str
- \ No newline at end of file diff --git a/uu_ls/options/quoting/static.LITERAL.html b/uu_ls/options/quoting/static.LITERAL.html deleted file mode 100644 index 69f088c74..000000000 --- a/uu_ls/options/quoting/static.LITERAL.html +++ /dev/null @@ -1,3 +0,0 @@ -LITERAL in uu_ls::options::quoting - Rust -

Static uu_ls::options::quoting::LITERAL[][src]

pub static LITERAL: &str
- \ No newline at end of file diff --git a/uu_ls/options/sidebar-items.js b/uu_ls/options/sidebar-items.js deleted file mode 100644 index 489590d5a..000000000 --- a/uu_ls/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"mod":[["dereference",""],["files",""],["format",""],["indicator_style",""],["quoting",""],["size",""],["sort",""],["time",""]],"static":[["AUTHOR",""],["COLOR",""],["CONTEXT",""],["DIRECTORY",""],["FORMAT",""],["FULL_TIME",""],["HIDE",""],["HIDE_CONTROL_CHARS",""],["IGNORE",""],["IGNORE_BACKUPS",""],["INDICATOR_STYLE",""],["INODE",""],["NO_GROUP",""],["PATHS",""],["QUOTING_STYLE",""],["RECURSIVE",""],["REVERSE",""],["SHOW_CONTROL_CHARS",""],["SORT",""],["TIME",""],["TIME_STYLE",""],["WIDTH",""]]}); \ No newline at end of file diff --git a/uu_ls/options/size/index.html b/uu_ls/options/size/index.html deleted file mode 100644 index 9099de515..000000000 --- a/uu_ls/options/size/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::size - Rust -

Module uu_ls::options::size[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/size/sidebar-items.js b/uu_ls/options/size/sidebar-items.js deleted file mode 100644 index 2dc3125c5..000000000 --- a/uu_ls/options/size/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["HUMAN_READABLE",""],["SI",""]]}); \ No newline at end of file diff --git a/uu_ls/options/size/static.HUMAN_READABLE.html b/uu_ls/options/size/static.HUMAN_READABLE.html deleted file mode 100644 index e725d561f..000000000 --- a/uu_ls/options/size/static.HUMAN_READABLE.html +++ /dev/null @@ -1,3 +0,0 @@ -HUMAN_READABLE in uu_ls::options::size - Rust -

Static uu_ls::options::size::HUMAN_READABLE[][src]

pub static HUMAN_READABLE: &str
- \ No newline at end of file diff --git a/uu_ls/options/size/static.SI.html b/uu_ls/options/size/static.SI.html deleted file mode 100644 index 27f21ca55..000000000 --- a/uu_ls/options/size/static.SI.html +++ /dev/null @@ -1,3 +0,0 @@ -SI in uu_ls::options::size - Rust -

Static uu_ls::options::size::SI[][src]

pub static SI: &str
- \ No newline at end of file diff --git a/uu_ls/options/sort/index.html b/uu_ls/options/sort/index.html deleted file mode 100644 index cc2f17a43..000000000 --- a/uu_ls/options/sort/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::sort - Rust -

Module uu_ls::options::sort[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/sort/sidebar-items.js b/uu_ls/options/sort/sidebar-items.js deleted file mode 100644 index 47107ab81..000000000 --- a/uu_ls/options/sort/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["EXTENSION",""],["NONE",""],["SIZE",""],["TIME",""],["VERSION",""]]}); \ No newline at end of file diff --git a/uu_ls/options/sort/static.EXTENSION.html b/uu_ls/options/sort/static.EXTENSION.html deleted file mode 100644 index a6145efe7..000000000 --- a/uu_ls/options/sort/static.EXTENSION.html +++ /dev/null @@ -1,3 +0,0 @@ -EXTENSION in uu_ls::options::sort - Rust -

Static uu_ls::options::sort::EXTENSION[][src]

pub static EXTENSION: &str
- \ No newline at end of file diff --git a/uu_ls/options/sort/static.NONE.html b/uu_ls/options/sort/static.NONE.html deleted file mode 100644 index 25958c0e2..000000000 --- a/uu_ls/options/sort/static.NONE.html +++ /dev/null @@ -1,3 +0,0 @@ -NONE in uu_ls::options::sort - Rust -

Static uu_ls::options::sort::NONE[][src]

pub static NONE: &str
- \ No newline at end of file diff --git a/uu_ls/options/sort/static.SIZE.html b/uu_ls/options/sort/static.SIZE.html deleted file mode 100644 index 26500432e..000000000 --- a/uu_ls/options/sort/static.SIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -SIZE in uu_ls::options::sort - Rust -

Static uu_ls::options::sort::SIZE[][src]

pub static SIZE: &str
- \ No newline at end of file diff --git a/uu_ls/options/sort/static.TIME.html b/uu_ls/options/sort/static.TIME.html deleted file mode 100644 index e25dbd5f9..000000000 --- a/uu_ls/options/sort/static.TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -TIME in uu_ls::options::sort - Rust -

Static uu_ls::options::sort::TIME[][src]

pub static TIME: &str
- \ No newline at end of file diff --git a/uu_ls/options/sort/static.VERSION.html b/uu_ls/options/sort/static.VERSION.html deleted file mode 100644 index 7dc3ef380..000000000 --- a/uu_ls/options/sort/static.VERSION.html +++ /dev/null @@ -1,3 +0,0 @@ -VERSION in uu_ls::options::sort - Rust -

Static uu_ls::options::sort::VERSION[][src]

pub static VERSION: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.AUTHOR.html b/uu_ls/options/static.AUTHOR.html deleted file mode 100644 index 04eb8bf6c..000000000 --- a/uu_ls/options/static.AUTHOR.html +++ /dev/null @@ -1,3 +0,0 @@ -AUTHOR in uu_ls::options - Rust -

Static uu_ls::options::AUTHOR[][src]

pub static AUTHOR: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.COLOR.html b/uu_ls/options/static.COLOR.html deleted file mode 100644 index 34fd5aab5..000000000 --- a/uu_ls/options/static.COLOR.html +++ /dev/null @@ -1,3 +0,0 @@ -COLOR in uu_ls::options - Rust -

Static uu_ls::options::COLOR[][src]

pub static COLOR: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.CONTEXT.html b/uu_ls/options/static.CONTEXT.html deleted file mode 100644 index 60846cbe3..000000000 --- a/uu_ls/options/static.CONTEXT.html +++ /dev/null @@ -1,3 +0,0 @@ -CONTEXT in uu_ls::options - Rust -

Static uu_ls::options::CONTEXT[][src]

pub static CONTEXT: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.DIRECTORY.html b/uu_ls/options/static.DIRECTORY.html deleted file mode 100644 index 4a067b3b7..000000000 --- a/uu_ls/options/static.DIRECTORY.html +++ /dev/null @@ -1,3 +0,0 @@ -DIRECTORY in uu_ls::options - Rust -

Static uu_ls::options::DIRECTORY[][src]

pub static DIRECTORY: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.FORMAT.html b/uu_ls/options/static.FORMAT.html deleted file mode 100644 index 859bc2abe..000000000 --- a/uu_ls/options/static.FORMAT.html +++ /dev/null @@ -1,3 +0,0 @@ -FORMAT in uu_ls::options - Rust -

Static uu_ls::options::FORMAT[][src]

pub static FORMAT: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.FULL_TIME.html b/uu_ls/options/static.FULL_TIME.html deleted file mode 100644 index 5116a692b..000000000 --- a/uu_ls/options/static.FULL_TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -FULL_TIME in uu_ls::options - Rust -

Static uu_ls::options::FULL_TIME[][src]

pub static FULL_TIME: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.HIDE.html b/uu_ls/options/static.HIDE.html deleted file mode 100644 index ce07f86bd..000000000 --- a/uu_ls/options/static.HIDE.html +++ /dev/null @@ -1,3 +0,0 @@ -HIDE in uu_ls::options - Rust -

Static uu_ls::options::HIDE[][src]

pub static HIDE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.HIDE_CONTROL_CHARS.html b/uu_ls/options/static.HIDE_CONTROL_CHARS.html deleted file mode 100644 index cc2901c8a..000000000 --- a/uu_ls/options/static.HIDE_CONTROL_CHARS.html +++ /dev/null @@ -1,3 +0,0 @@ -HIDE_CONTROL_CHARS in uu_ls::options - Rust -

Static uu_ls::options::HIDE_CONTROL_CHARS[][src]

pub static HIDE_CONTROL_CHARS: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.IGNORE.html b/uu_ls/options/static.IGNORE.html deleted file mode 100644 index 72be563d7..000000000 --- a/uu_ls/options/static.IGNORE.html +++ /dev/null @@ -1,3 +0,0 @@ -IGNORE in uu_ls::options - Rust -

Static uu_ls::options::IGNORE[][src]

pub static IGNORE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.IGNORE_BACKUPS.html b/uu_ls/options/static.IGNORE_BACKUPS.html deleted file mode 100644 index 82538143a..000000000 --- a/uu_ls/options/static.IGNORE_BACKUPS.html +++ /dev/null @@ -1,3 +0,0 @@ -IGNORE_BACKUPS in uu_ls::options - Rust -

Static uu_ls::options::IGNORE_BACKUPS[][src]

pub static IGNORE_BACKUPS: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.INDICATOR_STYLE.html b/uu_ls/options/static.INDICATOR_STYLE.html deleted file mode 100644 index a6fc93594..000000000 --- a/uu_ls/options/static.INDICATOR_STYLE.html +++ /dev/null @@ -1,3 +0,0 @@ -INDICATOR_STYLE in uu_ls::options - Rust -

Static uu_ls::options::INDICATOR_STYLE[][src]

pub static INDICATOR_STYLE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.INODE.html b/uu_ls/options/static.INODE.html deleted file mode 100644 index 21a729eb3..000000000 --- a/uu_ls/options/static.INODE.html +++ /dev/null @@ -1,3 +0,0 @@ -INODE in uu_ls::options - Rust -

Static uu_ls::options::INODE[][src]

pub static INODE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.NO_GROUP.html b/uu_ls/options/static.NO_GROUP.html deleted file mode 100644 index 9eef639dc..000000000 --- a/uu_ls/options/static.NO_GROUP.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_GROUP in uu_ls::options - Rust -

Static uu_ls::options::NO_GROUP[][src]

pub static NO_GROUP: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.PATHS.html b/uu_ls/options/static.PATHS.html deleted file mode 100644 index e62590d01..000000000 --- a/uu_ls/options/static.PATHS.html +++ /dev/null @@ -1,3 +0,0 @@ -PATHS in uu_ls::options - Rust -

Static uu_ls::options::PATHS[][src]

pub static PATHS: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.QUOTING_STYLE.html b/uu_ls/options/static.QUOTING_STYLE.html deleted file mode 100644 index d721328c0..000000000 --- a/uu_ls/options/static.QUOTING_STYLE.html +++ /dev/null @@ -1,3 +0,0 @@ -QUOTING_STYLE in uu_ls::options - Rust -

Static uu_ls::options::QUOTING_STYLE[][src]

pub static QUOTING_STYLE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.RECURSIVE.html b/uu_ls/options/static.RECURSIVE.html deleted file mode 100644 index f4c814aa8..000000000 --- a/uu_ls/options/static.RECURSIVE.html +++ /dev/null @@ -1,3 +0,0 @@ -RECURSIVE in uu_ls::options - Rust -

Static uu_ls::options::RECURSIVE[][src]

pub static RECURSIVE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.REVERSE.html b/uu_ls/options/static.REVERSE.html deleted file mode 100644 index faca7db3c..000000000 --- a/uu_ls/options/static.REVERSE.html +++ /dev/null @@ -1,3 +0,0 @@ -REVERSE in uu_ls::options - Rust -

Static uu_ls::options::REVERSE[][src]

pub static REVERSE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.SHOW_CONTROL_CHARS.html b/uu_ls/options/static.SHOW_CONTROL_CHARS.html deleted file mode 100644 index 911a9d6c2..000000000 --- a/uu_ls/options/static.SHOW_CONTROL_CHARS.html +++ /dev/null @@ -1,3 +0,0 @@ -SHOW_CONTROL_CHARS in uu_ls::options - Rust -

Static uu_ls::options::SHOW_CONTROL_CHARS[][src]

pub static SHOW_CONTROL_CHARS: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.SORT.html b/uu_ls/options/static.SORT.html deleted file mode 100644 index 7d9cbe5dd..000000000 --- a/uu_ls/options/static.SORT.html +++ /dev/null @@ -1,3 +0,0 @@ -SORT in uu_ls::options - Rust -

Static uu_ls::options::SORT[][src]

pub static SORT: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.TIME.html b/uu_ls/options/static.TIME.html deleted file mode 100644 index e6272f3fa..000000000 --- a/uu_ls/options/static.TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -TIME in uu_ls::options - Rust -

Static uu_ls::options::TIME[][src]

pub static TIME: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.TIME_STYLE.html b/uu_ls/options/static.TIME_STYLE.html deleted file mode 100644 index 21a971088..000000000 --- a/uu_ls/options/static.TIME_STYLE.html +++ /dev/null @@ -1,3 +0,0 @@ -TIME_STYLE in uu_ls::options - Rust -

Static uu_ls::options::TIME_STYLE[][src]

pub static TIME_STYLE: &str
- \ No newline at end of file diff --git a/uu_ls/options/static.WIDTH.html b/uu_ls/options/static.WIDTH.html deleted file mode 100644 index 44e88669c..000000000 --- a/uu_ls/options/static.WIDTH.html +++ /dev/null @@ -1,3 +0,0 @@ -WIDTH in uu_ls::options - Rust -

Static uu_ls::options::WIDTH[][src]

pub static WIDTH: &str
- \ No newline at end of file diff --git a/uu_ls/options/time/index.html b/uu_ls/options/time/index.html deleted file mode 100644 index 893b8f8a2..000000000 --- a/uu_ls/options/time/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ls::options::time - Rust -

Module uu_ls::options::time[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_ls/options/time/sidebar-items.js b/uu_ls/options/time/sidebar-items.js deleted file mode 100644 index 90bddbe35..000000000 --- a/uu_ls/options/time/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ACCESS",""],["CHANGE",""]]}); \ No newline at end of file diff --git a/uu_ls/options/time/static.ACCESS.html b/uu_ls/options/time/static.ACCESS.html deleted file mode 100644 index 4b031bbeb..000000000 --- a/uu_ls/options/time/static.ACCESS.html +++ /dev/null @@ -1,3 +0,0 @@ -ACCESS in uu_ls::options::time - Rust -

Static uu_ls::options::time::ACCESS[][src]

pub static ACCESS: &str
- \ No newline at end of file diff --git a/uu_ls/options/time/static.CHANGE.html b/uu_ls/options/time/static.CHANGE.html deleted file mode 100644 index 03dd9129a..000000000 --- a/uu_ls/options/time/static.CHANGE.html +++ /dev/null @@ -1,3 +0,0 @@ -CHANGE in uu_ls::options::time - Rust -

Static uu_ls::options::time::CHANGE[][src]

pub static CHANGE: &str
- \ No newline at end of file diff --git a/uu_ls/sidebar-items.js b/uu_ls/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_ls/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_mkdir/all.html b/uu_mkdir/all.html deleted file mode 100644 index 371b82b0f..000000000 --- a/uu_mkdir/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_mkdir/fn.uu_app.html b/uu_mkdir/fn.uu_app.html deleted file mode 100644 index b76a8484e..000000000 --- a/uu_mkdir/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_mkdir - Rust -

Function uu_mkdir::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_mkdir/fn.uumain.html b/uu_mkdir/fn.uumain.html deleted file mode 100644 index 8df487d34..000000000 --- a/uu_mkdir/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_mkdir - Rust -

Function uu_mkdir::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_mkdir/index.html b/uu_mkdir/index.html deleted file mode 100644 index d68730c6f..000000000 --- a/uu_mkdir/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_mkdir - Rust -

Crate uu_mkdir[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_mkdir/sidebar-items.js b/uu_mkdir/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_mkdir/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_mkfifo/all.html b/uu_mkfifo/all.html deleted file mode 100644 index 52374fd02..000000000 --- a/uu_mkfifo/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_mkfifo/fn.uu_app.html b/uu_mkfifo/fn.uu_app.html deleted file mode 100644 index e928b4b4d..000000000 --- a/uu_mkfifo/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_mkfifo - Rust -

Function uu_mkfifo::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_mkfifo/fn.uumain.html b/uu_mkfifo/fn.uumain.html deleted file mode 100644 index 10680bdda..000000000 --- a/uu_mkfifo/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_mkfifo - Rust -

Function uu_mkfifo::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_mkfifo/index.html b/uu_mkfifo/index.html deleted file mode 100644 index 01ae46b46..000000000 --- a/uu_mkfifo/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_mkfifo - Rust -

Crate uu_mkfifo[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_mkfifo/sidebar-items.js b/uu_mkfifo/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_mkfifo/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_mknod/all.html b/uu_mknod/all.html deleted file mode 100644 index f12bf86b2..000000000 --- a/uu_mknod/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_mknod/fn.uu_app.html b/uu_mknod/fn.uu_app.html deleted file mode 100644 index 325f65a1d..000000000 --- a/uu_mknod/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_mknod - Rust -

Function uu_mknod::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_mknod/fn.uumain.html b/uu_mknod/fn.uumain.html deleted file mode 100644 index 9a7872775..000000000 --- a/uu_mknod/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_mknod - Rust -

Function uu_mknod::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_mknod/index.html b/uu_mknod/index.html deleted file mode 100644 index 58b96c67b..000000000 --- a/uu_mknod/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_mknod - Rust -

Crate uu_mknod[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_mknod/sidebar-items.js b/uu_mknod/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_mknod/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_mktemp/all.html b/uu_mktemp/all.html deleted file mode 100644 index e552c44ca..000000000 --- a/uu_mktemp/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_mktemp/fn.dry_exec.html b/uu_mktemp/fn.dry_exec.html deleted file mode 100644 index 21ca7c7b3..000000000 --- a/uu_mktemp/fn.dry_exec.html +++ /dev/null @@ -1,3 +0,0 @@ -dry_exec in uu_mktemp - Rust -

Function uu_mktemp::dry_exec[][src]

pub fn dry_exec(
    tmpdir: PathBuf,
    prefix: &str,
    rand: usize,
    suffix: &str
) -> UResult<()>
- \ No newline at end of file diff --git a/uu_mktemp/fn.uu_app.html b/uu_mktemp/fn.uu_app.html deleted file mode 100644 index 4bc93bbde..000000000 --- a/uu_mktemp/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_mktemp - Rust -

Function uu_mktemp::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_mktemp/fn.uumain.html b/uu_mktemp/fn.uumain.html deleted file mode 100644 index 08a9da604..000000000 --- a/uu_mktemp/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_mktemp - Rust -

Function uu_mktemp::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_mktemp/index.html b/uu_mktemp/index.html deleted file mode 100644 index e97bbf220..000000000 --- a/uu_mktemp/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_mktemp - Rust -

Crate uu_mktemp[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_mktemp/sidebar-items.js b/uu_mktemp/sidebar-items.js deleted file mode 100644 index 6113cf509..000000000 --- a/uu_mktemp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["dry_exec",""],["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_more/all.html b/uu_more/all.html deleted file mode 100644 index 1e99b6700..000000000 --- a/uu_more/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Constants

- \ No newline at end of file diff --git a/uu_more/fn.uu_app.html b/uu_more/fn.uu_app.html deleted file mode 100644 index 4247ea806..000000000 --- a/uu_more/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_more - Rust -

Function uu_more::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_more/fn.uumain.html b/uu_more/fn.uumain.html deleted file mode 100644 index cf5bf3427..000000000 --- a/uu_more/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_more - Rust -

Function uu_more::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_more/index.html b/uu_more/index.html deleted file mode 100644 index 6b7aa55c8..000000000 --- a/uu_more/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_more - Rust -

Crate uu_more[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_more/options/constant.CLEAN_PRINT.html b/uu_more/options/constant.CLEAN_PRINT.html deleted file mode 100644 index 75cdde7cc..000000000 --- a/uu_more/options/constant.CLEAN_PRINT.html +++ /dev/null @@ -1,3 +0,0 @@ -CLEAN_PRINT in uu_more::options - Rust -

Constant uu_more::options::CLEAN_PRINT[][src]

pub const CLEAN_PRINT: &str = "clean-print";
- \ No newline at end of file diff --git a/uu_more/options/constant.FILES.html b/uu_more/options/constant.FILES.html deleted file mode 100644 index 2750ea666..000000000 --- a/uu_more/options/constant.FILES.html +++ /dev/null @@ -1,3 +0,0 @@ -FILES in uu_more::options - Rust -

Constant uu_more::options::FILES[][src]

pub const FILES: &str = "files";
- \ No newline at end of file diff --git a/uu_more/options/constant.FROM_LINE.html b/uu_more/options/constant.FROM_LINE.html deleted file mode 100644 index 57724e711..000000000 --- a/uu_more/options/constant.FROM_LINE.html +++ /dev/null @@ -1,3 +0,0 @@ -FROM_LINE in uu_more::options - Rust -

Constant uu_more::options::FROM_LINE[][src]

pub const FROM_LINE: &str = "from-line";
- \ No newline at end of file diff --git a/uu_more/options/constant.LINES.html b/uu_more/options/constant.LINES.html deleted file mode 100644 index 7c39d946b..000000000 --- a/uu_more/options/constant.LINES.html +++ /dev/null @@ -1,3 +0,0 @@ -LINES in uu_more::options - Rust -

Constant uu_more::options::LINES[][src]

pub const LINES: &str = "lines";
- \ No newline at end of file diff --git a/uu_more/options/constant.LOGICAL.html b/uu_more/options/constant.LOGICAL.html deleted file mode 100644 index decb6d432..000000000 --- a/uu_more/options/constant.LOGICAL.html +++ /dev/null @@ -1,3 +0,0 @@ -LOGICAL in uu_more::options - Rust -

Constant uu_more::options::LOGICAL[][src]

pub const LOGICAL: &str = "logical";
- \ No newline at end of file diff --git a/uu_more/options/constant.NO_PAUSE.html b/uu_more/options/constant.NO_PAUSE.html deleted file mode 100644 index c11966827..000000000 --- a/uu_more/options/constant.NO_PAUSE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_PAUSE in uu_more::options - Rust -

Constant uu_more::options::NO_PAUSE[][src]

pub const NO_PAUSE: &str = "no-pause";
- \ No newline at end of file diff --git a/uu_more/options/constant.NUMBER.html b/uu_more/options/constant.NUMBER.html deleted file mode 100644 index 2926a2bad..000000000 --- a/uu_more/options/constant.NUMBER.html +++ /dev/null @@ -1,3 +0,0 @@ -NUMBER in uu_more::options - Rust -

Constant uu_more::options::NUMBER[][src]

pub const NUMBER: &str = "number";
- \ No newline at end of file diff --git a/uu_more/options/constant.PATTERN.html b/uu_more/options/constant.PATTERN.html deleted file mode 100644 index f89007dc5..000000000 --- a/uu_more/options/constant.PATTERN.html +++ /dev/null @@ -1,3 +0,0 @@ -PATTERN in uu_more::options - Rust -

Constant uu_more::options::PATTERN[][src]

pub const PATTERN: &str = "pattern";
- \ No newline at end of file diff --git a/uu_more/options/constant.PLAIN.html b/uu_more/options/constant.PLAIN.html deleted file mode 100644 index e5074208e..000000000 --- a/uu_more/options/constant.PLAIN.html +++ /dev/null @@ -1,3 +0,0 @@ -PLAIN in uu_more::options - Rust -

Constant uu_more::options::PLAIN[][src]

pub const PLAIN: &str = "plain";
- \ No newline at end of file diff --git a/uu_more/options/constant.PRINT_OVER.html b/uu_more/options/constant.PRINT_OVER.html deleted file mode 100644 index 1054ba190..000000000 --- a/uu_more/options/constant.PRINT_OVER.html +++ /dev/null @@ -1,3 +0,0 @@ -PRINT_OVER in uu_more::options - Rust -

Constant uu_more::options::PRINT_OVER[][src]

pub const PRINT_OVER: &str = "print-over";
- \ No newline at end of file diff --git a/uu_more/options/constant.SILENT.html b/uu_more/options/constant.SILENT.html deleted file mode 100644 index d2d2202fa..000000000 --- a/uu_more/options/constant.SILENT.html +++ /dev/null @@ -1,3 +0,0 @@ -SILENT in uu_more::options - Rust -

Constant uu_more::options::SILENT[][src]

pub const SILENT: &str = "silent";
- \ No newline at end of file diff --git a/uu_more/options/constant.SQUEEZE.html b/uu_more/options/constant.SQUEEZE.html deleted file mode 100644 index 5ea22e136..000000000 --- a/uu_more/options/constant.SQUEEZE.html +++ /dev/null @@ -1,3 +0,0 @@ -SQUEEZE in uu_more::options - Rust -

Constant uu_more::options::SQUEEZE[][src]

pub const SQUEEZE: &str = "squeeze";
- \ No newline at end of file diff --git a/uu_more/options/index.html b/uu_more/options/index.html deleted file mode 100644 index f23a605e9..000000000 --- a/uu_more/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_more::options - Rust -

Module uu_more::options[][src]

Constants

-
- \ No newline at end of file diff --git a/uu_more/options/sidebar-items.js b/uu_more/options/sidebar-items.js deleted file mode 100644 index bf558e2e7..000000000 --- a/uu_more/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["CLEAN_PRINT",""],["FILES",""],["FROM_LINE",""],["LINES",""],["LOGICAL",""],["NO_PAUSE",""],["NUMBER",""],["PATTERN",""],["PLAIN",""],["PRINT_OVER",""],["SILENT",""],["SQUEEZE",""]]}); \ No newline at end of file diff --git a/uu_more/sidebar-items.js b/uu_more/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_more/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_mv/all.html b/uu_mv/all.html deleted file mode 100644 index ba15ffcfe..000000000 --- a/uu_mv/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Functions

- \ No newline at end of file diff --git a/uu_mv/enum.OverwriteMode.html b/uu_mv/enum.OverwriteMode.html deleted file mode 100644 index 86c457b2b..000000000 --- a/uu_mv/enum.OverwriteMode.html +++ /dev/null @@ -1,25 +0,0 @@ -OverwriteMode in uu_mv - Rust -

Enum uu_mv::OverwriteMode[][src]

pub enum OverwriteMode {
-    NoClobber,
-    Interactive,
-    Force,
-}

Variants

NoClobber

Interactive

Force

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_mv/fn.uu_app.html b/uu_mv/fn.uu_app.html deleted file mode 100644 index ab2fcbe52..000000000 --- a/uu_mv/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_mv - Rust -

Function uu_mv::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_mv/fn.uumain.html b/uu_mv/fn.uumain.html deleted file mode 100644 index 605fd332b..000000000 --- a/uu_mv/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_mv - Rust -

Function uu_mv::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_mv/index.html b/uu_mv/index.html deleted file mode 100644 index 5ec3e1f00..000000000 --- a/uu_mv/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_mv - Rust -

Crate uu_mv[][src]

Structs

-

Enums

-

Functions

-
- \ No newline at end of file diff --git a/uu_mv/sidebar-items.js b/uu_mv/sidebar-items.js deleted file mode 100644 index d9d07c390..000000000 --- a/uu_mv/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["OverwriteMode",""]],"fn":[["uu_app",""],["uumain",""]],"struct":[["Behavior",""]]}); \ No newline at end of file diff --git a/uu_mv/struct.Behavior.html b/uu_mv/struct.Behavior.html deleted file mode 100644 index 3b378f9b9..000000000 --- a/uu_mv/struct.Behavior.html +++ /dev/null @@ -1,12 +0,0 @@ -Behavior in uu_mv - Rust -

Struct uu_mv::Behavior[][src]

pub struct Behavior { /* fields omitted */ }

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_nice/all.html b/uu_nice/all.html deleted file mode 100644 index 7197b5b03..000000000 --- a/uu_nice/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_nice/fn.uu_app.html b/uu_nice/fn.uu_app.html deleted file mode 100644 index d6663123e..000000000 --- a/uu_nice/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_nice - Rust -

Function uu_nice::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_nice/fn.uumain.html b/uu_nice/fn.uumain.html deleted file mode 100644 index 23f76b0db..000000000 --- a/uu_nice/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_nice - Rust -

Function uu_nice::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_nice/index.html b/uu_nice/index.html deleted file mode 100644 index e7aeb35bf..000000000 --- a/uu_nice/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_nice - Rust -

Crate uu_nice[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_nice/options/index.html b/uu_nice/options/index.html deleted file mode 100644 index 41664c597..000000000 --- a/uu_nice/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_nice::options - Rust -

Module uu_nice::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_nice/options/sidebar-items.js b/uu_nice/options/sidebar-items.js deleted file mode 100644 index d5f7600d9..000000000 --- a/uu_nice/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ADJUSTMENT",""],["COMMAND",""]]}); \ No newline at end of file diff --git a/uu_nice/options/static.ADJUSTMENT.html b/uu_nice/options/static.ADJUSTMENT.html deleted file mode 100644 index 2a9e0e7ff..000000000 --- a/uu_nice/options/static.ADJUSTMENT.html +++ /dev/null @@ -1,3 +0,0 @@ -ADJUSTMENT in uu_nice::options - Rust -

Static uu_nice::options::ADJUSTMENT[][src]

pub static ADJUSTMENT: &str
- \ No newline at end of file diff --git a/uu_nice/options/static.COMMAND.html b/uu_nice/options/static.COMMAND.html deleted file mode 100644 index 1eb4600a0..000000000 --- a/uu_nice/options/static.COMMAND.html +++ /dev/null @@ -1,3 +0,0 @@ -COMMAND in uu_nice::options - Rust -

Static uu_nice::options::COMMAND[][src]

pub static COMMAND: &str
- \ No newline at end of file diff --git a/uu_nice/sidebar-items.js b/uu_nice/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_nice/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_nl/all.html b/uu_nl/all.html deleted file mode 100644 index b78c1012f..000000000 --- a/uu_nl/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Functions

Constants

- \ No newline at end of file diff --git a/uu_nl/fn.uu_app.html b/uu_nl/fn.uu_app.html deleted file mode 100644 index 8d5371d4e..000000000 --- a/uu_nl/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_nl - Rust -

Function uu_nl::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_nl/fn.uumain.html b/uu_nl/fn.uumain.html deleted file mode 100644 index 3f8820d6c..000000000 --- a/uu_nl/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_nl - Rust -

Function uu_nl::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_nl/index.html b/uu_nl/index.html deleted file mode 100644 index 2daf90f2c..000000000 --- a/uu_nl/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_nl - Rust -

Crate uu_nl[][src]

Modules

-

Structs

-

Functions

-
- \ No newline at end of file diff --git a/uu_nl/options/constant.BODY_NUMBERING.html b/uu_nl/options/constant.BODY_NUMBERING.html deleted file mode 100644 index 74f558080..000000000 --- a/uu_nl/options/constant.BODY_NUMBERING.html +++ /dev/null @@ -1,3 +0,0 @@ -BODY_NUMBERING in uu_nl::options - Rust -

Constant uu_nl::options::BODY_NUMBERING[][src]

pub const BODY_NUMBERING: &str = "body-numbering";
- \ No newline at end of file diff --git a/uu_nl/options/constant.FILE.html b/uu_nl/options/constant.FILE.html deleted file mode 100644 index 219cedc6d..000000000 --- a/uu_nl/options/constant.FILE.html +++ /dev/null @@ -1,3 +0,0 @@ -FILE in uu_nl::options - Rust -

Constant uu_nl::options::FILE[][src]

pub const FILE: &str = "file";
- \ No newline at end of file diff --git a/uu_nl/options/constant.FOOTER_NUMBERING.html b/uu_nl/options/constant.FOOTER_NUMBERING.html deleted file mode 100644 index a8c5be049..000000000 --- a/uu_nl/options/constant.FOOTER_NUMBERING.html +++ /dev/null @@ -1,3 +0,0 @@ -FOOTER_NUMBERING in uu_nl::options - Rust -

Constant uu_nl::options::FOOTER_NUMBERING[][src]

pub const FOOTER_NUMBERING: &str = "footer-numbering";
- \ No newline at end of file diff --git a/uu_nl/options/constant.HEADER_NUMBERING.html b/uu_nl/options/constant.HEADER_NUMBERING.html deleted file mode 100644 index 09a56f094..000000000 --- a/uu_nl/options/constant.HEADER_NUMBERING.html +++ /dev/null @@ -1,3 +0,0 @@ -HEADER_NUMBERING in uu_nl::options - Rust -

Constant uu_nl::options::HEADER_NUMBERING[][src]

pub const HEADER_NUMBERING: &str = "header-numbering";
- \ No newline at end of file diff --git a/uu_nl/options/constant.JOIN_BLANK_LINES.html b/uu_nl/options/constant.JOIN_BLANK_LINES.html deleted file mode 100644 index 6c361d2ff..000000000 --- a/uu_nl/options/constant.JOIN_BLANK_LINES.html +++ /dev/null @@ -1,3 +0,0 @@ -JOIN_BLANK_LINES in uu_nl::options - Rust -

Constant uu_nl::options::JOIN_BLANK_LINES[][src]

pub const JOIN_BLANK_LINES: &str = "join-blank-lines";
- \ No newline at end of file diff --git a/uu_nl/options/constant.LINE_INCREMENT.html b/uu_nl/options/constant.LINE_INCREMENT.html deleted file mode 100644 index 42e83afe8..000000000 --- a/uu_nl/options/constant.LINE_INCREMENT.html +++ /dev/null @@ -1,3 +0,0 @@ -LINE_INCREMENT in uu_nl::options - Rust -

Constant uu_nl::options::LINE_INCREMENT[][src]

pub const LINE_INCREMENT: &str = "line-increment";
- \ No newline at end of file diff --git a/uu_nl/options/constant.NO_RENUMBER.html b/uu_nl/options/constant.NO_RENUMBER.html deleted file mode 100644 index ad13bcc32..000000000 --- a/uu_nl/options/constant.NO_RENUMBER.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_RENUMBER in uu_nl::options - Rust -

Constant uu_nl::options::NO_RENUMBER[][src]

pub const NO_RENUMBER: &str = "no-renumber";
- \ No newline at end of file diff --git a/uu_nl/options/constant.NUMBER_FORMAT.html b/uu_nl/options/constant.NUMBER_FORMAT.html deleted file mode 100644 index df0492404..000000000 --- a/uu_nl/options/constant.NUMBER_FORMAT.html +++ /dev/null @@ -1,3 +0,0 @@ -NUMBER_FORMAT in uu_nl::options - Rust -

Constant uu_nl::options::NUMBER_FORMAT[][src]

pub const NUMBER_FORMAT: &str = "number-format";
- \ No newline at end of file diff --git a/uu_nl/options/constant.NUMBER_SEPARATOR.html b/uu_nl/options/constant.NUMBER_SEPARATOR.html deleted file mode 100644 index b15c39646..000000000 --- a/uu_nl/options/constant.NUMBER_SEPARATOR.html +++ /dev/null @@ -1,3 +0,0 @@ -NUMBER_SEPARATOR in uu_nl::options - Rust -

Constant uu_nl::options::NUMBER_SEPARATOR[][src]

pub const NUMBER_SEPARATOR: &str = "number-separator";
- \ No newline at end of file diff --git a/uu_nl/options/constant.NUMBER_WIDTH.html b/uu_nl/options/constant.NUMBER_WIDTH.html deleted file mode 100644 index 04b50c5fd..000000000 --- a/uu_nl/options/constant.NUMBER_WIDTH.html +++ /dev/null @@ -1,3 +0,0 @@ -NUMBER_WIDTH in uu_nl::options - Rust -

Constant uu_nl::options::NUMBER_WIDTH[][src]

pub const NUMBER_WIDTH: &str = "number-width";
- \ No newline at end of file diff --git a/uu_nl/options/constant.SECTION_DELIMITER.html b/uu_nl/options/constant.SECTION_DELIMITER.html deleted file mode 100644 index 33b96bffe..000000000 --- a/uu_nl/options/constant.SECTION_DELIMITER.html +++ /dev/null @@ -1,3 +0,0 @@ -SECTION_DELIMITER in uu_nl::options - Rust -

Constant uu_nl::options::SECTION_DELIMITER[][src]

pub const SECTION_DELIMITER: &str = "section-delimiter";
- \ No newline at end of file diff --git a/uu_nl/options/constant.STARTING_LINE_NUMBER.html b/uu_nl/options/constant.STARTING_LINE_NUMBER.html deleted file mode 100644 index f909af0c5..000000000 --- a/uu_nl/options/constant.STARTING_LINE_NUMBER.html +++ /dev/null @@ -1,3 +0,0 @@ -STARTING_LINE_NUMBER in uu_nl::options - Rust -

Constant uu_nl::options::STARTING_LINE_NUMBER[][src]

pub const STARTING_LINE_NUMBER: &str = "starting-line-number";
- \ No newline at end of file diff --git a/uu_nl/options/index.html b/uu_nl/options/index.html deleted file mode 100644 index c67512e56..000000000 --- a/uu_nl/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_nl::options - Rust -

Module uu_nl::options[][src]

Constants

-
- \ No newline at end of file diff --git a/uu_nl/options/sidebar-items.js b/uu_nl/options/sidebar-items.js deleted file mode 100644 index c7b571608..000000000 --- a/uu_nl/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["BODY_NUMBERING",""],["FILE",""],["FOOTER_NUMBERING",""],["HEADER_NUMBERING",""],["JOIN_BLANK_LINES",""],["LINE_INCREMENT",""],["NO_RENUMBER",""],["NUMBER_FORMAT",""],["NUMBER_SEPARATOR",""],["NUMBER_WIDTH",""],["SECTION_DELIMITER",""],["STARTING_LINE_NUMBER",""]]}); \ No newline at end of file diff --git a/uu_nl/sidebar-items.js b/uu_nl/sidebar-items.js deleted file mode 100644 index 77f1a8c2d..000000000 --- a/uu_nl/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]],"struct":[["Settings",""]]}); \ No newline at end of file diff --git a/uu_nl/struct.Settings.html b/uu_nl/struct.Settings.html deleted file mode 100644 index 3fd1eaad7..000000000 --- a/uu_nl/struct.Settings.html +++ /dev/null @@ -1,12 +0,0 @@ -Settings in uu_nl - Rust -

Struct uu_nl::Settings[][src]

pub struct Settings { /* fields omitted */ }

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_nohup/all.html b/uu_nohup/all.html deleted file mode 100644 index 283839b50..000000000 --- a/uu_nohup/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_nohup/fn.uu_app.html b/uu_nohup/fn.uu_app.html deleted file mode 100644 index 339392793..000000000 --- a/uu_nohup/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_nohup - Rust -

Function uu_nohup::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_nohup/fn.uumain.html b/uu_nohup/fn.uumain.html deleted file mode 100644 index 6a76970c0..000000000 --- a/uu_nohup/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_nohup - Rust -

Function uu_nohup::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_nohup/index.html b/uu_nohup/index.html deleted file mode 100644 index 9ad459a9b..000000000 --- a/uu_nohup/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_nohup - Rust -

Crate uu_nohup[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_nohup/sidebar-items.js b/uu_nohup/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_nohup/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_nproc/all.html b/uu_nproc/all.html deleted file mode 100644 index 37932eb4c..000000000 --- a/uu_nproc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Constants

- \ No newline at end of file diff --git a/uu_nproc/constant._SC_NPROCESSORS_CONF.html b/uu_nproc/constant._SC_NPROCESSORS_CONF.html deleted file mode 100644 index b835218fc..000000000 --- a/uu_nproc/constant._SC_NPROCESSORS_CONF.html +++ /dev/null @@ -1,3 +0,0 @@ -_SC_NPROCESSORS_CONF in uu_nproc - Rust -

Constant uu_nproc::_SC_NPROCESSORS_CONF[][src]

pub const _SC_NPROCESSORS_CONF: c_int = 83;
- \ No newline at end of file diff --git a/uu_nproc/fn.uu_app.html b/uu_nproc/fn.uu_app.html deleted file mode 100644 index ef5dd9726..000000000 --- a/uu_nproc/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_nproc - Rust -

Function uu_nproc::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_nproc/fn.uumain.html b/uu_nproc/fn.uumain.html deleted file mode 100644 index f3fe57ee8..000000000 --- a/uu_nproc/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_nproc - Rust -

Function uu_nproc::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_nproc/index.html b/uu_nproc/index.html deleted file mode 100644 index 4c6e7b13e..000000000 --- a/uu_nproc/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_nproc - Rust -

Crate uu_nproc[][src]

Constants

-

Functions

-
- \ No newline at end of file diff --git a/uu_nproc/sidebar-items.js b/uu_nproc/sidebar-items.js deleted file mode 100644 index 6e1b5c688..000000000 --- a/uu_nproc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["_SC_NPROCESSORS_CONF",""]],"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_numfmt/all.html b/uu_numfmt/all.html deleted file mode 100644 index 1f03474f1..000000000 --- a/uu_numfmt/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Functions

Constants

- \ No newline at end of file diff --git a/uu_numfmt/errors/enum.NumfmtError.html b/uu_numfmt/errors/enum.NumfmtError.html deleted file mode 100644 index 65411a294..000000000 --- a/uu_numfmt/errors/enum.NumfmtError.html +++ /dev/null @@ -1,25 +0,0 @@ -NumfmtError in uu_numfmt::errors - Rust -

Enum uu_numfmt::errors::NumfmtError[][src]

pub enum NumfmtError {
-    IoError(String),
-    IllegalArgument(String),
-    FormattingError(String),
-}

Variants

IoError(String)

Tuple Fields

0: String

IllegalArgument(String)

Tuple Fields

0: String

FormattingError(String)

Tuple Fields

0: String

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_numfmt/errors/index.html b/uu_numfmt/errors/index.html deleted file mode 100644 index 537501564..000000000 --- a/uu_numfmt/errors/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_numfmt::errors - Rust -

Module uu_numfmt::errors[][src]

Enums

-
- \ No newline at end of file diff --git a/uu_numfmt/errors/sidebar-items.js b/uu_numfmt/errors/sidebar-items.js deleted file mode 100644 index fcf346be9..000000000 --- a/uu_numfmt/errors/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["NumfmtError",""]]}); \ No newline at end of file diff --git a/uu_numfmt/fn.uu_app.html b/uu_numfmt/fn.uu_app.html deleted file mode 100644 index d68be80e7..000000000 --- a/uu_numfmt/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_numfmt - Rust -

Function uu_numfmt::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_numfmt/fn.uumain.html b/uu_numfmt/fn.uumain.html deleted file mode 100644 index 90b003766..000000000 --- a/uu_numfmt/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_numfmt - Rust -

Function uu_numfmt::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_numfmt/format/fn.div_round.html b/uu_numfmt/format/fn.div_round.html deleted file mode 100644 index a97474f48..000000000 --- a/uu_numfmt/format/fn.div_round.html +++ /dev/null @@ -1,24 +0,0 @@ -div_round in uu_numfmt::format - Rust -

Function uu_numfmt::format::div_round[][src]

pub fn div_round(n: f64, d: f64, method: RoundMethod) -> f64
Expand description

Divide numerator by denominator, with rounding.

-

If the result of the division is less than 10.0, round to one decimal point.

-

Otherwise, round to an integer.

-

Examples:

-
use uu_numfmt::format::div_round;
-use uu_numfmt::options::RoundMethod;
-
-// Rounding methods:
-assert_eq!(div_round(1.01, 1.0, RoundMethod::FromZero), 1.1);
-assert_eq!(div_round(1.01, 1.0, RoundMethod::TowardsZero), 1.0);
-assert_eq!(div_round(1.01, 1.0, RoundMethod::Up), 1.1);
-assert_eq!(div_round(1.01, 1.0, RoundMethod::Down), 1.0);
-assert_eq!(div_round(1.01, 1.0, RoundMethod::Nearest), 1.0);
-
-// Division:
-assert_eq!(div_round(999.1, 1000.0, RoundMethod::FromZero), 1.0);
-assert_eq!(div_round(1001., 10., RoundMethod::FromZero), 101.);
-assert_eq!(div_round(9991., 10., RoundMethod::FromZero), 1000.);
-assert_eq!(div_round(-12.34, 1.0, RoundMethod::FromZero), -13.0);
-assert_eq!(div_round(1000.0, -3.14, RoundMethod::FromZero), -319.0);
-assert_eq!(div_round(-271828.0, -271.0, RoundMethod::FromZero), 1004.0);
-
- \ No newline at end of file diff --git a/uu_numfmt/format/fn.format_and_print.html b/uu_numfmt/format/fn.format_and_print.html deleted file mode 100644 index 166990ab1..000000000 --- a/uu_numfmt/format/fn.format_and_print.html +++ /dev/null @@ -1,7 +0,0 @@ -format_and_print in uu_numfmt::format - Rust -

Function uu_numfmt::format::format_and_print[][src]

pub fn format_and_print(s: &str, options: &NumfmtOptions) -> Result<(), String>
Expand description

Format a line of text according to the selected options.

-

Given a line of text s, split the line into fields, transform and format -any selected numeric fields, and print the result to stdout. Fields not -selected for conversion are passed through unmodified.

-
- \ No newline at end of file diff --git a/uu_numfmt/format/index.html b/uu_numfmt/format/index.html deleted file mode 100644 index 8cecc7558..000000000 --- a/uu_numfmt/format/index.html +++ /dev/null @@ -1,10 +0,0 @@ -uu_numfmt::format - Rust -

Module uu_numfmt::format[][src]

Structs

-

Iterate over a line’s fields, where each field is a contiguous sequence of -non-whitespace, optionally prefixed with one or more characters of leading -whitespace. Fields are returned as tuples of (prefix, field).

-

Functions

-

Divide numerator by denominator, with rounding.

-

Format a line of text according to the selected options.

-
- \ No newline at end of file diff --git a/uu_numfmt/format/sidebar-items.js b/uu_numfmt/format/sidebar-items.js deleted file mode 100644 index cb7c6286a..000000000 --- a/uu_numfmt/format/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["div_round","Divide numerator by denominator, with rounding."],["format_and_print","Format a line of text according to the selected options."]],"struct":[["WhitespaceSplitter","Iterate over a line’s fields, where each field is a contiguous sequence of non-whitespace, optionally prefixed with one or more characters of leading whitespace. Fields are returned as tuples of `(prefix, field)`."]]}); \ No newline at end of file diff --git a/uu_numfmt/format/struct.WhitespaceSplitter.html b/uu_numfmt/format/struct.WhitespaceSplitter.html deleted file mode 100644 index 993348df5..000000000 --- a/uu_numfmt/format/struct.WhitespaceSplitter.html +++ /dev/null @@ -1,267 +0,0 @@ -WhitespaceSplitter in uu_numfmt::format - Rust -

Struct uu_numfmt::format::WhitespaceSplitter[][src]

pub struct WhitespaceSplitter<'a> {
-    pub s: Option<&'a str>,
-}
Expand description

Iterate over a line’s fields, where each field is a contiguous sequence of -non-whitespace, optionally prefixed with one or more characters of leading -whitespace. Fields are returned as tuples of (prefix, field).

-

Examples:

-
let mut fields = uu_numfmt::format::WhitespaceSplitter { s: Some("    1234 5") };
-
-assert_eq!(Some(("    ", "1234")), fields.next());
-assert_eq!(Some((" ", "5")), fields.next());
-assert_eq!(None, fields.next());
-

Delimiters are included in the results; prefix will be empty only for -the first field of the line (including the case where the input line is -empty):

- -
let mut fields = uu_numfmt::format::WhitespaceSplitter { s: Some("first second") };
-
-assert_eq!(Some(("", "first")), fields.next());
-assert_eq!(Some((" ", "second")), fields.next());
-
-let mut fields = uu_numfmt::format::WhitespaceSplitter { s: Some("") };
-
-assert_eq!(Some(("", "")), fields.next());
-

Fields

s: Option<&'a str>

Trait Implementations

Yield the next field in the input string as a tuple (prefix, field).

-

The type of the elements being iterated over.

-

Returns the bounds on the remaining length of the iterator. Read more

-

Consumes the iterator, counting the number of iterations and returning it. Read more

-

Consumes the iterator, returning the last element. Read more

-
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

-

Returns the nth element of the iterator. Read more

-

Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

-

Takes two iterators and creates a new iterator over both in sequence. Read more

-

‘Zips up’ two iterators into a single iterator of pairs. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

-

Takes a closure and creates an iterator which calls that closure on each -element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

-

Creates an iterator that both filters and maps. Read more

-

Creates an iterator which gives the current iteration count as well as -the next value. Read more

-

Creates an iterator which can use the peek and peek_mut methods -to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more

-

Creates an iterator that skips elements based on a predicate. Read more

-

Creates an iterator that yields elements based on a predicate. Read more

-

Creates an iterator that both yields elements based on a predicate and maps. Read more

-

Creates an iterator that skips the first n elements. Read more

-

Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

-

An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

-

Creates an iterator that works like map, but flattens nested structure. Read more

-

Creates an iterator that flattens nested structure. Read more

-

Creates an iterator which ends after the first None. Read more

-

Does something with each element of an iterator, passing the value on. Read more

-

Borrows an iterator, rather than consuming it. Read more

-

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, -such that all those that return true precede all those that return false. -Returns the number of true elements found. Read more

-
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more

-

An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

-

Folds every element into an accumulator by applying an operation, -returning the final result. Read more

-

Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

Applies function to the elements of iterator and returns -the first non-none result. Read more

-
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns -the first true result or the first error. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its -index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the -specified function. Read more

-

Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

-

Returns the element that gives the minimum value from the -specified function. Read more

-

Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

-

Reverses an iterator’s direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Creates an iterator which copies all of its elements. Read more

-

Creates an iterator which clones all of its elements. Read more

-

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Determines if the elements of this Iterator are equal to those of -another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

-

Determines if the elements of this Iterator are unequal to those of -another. Read more

-

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type of the elements being iterated over.

-

Which kind of iterator are we turning this into?

-

Creates an iterator from a value. Read more

-

Alternate elements from two iterators until both have run out. Read more

-

Alternate elements from two iterators until at least one of them has run -out. Read more

-

An iterator adaptor to insert a particular value -between each element of the adapted iterator. Read more

-

Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more

-

Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of elements. Read more

-

A “meta iterator adaptor”. Its closure receives a reference to the -iterator and may pick off as many elements as it likes, to produce the -next iterator element. Read more

-

Return an iterable that can group iterator elements. -Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more

-

Return an iterable that can chunk the iterator. Read more

-

Return an iterator over all contiguous windows producing tuples of -a specific size (up to 4). Read more

-

Return an iterator that groups the items in tuples of a specific size -(up to 4). Read more

-

Split into an iterator pair that both yield all elements from -the original iterator. Read more

-
👎 Deprecated since 0.8:

Use std .step_by() instead

-

Return an iterator adaptor that steps n elements in the base iterator -for each iteration. Read more

-

Convert each item of the iterator using the Into trait. Read more

-

Return an iterator adaptor that applies the provided closure -to every Result::Ok value. Result::Err values are -unchanged. Read more

-

Return an iterator adaptor that merges the two base iterators in -ascending order. If both base iterators are sorted (ascending), the -result is sorted. Read more

-

Return an iterator adaptor that merges the two base iterators in order. -This is much like .merge() but allows for a custom ordering. Read more

-

Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more

-

Return an iterator adaptor that flattens an iterator of iterators by -merging them in ascending order. Read more

-

Return an iterator adaptor that flattens an iterator of iterators by -merging them according to the given closure. Read more

-

Return an iterator adaptor that iterates over the cartesian product of -the element sets of two iterators self and J. Read more

-

Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more

-

Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more

-

Remove duplicates from sections of consecutive identical elements. -If the iterator is sorted, all elements will be unique. Read more

-

Remove duplicates from sections of consecutive identical elements, -determining equality using a comparison function. -If the iterator is sorted, all elements will be unique. Read more

-

Return an iterator adaptor that filters out elements that have -already been produced once during the iteration. Duplicates -are detected using hash and equality. Read more

-

Return an iterator adaptor that filters out elements that have -already been produced once during the iteration. Read more

-

Return an iterator adaptor that borrows from this iterator and -takes items while the closure accept returns true. Read more

-

Return an iterator adaptor that borrows from a Clone-able iterator -to only pick off elements while the predicate accept returns true. Read more

-

Return an iterator adaptor that filters Option<A> iterator elements -and produces A. Stops on the first None encountered. Read more

-

Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more

-

Return an iterator adaptor that iterates over the k-length combinations of -the elements from an iterator. Read more

-

Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more

-

Return an iterator adaptor that iterates over all k-permutations of the -elements from an iterator. Read more

-

Return an iterator adaptor that pads the sequence to a minimum length of -min by filling missing elements using a closure f. Read more

-

Return an iterator adaptor that wraps each element in a Position to -ease special-case handling of the first or last elements. Read more

-

Return an iterator adaptor that yields the indices of all elements -satisfying a predicate, counted from the start of the iterator. Read more

-

Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more

-

Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 4). Read more

-

Collects all items from the iterator into a tuple of a specific size -(up to 4). Read more

-

Find the position and value of the first element satisfying a predicate. Read more

-

Check whether all elements compare equal. Read more

-

Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more

-

Consume the last n elements from the iterator eagerly, -and return the same iterator again. Read more

-
👎 Deprecated since 0.8:

Use .for_each() instead

-

Run the closure f eagerly on each element of the iterator. Read more

-

Combine all an iterator’s elements into one element by using Extend. Read more

-

.collect_vec() is simply a type specialization of .collect(), -for convenience. Read more

-

Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more

-

Combine all iterator elements into one String, separated by sep. Read more

-

Format all iterator elements, separated by sep. Read more

-

Format all iterator elements, separated by sep. Read more

-

Fold Result values from an iterator. Read more

-

Fold Option values from an iterator. Read more

-

Accumulator of the elements in the iterator. Read more

-

Accumulate the elements in the iterator in a tree-like manner. Read more

-
👎 Deprecated since 0.8:

Use .try_fold() instead

-

An iterator method that applies a function, producing a single, final value. Read more

-

Iterate over the entire iterator and add all the elements. Read more

-

Iterate over the entire iterator and multiply all the elements. Read more

-

Sort all iterator elements into a new iterator in ascending order. Read more

-

Sort all iterator elements into a new iterator in ascending order. Read more

-

Sort all iterator elements into a new iterator in ascending order. Read more

-

Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more

-

Return a HashMap of keys mapped to Vecs of values. Keys and values -are taken from (Key, Value) tuple pairs yielded by the input iterator. Read more

-

Return the minimum and maximum elements in the iterator. Read more

-

Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more

-

Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more

-

If the iterator yields exactly one element, that element will be returned, otherwise -an error will be returned containing an iterator that has the same output as the input -iterator. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_numfmt/index.html b/uu_numfmt/index.html deleted file mode 100644 index f9f1510f7..000000000 --- a/uu_numfmt/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_numfmt - Rust -

Crate uu_numfmt[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.DELIMITER.html b/uu_numfmt/options/constant.DELIMITER.html deleted file mode 100644 index 25f5ede60..000000000 --- a/uu_numfmt/options/constant.DELIMITER.html +++ /dev/null @@ -1,3 +0,0 @@ -DELIMITER in uu_numfmt::options - Rust -

Constant uu_numfmt::options::DELIMITER[][src]

pub const DELIMITER: &str = "delimiter";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.FIELD.html b/uu_numfmt/options/constant.FIELD.html deleted file mode 100644 index c1637e67d..000000000 --- a/uu_numfmt/options/constant.FIELD.html +++ /dev/null @@ -1,3 +0,0 @@ -FIELD in uu_numfmt::options - Rust -

Constant uu_numfmt::options::FIELD[][src]

pub const FIELD: &str = "field";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.FIELD_DEFAULT.html b/uu_numfmt/options/constant.FIELD_DEFAULT.html deleted file mode 100644 index 3b37406f3..000000000 --- a/uu_numfmt/options/constant.FIELD_DEFAULT.html +++ /dev/null @@ -1,3 +0,0 @@ -FIELD_DEFAULT in uu_numfmt::options - Rust -

Constant uu_numfmt::options::FIELD_DEFAULT[][src]

pub const FIELD_DEFAULT: &str = "1";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.FROM.html b/uu_numfmt/options/constant.FROM.html deleted file mode 100644 index 6daa1d7c7..000000000 --- a/uu_numfmt/options/constant.FROM.html +++ /dev/null @@ -1,3 +0,0 @@ -FROM in uu_numfmt::options - Rust -

Constant uu_numfmt::options::FROM[][src]

pub const FROM: &str = "from";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.FROM_DEFAULT.html b/uu_numfmt/options/constant.FROM_DEFAULT.html deleted file mode 100644 index ebc9c7ec4..000000000 --- a/uu_numfmt/options/constant.FROM_DEFAULT.html +++ /dev/null @@ -1,3 +0,0 @@ -FROM_DEFAULT in uu_numfmt::options - Rust -

Constant uu_numfmt::options::FROM_DEFAULT[][src]

pub const FROM_DEFAULT: &str = "none";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.HEADER.html b/uu_numfmt/options/constant.HEADER.html deleted file mode 100644 index a9765f2c3..000000000 --- a/uu_numfmt/options/constant.HEADER.html +++ /dev/null @@ -1,3 +0,0 @@ -HEADER in uu_numfmt::options - Rust -

Constant uu_numfmt::options::HEADER[][src]

pub const HEADER: &str = "header";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.HEADER_DEFAULT.html b/uu_numfmt/options/constant.HEADER_DEFAULT.html deleted file mode 100644 index 5156b1288..000000000 --- a/uu_numfmt/options/constant.HEADER_DEFAULT.html +++ /dev/null @@ -1,3 +0,0 @@ -HEADER_DEFAULT in uu_numfmt::options - Rust -

Constant uu_numfmt::options::HEADER_DEFAULT[][src]

pub const HEADER_DEFAULT: &str = "1";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.NUMBER.html b/uu_numfmt/options/constant.NUMBER.html deleted file mode 100644 index b92b0f75a..000000000 --- a/uu_numfmt/options/constant.NUMBER.html +++ /dev/null @@ -1,3 +0,0 @@ -NUMBER in uu_numfmt::options - Rust -

Constant uu_numfmt::options::NUMBER[][src]

pub const NUMBER: &str = "NUMBER";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.PADDING.html b/uu_numfmt/options/constant.PADDING.html deleted file mode 100644 index 8758a304b..000000000 --- a/uu_numfmt/options/constant.PADDING.html +++ /dev/null @@ -1,3 +0,0 @@ -PADDING in uu_numfmt::options - Rust -

Constant uu_numfmt::options::PADDING[][src]

pub const PADDING: &str = "padding";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.ROUND.html b/uu_numfmt/options/constant.ROUND.html deleted file mode 100644 index ca450bf53..000000000 --- a/uu_numfmt/options/constant.ROUND.html +++ /dev/null @@ -1,3 +0,0 @@ -ROUND in uu_numfmt::options - Rust -

Constant uu_numfmt::options::ROUND[][src]

pub const ROUND: &str = "round";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.SUFFIX.html b/uu_numfmt/options/constant.SUFFIX.html deleted file mode 100644 index a652d4e81..000000000 --- a/uu_numfmt/options/constant.SUFFIX.html +++ /dev/null @@ -1,3 +0,0 @@ -SUFFIX in uu_numfmt::options - Rust -

Constant uu_numfmt::options::SUFFIX[][src]

pub const SUFFIX: &str = "suffix";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.TO.html b/uu_numfmt/options/constant.TO.html deleted file mode 100644 index e0b907340..000000000 --- a/uu_numfmt/options/constant.TO.html +++ /dev/null @@ -1,3 +0,0 @@ -TO in uu_numfmt::options - Rust -

Constant uu_numfmt::options::TO[][src]

pub const TO: &str = "to";
- \ No newline at end of file diff --git a/uu_numfmt/options/constant.TO_DEFAULT.html b/uu_numfmt/options/constant.TO_DEFAULT.html deleted file mode 100644 index 8ee6b383c..000000000 --- a/uu_numfmt/options/constant.TO_DEFAULT.html +++ /dev/null @@ -1,3 +0,0 @@ -TO_DEFAULT in uu_numfmt::options - Rust -

Constant uu_numfmt::options::TO_DEFAULT[][src]

pub const TO_DEFAULT: &str = "none";
- \ No newline at end of file diff --git a/uu_numfmt/options/enum.RoundMethod.html b/uu_numfmt/options/enum.RoundMethod.html deleted file mode 100644 index 49cf6af32..000000000 --- a/uu_numfmt/options/enum.RoundMethod.html +++ /dev/null @@ -1,23 +0,0 @@ -RoundMethod in uu_numfmt::options - Rust -

Enum uu_numfmt::options::RoundMethod[][src]

pub enum RoundMethod {
-    Up,
-    Down,
-    FromZero,
-    TowardsZero,
-    Nearest,
-}

Variants

Up

Down

FromZero

TowardsZero

Nearest

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_numfmt/options/index.html b/uu_numfmt/options/index.html deleted file mode 100644 index a853b96ed..000000000 --- a/uu_numfmt/options/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_numfmt::options - Rust -

Module uu_numfmt::options[][src]

Structs

-

Enums

-

Constants

-
- \ No newline at end of file diff --git a/uu_numfmt/options/sidebar-items.js b/uu_numfmt/options/sidebar-items.js deleted file mode 100644 index 96316aec2..000000000 --- a/uu_numfmt/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["DELIMITER",""],["FIELD",""],["FIELD_DEFAULT",""],["FROM",""],["FROM_DEFAULT",""],["HEADER",""],["HEADER_DEFAULT",""],["NUMBER",""],["PADDING",""],["ROUND",""],["SUFFIX",""],["TO",""],["TO_DEFAULT",""]],"enum":[["RoundMethod",""]],"struct":[["NumfmtOptions",""],["TransformOptions",""]]}); \ No newline at end of file diff --git a/uu_numfmt/options/struct.NumfmtOptions.html b/uu_numfmt/options/struct.NumfmtOptions.html deleted file mode 100644 index bf162d684..000000000 --- a/uu_numfmt/options/struct.NumfmtOptions.html +++ /dev/null @@ -1,20 +0,0 @@ -NumfmtOptions in uu_numfmt::options - Rust -

Struct uu_numfmt::options::NumfmtOptions[][src]

pub struct NumfmtOptions {
-    pub transform: TransformOptions,
-    pub padding: isize,
-    pub header: usize,
-    pub fields: Vec<Range>,
-    pub delimiter: Option<String>,
-    pub round: RoundMethod,
-    pub suffix: Option<String>,
-}

Fields

transform: TransformOptionspadding: isizeheader: usizefields: Vec<Range>delimiter: Option<String>round: RoundMethodsuffix: Option<String>

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_numfmt/options/struct.TransformOptions.html b/uu_numfmt/options/struct.TransformOptions.html deleted file mode 100644 index 0fb81fbf8..000000000 --- a/uu_numfmt/options/struct.TransformOptions.html +++ /dev/null @@ -1,15 +0,0 @@ -TransformOptions in uu_numfmt::options - Rust -

Struct uu_numfmt::options::TransformOptions[][src]

pub struct TransformOptions {
-    pub from: Unit,
-    pub to: Unit,
-}

Fields

from: Unitto: Unit

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_numfmt/sidebar-items.js b/uu_numfmt/sidebar-items.js deleted file mode 100644 index 3b5ef2187..000000000 --- a/uu_numfmt/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["errors",""],["format",""],["options",""]]}); \ No newline at end of file diff --git a/uu_od/all.html b/uu_od/all.html deleted file mode 100644 index fbab12d8c..000000000 --- a/uu_od/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_od/fn.uu_app.html b/uu_od/fn.uu_app.html deleted file mode 100644 index fc8386fe1..000000000 --- a/uu_od/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_od - Rust -

Function uu_od::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_od/fn.uumain.html b/uu_od/fn.uumain.html deleted file mode 100644 index 89c87a013..000000000 --- a/uu_od/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_od - Rust -

Function uu_od::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_od/index.html b/uu_od/index.html deleted file mode 100644 index 06a82a05b..000000000 --- a/uu_od/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_od - Rust -

Crate uu_od[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_od/sidebar-items.js b/uu_od/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_od/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_paste/all.html b/uu_paste/all.html deleted file mode 100644 index cc338d119..000000000 --- a/uu_paste/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_paste/fn.uu_app.html b/uu_paste/fn.uu_app.html deleted file mode 100644 index c20ea2e04..000000000 --- a/uu_paste/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_paste - Rust -

Function uu_paste::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_paste/fn.uumain.html b/uu_paste/fn.uumain.html deleted file mode 100644 index 3bb9bb5d3..000000000 --- a/uu_paste/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_paste - Rust -

Function uu_paste::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_paste/index.html b/uu_paste/index.html deleted file mode 100644 index 8c076573c..000000000 --- a/uu_paste/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_paste - Rust -

Crate uu_paste[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_paste/sidebar-items.js b/uu_paste/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_paste/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_pathchk/all.html b/uu_pathchk/all.html deleted file mode 100644 index e43f312d5..000000000 --- a/uu_pathchk/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_pathchk/fn.uu_app.html b/uu_pathchk/fn.uu_app.html deleted file mode 100644 index b653079c1..000000000 --- a/uu_pathchk/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_pathchk - Rust -

Function uu_pathchk::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_pathchk/fn.uumain.html b/uu_pathchk/fn.uumain.html deleted file mode 100644 index 413bf50cd..000000000 --- a/uu_pathchk/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_pathchk - Rust -

Function uu_pathchk::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_pathchk/index.html b/uu_pathchk/index.html deleted file mode 100644 index ecd0e27f9..000000000 --- a/uu_pathchk/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_pathchk - Rust -

Crate uu_pathchk[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_pathchk/sidebar-items.js b/uu_pathchk/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_pathchk/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_pinky/all.html b/uu_pinky/all.html deleted file mode 100644 index fbd7e5fd0..000000000 --- a/uu_pinky/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Traits

Functions

- \ No newline at end of file diff --git a/uu_pinky/fn.uu_app.html b/uu_pinky/fn.uu_app.html deleted file mode 100644 index e0af289e5..000000000 --- a/uu_pinky/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_pinky - Rust -

Function uu_pinky::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_pinky/fn.uumain.html b/uu_pinky/fn.uumain.html deleted file mode 100644 index 9c0e3fbe4..000000000 --- a/uu_pinky/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_pinky - Rust -

Function uu_pinky::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_pinky/index.html b/uu_pinky/index.html deleted file mode 100644 index d69357d62..000000000 --- a/uu_pinky/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_pinky - Rust -

Crate uu_pinky[][src]

Traits

-

Functions

-
- \ No newline at end of file diff --git a/uu_pinky/sidebar-items.js b/uu_pinky/sidebar-items.js deleted file mode 100644 index 542aa165b..000000000 --- a/uu_pinky/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"trait":[["Capitalize",""]]}); \ No newline at end of file diff --git a/uu_pinky/trait.Capitalize.html b/uu_pinky/trait.Capitalize.html deleted file mode 100644 index dfea01c4b..000000000 --- a/uu_pinky/trait.Capitalize.html +++ /dev/null @@ -1,5 +0,0 @@ -Capitalize in uu_pinky - Rust -

Trait uu_pinky::Capitalize[][src]

pub trait Capitalize {
-    fn capitalize(&self) -> String;
-}

Required methods

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uu_pr/all.html b/uu_pr/all.html deleted file mode 100644 index dfc451c90..000000000 --- a/uu_pr/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_pr/fn.uu_app.html b/uu_pr/fn.uu_app.html deleted file mode 100644 index d419bbe6f..000000000 --- a/uu_pr/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_pr - Rust -

Function uu_pr::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_pr/fn.uumain.html b/uu_pr/fn.uumain.html deleted file mode 100644 index 46f30962d..000000000 --- a/uu_pr/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_pr - Rust -

Function uu_pr::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_pr/index.html b/uu_pr/index.html deleted file mode 100644 index be7c7b262..000000000 --- a/uu_pr/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_pr - Rust -

Crate uu_pr[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_pr/sidebar-items.js b/uu_pr/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_pr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_printenv/all.html b/uu_printenv/all.html deleted file mode 100644 index 3e0e5df3d..000000000 --- a/uu_printenv/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_printenv/fn.uu_app.html b/uu_printenv/fn.uu_app.html deleted file mode 100644 index dd3f43370..000000000 --- a/uu_printenv/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_printenv - Rust -

Function uu_printenv::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_printenv/fn.uumain.html b/uu_printenv/fn.uumain.html deleted file mode 100644 index edab9459f..000000000 --- a/uu_printenv/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_printenv - Rust -

Function uu_printenv::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_printenv/index.html b/uu_printenv/index.html deleted file mode 100644 index fa3de6601..000000000 --- a/uu_printenv/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_printenv - Rust -

Crate uu_printenv[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_printenv/sidebar-items.js b/uu_printenv/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_printenv/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_printf/all.html b/uu_printf/all.html deleted file mode 100644 index 2b70bbe44..000000000 --- a/uu_printf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_printf/fn.uu_app.html b/uu_printf/fn.uu_app.html deleted file mode 100644 index 10a09f04a..000000000 --- a/uu_printf/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_printf - Rust -

Function uu_printf::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_printf/fn.uumain.html b/uu_printf/fn.uumain.html deleted file mode 100644 index a3e2acbd7..000000000 --- a/uu_printf/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_printf - Rust -

Function uu_printf::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_printf/index.html b/uu_printf/index.html deleted file mode 100644 index 556c08b74..000000000 --- a/uu_printf/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_printf - Rust -

Crate uu_printf[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_printf/sidebar-items.js b/uu_printf/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_printf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_ptx/all.html b/uu_ptx/all.html deleted file mode 100644 index 9898f3563..000000000 --- a/uu_ptx/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_ptx/fn.uu_app.html b/uu_ptx/fn.uu_app.html deleted file mode 100644 index 5527dea02..000000000 --- a/uu_ptx/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_ptx - Rust -

Function uu_ptx::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_ptx/fn.uumain.html b/uu_ptx/fn.uumain.html deleted file mode 100644 index b010aea77..000000000 --- a/uu_ptx/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_ptx - Rust -

Function uu_ptx::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_ptx/index.html b/uu_ptx/index.html deleted file mode 100644 index 9f4c9d6cf..000000000 --- a/uu_ptx/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_ptx - Rust -

Crate uu_ptx[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_ptx/sidebar-items.js b/uu_ptx/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_ptx/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_pwd/all.html b/uu_pwd/all.html deleted file mode 100644 index d5c5470e8..000000000 --- a/uu_pwd/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_pwd/fn.uu_app.html b/uu_pwd/fn.uu_app.html deleted file mode 100644 index 0674fbbf9..000000000 --- a/uu_pwd/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_pwd - Rust -

Function uu_pwd::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_pwd/fn.uumain.html b/uu_pwd/fn.uumain.html deleted file mode 100644 index d70f45ecd..000000000 --- a/uu_pwd/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_pwd - Rust -

Function uu_pwd::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_pwd/index.html b/uu_pwd/index.html deleted file mode 100644 index f833518c7..000000000 --- a/uu_pwd/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_pwd - Rust -

Crate uu_pwd[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_pwd/sidebar-items.js b/uu_pwd/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_pwd/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_readlink/all.html b/uu_readlink/all.html deleted file mode 100644 index e941a60b6..000000000 --- a/uu_readlink/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_readlink/fn.uu_app.html b/uu_readlink/fn.uu_app.html deleted file mode 100644 index 70e99ce80..000000000 --- a/uu_readlink/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_readlink - Rust -

Function uu_readlink::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_readlink/fn.uumain.html b/uu_readlink/fn.uumain.html deleted file mode 100644 index c4ed019c5..000000000 --- a/uu_readlink/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_readlink - Rust -

Function uu_readlink::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_readlink/index.html b/uu_readlink/index.html deleted file mode 100644 index 0769013cd..000000000 --- a/uu_readlink/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_readlink - Rust -

Crate uu_readlink[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_readlink/sidebar-items.js b/uu_readlink/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_readlink/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_realpath/all.html b/uu_realpath/all.html deleted file mode 100644 index c3698f7c6..000000000 --- a/uu_realpath/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_realpath/fn.uu_app.html b/uu_realpath/fn.uu_app.html deleted file mode 100644 index 86620610b..000000000 --- a/uu_realpath/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_realpath - Rust -

Function uu_realpath::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_realpath/fn.uumain.html b/uu_realpath/fn.uumain.html deleted file mode 100644 index 9d3cc52fd..000000000 --- a/uu_realpath/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_realpath - Rust -

Function uu_realpath::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_realpath/index.html b/uu_realpath/index.html deleted file mode 100644 index 028ac9506..000000000 --- a/uu_realpath/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_realpath - Rust -

Crate uu_realpath[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_realpath/sidebar-items.js b/uu_realpath/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_realpath/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_relpath/all.html b/uu_relpath/all.html deleted file mode 100644 index de7b40492..000000000 --- a/uu_relpath/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_relpath/fn.uu_app.html b/uu_relpath/fn.uu_app.html deleted file mode 100644 index e6189d822..000000000 --- a/uu_relpath/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_relpath - Rust -

Function uu_relpath::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_relpath/fn.uumain.html b/uu_relpath/fn.uumain.html deleted file mode 100644 index f389b204e..000000000 --- a/uu_relpath/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_relpath - Rust -

Function uu_relpath::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_relpath/index.html b/uu_relpath/index.html deleted file mode 100644 index 9ddaf74e8..000000000 --- a/uu_relpath/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_relpath - Rust -

Crate uu_relpath[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_relpath/sidebar-items.js b/uu_relpath/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_relpath/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_rm/all.html b/uu_rm/all.html deleted file mode 100644 index b7bf0d5d2..000000000 --- a/uu_rm/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_rm/fn.uu_app.html b/uu_rm/fn.uu_app.html deleted file mode 100644 index 8efdd8efe..000000000 --- a/uu_rm/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_rm - Rust -

Function uu_rm::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_rm/fn.uumain.html b/uu_rm/fn.uumain.html deleted file mode 100644 index 00114918c..000000000 --- a/uu_rm/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_rm - Rust -

Function uu_rm::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_rm/index.html b/uu_rm/index.html deleted file mode 100644 index a0890f73e..000000000 --- a/uu_rm/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_rm - Rust -

Crate uu_rm[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_rm/sidebar-items.js b/uu_rm/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_rm/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_rmdir/all.html b/uu_rmdir/all.html deleted file mode 100644 index 648a60158..000000000 --- a/uu_rmdir/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_rmdir/fn.uu_app.html b/uu_rmdir/fn.uu_app.html deleted file mode 100644 index 6dfe431ee..000000000 --- a/uu_rmdir/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_rmdir - Rust -

Function uu_rmdir::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_rmdir/fn.uumain.html b/uu_rmdir/fn.uumain.html deleted file mode 100644 index 7aa28f6c1..000000000 --- a/uu_rmdir/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_rmdir - Rust -

Function uu_rmdir::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_rmdir/index.html b/uu_rmdir/index.html deleted file mode 100644 index 635acfc8a..000000000 --- a/uu_rmdir/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_rmdir - Rust -

Crate uu_rmdir[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_rmdir/sidebar-items.js b/uu_rmdir/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_rmdir/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_runcon/all.html b/uu_runcon/all.html deleted file mode 100644 index d23f0b19b..000000000 --- a/uu_runcon/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Constants

- \ No newline at end of file diff --git a/uu_runcon/fn.uu_app.html b/uu_runcon/fn.uu_app.html deleted file mode 100644 index 32388e2c1..000000000 --- a/uu_runcon/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_runcon - Rust -

Function uu_runcon::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_runcon/fn.uumain.html b/uu_runcon/fn.uumain.html deleted file mode 100644 index 2c99fa7ee..000000000 --- a/uu_runcon/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_runcon - Rust -

Function uu_runcon::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_runcon/index.html b/uu_runcon/index.html deleted file mode 100644 index 7d4ca09f6..000000000 --- a/uu_runcon/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_runcon - Rust -

Crate uu_runcon[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_runcon/options/constant.COMPUTE.html b/uu_runcon/options/constant.COMPUTE.html deleted file mode 100644 index d7d7ebbbe..000000000 --- a/uu_runcon/options/constant.COMPUTE.html +++ /dev/null @@ -1,3 +0,0 @@ -COMPUTE in uu_runcon::options - Rust -

Constant uu_runcon::options::COMPUTE[][src]

pub const COMPUTE: &str = "compute";
- \ No newline at end of file diff --git a/uu_runcon/options/constant.RANGE.html b/uu_runcon/options/constant.RANGE.html deleted file mode 100644 index 723703058..000000000 --- a/uu_runcon/options/constant.RANGE.html +++ /dev/null @@ -1,3 +0,0 @@ -RANGE in uu_runcon::options - Rust -

Constant uu_runcon::options::RANGE[][src]

pub const RANGE: &str = "range";
- \ No newline at end of file diff --git a/uu_runcon/options/constant.ROLE.html b/uu_runcon/options/constant.ROLE.html deleted file mode 100644 index 0632801c6..000000000 --- a/uu_runcon/options/constant.ROLE.html +++ /dev/null @@ -1,3 +0,0 @@ -ROLE in uu_runcon::options - Rust -

Constant uu_runcon::options::ROLE[][src]

pub const ROLE: &str = "role";
- \ No newline at end of file diff --git a/uu_runcon/options/constant.TYPE.html b/uu_runcon/options/constant.TYPE.html deleted file mode 100644 index 3a0403f18..000000000 --- a/uu_runcon/options/constant.TYPE.html +++ /dev/null @@ -1,3 +0,0 @@ -TYPE in uu_runcon::options - Rust -

Constant uu_runcon::options::TYPE[][src]

pub const TYPE: &str = "type";
- \ No newline at end of file diff --git a/uu_runcon/options/constant.USER.html b/uu_runcon/options/constant.USER.html deleted file mode 100644 index 9e8c2e3cf..000000000 --- a/uu_runcon/options/constant.USER.html +++ /dev/null @@ -1,3 +0,0 @@ -USER in uu_runcon::options - Rust -

Constant uu_runcon::options::USER[][src]

pub const USER: &str = "user";
- \ No newline at end of file diff --git a/uu_runcon/options/index.html b/uu_runcon/options/index.html deleted file mode 100644 index 1f046049c..000000000 --- a/uu_runcon/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_runcon::options - Rust -

Module uu_runcon::options[][src]

Constants

-
- \ No newline at end of file diff --git a/uu_runcon/options/sidebar-items.js b/uu_runcon/options/sidebar-items.js deleted file mode 100644 index a94cb3a65..000000000 --- a/uu_runcon/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["COMPUTE",""],["RANGE",""],["ROLE",""],["TYPE",""],["USER",""]]}); \ No newline at end of file diff --git a/uu_runcon/sidebar-items.js b/uu_runcon/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_runcon/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_seq/all.html b/uu_seq/all.html deleted file mode 100644 index aa72a6b26..000000000 --- a/uu_seq/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_seq/fn.uu_app.html b/uu_seq/fn.uu_app.html deleted file mode 100644 index 27b849346..000000000 --- a/uu_seq/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_seq - Rust -

Function uu_seq::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_seq/fn.uumain.html b/uu_seq/fn.uumain.html deleted file mode 100644 index f9f4bc767..000000000 --- a/uu_seq/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_seq - Rust -

Function uu_seq::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_seq/index.html b/uu_seq/index.html deleted file mode 100644 index 01caba795..000000000 --- a/uu_seq/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_seq - Rust -

Crate uu_seq[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_seq/sidebar-items.js b/uu_seq/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_seq/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_shred/all.html b/uu_shred/all.html deleted file mode 100644 index b46dd05ec..000000000 --- a/uu_shred/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Constants

- \ No newline at end of file diff --git a/uu_shred/fn.uu_app.html b/uu_shred/fn.uu_app.html deleted file mode 100644 index aeedba1e5..000000000 --- a/uu_shred/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_shred - Rust -

Function uu_shred::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_shred/fn.uumain.html b/uu_shred/fn.uumain.html deleted file mode 100644 index c1941d7fb..000000000 --- a/uu_shred/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_shred - Rust -

Function uu_shred::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_shred/index.html b/uu_shred/index.html deleted file mode 100644 index 687730578..000000000 --- a/uu_shred/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_shred - Rust -

Crate uu_shred[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_shred/options/constant.EXACT.html b/uu_shred/options/constant.EXACT.html deleted file mode 100644 index 0a6bbd77f..000000000 --- a/uu_shred/options/constant.EXACT.html +++ /dev/null @@ -1,3 +0,0 @@ -EXACT in uu_shred::options - Rust -

Constant uu_shred::options::EXACT[][src]

pub const EXACT: &str = "exact";
- \ No newline at end of file diff --git a/uu_shred/options/constant.FILE.html b/uu_shred/options/constant.FILE.html deleted file mode 100644 index 1de093f7d..000000000 --- a/uu_shred/options/constant.FILE.html +++ /dev/null @@ -1,3 +0,0 @@ -FILE in uu_shred::options - Rust -

Constant uu_shred::options::FILE[][src]

pub const FILE: &str = "file";
- \ No newline at end of file diff --git a/uu_shred/options/constant.FORCE.html b/uu_shred/options/constant.FORCE.html deleted file mode 100644 index 58410df54..000000000 --- a/uu_shred/options/constant.FORCE.html +++ /dev/null @@ -1,3 +0,0 @@ -FORCE in uu_shred::options - Rust -

Constant uu_shred::options::FORCE[][src]

pub const FORCE: &str = "force";
- \ No newline at end of file diff --git a/uu_shred/options/constant.ITERATIONS.html b/uu_shred/options/constant.ITERATIONS.html deleted file mode 100644 index 546e9f1be..000000000 --- a/uu_shred/options/constant.ITERATIONS.html +++ /dev/null @@ -1,3 +0,0 @@ -ITERATIONS in uu_shred::options - Rust -

Constant uu_shred::options::ITERATIONS[][src]

pub const ITERATIONS: &str = "iterations";
- \ No newline at end of file diff --git a/uu_shred/options/constant.REMOVE.html b/uu_shred/options/constant.REMOVE.html deleted file mode 100644 index 1df641c57..000000000 --- a/uu_shred/options/constant.REMOVE.html +++ /dev/null @@ -1,3 +0,0 @@ -REMOVE in uu_shred::options - Rust -

Constant uu_shred::options::REMOVE[][src]

pub const REMOVE: &str = "remove";
- \ No newline at end of file diff --git a/uu_shred/options/constant.SIZE.html b/uu_shred/options/constant.SIZE.html deleted file mode 100644 index a18dfa129..000000000 --- a/uu_shred/options/constant.SIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -SIZE in uu_shred::options - Rust -

Constant uu_shred::options::SIZE[][src]

pub const SIZE: &str = "size";
- \ No newline at end of file diff --git a/uu_shred/options/constant.VERBOSE.html b/uu_shred/options/constant.VERBOSE.html deleted file mode 100644 index 95d903af6..000000000 --- a/uu_shred/options/constant.VERBOSE.html +++ /dev/null @@ -1,3 +0,0 @@ -VERBOSE in uu_shred::options - Rust -

Constant uu_shred::options::VERBOSE[][src]

pub const VERBOSE: &str = "verbose";
- \ No newline at end of file diff --git a/uu_shred/options/constant.ZERO.html b/uu_shred/options/constant.ZERO.html deleted file mode 100644 index 167ac2230..000000000 --- a/uu_shred/options/constant.ZERO.html +++ /dev/null @@ -1,3 +0,0 @@ -ZERO in uu_shred::options - Rust -

Constant uu_shred::options::ZERO[][src]

pub const ZERO: &str = "zero";
- \ No newline at end of file diff --git a/uu_shred/options/index.html b/uu_shred/options/index.html deleted file mode 100644 index 851f2ef0c..000000000 --- a/uu_shred/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_shred::options - Rust -

Module uu_shred::options[][src]

Constants

-
- \ No newline at end of file diff --git a/uu_shred/options/sidebar-items.js b/uu_shred/options/sidebar-items.js deleted file mode 100644 index 2bc72aef5..000000000 --- a/uu_shred/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["EXACT",""],["FILE",""],["FORCE",""],["ITERATIONS",""],["REMOVE",""],["SIZE",""],["VERBOSE",""],["ZERO",""]]}); \ No newline at end of file diff --git a/uu_shred/sidebar-items.js b/uu_shred/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_shred/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_shuf/all.html b/uu_shuf/all.html deleted file mode 100644 index 60b0a1bee..000000000 --- a/uu_shuf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_shuf/fn.uu_app.html b/uu_shuf/fn.uu_app.html deleted file mode 100644 index 8954f0bba..000000000 --- a/uu_shuf/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_shuf - Rust -

Function uu_shuf::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_shuf/fn.uumain.html b/uu_shuf/fn.uumain.html deleted file mode 100644 index a5eb11055..000000000 --- a/uu_shuf/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_shuf - Rust -

Function uu_shuf::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_shuf/index.html b/uu_shuf/index.html deleted file mode 100644 index d7aa04bf5..000000000 --- a/uu_shuf/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_shuf - Rust -

Crate uu_shuf[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_shuf/sidebar-items.js b/uu_shuf/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_shuf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_sleep/all.html b/uu_sleep/all.html deleted file mode 100644 index 1e6f2b234..000000000 --- a/uu_sleep/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_sleep/fn.uu_app.html b/uu_sleep/fn.uu_app.html deleted file mode 100644 index d4b9dbca8..000000000 --- a/uu_sleep/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_sleep - Rust -

Function uu_sleep::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_sleep/fn.uumain.html b/uu_sleep/fn.uumain.html deleted file mode 100644 index 0ebd39129..000000000 --- a/uu_sleep/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_sleep - Rust -

Function uu_sleep::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_sleep/index.html b/uu_sleep/index.html deleted file mode 100644 index a398b2be5..000000000 --- a/uu_sleep/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_sleep - Rust -

Crate uu_sleep[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_sleep/sidebar-items.js b/uu_sleep/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_sleep/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_sort/all.html b/uu_sort/all.html deleted file mode 100644 index 7b43c0cff..000000000 --- a/uu_sort/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Functions

- \ No newline at end of file diff --git a/uu_sort/enum.GeneralF64ParseResult.html b/uu_sort/enum.GeneralF64ParseResult.html deleted file mode 100644 index 554f68270..000000000 --- a/uu_sort/enum.GeneralF64ParseResult.html +++ /dev/null @@ -1,40 +0,0 @@ -GeneralF64ParseResult in uu_sort - Rust -

Enum uu_sort::GeneralF64ParseResult[][src]

pub enum GeneralF64ParseResult {
-    Invalid,
-    NaN,
-    NegInfinity,
-    Number(f64),
-    Infinity,
-}

Variants

Invalid

NaN

NegInfinity

Number(f64)

Tuple Fields

0: f64

Infinity

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

This method returns an ordering between self and other values if one exists. Read more

-

This method tests less than (for self and other) and is used by the < operator. Read more

-

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

-

This method tests greater than (for self and other) and is used by the > operator. Read more

-

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The alignment of pointer.

-

The type for initializers.

-

Initializes a with the given initializer. Read more

-

Dereferences the given pointer. Read more

-

Mutably dereferences the given pointer. Read more

-

Drops the object pointed to by the given pointer. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_sort/fn.uu_app.html b/uu_sort/fn.uu_app.html deleted file mode 100644 index 07ff3e996..000000000 --- a/uu_sort/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_sort - Rust -

Function uu_sort::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_sort/fn.uumain.html b/uu_sort/fn.uumain.html deleted file mode 100644 index 9bcfd60b0..000000000 --- a/uu_sort/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_sort - Rust -

Function uu_sort::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_sort/index.html b/uu_sort/index.html deleted file mode 100644 index 54eab9f35..000000000 --- a/uu_sort/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_sort - Rust -

Crate uu_sort[][src]

Structs

-

Enums

-

Functions

-
- \ No newline at end of file diff --git a/uu_sort/sidebar-items.js b/uu_sort/sidebar-items.js deleted file mode 100644 index 7dd5c4c0c..000000000 --- a/uu_sort/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["GeneralF64ParseResult",""]],"fn":[["uu_app",""],["uumain",""]],"struct":[["GlobalSettings",""],["Line",""],["Output",""]]}); \ No newline at end of file diff --git a/uu_sort/struct.GlobalSettings.html b/uu_sort/struct.GlobalSettings.html deleted file mode 100644 index e16b4e561..000000000 --- a/uu_sort/struct.GlobalSettings.html +++ /dev/null @@ -1,24 +0,0 @@ -GlobalSettings in uu_sort - Rust -

Struct uu_sort::GlobalSettings[][src]

pub struct GlobalSettings { /* fields omitted */ }

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Returns the “default value” for a type. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The alignment of pointer.

-

The type for initializers.

-

Initializes a with the given initializer. Read more

-

Dereferences the given pointer. Read more

-

Mutably dereferences the given pointer. Read more

-

Drops the object pointed to by the given pointer. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_sort/struct.Line.html b/uu_sort/struct.Line.html deleted file mode 100644 index 692e5c94f..000000000 --- a/uu_sort/struct.Line.html +++ /dev/null @@ -1,24 +0,0 @@ -Line in uu_sort - Rust -

Struct uu_sort::Line[][src]

pub struct Line<'a> { /* fields omitted */ }

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The alignment of pointer.

-

The type for initializers.

-

Initializes a with the given initializer. Read more

-

Dereferences the given pointer. Read more

-

Mutably dereferences the given pointer. Read more

-

Drops the object pointed to by the given pointer. Read more

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_sort/struct.Output.html b/uu_sort/struct.Output.html deleted file mode 100644 index 154bd4618..000000000 --- a/uu_sort/struct.Output.html +++ /dev/null @@ -1,18 +0,0 @@ -Output in uu_sort - Rust -

Struct uu_sort::Output[][src]

pub struct Output { /* fields omitted */ }

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The alignment of pointer.

-

The type for initializers.

-

Initializes a with the given initializer. Read more

-

Dereferences the given pointer. Read more

-

Mutably dereferences the given pointer. Read more

-

Drops the object pointed to by the given pointer. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_split/all.html b/uu_split/all.html deleted file mode 100644 index 9dc3ffe53..000000000 --- a/uu_split/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_split/fn.uu_app.html b/uu_split/fn.uu_app.html deleted file mode 100644 index 75d03f71e..000000000 --- a/uu_split/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_split - Rust -

Function uu_split::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_split/fn.uumain.html b/uu_split/fn.uumain.html deleted file mode 100644 index b82c726c3..000000000 --- a/uu_split/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_split - Rust -

Function uu_split::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_split/index.html b/uu_split/index.html deleted file mode 100644 index 7fa7ca881..000000000 --- a/uu_split/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_split - Rust -

Crate uu_split[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_split/sidebar-items.js b/uu_split/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_split/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_stat/all.html b/uu_stat/all.html deleted file mode 100644 index 0aab97f86..000000000 --- a/uu_stat/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Traits

Functions

Statics

Constants

- \ No newline at end of file diff --git a/uu_stat/constant.F_ALTER.html b/uu_stat/constant.F_ALTER.html deleted file mode 100644 index 5f3bd4b43..000000000 --- a/uu_stat/constant.F_ALTER.html +++ /dev/null @@ -1,3 +0,0 @@ -F_ALTER in uu_stat - Rust -

Constant uu_stat::F_ALTER[][src]

pub const F_ALTER: u8 = 1;
- \ No newline at end of file diff --git a/uu_stat/constant.F_GROUP.html b/uu_stat/constant.F_GROUP.html deleted file mode 100644 index 4bde41513..000000000 --- a/uu_stat/constant.F_GROUP.html +++ /dev/null @@ -1,3 +0,0 @@ -F_GROUP in uu_stat - Rust -

Constant uu_stat::F_GROUP[][src]

pub const F_GROUP: u8 = 1 << 5; // 0x20u8
- \ No newline at end of file diff --git a/uu_stat/constant.F_LEFT.html b/uu_stat/constant.F_LEFT.html deleted file mode 100644 index bbe87f81d..000000000 --- a/uu_stat/constant.F_LEFT.html +++ /dev/null @@ -1,3 +0,0 @@ -F_LEFT in uu_stat - Rust -

Constant uu_stat::F_LEFT[][src]

pub const F_LEFT: u8 = 1 << 2; // 0x04u8
- \ No newline at end of file diff --git a/uu_stat/constant.F_SIGN.html b/uu_stat/constant.F_SIGN.html deleted file mode 100644 index a65422e66..000000000 --- a/uu_stat/constant.F_SIGN.html +++ /dev/null @@ -1,3 +0,0 @@ -F_SIGN in uu_stat - Rust -

Constant uu_stat::F_SIGN[][src]

pub const F_SIGN: u8 = 1 << 4; // 0x10u8
- \ No newline at end of file diff --git a/uu_stat/constant.F_SPACE.html b/uu_stat/constant.F_SPACE.html deleted file mode 100644 index ca2008a58..000000000 --- a/uu_stat/constant.F_SPACE.html +++ /dev/null @@ -1,3 +0,0 @@ -F_SPACE in uu_stat - Rust -

Constant uu_stat::F_SPACE[][src]

pub const F_SPACE: u8 = 1 << 3; // 0x08u8
- \ No newline at end of file diff --git a/uu_stat/constant.F_ZERO.html b/uu_stat/constant.F_ZERO.html deleted file mode 100644 index d14d22fc3..000000000 --- a/uu_stat/constant.F_ZERO.html +++ /dev/null @@ -1,3 +0,0 @@ -F_ZERO in uu_stat - Rust -

Constant uu_stat::F_ZERO[][src]

pub const F_ZERO: u8 = 1 << 1; // 0x02u8
- \ No newline at end of file diff --git a/uu_stat/enum.OutputType.html b/uu_stat/enum.OutputType.html deleted file mode 100644 index d6291771d..000000000 --- a/uu_stat/enum.OutputType.html +++ /dev/null @@ -1,23 +0,0 @@ -OutputType in uu_stat - Rust -

Enum uu_stat::OutputType[][src]

pub enum OutputType {
-    Str,
-    Integer,
-    Unsigned,
-    UnsignedHex,
-    UnsignedOct,
-    Unknown,
-}

Variants

Str

Integer

Unsigned

UnsignedHex

UnsignedOct

Unknown

Trait Implementations

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_stat/enum.Token.html b/uu_stat/enum.Token.html deleted file mode 100644 index 405c745bd..000000000 --- a/uu_stat/enum.Token.html +++ /dev/null @@ -1,24 +0,0 @@ -Token in uu_stat - Rust -

Enum uu_stat::Token[][src]

pub enum Token {
-    Char(char),
-    Directive {
-        flag: u8,
-        width: usize,
-        precision: i32,
-        format: char,
-    },
-}

Variants

Char(char)

Tuple Fields

0: char

Directive

Fields

flag: u8
width: usize
precision: i32
format: char

Trait Implementations

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_stat/fn.group_num.html b/uu_stat/fn.group_num.html deleted file mode 100644 index 73fde960a..000000000 --- a/uu_stat/fn.group_num.html +++ /dev/null @@ -1,3 +0,0 @@ -group_num in uu_stat - Rust -

Function uu_stat::group_num[][src]

pub fn group_num(s: &str) -> Cow<'_, str>
- \ No newline at end of file diff --git a/uu_stat/fn.uu_app.html b/uu_stat/fn.uu_app.html deleted file mode 100644 index 47e289592..000000000 --- a/uu_stat/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_stat - Rust -

Function uu_stat::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_stat/fn.uumain.html b/uu_stat/fn.uumain.html deleted file mode 100644 index 2366d760f..000000000 --- a/uu_stat/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_stat - Rust -

Function uu_stat::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_stat/index.html b/uu_stat/index.html deleted file mode 100644 index 763833148..000000000 --- a/uu_stat/index.html +++ /dev/null @@ -1,9 +0,0 @@ -uu_stat - Rust -

Crate uu_stat[][src]

Modules

-

Structs

-

Enums

-

Constants

-

Traits

-

Functions

-
- \ No newline at end of file diff --git a/uu_stat/options/index.html b/uu_stat/options/index.html deleted file mode 100644 index d0771b8a4..000000000 --- a/uu_stat/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_stat::options - Rust -

Module uu_stat::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_stat/options/sidebar-items.js b/uu_stat/options/sidebar-items.js deleted file mode 100644 index 921447529..000000000 --- a/uu_stat/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["DEREFERENCE",""],["FILE_SYSTEM",""],["FORMAT",""],["PRINTF",""],["TERSE",""]]}); \ No newline at end of file diff --git a/uu_stat/options/static.DEREFERENCE.html b/uu_stat/options/static.DEREFERENCE.html deleted file mode 100644 index 8c76c2083..000000000 --- a/uu_stat/options/static.DEREFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -DEREFERENCE in uu_stat::options - Rust -

Static uu_stat::options::DEREFERENCE[][src]

pub static DEREFERENCE: &str
- \ No newline at end of file diff --git a/uu_stat/options/static.FILE_SYSTEM.html b/uu_stat/options/static.FILE_SYSTEM.html deleted file mode 100644 index 4826d7ffe..000000000 --- a/uu_stat/options/static.FILE_SYSTEM.html +++ /dev/null @@ -1,3 +0,0 @@ -FILE_SYSTEM in uu_stat::options - Rust -

Static uu_stat::options::FILE_SYSTEM[][src]

pub static FILE_SYSTEM: &str
- \ No newline at end of file diff --git a/uu_stat/options/static.FORMAT.html b/uu_stat/options/static.FORMAT.html deleted file mode 100644 index fa444f063..000000000 --- a/uu_stat/options/static.FORMAT.html +++ /dev/null @@ -1,3 +0,0 @@ -FORMAT in uu_stat::options - Rust -

Static uu_stat::options::FORMAT[][src]

pub static FORMAT: &str
- \ No newline at end of file diff --git a/uu_stat/options/static.PRINTF.html b/uu_stat/options/static.PRINTF.html deleted file mode 100644 index c11ffe960..000000000 --- a/uu_stat/options/static.PRINTF.html +++ /dev/null @@ -1,3 +0,0 @@ -PRINTF in uu_stat::options - Rust -

Static uu_stat::options::PRINTF[][src]

pub static PRINTF: &str
- \ No newline at end of file diff --git a/uu_stat/options/static.TERSE.html b/uu_stat/options/static.TERSE.html deleted file mode 100644 index 40e2a1ee5..000000000 --- a/uu_stat/options/static.TERSE.html +++ /dev/null @@ -1,3 +0,0 @@ -TERSE in uu_stat::options - Rust -

Static uu_stat::options::TERSE[][src]

pub static TERSE: &str
- \ No newline at end of file diff --git a/uu_stat/sidebar-items.js b/uu_stat/sidebar-items.js deleted file mode 100644 index 379c743f7..000000000 --- a/uu_stat/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["F_ALTER",""],["F_GROUP",""],["F_LEFT",""],["F_SIGN",""],["F_SPACE",""],["F_ZERO",""]],"enum":[["OutputType",""],["Token",""]],"fn":[["group_num",""],["uu_app",""],["uumain",""]],"mod":[["options",""]],"struct":[["Stater",""]],"trait":[["ScanUtil",""]]}); \ No newline at end of file diff --git a/uu_stat/struct.Stater.html b/uu_stat/struct.Stater.html deleted file mode 100644 index d176da776..000000000 --- a/uu_stat/struct.Stater.html +++ /dev/null @@ -1,12 +0,0 @@ -Stater in uu_stat - Rust -

Struct uu_stat::Stater[][src]

pub struct Stater { /* fields omitted */ }

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uu_stat/trait.ScanUtil.html b/uu_stat/trait.ScanUtil.html deleted file mode 100644 index c7e162327..000000000 --- a/uu_stat/trait.ScanUtil.html +++ /dev/null @@ -1,6 +0,0 @@ -ScanUtil in uu_stat - Rust -

Trait uu_stat::ScanUtil[][src]

pub trait ScanUtil {
-    fn scan_num<F>(&self) -> Option<(F, usize)>
    where
        F: FromStr
; -
fn scan_char(&self, radix: u32) -> Option<(char, usize)>; -}

Required methods

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uu_stdbuf/all.html b/uu_stdbuf/all.html deleted file mode 100644 index 3412b9081..000000000 --- a/uu_stdbuf/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_stdbuf/fn.uu_app.html b/uu_stdbuf/fn.uu_app.html deleted file mode 100644 index 6f4275c3d..000000000 --- a/uu_stdbuf/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_stdbuf - Rust -

Function uu_stdbuf::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_stdbuf/fn.uumain.html b/uu_stdbuf/fn.uumain.html deleted file mode 100644 index b387304ef..000000000 --- a/uu_stdbuf/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_stdbuf - Rust -

Function uu_stdbuf::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_stdbuf/index.html b/uu_stdbuf/index.html deleted file mode 100644 index 016ce3056..000000000 --- a/uu_stdbuf/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_stdbuf - Rust -

Crate uu_stdbuf[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_stdbuf/sidebar-items.js b/uu_stdbuf/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_stdbuf/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_sum/all.html b/uu_sum/all.html deleted file mode 100644 index 3dfb696ad..000000000 --- a/uu_sum/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_sum/fn.uu_app.html b/uu_sum/fn.uu_app.html deleted file mode 100644 index c8da071a4..000000000 --- a/uu_sum/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_sum - Rust -

Function uu_sum::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_sum/fn.uumain.html b/uu_sum/fn.uumain.html deleted file mode 100644 index 056bd5eaf..000000000 --- a/uu_sum/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_sum - Rust -

Function uu_sum::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_sum/index.html b/uu_sum/index.html deleted file mode 100644 index 3a9170bef..000000000 --- a/uu_sum/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_sum - Rust -

Crate uu_sum[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_sum/sidebar-items.js b/uu_sum/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_sum/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_sync/all.html b/uu_sync/all.html deleted file mode 100644 index 63bf10ba5..000000000 --- a/uu_sync/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_sync/fn.uu_app.html b/uu_sync/fn.uu_app.html deleted file mode 100644 index 9f8812703..000000000 --- a/uu_sync/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_sync - Rust -

Function uu_sync::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_sync/fn.uumain.html b/uu_sync/fn.uumain.html deleted file mode 100644 index 9a0f4ce6f..000000000 --- a/uu_sync/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_sync - Rust -

Function uu_sync::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_sync/index.html b/uu_sync/index.html deleted file mode 100644 index 927f88cb0..000000000 --- a/uu_sync/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_sync - Rust -

Crate uu_sync[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_sync/options/index.html b/uu_sync/options/index.html deleted file mode 100644 index 0f750e136..000000000 --- a/uu_sync/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_sync::options - Rust -

Module uu_sync::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_sync/options/sidebar-items.js b/uu_sync/options/sidebar-items.js deleted file mode 100644 index 697900d93..000000000 --- a/uu_sync/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["DATA",""],["FILE_SYSTEM",""]]}); \ No newline at end of file diff --git a/uu_sync/options/static.DATA.html b/uu_sync/options/static.DATA.html deleted file mode 100644 index 51f0119e4..000000000 --- a/uu_sync/options/static.DATA.html +++ /dev/null @@ -1,3 +0,0 @@ -DATA in uu_sync::options - Rust -

Static uu_sync::options::DATA[][src]

pub static DATA: &str
- \ No newline at end of file diff --git a/uu_sync/options/static.FILE_SYSTEM.html b/uu_sync/options/static.FILE_SYSTEM.html deleted file mode 100644 index 241670a29..000000000 --- a/uu_sync/options/static.FILE_SYSTEM.html +++ /dev/null @@ -1,3 +0,0 @@ -FILE_SYSTEM in uu_sync::options - Rust -

Static uu_sync::options::FILE_SYSTEM[][src]

pub static FILE_SYSTEM: &str
- \ No newline at end of file diff --git a/uu_sync/sidebar-items.js b/uu_sync/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_sync/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_tac/all.html b/uu_tac/all.html deleted file mode 100644 index 7f9f4a829..000000000 --- a/uu_tac/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_tac/fn.uu_app.html b/uu_tac/fn.uu_app.html deleted file mode 100644 index 6af22681c..000000000 --- a/uu_tac/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_tac - Rust -

Function uu_tac::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_tac/fn.uumain.html b/uu_tac/fn.uumain.html deleted file mode 100644 index 170d322a0..000000000 --- a/uu_tac/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_tac - Rust -

Function uu_tac::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_tac/index.html b/uu_tac/index.html deleted file mode 100644 index a94b4dcf2..000000000 --- a/uu_tac/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_tac - Rust -

Crate uu_tac[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_tac/sidebar-items.js b/uu_tac/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_tac/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_tail/all.html b/uu_tail/all.html deleted file mode 100644 index 734a7110d..000000000 --- a/uu_tail/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_tail/fn.uu_app.html b/uu_tail/fn.uu_app.html deleted file mode 100644 index 26cc048aa..000000000 --- a/uu_tail/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_tail - Rust -

Function uu_tail::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_tail/fn.uumain.html b/uu_tail/fn.uumain.html deleted file mode 100644 index a7d06e07b..000000000 --- a/uu_tail/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_tail - Rust -

Function uu_tail::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_tail/index.html b/uu_tail/index.html deleted file mode 100644 index c71111f67..000000000 --- a/uu_tail/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_tail - Rust -

Crate uu_tail[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_tail/options/index.html b/uu_tail/options/index.html deleted file mode 100644 index 8b964b2f9..000000000 --- a/uu_tail/options/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_tail::options - Rust -

Module uu_tail::options[][src]

Modules

-

Statics

-
- \ No newline at end of file diff --git a/uu_tail/options/sidebar-items.js b/uu_tail/options/sidebar-items.js deleted file mode 100644 index 570351d82..000000000 --- a/uu_tail/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"mod":[["verbosity",""]],"static":[["ARG_FILES",""],["BYTES",""],["FOLLOW",""],["LINES",""],["PID",""],["SLEEP_INT",""],["ZERO_TERM",""]]}); \ No newline at end of file diff --git a/uu_tail/options/static.ARG_FILES.html b/uu_tail/options/static.ARG_FILES.html deleted file mode 100644 index 53ee6392b..000000000 --- a/uu_tail/options/static.ARG_FILES.html +++ /dev/null @@ -1,3 +0,0 @@ -ARG_FILES in uu_tail::options - Rust -

Static uu_tail::options::ARG_FILES[][src]

pub static ARG_FILES: &str
- \ No newline at end of file diff --git a/uu_tail/options/static.BYTES.html b/uu_tail/options/static.BYTES.html deleted file mode 100644 index 0e66a5d4c..000000000 --- a/uu_tail/options/static.BYTES.html +++ /dev/null @@ -1,3 +0,0 @@ -BYTES in uu_tail::options - Rust -

Static uu_tail::options::BYTES[][src]

pub static BYTES: &str
- \ No newline at end of file diff --git a/uu_tail/options/static.FOLLOW.html b/uu_tail/options/static.FOLLOW.html deleted file mode 100644 index f78af66d9..000000000 --- a/uu_tail/options/static.FOLLOW.html +++ /dev/null @@ -1,3 +0,0 @@ -FOLLOW in uu_tail::options - Rust -

Static uu_tail::options::FOLLOW[][src]

pub static FOLLOW: &str
- \ No newline at end of file diff --git a/uu_tail/options/static.LINES.html b/uu_tail/options/static.LINES.html deleted file mode 100644 index 7a2ceabc7..000000000 --- a/uu_tail/options/static.LINES.html +++ /dev/null @@ -1,3 +0,0 @@ -LINES in uu_tail::options - Rust -

Static uu_tail::options::LINES[][src]

pub static LINES: &str
- \ No newline at end of file diff --git a/uu_tail/options/static.PID.html b/uu_tail/options/static.PID.html deleted file mode 100644 index 96bfd837d..000000000 --- a/uu_tail/options/static.PID.html +++ /dev/null @@ -1,3 +0,0 @@ -PID in uu_tail::options - Rust -

Static uu_tail::options::PID[][src]

pub static PID: &str
- \ No newline at end of file diff --git a/uu_tail/options/static.SLEEP_INT.html b/uu_tail/options/static.SLEEP_INT.html deleted file mode 100644 index 7052ec903..000000000 --- a/uu_tail/options/static.SLEEP_INT.html +++ /dev/null @@ -1,3 +0,0 @@ -SLEEP_INT in uu_tail::options - Rust -

Static uu_tail::options::SLEEP_INT[][src]

pub static SLEEP_INT: &str
- \ No newline at end of file diff --git a/uu_tail/options/static.ZERO_TERM.html b/uu_tail/options/static.ZERO_TERM.html deleted file mode 100644 index 660deff4f..000000000 --- a/uu_tail/options/static.ZERO_TERM.html +++ /dev/null @@ -1,3 +0,0 @@ -ZERO_TERM in uu_tail::options - Rust -

Static uu_tail::options::ZERO_TERM[][src]

pub static ZERO_TERM: &str
- \ No newline at end of file diff --git a/uu_tail/options/verbosity/index.html b/uu_tail/options/verbosity/index.html deleted file mode 100644 index 78ad2678b..000000000 --- a/uu_tail/options/verbosity/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_tail::options::verbosity - Rust -

Module uu_tail::options::verbosity[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_tail/options/verbosity/sidebar-items.js b/uu_tail/options/verbosity/sidebar-items.js deleted file mode 100644 index b8ce4594a..000000000 --- a/uu_tail/options/verbosity/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["QUIET",""],["VERBOSE",""]]}); \ No newline at end of file diff --git a/uu_tail/options/verbosity/static.QUIET.html b/uu_tail/options/verbosity/static.QUIET.html deleted file mode 100644 index 64a960144..000000000 --- a/uu_tail/options/verbosity/static.QUIET.html +++ /dev/null @@ -1,3 +0,0 @@ -QUIET in uu_tail::options::verbosity - Rust -

Static uu_tail::options::verbosity::QUIET[][src]

pub static QUIET: &str
- \ No newline at end of file diff --git a/uu_tail/options/verbosity/static.VERBOSE.html b/uu_tail/options/verbosity/static.VERBOSE.html deleted file mode 100644 index 713656686..000000000 --- a/uu_tail/options/verbosity/static.VERBOSE.html +++ /dev/null @@ -1,3 +0,0 @@ -VERBOSE in uu_tail::options::verbosity - Rust -

Static uu_tail::options::verbosity::VERBOSE[][src]

pub static VERBOSE: &str
- \ No newline at end of file diff --git a/uu_tail/sidebar-items.js b/uu_tail/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_tail/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_tee/all.html b/uu_tee/all.html deleted file mode 100644 index 43a58adce..000000000 --- a/uu_tee/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_tee/fn.uu_app.html b/uu_tee/fn.uu_app.html deleted file mode 100644 index 1e4e9f6fa..000000000 --- a/uu_tee/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_tee - Rust -

Function uu_tee::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_tee/fn.uumain.html b/uu_tee/fn.uumain.html deleted file mode 100644 index e10473c4a..000000000 --- a/uu_tee/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_tee - Rust -

Function uu_tee::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_tee/index.html b/uu_tee/index.html deleted file mode 100644 index 86300f865..000000000 --- a/uu_tee/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_tee - Rust -

Crate uu_tee[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_tee/sidebar-items.js b/uu_tee/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_tee/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_test/all.html b/uu_test/all.html deleted file mode 100644 index 72d2503a9..000000000 --- a/uu_test/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_test/fn.uu_app.html b/uu_test/fn.uu_app.html deleted file mode 100644 index 50cb4d39d..000000000 --- a/uu_test/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_test - Rust -

Function uu_test::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_test/fn.uumain.html b/uu_test/fn.uumain.html deleted file mode 100644 index b661ac21a..000000000 --- a/uu_test/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_test - Rust -

Function uu_test::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_test/index.html b/uu_test/index.html deleted file mode 100644 index a72cb1cad..000000000 --- a/uu_test/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_test - Rust -

Crate uu_test[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_test/sidebar-items.js b/uu_test/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_test/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_timeout/all.html b/uu_timeout/all.html deleted file mode 100644 index e2379ef52..000000000 --- a/uu_timeout/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_timeout/fn.uu_app.html b/uu_timeout/fn.uu_app.html deleted file mode 100644 index 3ab6872af..000000000 --- a/uu_timeout/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_timeout - Rust -

Function uu_timeout::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_timeout/fn.uumain.html b/uu_timeout/fn.uumain.html deleted file mode 100644 index 770f3385a..000000000 --- a/uu_timeout/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_timeout - Rust -

Function uu_timeout::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_timeout/index.html b/uu_timeout/index.html deleted file mode 100644 index b7d871a2f..000000000 --- a/uu_timeout/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_timeout - Rust -

Crate uu_timeout[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_timeout/options/index.html b/uu_timeout/options/index.html deleted file mode 100644 index 1d4c679d3..000000000 --- a/uu_timeout/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_timeout::options - Rust -

Module uu_timeout::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_timeout/options/sidebar-items.js b/uu_timeout/options/sidebar-items.js deleted file mode 100644 index 0e0f4b1fb..000000000 --- a/uu_timeout/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["COMMAND",""],["DURATION",""],["FOREGROUND",""],["KILL_AFTER",""],["PRESERVE_STATUS",""],["SIGNAL",""],["VERBOSE",""]]}); \ No newline at end of file diff --git a/uu_timeout/options/static.COMMAND.html b/uu_timeout/options/static.COMMAND.html deleted file mode 100644 index 7a3b857b2..000000000 --- a/uu_timeout/options/static.COMMAND.html +++ /dev/null @@ -1,3 +0,0 @@ -COMMAND in uu_timeout::options - Rust -

Static uu_timeout::options::COMMAND[][src]

pub static COMMAND: &str
- \ No newline at end of file diff --git a/uu_timeout/options/static.DURATION.html b/uu_timeout/options/static.DURATION.html deleted file mode 100644 index 4e4f64afa..000000000 --- a/uu_timeout/options/static.DURATION.html +++ /dev/null @@ -1,3 +0,0 @@ -DURATION in uu_timeout::options - Rust -

Static uu_timeout::options::DURATION[][src]

pub static DURATION: &str
- \ No newline at end of file diff --git a/uu_timeout/options/static.FOREGROUND.html b/uu_timeout/options/static.FOREGROUND.html deleted file mode 100644 index 75c337c52..000000000 --- a/uu_timeout/options/static.FOREGROUND.html +++ /dev/null @@ -1,3 +0,0 @@ -FOREGROUND in uu_timeout::options - Rust -

Static uu_timeout::options::FOREGROUND[][src]

pub static FOREGROUND: &str
- \ No newline at end of file diff --git a/uu_timeout/options/static.KILL_AFTER.html b/uu_timeout/options/static.KILL_AFTER.html deleted file mode 100644 index 1737432da..000000000 --- a/uu_timeout/options/static.KILL_AFTER.html +++ /dev/null @@ -1,3 +0,0 @@ -KILL_AFTER in uu_timeout::options - Rust -

Static uu_timeout::options::KILL_AFTER[][src]

pub static KILL_AFTER: &str
- \ No newline at end of file diff --git a/uu_timeout/options/static.PRESERVE_STATUS.html b/uu_timeout/options/static.PRESERVE_STATUS.html deleted file mode 100644 index 21057bc72..000000000 --- a/uu_timeout/options/static.PRESERVE_STATUS.html +++ /dev/null @@ -1,3 +0,0 @@ -PRESERVE_STATUS in uu_timeout::options - Rust -

Static uu_timeout::options::PRESERVE_STATUS[][src]

pub static PRESERVE_STATUS: &str
- \ No newline at end of file diff --git a/uu_timeout/options/static.SIGNAL.html b/uu_timeout/options/static.SIGNAL.html deleted file mode 100644 index 3908da76e..000000000 --- a/uu_timeout/options/static.SIGNAL.html +++ /dev/null @@ -1,3 +0,0 @@ -SIGNAL in uu_timeout::options - Rust -

Static uu_timeout::options::SIGNAL[][src]

pub static SIGNAL: &str
- \ No newline at end of file diff --git a/uu_timeout/options/static.VERBOSE.html b/uu_timeout/options/static.VERBOSE.html deleted file mode 100644 index 91c736726..000000000 --- a/uu_timeout/options/static.VERBOSE.html +++ /dev/null @@ -1,3 +0,0 @@ -VERBOSE in uu_timeout::options - Rust -

Static uu_timeout::options::VERBOSE[][src]

pub static VERBOSE: &str
- \ No newline at end of file diff --git a/uu_timeout/sidebar-items.js b/uu_timeout/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_timeout/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_touch/all.html b/uu_touch/all.html deleted file mode 100644 index 8dff3ea55..000000000 --- a/uu_touch/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_touch/fn.uu_app.html b/uu_touch/fn.uu_app.html deleted file mode 100644 index 348871313..000000000 --- a/uu_touch/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_touch - Rust -

Function uu_touch::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_touch/fn.uumain.html b/uu_touch/fn.uumain.html deleted file mode 100644 index 456ba7429..000000000 --- a/uu_touch/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_touch - Rust -

Function uu_touch::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_touch/index.html b/uu_touch/index.html deleted file mode 100644 index 149cfafc2..000000000 --- a/uu_touch/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_touch - Rust -

Crate uu_touch[][src]

Re-exports

-
pub extern crate filetime;

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_touch/options/index.html b/uu_touch/options/index.html deleted file mode 100644 index e1eafa37c..000000000 --- a/uu_touch/options/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_touch::options - Rust -

Module uu_touch::options[][src]

Modules

-

Statics

-
- \ No newline at end of file diff --git a/uu_touch/options/sidebar-items.js b/uu_touch/options/sidebar-items.js deleted file mode 100644 index c0dbb5503..000000000 --- a/uu_touch/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"mod":[["sources",""]],"static":[["ACCESS",""],["MODIFICATION",""],["NO_CREATE",""],["NO_DEREF",""],["SOURCES",""],["TIME",""]]}); \ No newline at end of file diff --git a/uu_touch/options/sources/index.html b/uu_touch/options/sources/index.html deleted file mode 100644 index 3780a23ae..000000000 --- a/uu_touch/options/sources/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_touch::options::sources - Rust -

Module uu_touch::options::sources[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_touch/options/sources/sidebar-items.js b/uu_touch/options/sources/sidebar-items.js deleted file mode 100644 index 0fca0ad88..000000000 --- a/uu_touch/options/sources/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["CURRENT",""],["DATE",""],["REFERENCE",""]]}); \ No newline at end of file diff --git a/uu_touch/options/sources/static.CURRENT.html b/uu_touch/options/sources/static.CURRENT.html deleted file mode 100644 index 76ff1fa25..000000000 --- a/uu_touch/options/sources/static.CURRENT.html +++ /dev/null @@ -1,3 +0,0 @@ -CURRENT in uu_touch::options::sources - Rust -

Static uu_touch::options::sources::CURRENT[][src]

pub static CURRENT: &str
- \ No newline at end of file diff --git a/uu_touch/options/sources/static.DATE.html b/uu_touch/options/sources/static.DATE.html deleted file mode 100644 index a4dd19734..000000000 --- a/uu_touch/options/sources/static.DATE.html +++ /dev/null @@ -1,3 +0,0 @@ -DATE in uu_touch::options::sources - Rust -

Static uu_touch::options::sources::DATE[][src]

pub static DATE: &str
- \ No newline at end of file diff --git a/uu_touch/options/sources/static.REFERENCE.html b/uu_touch/options/sources/static.REFERENCE.html deleted file mode 100644 index 4c2d9d229..000000000 --- a/uu_touch/options/sources/static.REFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -REFERENCE in uu_touch::options::sources - Rust -

Static uu_touch::options::sources::REFERENCE[][src]

pub static REFERENCE: &str
- \ No newline at end of file diff --git a/uu_touch/options/static.ACCESS.html b/uu_touch/options/static.ACCESS.html deleted file mode 100644 index 7e4942066..000000000 --- a/uu_touch/options/static.ACCESS.html +++ /dev/null @@ -1,3 +0,0 @@ -ACCESS in uu_touch::options - Rust -

Static uu_touch::options::ACCESS[][src]

pub static ACCESS: &str
- \ No newline at end of file diff --git a/uu_touch/options/static.MODIFICATION.html b/uu_touch/options/static.MODIFICATION.html deleted file mode 100644 index 2e5c54648..000000000 --- a/uu_touch/options/static.MODIFICATION.html +++ /dev/null @@ -1,3 +0,0 @@ -MODIFICATION in uu_touch::options - Rust -

Static uu_touch::options::MODIFICATION[][src]

pub static MODIFICATION: &str
- \ No newline at end of file diff --git a/uu_touch/options/static.NO_CREATE.html b/uu_touch/options/static.NO_CREATE.html deleted file mode 100644 index c7b04f2d0..000000000 --- a/uu_touch/options/static.NO_CREATE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_CREATE in uu_touch::options - Rust -

Static uu_touch::options::NO_CREATE[][src]

pub static NO_CREATE: &str
- \ No newline at end of file diff --git a/uu_touch/options/static.NO_DEREF.html b/uu_touch/options/static.NO_DEREF.html deleted file mode 100644 index 9e91df49d..000000000 --- a/uu_touch/options/static.NO_DEREF.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_DEREF in uu_touch::options - Rust -

Static uu_touch::options::NO_DEREF[][src]

pub static NO_DEREF: &str
- \ No newline at end of file diff --git a/uu_touch/options/static.SOURCES.html b/uu_touch/options/static.SOURCES.html deleted file mode 100644 index cbd8b26a5..000000000 --- a/uu_touch/options/static.SOURCES.html +++ /dev/null @@ -1,3 +0,0 @@ -SOURCES in uu_touch::options - Rust -

Static uu_touch::options::SOURCES[][src]

pub static SOURCES: &str
- \ No newline at end of file diff --git a/uu_touch/options/static.TIME.html b/uu_touch/options/static.TIME.html deleted file mode 100644 index 5d73503b3..000000000 --- a/uu_touch/options/static.TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -TIME in uu_touch::options - Rust -

Static uu_touch::options::TIME[][src]

pub static TIME: &str
- \ No newline at end of file diff --git a/uu_touch/sidebar-items.js b/uu_touch/sidebar-items.js deleted file mode 100644 index f16c6cf9a..000000000 --- a/uu_touch/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"externcrate":[["filetime",""]],"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_tr/all.html b/uu_tr/all.html deleted file mode 100644 index 30bc6cda6..000000000 --- a/uu_tr/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_tr/fn.uu_app.html b/uu_tr/fn.uu_app.html deleted file mode 100644 index ebd905d82..000000000 --- a/uu_tr/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_tr - Rust -

Function uu_tr::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_tr/fn.uumain.html b/uu_tr/fn.uumain.html deleted file mode 100644 index 861092329..000000000 --- a/uu_tr/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_tr - Rust -

Function uu_tr::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_tr/index.html b/uu_tr/index.html deleted file mode 100644 index 68a7bc9df..000000000 --- a/uu_tr/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_tr - Rust -

Crate uu_tr[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_tr/sidebar-items.js b/uu_tr/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_tr/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_true/all.html b/uu_true/all.html deleted file mode 100644 index d4d302c3b..000000000 --- a/uu_true/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_true/fn.uu_app.html b/uu_true/fn.uu_app.html deleted file mode 100644 index e92c6595e..000000000 --- a/uu_true/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_true - Rust -

Function uu_true::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_true/fn.uumain.html b/uu_true/fn.uumain.html deleted file mode 100644 index 749a82ccd..000000000 --- a/uu_true/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_true - Rust -

Function uu_true::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_true/index.html b/uu_true/index.html deleted file mode 100644 index 0e5a1f754..000000000 --- a/uu_true/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_true - Rust -

Crate uu_true[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_true/sidebar-items.js b/uu_true/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_true/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_truncate/all.html b/uu_truncate/all.html deleted file mode 100644 index 4b1594d22..000000000 --- a/uu_truncate/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_truncate/fn.uu_app.html b/uu_truncate/fn.uu_app.html deleted file mode 100644 index 023ccc10b..000000000 --- a/uu_truncate/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_truncate - Rust -

Function uu_truncate::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_truncate/fn.uumain.html b/uu_truncate/fn.uumain.html deleted file mode 100644 index 0fe62e9da..000000000 --- a/uu_truncate/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_truncate - Rust -

Function uu_truncate::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_truncate/index.html b/uu_truncate/index.html deleted file mode 100644 index a4324d8bd..000000000 --- a/uu_truncate/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_truncate - Rust -

Crate uu_truncate[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_truncate/options/index.html b/uu_truncate/options/index.html deleted file mode 100644 index 3638ce2cf..000000000 --- a/uu_truncate/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_truncate::options - Rust -

Module uu_truncate::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_truncate/options/sidebar-items.js b/uu_truncate/options/sidebar-items.js deleted file mode 100644 index 298f8a00b..000000000 --- a/uu_truncate/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ARG_FILES",""],["IO_BLOCKS",""],["NO_CREATE",""],["REFERENCE",""],["SIZE",""]]}); \ No newline at end of file diff --git a/uu_truncate/options/static.ARG_FILES.html b/uu_truncate/options/static.ARG_FILES.html deleted file mode 100644 index d4b31527a..000000000 --- a/uu_truncate/options/static.ARG_FILES.html +++ /dev/null @@ -1,3 +0,0 @@ -ARG_FILES in uu_truncate::options - Rust -

Static uu_truncate::options::ARG_FILES[][src]

pub static ARG_FILES: &str
- \ No newline at end of file diff --git a/uu_truncate/options/static.IO_BLOCKS.html b/uu_truncate/options/static.IO_BLOCKS.html deleted file mode 100644 index 3b3daf9fe..000000000 --- a/uu_truncate/options/static.IO_BLOCKS.html +++ /dev/null @@ -1,3 +0,0 @@ -IO_BLOCKS in uu_truncate::options - Rust -

Static uu_truncate::options::IO_BLOCKS[][src]

pub static IO_BLOCKS: &str
- \ No newline at end of file diff --git a/uu_truncate/options/static.NO_CREATE.html b/uu_truncate/options/static.NO_CREATE.html deleted file mode 100644 index 1f1a414eb..000000000 --- a/uu_truncate/options/static.NO_CREATE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_CREATE in uu_truncate::options - Rust -

Static uu_truncate::options::NO_CREATE[][src]

pub static NO_CREATE: &str
- \ No newline at end of file diff --git a/uu_truncate/options/static.REFERENCE.html b/uu_truncate/options/static.REFERENCE.html deleted file mode 100644 index b102a2487..000000000 --- a/uu_truncate/options/static.REFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -REFERENCE in uu_truncate::options - Rust -

Static uu_truncate::options::REFERENCE[][src]

pub static REFERENCE: &str
- \ No newline at end of file diff --git a/uu_truncate/options/static.SIZE.html b/uu_truncate/options/static.SIZE.html deleted file mode 100644 index c215faec3..000000000 --- a/uu_truncate/options/static.SIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -SIZE in uu_truncate::options - Rust -

Static uu_truncate::options::SIZE[][src]

pub static SIZE: &str
- \ No newline at end of file diff --git a/uu_truncate/sidebar-items.js b/uu_truncate/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_truncate/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_tsort/all.html b/uu_tsort/all.html deleted file mode 100644 index 3963fb134..000000000 --- a/uu_tsort/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_tsort/fn.uu_app.html b/uu_tsort/fn.uu_app.html deleted file mode 100644 index f48ad7c71..000000000 --- a/uu_tsort/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_tsort - Rust -

Function uu_tsort::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_tsort/fn.uumain.html b/uu_tsort/fn.uumain.html deleted file mode 100644 index 45a6467ba..000000000 --- a/uu_tsort/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_tsort - Rust -

Function uu_tsort::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_tsort/index.html b/uu_tsort/index.html deleted file mode 100644 index facd3229a..000000000 --- a/uu_tsort/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_tsort - Rust -

Crate uu_tsort[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_tsort/sidebar-items.js b/uu_tsort/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_tsort/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_tty/all.html b/uu_tty/all.html deleted file mode 100644 index 4e0e3df73..000000000 --- a/uu_tty/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_tty/fn.uu_app.html b/uu_tty/fn.uu_app.html deleted file mode 100644 index 0abb5932d..000000000 --- a/uu_tty/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_tty - Rust -

Function uu_tty::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_tty/fn.uumain.html b/uu_tty/fn.uumain.html deleted file mode 100644 index 4999aaac9..000000000 --- a/uu_tty/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_tty - Rust -

Function uu_tty::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_tty/index.html b/uu_tty/index.html deleted file mode 100644 index 591e2682a..000000000 --- a/uu_tty/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_tty - Rust -

Crate uu_tty[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_tty/sidebar-items.js b/uu_tty/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_tty/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_uname/all.html b/uu_uname/all.html deleted file mode 100644 index 8862234bd..000000000 --- a/uu_uname/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_uname/fn.uu_app.html b/uu_uname/fn.uu_app.html deleted file mode 100644 index 45569bced..000000000 --- a/uu_uname/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_uname - Rust -

Function uu_uname::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_uname/fn.uumain.html b/uu_uname/fn.uumain.html deleted file mode 100644 index 03f2e1f70..000000000 --- a/uu_uname/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_uname - Rust -

Function uu_uname::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_uname/index.html b/uu_uname/index.html deleted file mode 100644 index 2a9a212e0..000000000 --- a/uu_uname/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_uname - Rust -

Crate uu_uname[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_uname/options/index.html b/uu_uname/options/index.html deleted file mode 100644 index f5a20e8a2..000000000 --- a/uu_uname/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_uname::options - Rust -

Module uu_uname::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_uname/options/sidebar-items.js b/uu_uname/options/sidebar-items.js deleted file mode 100644 index 1ef675d40..000000000 --- a/uu_uname/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ALL",""],["HWPLATFORM",""],["KERNELNAME",""],["KERNELRELEASE",""],["KERNELVERSION",""],["MACHINE",""],["NODENAME",""],["OS",""],["PROCESSOR",""]]}); \ No newline at end of file diff --git a/uu_uname/options/static.ALL.html b/uu_uname/options/static.ALL.html deleted file mode 100644 index ed6aeee22..000000000 --- a/uu_uname/options/static.ALL.html +++ /dev/null @@ -1,3 +0,0 @@ -ALL in uu_uname::options - Rust -

Static uu_uname::options::ALL[][src]

pub static ALL: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.HWPLATFORM.html b/uu_uname/options/static.HWPLATFORM.html deleted file mode 100644 index cb1b24c6b..000000000 --- a/uu_uname/options/static.HWPLATFORM.html +++ /dev/null @@ -1,3 +0,0 @@ -HWPLATFORM in uu_uname::options - Rust -

Static uu_uname::options::HWPLATFORM[][src]

pub static HWPLATFORM: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.KERNELNAME.html b/uu_uname/options/static.KERNELNAME.html deleted file mode 100644 index 452e0de81..000000000 --- a/uu_uname/options/static.KERNELNAME.html +++ /dev/null @@ -1,3 +0,0 @@ -KERNELNAME in uu_uname::options - Rust -

Static uu_uname::options::KERNELNAME[][src]

pub static KERNELNAME: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.KERNELRELEASE.html b/uu_uname/options/static.KERNELRELEASE.html deleted file mode 100644 index e8f67adf4..000000000 --- a/uu_uname/options/static.KERNELRELEASE.html +++ /dev/null @@ -1,3 +0,0 @@ -KERNELRELEASE in uu_uname::options - Rust -

Static uu_uname::options::KERNELRELEASE[][src]

pub static KERNELRELEASE: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.KERNELVERSION.html b/uu_uname/options/static.KERNELVERSION.html deleted file mode 100644 index fb84750e3..000000000 --- a/uu_uname/options/static.KERNELVERSION.html +++ /dev/null @@ -1,3 +0,0 @@ -KERNELVERSION in uu_uname::options - Rust -

Static uu_uname::options::KERNELVERSION[][src]

pub static KERNELVERSION: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.MACHINE.html b/uu_uname/options/static.MACHINE.html deleted file mode 100644 index 2eed88a31..000000000 --- a/uu_uname/options/static.MACHINE.html +++ /dev/null @@ -1,3 +0,0 @@ -MACHINE in uu_uname::options - Rust -

Static uu_uname::options::MACHINE[][src]

pub static MACHINE: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.NODENAME.html b/uu_uname/options/static.NODENAME.html deleted file mode 100644 index a6082304b..000000000 --- a/uu_uname/options/static.NODENAME.html +++ /dev/null @@ -1,3 +0,0 @@ -NODENAME in uu_uname::options - Rust -

Static uu_uname::options::NODENAME[][src]

pub static NODENAME: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.OS.html b/uu_uname/options/static.OS.html deleted file mode 100644 index a9a0ff62e..000000000 --- a/uu_uname/options/static.OS.html +++ /dev/null @@ -1,3 +0,0 @@ -OS in uu_uname::options - Rust -

Static uu_uname::options::OS[][src]

pub static OS: &str
- \ No newline at end of file diff --git a/uu_uname/options/static.PROCESSOR.html b/uu_uname/options/static.PROCESSOR.html deleted file mode 100644 index c92ea29a5..000000000 --- a/uu_uname/options/static.PROCESSOR.html +++ /dev/null @@ -1,3 +0,0 @@ -PROCESSOR in uu_uname::options - Rust -

Static uu_uname::options::PROCESSOR[][src]

pub static PROCESSOR: &str
- \ No newline at end of file diff --git a/uu_uname/sidebar-items.js b/uu_uname/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_uname/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_unexpand/all.html b/uu_unexpand/all.html deleted file mode 100644 index 924ef9de0..000000000 --- a/uu_unexpand/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_unexpand/fn.uu_app.html b/uu_unexpand/fn.uu_app.html deleted file mode 100644 index 255442dfe..000000000 --- a/uu_unexpand/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_unexpand - Rust -

Function uu_unexpand::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_unexpand/fn.uumain.html b/uu_unexpand/fn.uumain.html deleted file mode 100644 index 64d973f02..000000000 --- a/uu_unexpand/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_unexpand - Rust -

Function uu_unexpand::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_unexpand/index.html b/uu_unexpand/index.html deleted file mode 100644 index 2a75e326f..000000000 --- a/uu_unexpand/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_unexpand - Rust -

Crate uu_unexpand[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_unexpand/sidebar-items.js b/uu_unexpand/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_unexpand/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_uniq/all.html b/uu_uniq/all.html deleted file mode 100644 index 889358274..000000000 --- a/uu_uniq/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_uniq/fn.uu_app.html b/uu_uniq/fn.uu_app.html deleted file mode 100644 index ce61773be..000000000 --- a/uu_uniq/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_uniq - Rust -

Function uu_uniq::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_uniq/fn.uumain.html b/uu_uniq/fn.uumain.html deleted file mode 100644 index b24680506..000000000 --- a/uu_uniq/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_uniq - Rust -

Function uu_uniq::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_uniq/index.html b/uu_uniq/index.html deleted file mode 100644 index ade653e80..000000000 --- a/uu_uniq/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_uniq - Rust -

Crate uu_uniq[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_uniq/options/index.html b/uu_uniq/options/index.html deleted file mode 100644 index 0bbebf738..000000000 --- a/uu_uniq/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_uniq::options - Rust -

Module uu_uniq::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_uniq/options/sidebar-items.js b/uu_uniq/options/sidebar-items.js deleted file mode 100644 index 38418bbbf..000000000 --- a/uu_uniq/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["ALL_REPEATED",""],["CHECK_CHARS",""],["COUNT",""],["GROUP",""],["IGNORE_CASE",""],["REPEATED",""],["SKIP_CHARS",""],["SKIP_FIELDS",""],["UNIQUE",""],["ZERO_TERMINATED",""]]}); \ No newline at end of file diff --git a/uu_uniq/options/static.ALL_REPEATED.html b/uu_uniq/options/static.ALL_REPEATED.html deleted file mode 100644 index 19119cc59..000000000 --- a/uu_uniq/options/static.ALL_REPEATED.html +++ /dev/null @@ -1,3 +0,0 @@ -ALL_REPEATED in uu_uniq::options - Rust -

Static uu_uniq::options::ALL_REPEATED[][src]

pub static ALL_REPEATED: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.CHECK_CHARS.html b/uu_uniq/options/static.CHECK_CHARS.html deleted file mode 100644 index 0d34400ed..000000000 --- a/uu_uniq/options/static.CHECK_CHARS.html +++ /dev/null @@ -1,3 +0,0 @@ -CHECK_CHARS in uu_uniq::options - Rust -

Static uu_uniq::options::CHECK_CHARS[][src]

pub static CHECK_CHARS: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.COUNT.html b/uu_uniq/options/static.COUNT.html deleted file mode 100644 index c525dda68..000000000 --- a/uu_uniq/options/static.COUNT.html +++ /dev/null @@ -1,3 +0,0 @@ -COUNT in uu_uniq::options - Rust -

Static uu_uniq::options::COUNT[][src]

pub static COUNT: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.GROUP.html b/uu_uniq/options/static.GROUP.html deleted file mode 100644 index ea4d29ed2..000000000 --- a/uu_uniq/options/static.GROUP.html +++ /dev/null @@ -1,3 +0,0 @@ -GROUP in uu_uniq::options - Rust -

Static uu_uniq::options::GROUP[][src]

pub static GROUP: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.IGNORE_CASE.html b/uu_uniq/options/static.IGNORE_CASE.html deleted file mode 100644 index 5ccd08117..000000000 --- a/uu_uniq/options/static.IGNORE_CASE.html +++ /dev/null @@ -1,3 +0,0 @@ -IGNORE_CASE in uu_uniq::options - Rust -

Static uu_uniq::options::IGNORE_CASE[][src]

pub static IGNORE_CASE: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.REPEATED.html b/uu_uniq/options/static.REPEATED.html deleted file mode 100644 index 6e9b92a8c..000000000 --- a/uu_uniq/options/static.REPEATED.html +++ /dev/null @@ -1,3 +0,0 @@ -REPEATED in uu_uniq::options - Rust -

Static uu_uniq::options::REPEATED[][src]

pub static REPEATED: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.SKIP_CHARS.html b/uu_uniq/options/static.SKIP_CHARS.html deleted file mode 100644 index 9b92d23ab..000000000 --- a/uu_uniq/options/static.SKIP_CHARS.html +++ /dev/null @@ -1,3 +0,0 @@ -SKIP_CHARS in uu_uniq::options - Rust -

Static uu_uniq::options::SKIP_CHARS[][src]

pub static SKIP_CHARS: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.SKIP_FIELDS.html b/uu_uniq/options/static.SKIP_FIELDS.html deleted file mode 100644 index 68f4600b4..000000000 --- a/uu_uniq/options/static.SKIP_FIELDS.html +++ /dev/null @@ -1,3 +0,0 @@ -SKIP_FIELDS in uu_uniq::options - Rust -

Static uu_uniq::options::SKIP_FIELDS[][src]

pub static SKIP_FIELDS: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.UNIQUE.html b/uu_uniq/options/static.UNIQUE.html deleted file mode 100644 index 2f64db4df..000000000 --- a/uu_uniq/options/static.UNIQUE.html +++ /dev/null @@ -1,3 +0,0 @@ -UNIQUE in uu_uniq::options - Rust -

Static uu_uniq::options::UNIQUE[][src]

pub static UNIQUE: &str
- \ No newline at end of file diff --git a/uu_uniq/options/static.ZERO_TERMINATED.html b/uu_uniq/options/static.ZERO_TERMINATED.html deleted file mode 100644 index 206700e7d..000000000 --- a/uu_uniq/options/static.ZERO_TERMINATED.html +++ /dev/null @@ -1,3 +0,0 @@ -ZERO_TERMINATED in uu_uniq::options - Rust -

Static uu_uniq::options::ZERO_TERMINATED[][src]

pub static ZERO_TERMINATED: &str
- \ No newline at end of file diff --git a/uu_uniq/sidebar-items.js b/uu_uniq/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_uniq/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_unlink/all.html b/uu_unlink/all.html deleted file mode 100644 index 0e8e0b977..000000000 --- a/uu_unlink/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_unlink/fn.uu_app.html b/uu_unlink/fn.uu_app.html deleted file mode 100644 index 219b0cfc3..000000000 --- a/uu_unlink/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_unlink - Rust -

Function uu_unlink::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_unlink/fn.uumain.html b/uu_unlink/fn.uumain.html deleted file mode 100644 index cf76dc9af..000000000 --- a/uu_unlink/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_unlink - Rust -

Function uu_unlink::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_unlink/index.html b/uu_unlink/index.html deleted file mode 100644 index dc257536c..000000000 --- a/uu_unlink/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_unlink - Rust -

Crate uu_unlink[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_unlink/sidebar-items.js b/uu_unlink/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_unlink/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_uptime/all.html b/uu_uptime/all.html deleted file mode 100644 index 599c6bdfc..000000000 --- a/uu_uptime/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_uptime/fn.uu_app.html b/uu_uptime/fn.uu_app.html deleted file mode 100644 index d10f1101a..000000000 --- a/uu_uptime/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_uptime - Rust -

Function uu_uptime::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_uptime/fn.uumain.html b/uu_uptime/fn.uumain.html deleted file mode 100644 index 28d93fa4c..000000000 --- a/uu_uptime/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_uptime - Rust -

Function uu_uptime::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_uptime/index.html b/uu_uptime/index.html deleted file mode 100644 index 5d93c758e..000000000 --- a/uu_uptime/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uu_uptime - Rust -

Crate uu_uptime[][src]

Re-exports

-
pub use uucore::libc;

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_uptime/options/index.html b/uu_uptime/options/index.html deleted file mode 100644 index e0f789217..000000000 --- a/uu_uptime/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_uptime::options - Rust -

Module uu_uptime::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_uptime/options/sidebar-items.js b/uu_uptime/options/sidebar-items.js deleted file mode 100644 index 4c84ac2c8..000000000 --- a/uu_uptime/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["SINCE",""]]}); \ No newline at end of file diff --git a/uu_uptime/options/static.SINCE.html b/uu_uptime/options/static.SINCE.html deleted file mode 100644 index 6a3f5929d..000000000 --- a/uu_uptime/options/static.SINCE.html +++ /dev/null @@ -1,3 +0,0 @@ -SINCE in uu_uptime::options - Rust -

Static uu_uptime::options::SINCE[][src]

pub static SINCE: &str
- \ No newline at end of file diff --git a/uu_uptime/sidebar-items.js b/uu_uptime/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_uptime/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_users/all.html b/uu_users/all.html deleted file mode 100644 index ecec2a3ef..000000000 --- a/uu_users/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_users/fn.uu_app.html b/uu_users/fn.uu_app.html deleted file mode 100644 index 1dd904558..000000000 --- a/uu_users/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_users - Rust -

Function uu_users::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_users/fn.uumain.html b/uu_users/fn.uumain.html deleted file mode 100644 index 1ce2d5bcb..000000000 --- a/uu_users/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_users - Rust -

Function uu_users::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_users/index.html b/uu_users/index.html deleted file mode 100644 index ae18c8c1b..000000000 --- a/uu_users/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_users - Rust -

Crate uu_users[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_users/sidebar-items.js b/uu_users/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_users/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_wc/all.html b/uu_wc/all.html deleted file mode 100644 index 9efa484c4..000000000 --- a/uu_wc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Statics

- \ No newline at end of file diff --git a/uu_wc/fn.uu_app.html b/uu_wc/fn.uu_app.html deleted file mode 100644 index 4ab2cc3ac..000000000 --- a/uu_wc/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_wc - Rust -

Function uu_wc::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_wc/fn.uumain.html b/uu_wc/fn.uumain.html deleted file mode 100644 index df66b2d28..000000000 --- a/uu_wc/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_wc - Rust -

Function uu_wc::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_wc/index.html b/uu_wc/index.html deleted file mode 100644 index fbc4133e5..000000000 --- a/uu_wc/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uu_wc - Rust -

Crate uu_wc[][src]

Modules

-

Functions

-
- \ No newline at end of file diff --git a/uu_wc/options/index.html b/uu_wc/options/index.html deleted file mode 100644 index 6a3e91600..000000000 --- a/uu_wc/options/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_wc::options - Rust -

Module uu_wc::options[][src]

Statics

-
- \ No newline at end of file diff --git a/uu_wc/options/sidebar-items.js b/uu_wc/options/sidebar-items.js deleted file mode 100644 index 1552faad1..000000000 --- a/uu_wc/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"static":[["BYTES",""],["CHAR",""],["LINES",""],["MAX_LINE_LENGTH",""],["WORDS",""]]}); \ No newline at end of file diff --git a/uu_wc/options/static.BYTES.html b/uu_wc/options/static.BYTES.html deleted file mode 100644 index 84cc760d1..000000000 --- a/uu_wc/options/static.BYTES.html +++ /dev/null @@ -1,3 +0,0 @@ -BYTES in uu_wc::options - Rust -

Static uu_wc::options::BYTES[][src]

pub static BYTES: &str
- \ No newline at end of file diff --git a/uu_wc/options/static.CHAR.html b/uu_wc/options/static.CHAR.html deleted file mode 100644 index 0fb76245a..000000000 --- a/uu_wc/options/static.CHAR.html +++ /dev/null @@ -1,3 +0,0 @@ -CHAR in uu_wc::options - Rust -

Static uu_wc::options::CHAR[][src]

pub static CHAR: &str
- \ No newline at end of file diff --git a/uu_wc/options/static.LINES.html b/uu_wc/options/static.LINES.html deleted file mode 100644 index fae22ed0f..000000000 --- a/uu_wc/options/static.LINES.html +++ /dev/null @@ -1,3 +0,0 @@ -LINES in uu_wc::options - Rust -

Static uu_wc::options::LINES[][src]

pub static LINES: &str
- \ No newline at end of file diff --git a/uu_wc/options/static.MAX_LINE_LENGTH.html b/uu_wc/options/static.MAX_LINE_LENGTH.html deleted file mode 100644 index 5ab7309c2..000000000 --- a/uu_wc/options/static.MAX_LINE_LENGTH.html +++ /dev/null @@ -1,3 +0,0 @@ -MAX_LINE_LENGTH in uu_wc::options - Rust -

Static uu_wc::options::MAX_LINE_LENGTH[][src]

pub static MAX_LINE_LENGTH: &str
- \ No newline at end of file diff --git a/uu_wc/options/static.WORDS.html b/uu_wc/options/static.WORDS.html deleted file mode 100644 index 5574554f6..000000000 --- a/uu_wc/options/static.WORDS.html +++ /dev/null @@ -1,3 +0,0 @@ -WORDS in uu_wc::options - Rust -

Static uu_wc::options::WORDS[][src]

pub static WORDS: &str
- \ No newline at end of file diff --git a/uu_wc/sidebar-items.js b/uu_wc/sidebar-items.js deleted file mode 100644 index 7a8cecaf3..000000000 --- a/uu_wc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]],"mod":[["options",""]]}); \ No newline at end of file diff --git a/uu_who/all.html b/uu_who/all.html deleted file mode 100644 index b7b5424bf..000000000 --- a/uu_who/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_who/fn.uu_app.html b/uu_who/fn.uu_app.html deleted file mode 100644 index 5698d7b22..000000000 --- a/uu_who/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_who - Rust -

Function uu_who::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_who/fn.uumain.html b/uu_who/fn.uumain.html deleted file mode 100644 index 1a34d479f..000000000 --- a/uu_who/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_who - Rust -

Function uu_who::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_who/index.html b/uu_who/index.html deleted file mode 100644 index e2ef97adb..000000000 --- a/uu_who/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_who - Rust -

Crate uu_who[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_who/sidebar-items.js b/uu_who/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_who/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_whoami/all.html b/uu_whoami/all.html deleted file mode 100644 index aa736b36f..000000000 --- a/uu_whoami/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_whoami/fn.uu_app.html b/uu_whoami/fn.uu_app.html deleted file mode 100644 index f2eef4316..000000000 --- a/uu_whoami/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_whoami - Rust -

Function uu_whoami::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_whoami/fn.uumain.html b/uu_whoami/fn.uumain.html deleted file mode 100644 index a09d9c280..000000000 --- a/uu_whoami/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_whoami - Rust -

Function uu_whoami::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_whoami/index.html b/uu_whoami/index.html deleted file mode 100644 index 3e0a46375..000000000 --- a/uu_whoami/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_whoami - Rust -

Crate uu_whoami[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_whoami/sidebar-items.js b/uu_whoami/sidebar-items.js deleted file mode 100644 index 887ccda3b..000000000 --- a/uu_whoami/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uu_yes/all.html b/uu_yes/all.html deleted file mode 100644 index 3532d56ad..000000000 --- a/uu_yes/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/uu_yes/fn.exec.html b/uu_yes/fn.exec.html deleted file mode 100644 index d2f7c613e..000000000 --- a/uu_yes/fn.exec.html +++ /dev/null @@ -1,3 +0,0 @@ -exec in uu_yes - Rust -

Function uu_yes::exec[][src]

pub fn exec(bytes: &[u8]) -> Result<()>
- \ No newline at end of file diff --git a/uu_yes/fn.uu_app.html b/uu_yes/fn.uu_app.html deleted file mode 100644 index 6c5392126..000000000 --- a/uu_yes/fn.uu_app.html +++ /dev/null @@ -1,3 +0,0 @@ -uu_app in uu_yes - Rust -

Function uu_yes::uu_app[][src]

pub fn uu_app<'a>() -> App<'a>
- \ No newline at end of file diff --git a/uu_yes/fn.uumain.html b/uu_yes/fn.uumain.html deleted file mode 100644 index fabf91f22..000000000 --- a/uu_yes/fn.uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -uumain in uu_yes - Rust -

Function uu_yes::uumain[][src]

pub fn uumain(args: impl Args) -> i32
- \ No newline at end of file diff --git a/uu_yes/index.html b/uu_yes/index.html deleted file mode 100644 index d06ca812d..000000000 --- a/uu_yes/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uu_yes - Rust -

Crate uu_yes[][src]

Functions

-
- \ No newline at end of file diff --git a/uu_yes/sidebar-items.js b/uu_yes/sidebar-items.js deleted file mode 100644 index f0892aeaf..000000000 --- a/uu_yes/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["exec",""],["uu_app",""],["uumain",""]]}); \ No newline at end of file diff --git a/uucore/all.html b/uucore/all.html deleted file mode 100644 index 14d9472a4..000000000 --- a/uucore/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Structs

Enums

Traits

Macros

Functions

Typedefs

Statics

Constants

- \ No newline at end of file diff --git a/uucore/backup_control/arguments/fn.backup.html b/uucore/backup_control/arguments/fn.backup.html deleted file mode 100644 index 1b9631cab..000000000 --- a/uucore/backup_control/arguments/fn.backup.html +++ /dev/null @@ -1,4 +0,0 @@ -backup in uucore::backup_control::arguments - Rust -

Function uucore::backup_control::arguments::backup[][src]

pub fn backup<'a>() -> Arg<'a>
Expand description

‘–backup’ argument

-
- \ No newline at end of file diff --git a/uucore/backup_control/arguments/fn.backup_no_args.html b/uucore/backup_control/arguments/fn.backup_no_args.html deleted file mode 100644 index 57aaa5714..000000000 --- a/uucore/backup_control/arguments/fn.backup_no_args.html +++ /dev/null @@ -1,4 +0,0 @@ -backup_no_args in uucore::backup_control::arguments - Rust -

Function uucore::backup_control::arguments::backup_no_args[][src]

pub fn backup_no_args<'a>() -> Arg<'a>
Expand description

‘-b’ argument

-
- \ No newline at end of file diff --git a/uucore/backup_control/arguments/fn.suffix.html b/uucore/backup_control/arguments/fn.suffix.html deleted file mode 100644 index 9a7979f40..000000000 --- a/uucore/backup_control/arguments/fn.suffix.html +++ /dev/null @@ -1,4 +0,0 @@ -suffix in uucore::backup_control::arguments - Rust -

Function uucore::backup_control::arguments::suffix[][src]

pub fn suffix<'a>() -> Arg<'a>
Expand description

‘-S, –suffix’ argument

-
- \ No newline at end of file diff --git a/uucore/backup_control/arguments/index.html b/uucore/backup_control/arguments/index.html deleted file mode 100644 index b6fb889e7..000000000 --- a/uucore/backup_control/arguments/index.html +++ /dev/null @@ -1,13 +0,0 @@ -uucore::backup_control::arguments - Rust -

Module uucore::backup_control::arguments[][src]

Expand description

Arguments for backup-related functionality.

-

Rather than implementing the clap-Arguments for every utility, it is -recommended to include the clap arguments via the functions provided here. -This way the backup-specific arguments are handled uniformly across -utilities and can be maintained in one central place.

-

Statics

-

Functions

-

‘–backup’ argument

-

‘-b’ argument

-

‘-S, –suffix’ argument

-
- \ No newline at end of file diff --git a/uucore/backup_control/arguments/sidebar-items.js b/uucore/backup_control/arguments/sidebar-items.js deleted file mode 100644 index f535fdc57..000000000 --- a/uucore/backup_control/arguments/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["backup","‘–backup’ argument"],["backup_no_args","‘-b’ argument"],["suffix","‘-S, –suffix’ argument"]],"static":[["OPT_BACKUP",""],["OPT_BACKUP_NO_ARG",""],["OPT_SUFFIX",""]]}); \ No newline at end of file diff --git a/uucore/backup_control/arguments/static.OPT_BACKUP.html b/uucore/backup_control/arguments/static.OPT_BACKUP.html deleted file mode 100644 index b514ff6c3..000000000 --- a/uucore/backup_control/arguments/static.OPT_BACKUP.html +++ /dev/null @@ -1,3 +0,0 @@ -OPT_BACKUP in uucore::backup_control::arguments - Rust -

Static uucore::backup_control::arguments::OPT_BACKUP[][src]

pub static OPT_BACKUP: &str
- \ No newline at end of file diff --git a/uucore/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html b/uucore/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html deleted file mode 100644 index bfb66099c..000000000 --- a/uucore/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html +++ /dev/null @@ -1,3 +0,0 @@ -OPT_BACKUP_NO_ARG in uucore::backup_control::arguments - Rust -

Static uucore::backup_control::arguments::OPT_BACKUP_NO_ARG[][src]

pub static OPT_BACKUP_NO_ARG: &str
- \ No newline at end of file diff --git a/uucore/backup_control/arguments/static.OPT_SUFFIX.html b/uucore/backup_control/arguments/static.OPT_SUFFIX.html deleted file mode 100644 index 458525669..000000000 --- a/uucore/backup_control/arguments/static.OPT_SUFFIX.html +++ /dev/null @@ -1,3 +0,0 @@ -OPT_SUFFIX in uucore::backup_control::arguments - Rust -

Static uucore::backup_control::arguments::OPT_SUFFIX[][src]

pub static OPT_SUFFIX: &str
- \ No newline at end of file diff --git a/uucore/backup_control/enum.BackupError.html b/uucore/backup_control/enum.BackupError.html deleted file mode 100644 index 2d6562c22..000000000 --- a/uucore/backup_control/enum.BackupError.html +++ /dev/null @@ -1,39 +0,0 @@ -BackupError in uucore::backup_control - Rust -

Enum uucore::backup_control::BackupError[][src]

pub enum BackupError {
-    InvalidArgument(StringString),
-    AmbiguousArgument(StringString),
-    BackupImpossible(),
-}
Expand description

Backup error types.

-

Errors are currently raised by determine_backup_mode only. All errors -are implemented as [UCustomError] for uniform handling across utilities.

-

Variants

InvalidArgument(StringString)

Tuple Fields

0: String
1: String

An invalid argument (e.g. ‘foo’) was given as backup type. First -parameter is the argument, second is the arguments origin (CLI or -ENV-var)

-

AmbiguousArgument(StringString)

Tuple Fields

0: String
1: String

An ambiguous argument (e.g. ‘n’) was given as backup type. First -parameter is the argument, second is the arguments origin (CLI or -ENV-var)

-

BackupImpossible()

Tuple Fields

Currently unused

-

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/backup_control/enum.BackupMode.html b/uucore/backup_control/enum.BackupMode.html deleted file mode 100644 index e1d842d44..000000000 --- a/uucore/backup_control/enum.BackupMode.html +++ /dev/null @@ -1,34 +0,0 @@ -BackupMode in uucore::backup_control - Rust -

Enum uucore::backup_control::BackupMode[][src]

pub enum BackupMode {
-    NoBackup,
-    SimpleBackup,
-    NumberedBackup,
-    ExistingBackup,
-}
Expand description

Available backup modes.

-

The mapping of the backup modes to the CLI arguments is annotated on the -enum variants.

-

Variants

NoBackup

Argument ‘none’, ‘off’

-

SimpleBackup

Argument ‘simple’, ‘never’

-

NumberedBackup

Argument ‘numbered’, ‘t’

-

ExistingBackup

Argument ‘existing’, ‘nil’

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/backup_control/fn.determine_backup_mode.html b/uucore/backup_control/fn.determine_backup_mode.html deleted file mode 100644 index b15a352e8..000000000 --- a/uucore/backup_control/fn.determine_backup_mode.html +++ /dev/null @@ -1,61 +0,0 @@ -determine_backup_mode in uucore::backup_control - Rust -

Function uucore::backup_control::determine_backup_mode[][src]

pub fn determine_backup_mode(matches: &ArgMatches) -> UResult<BackupMode>
Expand description

Determine the “mode” for the backup operation to perform, if any.

-

Parses the backup options according to the GNU manual, and converts -them to an instance of BackupMode for further processing.

-

Takes [clap::ArgMatches] as argument which must contain the options -from arguments::backup() and arguments::backup_no_args(). Otherwise -the NoBackup mode is returned unconditionally.

-

It is recommended for anyone who would like to implement the -backup-functionality to use the arguments prepared in the arguments -submodule (see examples)

-

Errors

-

If an argument supplied directly to the long backup option, or read in -through the VERSION CONTROL env var is ambiguous (i.e. may resolve to -multiple backup modes) or invalid, an InvalidArgument or -AmbiguousArgument error is returned, respectively.

-

Examples

-

Here’s how one would integrate the backup mode determination into an -application.

- -
#[macro_use]
-extern crate uucore;
-use uucore::backup_control::{self, BackupMode};
-use clap::{App, Arg, ArgMatches};
-
-fn main() {
-    let matches = App::new("app")
-        .arg(backup_control::arguments::backup())
-        .arg(backup_control::arguments::backup_no_args())
-        .get_matches_from(vec![
-            "app", "-b", "--backup=t"
-        ]);
-
-    let backup_mode = backup_control::determine_backup_mode(&matches).unwrap();
-    assert_eq!(backup_mode, BackupMode::NumberedBackup)
-}
-

This example shows an ambiguous input, as ‘n’ may resolve to 4 different -backup modes.

- -
#[macro_use]
-extern crate uucore;
-use uucore::backup_control::{self, BackupMode, BackupError};
-use clap::{App, Arg, ArgMatches};
-
-fn main() {
-    let matches = App::new("app")
-        .arg(backup_control::arguments::backup())
-        .arg(backup_control::arguments::backup_no_args())
-        .get_matches_from(vec![
-            "app", "-b", "--backup=n"
-        ]);
-
-    let backup_mode = backup_control::determine_backup_mode(&matches);
-
-    assert!(backup_mode.is_err());
-    let err = backup_mode.unwrap_err();
-    // assert_eq!(err, BackupError::AmbiguousArgument);
-    // Use uucore functionality to show the error to the user
-    show!(err);
-}
-
- \ No newline at end of file diff --git a/uucore/backup_control/fn.determine_backup_suffix.html b/uucore/backup_control/fn.determine_backup_suffix.html deleted file mode 100644 index 3be113c09..000000000 --- a/uucore/backup_control/fn.determine_backup_suffix.html +++ /dev/null @@ -1,12 +0,0 @@ -determine_backup_suffix in uucore::backup_control - Rust -

Function uucore::backup_control::determine_backup_suffix[][src]

pub fn determine_backup_suffix(matches: &ArgMatches) -> String
Expand description

Obtain the suffix to use for a backup.

-

In order of precedence, this function obtains the backup suffix

-
    -
  1. From the ‘-S’ or ‘–suffix’ CLI argument, if present
  2. -
  3. From the “SIMPLE_BACKUP_SUFFIX” environment variable, if present
  4. -
  5. By using the default ‘~’ if none of the others apply
  6. -
-

This function directly takes [clap::ArgMatches] as argument and looks for -the ‘-S’ and ‘–suffix’ arguments itself.

-
- \ No newline at end of file diff --git a/uucore/backup_control/fn.get_backup_path.html b/uucore/backup_control/fn.get_backup_path.html deleted file mode 100644 index d36fec36c..000000000 --- a/uucore/backup_control/fn.get_backup_path.html +++ /dev/null @@ -1,3 +0,0 @@ -get_backup_path in uucore::backup_control - Rust -

Function uucore::backup_control::get_backup_path[][src]

pub fn get_backup_path(
    backup_mode: BackupMode,
    backup_path: &Path,
    suffix: &str
) -> Option<PathBuf>
- \ No newline at end of file diff --git a/uucore/backup_control/index.html b/uucore/backup_control/index.html deleted file mode 100644 index d9c30e39e..000000000 --- a/uucore/backup_control/index.html +++ /dev/null @@ -1,75 +0,0 @@ -uucore::backup_control - Rust -

Module uucore::backup_control[][src]

Expand description

Implement GNU-style backup functionality.

-

This module implements the backup functionality as described in the GNU -manual. It provides

- -

Backup-functionality is implemented by the following utilities:

-
    -
  • cp
  • -
  • install
  • -
  • ln
  • -
  • mv
  • -
-

Usage example

-
#[macro_use]
-extern crate uucore;
-
-use clap::{App, Arg, ArgMatches};
-use std::path::{Path, PathBuf};
-use uucore::backup_control::{self, BackupMode};
-use uucore::error::{UError, UResult};
-
-fn main() {
-    let usage = String::from("app [OPTION]... ARG");
-    let long_usage = String::from("And here's a detailed explanation");
-
-    let matches = App::new("app")
-        .arg(backup_control::arguments::backup())
-        .arg(backup_control::arguments::backup_no_args())
-        .arg(backup_control::arguments::suffix())
-        .override_usage(&usage[..])
-        .after_help(&*format!(
-            "{}\n{}",
-            long_usage,
-            backup_control::BACKUP_CONTROL_LONG_HELP
-        ))
-        .get_matches_from(vec![
-            "app", "--backup=t", "--suffix=bak~"
-        ]);
-
-    let backup_mode = match backup_control::determine_backup_mode(&matches) {
-        Err(e) => {
-            show!(e);
-            return;
-        },
-        Ok(mode) => mode,
-    };
-    let backup_suffix = backup_control::determine_backup_suffix(&matches);
-    let target_path = Path::new("/tmp/example");
-
-    let backup_path = backup_control::get_backup_path(
-        backup_mode, target_path, &backup_suffix
-    );
-
-    // Perform your backups here.
-
-}
-

Modules

-

Arguments for backup-related functionality.

-

Enums

-

Backup error types.

-

Available backup modes.

-

Statics

-

Functions

-

Determine the “mode” for the backup operation to perform, if any.

-

Obtain the suffix to use for a backup.

-
- \ No newline at end of file diff --git a/uucore/backup_control/sidebar-items.js b/uucore/backup_control/sidebar-items.js deleted file mode 100644 index da002e781..000000000 --- a/uucore/backup_control/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["BackupError","Backup error types."],["BackupMode","Available backup modes."]],"fn":[["determine_backup_mode","Determine the “mode” for the backup operation to perform, if any."],["determine_backup_suffix","Obtain the suffix to use for a backup."],["get_backup_path",""]],"mod":[["arguments","Arguments for backup-related functionality."]],"static":[["BACKUP_CONTROL_LONG_HELP",""],["BACKUP_CONTROL_VALUES",""]]}); \ No newline at end of file diff --git a/uucore/backup_control/static.BACKUP_CONTROL_LONG_HELP.html b/uucore/backup_control/static.BACKUP_CONTROL_LONG_HELP.html deleted file mode 100644 index 3c7cc0951..000000000 --- a/uucore/backup_control/static.BACKUP_CONTROL_LONG_HELP.html +++ /dev/null @@ -1,3 +0,0 @@ -BACKUP_CONTROL_LONG_HELP in uucore::backup_control - Rust -

Static uucore::backup_control::BACKUP_CONTROL_LONG_HELP[][src]

pub static BACKUP_CONTROL_LONG_HELP: &str
- \ No newline at end of file diff --git a/uucore/backup_control/static.BACKUP_CONTROL_VALUES.html b/uucore/backup_control/static.BACKUP_CONTROL_VALUES.html deleted file mode 100644 index c78752859..000000000 --- a/uucore/backup_control/static.BACKUP_CONTROL_VALUES.html +++ /dev/null @@ -1,3 +0,0 @@ -BACKUP_CONTROL_VALUES in uucore::backup_control - Rust -

Static uucore::backup_control::BACKUP_CONTROL_VALUES[][src]

pub static BACKUP_CONTROL_VALUES: &[&str]
- \ No newline at end of file diff --git a/uucore/display/fn.print_verbatim.html b/uucore/display/fn.print_verbatim.html deleted file mode 100644 index f3e6d31a0..000000000 --- a/uucore/display/fn.print_verbatim.html +++ /dev/null @@ -1,4 +0,0 @@ -print_verbatim in uucore::display - Rust -

Function uucore::display::print_verbatim[][src]

pub fn print_verbatim<S: AsRef<OsStr>>(text: S) -> Result<()>
Expand description

Like println_verbatim, without the trailing newline.

-
- \ No newline at end of file diff --git a/uucore/display/fn.println_verbatim.html b/uucore/display/fn.println_verbatim.html deleted file mode 100644 index c034b24cc..000000000 --- a/uucore/display/fn.println_verbatim.html +++ /dev/null @@ -1,11 +0,0 @@ -println_verbatim in uucore::display - Rust -

Function uucore::display::println_verbatim[][src]

pub fn println_verbatim<S: AsRef<OsStr>>(text: S) -> Result<()>
Expand description

Print a path (or OsStr-like object) directly to stdout, with a trailing newline, -without losing any information if its encoding is invalid.

-

This function is appropriate for commands where printing paths is the point and the -output is likely to be captured, like pwd and basename. For informational output -use Quotable::quote.

-

FIXME: This is lossy on Windows. It could probably be implemented using some low-level -API that takes UTF-16, without going through io::Write. This is not a big priority -because broken filenames are much rarer on Windows than on Unix.

-
- \ No newline at end of file diff --git a/uucore/display/index.html b/uucore/display/index.html deleted file mode 100644 index 87f982516..000000000 --- a/uucore/display/index.html +++ /dev/null @@ -1,11 +0,0 @@ -uucore::display - Rust -

Module uucore::display[][src]

Structs

-

A wrapper around string types for displaying with quoting and escaping applied.

-

Traits

-

An extension trait to apply quoting to strings.

-

Functions

-

Like println_verbatim, without the trailing newline.

-

Print a path (or OsStr-like object) directly to stdout, with a trailing newline, -without losing any information if its encoding is invalid.

-
- \ No newline at end of file diff --git a/uucore/display/sidebar-items.js b/uucore/display/sidebar-items.js deleted file mode 100644 index 751a88d61..000000000 --- a/uucore/display/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["print_verbatim","Like `println_verbatim`, without the trailing newline."],["println_verbatim","Print a path (or `OsStr`-like object) directly to stdout, with a trailing newline, without losing any information if its encoding is invalid."]],"struct":[["Quoted","A wrapper around string types for displaying with quoting and escaping applied."]],"trait":[["Quotable","An extension trait to apply quoting to strings."]]}); \ No newline at end of file diff --git a/uucore/display/struct.Quoted.html b/uucore/display/struct.Quoted.html deleted file mode 100644 index af237b2ae..000000000 --- a/uucore/display/struct.Quoted.html +++ /dev/null @@ -1,31 +0,0 @@ -Quoted in uucore::display - Rust -

Struct uucore::display::Quoted[]

pub struct Quoted<'a> { /* fields omitted */ }
Expand description

A wrapper around string types for displaying with quoting and escaping applied.

-

Implementations

Quote a string with the default style for the platform.

-

On Windows this is PowerShell syntax, on all other platforms this is -bash/ksh syntax.

-

Quote an OsStr with the default style for the platform.

-

On platforms other than Windows, Unix and WASI, if the encoding is -invalid, the Debug representation will be used.

-

Toggle forced quoting. If true, quotes are added even if no special -characters are present.

-

Defaults to true.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

Performs the conversion.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/display/trait.Quotable.html b/uucore/display/trait.Quotable.html deleted file mode 100644 index 21f212e59..000000000 --- a/uucore/display/trait.Quotable.html +++ /dev/null @@ -1,32 +0,0 @@ -Quotable in uucore::display - Rust -

Trait uucore::display::Quotable[]

pub trait Quotable {
-    fn quote(&self) -> Quoted<'_>;
-
-    fn maybe_quote(&self) -> Quoted<'_> { ... }
-}
Expand description

An extension trait to apply quoting to strings.

-

This is implemented on str, OsStr and Path.

-

For finer control, see the constructors on Quoted.

-

Required methods

Returns an object that implements Display for printing strings with -proper quoting and escaping for the platform.

-

On Unix this corresponds to bash/ksh syntax, on Windows PowerShell syntax -is used.

-
Examples
-
use std::path::Path;
-use os_display::Quotable;
-
-let path = Path::new("foo/bar.baz");
-
-println!("Found file {}", path.quote()); // Prints "Found file 'foo/bar.baz'"
-

Provided methods

Like quote(), but don’t actually add quotes unless necessary because of -whitespace or special characters.

-
Examples
-
use std::path::Path;
-use os_display::Quotable;
-
-let foo = Path::new("foo/bar.baz");
-let bar = "foo bar";
-
-println!("{}: Not found", foo.maybe_quote()); // Prints "foo/bar.baz: Not found"
-println!("{}: Not found", bar.maybe_quote()); // Prints "'foo bar': Not found"
-

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uucore/encoding/enum.DecodeError.html b/uucore/encoding/enum.DecodeError.html deleted file mode 100644 index 259169933..000000000 --- a/uucore/encoding/enum.DecodeError.html +++ /dev/null @@ -1,26 +0,0 @@ -DecodeError in uucore::encoding - Rust -

Enum uucore::encoding::DecodeError[][src]

pub enum DecodeError {
-    Decode(DecodeError),
-    DecodeZ85(DecodeError),
-    Io(Error),
-}

Variants

Decode(DecodeError)

Tuple Fields

0: DecodeError

DecodeZ85(DecodeError)

Tuple Fields

0: DecodeError

Io(Error)

Tuple Fields

0: Error

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Performs the conversion.

-

Performs the conversion.

-

Performs the conversion.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/encoding/enum.EncodeError.html b/uucore/encoding/enum.EncodeError.html deleted file mode 100644 index 75f1a8c3f..000000000 --- a/uucore/encoding/enum.EncodeError.html +++ /dev/null @@ -1,14 +0,0 @@ -EncodeError in uucore::encoding - Rust -

Enum uucore::encoding::EncodeError[][src]

pub enum EncodeError {
-    Z85InputLenNotMultipleOf4,
-}

Variants

Z85InputLenNotMultipleOf4

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/encoding/enum.Format.html b/uucore/encoding/enum.Format.html deleted file mode 100644 index fa4b6222c..000000000 --- a/uucore/encoding/enum.Format.html +++ /dev/null @@ -1,26 +0,0 @@ -Format in uucore::encoding - Rust -

Enum uucore::encoding::Format[][src]

pub enum Format {
-    Base64,
-    Base64Url,
-    Base32,
-    Base32Hex,
-    Base16,
-    Base2Lsbf,
-    Base2Msbf,
-    Z85,
-}

Variants

Base64

Base64Url

Base32

Base32Hex

Base16

Base2Lsbf

Base2Msbf

Z85

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/encoding/fn.decode.html b/uucore/encoding/fn.decode.html deleted file mode 100644 index 9efeb51f5..000000000 --- a/uucore/encoding/fn.decode.html +++ /dev/null @@ -1,3 +0,0 @@ -decode in uucore::encoding - Rust -

Function uucore::encoding::decode[][src]

pub fn decode(f: Format, input: &[u8]) -> DecodeResult
- \ No newline at end of file diff --git a/uucore/encoding/fn.encode.html b/uucore/encoding/fn.encode.html deleted file mode 100644 index 57432f462..000000000 --- a/uucore/encoding/fn.encode.html +++ /dev/null @@ -1,3 +0,0 @@ -encode in uucore::encoding - Rust -

Function uucore::encoding::encode[][src]

pub fn encode(f: Format, input: &[u8]) -> Result<String, EncodeError>
- \ No newline at end of file diff --git a/uucore/encoding/fn.wrap_print.html b/uucore/encoding/fn.wrap_print.html deleted file mode 100644 index 2a75affea..000000000 --- a/uucore/encoding/fn.wrap_print.html +++ /dev/null @@ -1,3 +0,0 @@ -wrap_print in uucore::encoding - Rust -

Function uucore::encoding::wrap_print[][src]

pub fn wrap_print<R: Read>(data: &Data<R>, res: String)
- \ No newline at end of file diff --git a/uucore/encoding/fn.wrap_write.html b/uucore/encoding/fn.wrap_write.html deleted file mode 100644 index 077a18031..000000000 --- a/uucore/encoding/fn.wrap_write.html +++ /dev/null @@ -1,3 +0,0 @@ -wrap_write in uucore::encoding - Rust -

Function uucore::encoding::wrap_write[][src]

pub fn wrap_write<W: Write>(
    writer: W,
    line_wrap: usize,
    res: String
) -> Result<()>
- \ No newline at end of file diff --git a/uucore/encoding/index.html b/uucore/encoding/index.html deleted file mode 100644 index 08866e78f..000000000 --- a/uucore/encoding/index.html +++ /dev/null @@ -1,7 +0,0 @@ -uucore::encoding - Rust -

Module uucore::encoding[][src]

Structs

-

Enums

-

Functions

-

Type Definitions

-
- \ No newline at end of file diff --git a/uucore/encoding/sidebar-items.js b/uucore/encoding/sidebar-items.js deleted file mode 100644 index 85174e671..000000000 --- a/uucore/encoding/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["DecodeError",""],["EncodeError",""],["Format",""]],"fn":[["decode",""],["encode",""],["wrap_print",""],["wrap_write",""]],"struct":[["Data",""]],"type":[["DecodeResult",""]]}); \ No newline at end of file diff --git a/uucore/encoding/struct.Data.html b/uucore/encoding/struct.Data.html deleted file mode 100644 index 3f67c898e..000000000 --- a/uucore/encoding/struct.Data.html +++ /dev/null @@ -1,12 +0,0 @@ -Data in uucore::encoding - Rust -

Struct uucore::encoding::Data[][src]

pub struct Data<R: Read> { /* fields omitted */ }

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/encoding/type.DecodeResult.html b/uucore/encoding/type.DecodeResult.html deleted file mode 100644 index fa863ca2c..000000000 --- a/uucore/encoding/type.DecodeResult.html +++ /dev/null @@ -1,3 +0,0 @@ -DecodeResult in uucore::encoding - Rust -

Type Definition uucore::encoding::DecodeResult[][src]

pub type DecodeResult = Result<Vec<u8>, DecodeError>;
- \ No newline at end of file diff --git a/uucore/entries/fn.get_groups.html b/uucore/entries/fn.get_groups.html deleted file mode 100644 index 37b3fe758..000000000 --- a/uucore/entries/fn.get_groups.html +++ /dev/null @@ -1,12 +0,0 @@ -get_groups in uucore::entries - Rust -

Function uucore::entries::get_groups[][src]

pub fn get_groups() -> IOResult<Vec<gid_t>>
Expand description

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-
-

getgroups() returns the supplementary group IDs of the calling -process in list. -If size is zero, list is not modified, but the total number of -supplementary group IDs for the process is returned. This allows -the caller to determine the size of a dynamically allocated list -to be used in a further call to getgroups().

-
-
- \ No newline at end of file diff --git a/uucore/entries/fn.get_groups_gnu.html b/uucore/entries/fn.get_groups_gnu.html deleted file mode 100644 index b45b08b22..000000000 --- a/uucore/entries/fn.get_groups_gnu.html +++ /dev/null @@ -1,25 +0,0 @@ -get_groups_gnu in uucore::entries - Rust -

Function uucore::entries::get_groups_gnu[][src]

pub fn get_groups_gnu(arg_id: Option<u32>) -> IOResult<Vec<gid_t>>
Expand description

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-

If arg_id is None (default), get_groups_gnu moves the effective -group id (egid) to the first entry in the returned Vector. -If arg_id is Some(x), get_groups_gnu moves the id with value x -to the first entry in the returned Vector. This might be necessary -for id --groups --real if gid and egid are not equal.

-

From: <https://www.man7.org/linux/man-pages/man3/getgroups.3p.html>

-
-

As implied by the definition of supplementary groups, the -effective group ID may appear in the array returned by -getgroups() or it may be returned only by getegid(). Duplication -may exist, but the application needs to call getegid() to be sure -of getting all of the information. Various implementation -variations and administrative sequences cause the set of groups -appearing in the result of getgroups() to vary in order and as to -whether the effective group ID is included, even when the set of -groups is the same (in the mathematical sense of ``set’’). (The -history of a process and its parents could affect the details of -the result.)

-
-
- \ No newline at end of file diff --git a/uucore/entries/fn.gid2grp.html b/uucore/entries/fn.gid2grp.html deleted file mode 100644 index 9b079d2cc..000000000 --- a/uucore/entries/fn.gid2grp.html +++ /dev/null @@ -1,3 +0,0 @@ -gid2grp in uucore::entries - Rust -

Function uucore::entries::gid2grp[][src]

pub fn gid2grp(id: gid_t) -> IOResult<String>
- \ No newline at end of file diff --git a/uucore/entries/fn.grp2gid.html b/uucore/entries/fn.grp2gid.html deleted file mode 100644 index c438782c6..000000000 --- a/uucore/entries/fn.grp2gid.html +++ /dev/null @@ -1,3 +0,0 @@ -grp2gid in uucore::entries - Rust -

Function uucore::entries::grp2gid[][src]

pub fn grp2gid(name: &str) -> IOResult<gid_t>
- \ No newline at end of file diff --git a/uucore/entries/fn.uid2usr.html b/uucore/entries/fn.uid2usr.html deleted file mode 100644 index d53c518f7..000000000 --- a/uucore/entries/fn.uid2usr.html +++ /dev/null @@ -1,3 +0,0 @@ -uid2usr in uucore::entries - Rust -

Function uucore::entries::uid2usr[][src]

pub fn uid2usr(id: uid_t) -> IOResult<String>
- \ No newline at end of file diff --git a/uucore/entries/fn.usr2uid.html b/uucore/entries/fn.usr2uid.html deleted file mode 100644 index 9134dcb9d..000000000 --- a/uucore/entries/fn.usr2uid.html +++ /dev/null @@ -1,3 +0,0 @@ -usr2uid in uucore::entries - Rust -

Function uucore::entries::usr2uid[][src]

pub fn usr2uid(name: &str) -> IOResult<uid_t>
- \ No newline at end of file diff --git a/uucore/entries/index.html b/uucore/entries/index.html deleted file mode 100644 index 3c61387fa..000000000 --- a/uucore/entries/index.html +++ /dev/null @@ -1,33 +0,0 @@ -uucore::entries - Rust -

Module uucore::entries[][src]

Expand description

Get password/group file entry

-

Examples:

-
use uucore::entries::{self, Locate};
-
-let root_group = if cfg!(any(target_os = "linux", target_os = "android")) {
-    "root"
-} else {
-    "wheel"
-};
-
-assert_eq!("root", entries::uid2usr(0).unwrap());
-assert_eq!(0, entries::usr2uid("root").unwrap());
-assert!(entries::gid2grp(0).is_ok());
-assert!(entries::grp2gid(root_group).is_ok());
-
-assert!(entries::Passwd::locate(0).is_ok());
-assert!(entries::Passwd::locate("0").is_ok());
-assert!(entries::Passwd::locate("root").is_ok());
-
-assert!(entries::Group::locate(0).is_ok());
-assert!(entries::Group::locate("0").is_ok());
-assert!(entries::Group::locate(root_group).is_ok());
-

Structs

-

Traits

-

Fetch desired entry.

-

Functions

-

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-
- \ No newline at end of file diff --git a/uucore/entries/sidebar-items.js b/uucore/entries/sidebar-items.js deleted file mode 100644 index 6dbed1e4a..000000000 --- a/uucore/entries/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["get_groups","From: ``"],["get_groups_gnu","The list of group IDs returned from GNU’s `groups` and GNU’s `id --groups` starts with the effective group ID (egid). This is a wrapper for `get_groups()` to mimic this behavior."],["gid2grp",""],["grp2gid",""],["uid2usr",""],["usr2uid",""]],"struct":[["Group",""],["Passwd",""]],"trait":[["Locate","Fetch desired entry."]]}); \ No newline at end of file diff --git a/uucore/entries/struct.Group.html b/uucore/entries/struct.Group.html deleted file mode 100644 index be8b41057..000000000 --- a/uucore/entries/struct.Group.html +++ /dev/null @@ -1,23 +0,0 @@ -Group in uucore::entries - Rust -

Struct uucore::entries::Group[][src]

pub struct Group {
-    pub name: String,
-    pub gid: gid_t,
-}

Fields

name: String

AKA group.gr_name

-
gid: gid_t

AKA group.gr_gid

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/entries/struct.Passwd.html b/uucore/entries/struct.Passwd.html deleted file mode 100644 index b1f4a2f12..000000000 --- a/uucore/entries/struct.Passwd.html +++ /dev/null @@ -1,47 +0,0 @@ -Passwd in uucore::entries - Rust -

Struct uucore::entries::Passwd[][src]

pub struct Passwd {
-    pub name: String,
-    pub uid: uid_t,
-    pub gid: gid_t,
-    pub user_info: String,
-    pub user_shell: String,
-    pub user_dir: String,
-    pub user_passwd: String,
-}

Fields

name: String

AKA passwd.pw_name

-
uid: uid_t

AKA passwd.pw_uid

-
gid: gid_t

AKA passwd.pw_gid

-
user_info: String

AKA passwd.pw_gecos

-
user_shell: String

AKA passwd.pw_shell

-
user_dir: String

AKA passwd.pw_dir

-
user_passwd: String

AKA passwd.pw_passwd

-

Implementations

This is a wrapper function for libc::getgrouplist.

-

From: <https://man7.org/linux/man-pages/man3/getgrouplist.3.html>

-
-

If the number of groups of which user is a member is less than or -equal to *ngroups, then the value *ngroups is returned. -If the user is a member of more than *ngroups groups, then -getgrouplist() returns -1. In this case, the value returned in -*ngroups can be used to resize the buffer passed to a further -call getgrouplist().

-
-

However, on macOS/darwin (and maybe others?) getgrouplist does -not update ngroups if ngroups is too small. Therefore, if not -updated by getgrouplist, ngroups needs to be increased in a -loop until getgrouplist stops returning -1.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/entries/trait.Locate.html b/uucore/entries/trait.Locate.html deleted file mode 100644 index 8c1ba4e4e..000000000 --- a/uucore/entries/trait.Locate.html +++ /dev/null @@ -1,6 +0,0 @@ -Locate in uucore::entries - Rust -

Trait uucore::entries::Locate[][src]

pub trait Locate<K> {
-    fn locate(key: K) -> IOResult<Self>
    where
        Self: Sized
; -}
Expand description

Fetch desired entry.

-

Required methods

Implementors

- \ No newline at end of file diff --git a/uucore/enum.ConversionResult.html b/uucore/enum.ConversionResult.html deleted file mode 100644 index 0eec50061..000000000 --- a/uucore/enum.ConversionResult.html +++ /dev/null @@ -1,15 +0,0 @@ -ConversionResult in uucore - Rust -

Enum uucore::ConversionResult[][src]

pub enum ConversionResult {
-    Complete(Vec<String>),
-    Lossy(Vec<String>),
-}

Variants

Complete(Vec<String>)

Tuple Fields

0: Vec<String>

Lossy(Vec<String>)

Tuple Fields

0: Vec<String>

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/enum.InvalidEncodingHandling.html b/uucore/enum.InvalidEncodingHandling.html deleted file mode 100644 index 1a64a605f..000000000 --- a/uucore/enum.InvalidEncodingHandling.html +++ /dev/null @@ -1,16 +0,0 @@ -InvalidEncodingHandling in uucore - Rust -

Enum uucore::InvalidEncodingHandling[][src]

pub enum InvalidEncodingHandling {
-    Ignore,
-    ConvertLossy,
-    Panic,
-}

Variants

Ignore

ConvertLossy

Panic

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/error/fn.get_exit_code.html b/uucore/error/fn.get_exit_code.html deleted file mode 100644 index ec686089d..000000000 --- a/uucore/error/fn.get_exit_code.html +++ /dev/null @@ -1,5 +0,0 @@ -get_exit_code in uucore::error - Rust -

Function uucore::error::get_exit_code[][src]

pub fn get_exit_code() -> i32
Expand description

Get the last exit code set with set_exit_code. -The default value is 0.

-
- \ No newline at end of file diff --git a/uucore/error/fn.set_exit_code.html b/uucore/error/fn.set_exit_code.html deleted file mode 100644 index d3723647d..000000000 --- a/uucore/error/fn.set_exit_code.html +++ /dev/null @@ -1,20 +0,0 @@ -set_exit_code in uucore::error - Rust -

Function uucore::error::set_exit_code[][src]

pub fn set_exit_code(code: i32)
Expand description

Set the exit code for the program if uumain returns Ok(()).

-

This function is most useful for non-fatal errors, for example when applying an operation to -multiple files:

- -
use uucore::error::{UResult, set_exit_code};
-
-fn uumain(args: impl uucore::Args) -> UResult<()> {
-    ...
-    for file in files {
-        let res = some_operation_that_might_fail(file);
-        match res {
-            Ok() => {},
-            Err(_) => set_exit_code(1),
-        }
-    }
-    Ok(()) // If any of the operations failed, 1 is returned.
-}
-
- \ No newline at end of file diff --git a/uucore/error/fn.strip_errno.html b/uucore/error/fn.strip_errno.html deleted file mode 100644 index c6dedba46..000000000 --- a/uucore/error/fn.strip_errno.html +++ /dev/null @@ -1,4 +0,0 @@ -strip_errno in uucore::error - Rust -

Function uucore::error::strip_errno[][src]

pub fn strip_errno(err: &Error) -> String
Expand description

Strip the trailing “ (os error XX)“ from io error strings.

-
- \ No newline at end of file diff --git a/uucore/error/index.html b/uucore/error/index.html deleted file mode 100644 index c5aea3e42..000000000 --- a/uucore/error/index.html +++ /dev/null @@ -1,71 +0,0 @@ -uucore::error - Rust -

Module uucore::error[][src]

Expand description

All utils return exit with an exit code. Usually, the following scheme is used:

-
    -
  • 0: succeeded
  • -
  • 1: minor problems
  • -
  • 2: major problems
  • -
-

This module provides types to reconcile these exit codes with idiomatic Rust error -handling. This has a couple advantages over manually using std::process::exit:

-
    -
  1. It enables the use of ?, map_err, unwrap_or, etc. in uumain.
  2. -
  3. It encourages the use of UResult/Result in functions in the utils.
  4. -
  5. The error messages are largely standardized across utils.
  6. -
  7. Standardized error messages can be created from external result types -(i.e. std::io::Result & clap::ClapResult).
  8. -
  9. set_exit_code takes away the burden of manually tracking exit codes for non-fatal errors.
  10. -
-

Usage

-

The signature of a typical util should be:

- -
fn uumain(args: impl uucore::Args) -> UResult<()> {
-    ...
-}
-

UResult is a simple wrapper around Result with a custom error trait: UError. The -most important difference with types implementing std::error::Error is that UErrors -can specify the exit code of the program when they are returned from uumain:

-
    -
  • When Ok is returned, the code set with set_exit_code is used as exit code. If -set_exit_code was not used, then 0 is used.
  • -
  • When Err is returned, the code corresponding with the error is used as exit code and the -error message is displayed.
  • -
-

Additionally, the errors can be displayed manually with the show and show_if_err macros:

- -
let res = Err(USimpleError::new(1, "Error!!"));
-show_if_err!(res);
-// or
-if let Err(e) = res {
-   show!(e);
-}
-

Note: The show and show_if_err macros set the exit code of the program using -set_exit_code. See the documentation on that function for more information.

-

Guidelines

-
    -
  • Use error types from uucore where possible.
  • -
  • Add error types to uucore if an error appears in multiple utils.
  • -
  • Prefer proper custom error types over ExitCode and USimpleError.
  • -
  • USimpleError may be used in small utils with simple error handling.
  • -
  • Using ExitCode is not recommended but can be useful for converting utils to use -UResult.
  • -
-

Macros

-

Shorthand to construct UIoError-instances.

-

Structs

-

A special error type that does not print any message when returned from -uumain. Especially useful for porting utilities to using UResult.

-

Wrapper type around std::io::Error.

-

A simple error type with an exit code and a message that implements UError.

-

Traits

-

Enables the conversion from std::io::Error to UError and from std::io::Result to -UResult.

-

Custom errors defined by the utils and uucore.

-

Functions

-

Get the last exit code set with set_exit_code. -The default value is 0.

-

Set the exit code for the program if uumain returns Ok(()).

-

Strip the trailing “ (os error XX)“ from io error strings.

-

Type Definitions

-

Result type that should be returned by all utils.

-
- \ No newline at end of file diff --git a/uucore/error/macro.uio_error!.html b/uucore/error/macro.uio_error!.html deleted file mode 100644 index 6e7fc9fa5..000000000 --- a/uucore/error/macro.uio_error!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.uio_error.html...

- - - \ No newline at end of file diff --git a/uucore/error/macro.uio_error.html b/uucore/error/macro.uio_error.html deleted file mode 100644 index c78098181..000000000 --- a/uucore/error/macro.uio_error.html +++ /dev/null @@ -1,53 +0,0 @@ -uio_error in uucore::error - Rust -

Macro uucore::error::uio_error[][src]

macro_rules! uio_error {
-    ($err : expr, $($args : tt) +) => { ... };
-}
-
Expand description

Shorthand to construct UIoError-instances.

-

This macro serves as a convenience call to quickly construct instances of -UIoError. It takes:

-
    -
  • An instance of std::io::Error
  • -
  • A format!-compatible string and
  • -
  • An arbitrary number of arguments to the format string
  • -
-

In exactly this order. It is equivalent to the more verbose code seen in the -example.

-

Examples

-
use uucore::error::UIoError;
-use uucore::uio_error;
-
-let io_err = std::io::Error::new(
-    std::io::ErrorKind::PermissionDenied, "fix me please!"
-);
-
-let uio_err = UIoError::new(
-    io_err.kind(),
-    format!("Error code: {}", 2)
-);
-
-let other_uio_err = uio_error!(io_err, "Error code: {}", 2);
-
-// prints "fix me please!: Permission denied"
-println!("{}", uio_err);
-// prints "Error code: 2: Permission denied"
-println!("{}", other_uio_err);
-

The std::fmt::Display impl of UIoError will then ensure that an -appropriate error message relating to the actual error kind of the -std::io::Error is appended to whatever error message is defined in -addition (as secondary argument).

-

If you want to show only the error message for the std::io::ErrorKind -that’s contained in UIoError, pass the second argument as empty string:

- -
use uucore::error::UIoError;
-use uucore::uio_error;
-
-let io_err = std::io::Error::new(
-    std::io::ErrorKind::PermissionDenied, "fix me please!"
-);
-
-let other_uio_err = uio_error!(io_err, "");
-
-// prints: ": Permission denied"
-println!("{}", other_uio_err);
-
- \ No newline at end of file diff --git a/uucore/error/sidebar-items.js b/uucore/error/sidebar-items.js deleted file mode 100644 index 68a5686ea..000000000 --- a/uucore/error/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["get_exit_code","Get the last exit code set with [`set_exit_code`]. The default value is `0`."],["set_exit_code","Set the exit code for the program if `uumain` returns `Ok(())`."],["strip_errno","Strip the trailing “ (os error XX)“ from io error strings."]],"macro":[["uio_error","Shorthand to construct [`UIoError`]-instances."]],"struct":[["ExitCode","A special error type that does not print any message when returned from `uumain`. Especially useful for porting utilities to using [`UResult`]."],["UIoError","Wrapper type around [`std::io::Error`]."],["USimpleError","A simple error type with an exit code and a message that implements [`UError`]."],["UUsageError",""]],"trait":[["FromIo","Enables the conversion from [`std::io::Error`] to [`UError`] and from [`std::io::Result`] to [`UResult`]."],["UError","Custom errors defined by the utils and `uucore`."]],"type":[["UResult","Result type that should be returned by all utils."]]}); \ No newline at end of file diff --git a/uucore/error/struct.ExitCode.html b/uucore/error/struct.ExitCode.html deleted file mode 100644 index 5e63a4e85..000000000 --- a/uucore/error/struct.ExitCode.html +++ /dev/null @@ -1,33 +0,0 @@ -ExitCode in uucore::error - Rust -

Struct uucore::error::ExitCode[][src]

pub struct ExitCode(pub i32);
Expand description

A special error type that does not print any message when returned from -uumain. Especially useful for porting utilities to using UResult.

-

There are two ways to construct an ExitCode:

- -
use uucore::error::{ExitCode, UResult};
-// Explicit
-let res: UResult<()> = Err(ExitCode(1).into());
-
-// Using into on `i32`:
-let res: UResult<()> = Err(1.into());
-

This type is especially useful for a trivial conversion from utils returning i32 to -returning UResult.

-

Tuple Fields

0: i32

Implementations

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/error/struct.UIoError.html b/uucore/error/struct.UIoError.html deleted file mode 100644 index ab1cc3532..000000000 --- a/uucore/error/struct.UIoError.html +++ /dev/null @@ -1,45 +0,0 @@ -UIoError in uucore::error - Rust -

Struct uucore::error::UIoError[][src]

pub struct UIoError { /* fields omitted */ }
Expand description

Wrapper type around std::io::Error.

-

The messages displayed by UIoError should match the error messages displayed by GNU -coreutils.

-

There are two ways to construct this type: with UIoError::new or by calling the -FromIo::map_err_context method on a std::io::Result or std::io::Error.

- -
use uucore::{
-    display::Quotable,
-    error::{FromIo, UResult, UIoError, UError}
-};
-use std::fs::File;
-use std::path::Path;
-let path = Path::new("test.txt");
-
-// Manual construction
-let e: Box<dyn UError> = UIoError::new(
-    std::io::ErrorKind::NotFound,
-    format!("cannot access {}", path.quote())
-);
-let res: UResult<()> = Err(e.into());
-
-// Converting from an `std::io::Error`.
-let res: UResult<File> = File::open(path).map_err_context(|| format!("cannot access {}", path.quote()));
-

Implementations

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Performs the conversion.

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/error/struct.USimpleError.html b/uucore/error/struct.USimpleError.html deleted file mode 100644 index a2e045a19..000000000 --- a/uucore/error/struct.USimpleError.html +++ /dev/null @@ -1,31 +0,0 @@ -USimpleError in uucore::error - Rust -

Struct uucore::error::USimpleError[][src]

pub struct USimpleError {
-    pub code: i32,
-    pub message: String,
-}
Expand description

A simple error type with an exit code and a message that implements UError.

- -
use uucore::error::{UResult, USimpleError};
-let err = USimpleError { code: 1, message: "error!".into()};
-let res: UResult<()> = Err(err.into());
-// or using the `new` method:
-let res: UResult<()> = Err(USimpleError::new(1, "error!"));
-

Fields

code: i32message: String

Implementations

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/error/struct.UUsageError.html b/uucore/error/struct.UUsageError.html deleted file mode 100644 index ea26022fb..000000000 --- a/uucore/error/struct.UUsageError.html +++ /dev/null @@ -1,24 +0,0 @@ -UUsageError in uucore::error - Rust -

Struct uucore::error::UUsageError[][src]

pub struct UUsageError {
-    pub code: i32,
-    pub message: String,
-}

Fields

code: i32message: String

Implementations

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

Error code of a custom error. Read more

-

Print usage help to a custom error. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/error/trait.FromIo.html b/uucore/error/trait.FromIo.html deleted file mode 100644 index 16e4a711b..000000000 --- a/uucore/error/trait.FromIo.html +++ /dev/null @@ -1,7 +0,0 @@ -FromIo in uucore::error - Rust -

Trait uucore::error::FromIo[][src]

pub trait FromIo<T> {
-    fn map_err_context(self, context: impl FnOnce() -> String) -> T;
-}
Expand description

Enables the conversion from std::io::Error to UError and from std::io::Result to -UResult.

-

Required methods

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uucore/error/trait.UError.html b/uucore/error/trait.UError.html deleted file mode 100644 index 2ce3eb639..000000000 --- a/uucore/error/trait.UError.html +++ /dev/null @@ -1,147 +0,0 @@ -UError in uucore::error - Rust -

Trait uucore::error::UError[][src]

pub trait UError: Error + Send {
-    fn code(&self) -> i32 { ... }
-
fn usage(&self) -> bool { ... } -}
Expand description

Custom errors defined by the utils and uucore.

-

All errors should implement std::error::Error, std::fmt::Display and -std::fmt::Debug and have an additional code method that specifies the -exit code of the program if the error is returned from uumain.

-

An example of a custom error from ls:

- -
use uucore::{
-    display::Quotable,
-    error::{UError, UResult}
-};
-use std::{
-    error::Error,
-    fmt::{Display, Debug},
-    path::PathBuf
-};
-
-#[derive(Debug)]
-enum LsError {
-    InvalidLineWidth(String),
-    NoMetadata(PathBuf),
-}
-
-impl UError for LsError {
-    fn code(&self) -> i32 {
-        match self {
-            LsError::InvalidLineWidth(_) => 2,
-            LsError::NoMetadata(_) => 1,
-        }
-    }
-}
-
-impl Error for LsError {}
-
-impl Display for LsError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            LsError::InvalidLineWidth(s) => write!(f, "invalid line width: {}", s.quote()),
-            LsError::NoMetadata(p) => write!(f, "could not open file: {}", p.quote()),
-        }
-    }
-}
-

The main routine would look like this:

- -
#[uucore_procs::gen_uumain]
-pub fn uumain(args: impl uucore::Args) -> UResult<()> {
-    // Perform computations here ...
-    return Err(LsError::InvalidLineWidth(String::from("test")).into())
-}
-

The call to into() is required to convert the LsError to -Box<dyn UError>. The implementation for From is provided automatically.

-

A crate like quick_error might -also be used, but will still require an impl for the code method.

-

Provided methods

Error code of a custom error.

-

Set a return value for each variant of an enum-type to associate an -error code (which is returned to the system shell) with an error -variant.

-
Example
-
use uucore::{
-    display::Quotable,
-    error::UError
-};
-use std::{
-    error::Error,
-    fmt::{Display, Debug},
-    path::PathBuf
-};
-
-#[derive(Debug)]
-enum MyError {
-    Foo(String),
-    Bar(PathBuf),
-    Bing(),
-}
-
-impl UError for MyError {
-    fn code(&self) -> i32 {
-        match self {
-            MyError::Foo(_) => 2,
-            // All other errors yield the same error code, there's no
-            // need to list them explicitly.
-            _ => 1,
-        }
-    }
-}
-
-impl Error for MyError {}
-
-impl Display for MyError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        use MyError as ME;
-        match self {
-            ME::Foo(s) => write!(f, "Unknown Foo: {}", s.quote()),
-            ME::Bar(p) => write!(f, "Couldn't find Bar: {}", p.quote()),
-            ME::Bing() => write!(f, "Exterminate!"),
-        }
-    }
-}
-

Print usage help to a custom error.

-

Return true or false to control whether a short usage help is printed -below the error message. The usage help is in the format: “Try {name} --help for more information.” and printed only if true is returned.

-
Example
-
use uucore::{
-    display::Quotable,
-    error::UError
-};
-use std::{
-    error::Error,
-    fmt::{Display, Debug},
-    path::PathBuf
-};
-
-#[derive(Debug)]
-enum MyError {
-    Foo(String),
-    Bar(PathBuf),
-    Bing(),
-}
-
-impl UError for MyError {
-    fn usage(&self) -> bool {
-        match self {
-            // This will have a short usage help appended
-            MyError::Bar(_) => true,
-            // These matches won't have a short usage help appended
-            _ => false,
-        }
-    }
-}
-
-impl Error for MyError {}
-
-impl Display for MyError {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        use MyError as ME;
-        match self {
-            ME::Foo(s) => write!(f, "Unknown Foo: {}", s.quote()),
-            ME::Bar(p) => write!(f, "Couldn't find Bar: {}", p.quote()),
-            ME::Bing() => write!(f, "Exterminate!"),
-        }
-    }
-}
-

Implementors

- \ No newline at end of file diff --git a/uucore/error/type.UResult.html b/uucore/error/type.UResult.html deleted file mode 100644 index e88331fa0..000000000 --- a/uucore/error/type.UResult.html +++ /dev/null @@ -1,4 +0,0 @@ -UResult in uucore::error - Rust -

Type Definition uucore::error::UResult[][src]

pub type UResult<T> = Result<T, Box<dyn UError>>;
Expand description

Result type that should be returned by all utils.

-
- \ No newline at end of file diff --git a/uucore/features/encoding/enum.DecodeError.html b/uucore/features/encoding/enum.DecodeError.html deleted file mode 100644 index 9fe94b80d..000000000 --- a/uucore/features/encoding/enum.DecodeError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/enum.DecodeError.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/enum.EncodeError.html b/uucore/features/encoding/enum.EncodeError.html deleted file mode 100644 index 9ebeeda59..000000000 --- a/uucore/features/encoding/enum.EncodeError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/enum.EncodeError.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/enum.Format.html b/uucore/features/encoding/enum.Format.html deleted file mode 100644 index e1906cd3a..000000000 --- a/uucore/features/encoding/enum.Format.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/enum.Format.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/fn.decode.html b/uucore/features/encoding/fn.decode.html deleted file mode 100644 index e9de41e2e..000000000 --- a/uucore/features/encoding/fn.decode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/fn.decode.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/fn.encode.html b/uucore/features/encoding/fn.encode.html deleted file mode 100644 index ef94d7111..000000000 --- a/uucore/features/encoding/fn.encode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/fn.encode.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/fn.wrap_print.html b/uucore/features/encoding/fn.wrap_print.html deleted file mode 100644 index 6475da2b2..000000000 --- a/uucore/features/encoding/fn.wrap_print.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/fn.wrap_print.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/fn.wrap_write.html b/uucore/features/encoding/fn.wrap_write.html deleted file mode 100644 index a99951209..000000000 --- a/uucore/features/encoding/fn.wrap_write.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/fn.wrap_write.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/index.html b/uucore/features/encoding/index.html deleted file mode 100644 index 2ff50eb20..000000000 --- a/uucore/features/encoding/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/struct.Data.html b/uucore/features/encoding/struct.Data.html deleted file mode 100644 index 76b55cebf..000000000 --- a/uucore/features/encoding/struct.Data.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/struct.Data.html...

- - - \ No newline at end of file diff --git a/uucore/features/encoding/type.DecodeResult.html b/uucore/features/encoding/type.DecodeResult.html deleted file mode 100644 index de08fb3e1..000000000 --- a/uucore/features/encoding/type.DecodeResult.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/encoding/type.DecodeResult.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/fn.get_groups.html b/uucore/features/entries/fn.get_groups.html deleted file mode 100644 index 80ba0167f..000000000 --- a/uucore/features/entries/fn.get_groups.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/fn.get_groups.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/fn.get_groups_gnu.html b/uucore/features/entries/fn.get_groups_gnu.html deleted file mode 100644 index 4f38a2c38..000000000 --- a/uucore/features/entries/fn.get_groups_gnu.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/fn.get_groups_gnu.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/fn.gid2grp.html b/uucore/features/entries/fn.gid2grp.html deleted file mode 100644 index 3e833ee38..000000000 --- a/uucore/features/entries/fn.gid2grp.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/fn.gid2grp.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/fn.grp2gid.html b/uucore/features/entries/fn.grp2gid.html deleted file mode 100644 index faf1211d4..000000000 --- a/uucore/features/entries/fn.grp2gid.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/fn.grp2gid.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/fn.uid2usr.html b/uucore/features/entries/fn.uid2usr.html deleted file mode 100644 index 739dee1a7..000000000 --- a/uucore/features/entries/fn.uid2usr.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/fn.uid2usr.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/fn.usr2uid.html b/uucore/features/entries/fn.usr2uid.html deleted file mode 100644 index c814861b7..000000000 --- a/uucore/features/entries/fn.usr2uid.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/fn.usr2uid.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/index.html b/uucore/features/entries/index.html deleted file mode 100644 index ca874c09f..000000000 --- a/uucore/features/entries/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/struct.Group.html b/uucore/features/entries/struct.Group.html deleted file mode 100644 index 25ff7d2c3..000000000 --- a/uucore/features/entries/struct.Group.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/struct.Group.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/struct.Passwd.html b/uucore/features/entries/struct.Passwd.html deleted file mode 100644 index 1cb03c188..000000000 --- a/uucore/features/entries/struct.Passwd.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/struct.Passwd.html...

- - - \ No newline at end of file diff --git a/uucore/features/entries/trait.Locate.html b/uucore/features/entries/trait.Locate.html deleted file mode 100644 index 0fca81cd2..000000000 --- a/uucore/features/entries/trait.Locate.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/entries/trait.Locate.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/enum.MissingHandling.html b/uucore/features/fs/enum.MissingHandling.html deleted file mode 100644 index bc30750bb..000000000 --- a/uucore/features/fs/enum.MissingHandling.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/enum.MissingHandling.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/enum.ResolveMode.html b/uucore/features/fs/enum.ResolveMode.html deleted file mode 100644 index 8744dfd6c..000000000 --- a/uucore/features/fs/enum.ResolveMode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/enum.ResolveMode.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/fn.canonicalize.html b/uucore/features/fs/fn.canonicalize.html deleted file mode 100644 index a980bdee8..000000000 --- a/uucore/features/fs/fn.canonicalize.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/fn.canonicalize.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/fn.display_permissions.html b/uucore/features/fs/fn.display_permissions.html deleted file mode 100644 index 6ffac7ab8..000000000 --- a/uucore/features/fs/fn.display_permissions.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/fn.display_permissions.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/fn.display_permissions_unix.html b/uucore/features/fs/fn.display_permissions_unix.html deleted file mode 100644 index 54234db6a..000000000 --- a/uucore/features/fs/fn.display_permissions_unix.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/fn.display_permissions_unix.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/fn.normalize_path.html b/uucore/features/fs/fn.normalize_path.html deleted file mode 100644 index 32755fa26..000000000 --- a/uucore/features/fs/fn.normalize_path.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/fn.normalize_path.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/fn.resolve_relative_path.html b/uucore/features/fs/fn.resolve_relative_path.html deleted file mode 100644 index 25f44513f..000000000 --- a/uucore/features/fs/fn.resolve_relative_path.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/fn.resolve_relative_path.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/index.html b/uucore/features/fs/index.html deleted file mode 100644 index d5b57ff3c..000000000 --- a/uucore/features/fs/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/fs/struct.FileInformation.html b/uucore/features/fs/struct.FileInformation.html deleted file mode 100644 index e569016ed..000000000 --- a/uucore/features/fs/struct.FileInformation.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fs/struct.FileInformation.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.StatFs.html b/uucore/features/fsext/fn.StatFs.html deleted file mode 100644 index c2c70fe0a..000000000 --- a/uucore/features/fsext/fn.StatFs.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.statfs_fn.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.pretty_filetype.html b/uucore/features/fsext/fn.pretty_filetype.html deleted file mode 100644 index ddd6de96f..000000000 --- a/uucore/features/fsext/fn.pretty_filetype.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.pretty_filetype.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.pretty_fstype.html b/uucore/features/fsext/fn.pretty_fstype.html deleted file mode 100644 index a90e33f49..000000000 --- a/uucore/features/fsext/fn.pretty_fstype.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.pretty_fstype.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.pretty_time.html b/uucore/features/fsext/fn.pretty_time.html deleted file mode 100644 index aa37e8a78..000000000 --- a/uucore/features/fsext/fn.pretty_time.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.pretty_time.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.read_fs_list.html b/uucore/features/fsext/fn.read_fs_list.html deleted file mode 100644 index 06968b1da..000000000 --- a/uucore/features/fsext/fn.read_fs_list.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.read_fs_list.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.statfs.html b/uucore/features/fsext/fn.statfs.html deleted file mode 100644 index ae7f4090d..000000000 --- a/uucore/features/fsext/fn.statfs.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.statfs.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/fn.statfs_fn.html b/uucore/features/fsext/fn.statfs_fn.html deleted file mode 100644 index c2c70fe0a..000000000 --- a/uucore/features/fsext/fn.statfs_fn.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/fn.statfs_fn.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/index.html b/uucore/features/fsext/index.html deleted file mode 100644 index 3742bf9e1..000000000 --- a/uucore/features/fsext/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/struct.FsUsage.html b/uucore/features/fsext/struct.FsUsage.html deleted file mode 100644 index 585337da3..000000000 --- a/uucore/features/fsext/struct.FsUsage.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/struct.FsUsage.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/struct.MountInfo.html b/uucore/features/fsext/struct.MountInfo.html deleted file mode 100644 index 858ab9df0..000000000 --- a/uucore/features/fsext/struct.MountInfo.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/struct.MountInfo.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/struct.StatFs.html b/uucore/features/fsext/struct.StatFs.html deleted file mode 100644 index e5274f32e..000000000 --- a/uucore/features/fsext/struct.StatFs.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/struct.statfs_fn.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/struct.statfs_fn.html b/uucore/features/fsext/struct.statfs_fn.html deleted file mode 100644 index e5274f32e..000000000 --- a/uucore/features/fsext/struct.statfs_fn.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/struct.statfs_fn.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/trait.BirthTime.html b/uucore/features/fsext/trait.BirthTime.html deleted file mode 100644 index b98156b00..000000000 --- a/uucore/features/fsext/trait.BirthTime.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/trait.BirthTime.html...

- - - \ No newline at end of file diff --git a/uucore/features/fsext/trait.FsMeta.html b/uucore/features/fsext/trait.FsMeta.html deleted file mode 100644 index 80fc834fe..000000000 --- a/uucore/features/fsext/trait.FsMeta.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/fsext/trait.FsMeta.html...

- - - \ No newline at end of file diff --git a/uucore/features/memo/index.html b/uucore/features/memo/index.html deleted file mode 100644 index 8139e8509..000000000 --- a/uucore/features/memo/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/memo/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/memo/struct.Memo.html b/uucore/features/memo/struct.Memo.html deleted file mode 100644 index f341badcf..000000000 --- a/uucore/features/memo/struct.Memo.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/memo/struct.Memo.html...

- - - \ No newline at end of file diff --git a/uucore/features/mode/fn.get_umask.html b/uucore/features/mode/fn.get_umask.html deleted file mode 100644 index ebf18e8f2..000000000 --- a/uucore/features/mode/fn.get_umask.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/mode/fn.get_umask.html...

- - - \ No newline at end of file diff --git a/uucore/features/mode/fn.parse_mode.html b/uucore/features/mode/fn.parse_mode.html deleted file mode 100644 index 0c5922dcd..000000000 --- a/uucore/features/mode/fn.parse_mode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/mode/fn.parse_mode.html...

- - - \ No newline at end of file diff --git a/uucore/features/mode/fn.parse_numeric.html b/uucore/features/mode/fn.parse_numeric.html deleted file mode 100644 index 0747b9eef..000000000 --- a/uucore/features/mode/fn.parse_numeric.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/mode/fn.parse_numeric.html...

- - - \ No newline at end of file diff --git a/uucore/features/mode/fn.parse_symbolic.html b/uucore/features/mode/fn.parse_symbolic.html deleted file mode 100644 index 29c513eb3..000000000 --- a/uucore/features/mode/fn.parse_symbolic.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/mode/fn.parse_symbolic.html...

- - - \ No newline at end of file diff --git a/uucore/features/mode/fn.strip_minus_from_mode.html b/uucore/features/mode/fn.strip_minus_from_mode.html deleted file mode 100644 index 4e6d9ce85..000000000 --- a/uucore/features/mode/fn.strip_minus_from_mode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/mode/fn.strip_minus_from_mode.html...

- - - \ No newline at end of file diff --git a/uucore/features/mode/index.html b/uucore/features/mode/index.html deleted file mode 100644 index 68f95dafc..000000000 --- a/uucore/features/mode/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/mode/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/enum.IfFrom.html b/uucore/features/perms/enum.IfFrom.html deleted file mode 100644 index 8955c772c..000000000 --- a/uucore/features/perms/enum.IfFrom.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/enum.IfFrom.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/enum.TraverseSymlinks.html b/uucore/features/perms/enum.TraverseSymlinks.html deleted file mode 100644 index 1340276c1..000000000 --- a/uucore/features/perms/enum.TraverseSymlinks.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/enum.TraverseSymlinks.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/enum.VerbosityLevel.html b/uucore/features/perms/enum.VerbosityLevel.html deleted file mode 100644 index 64d4d3377..000000000 --- a/uucore/features/perms/enum.VerbosityLevel.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/enum.VerbosityLevel.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/fn.chown_base.html b/uucore/features/perms/fn.chown_base.html deleted file mode 100644 index 7138a0d14..000000000 --- a/uucore/features/perms/fn.chown_base.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/fn.chown_base.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/fn.wrap_chown.html b/uucore/features/perms/fn.wrap_chown.html deleted file mode 100644 index 457892f41..000000000 --- a/uucore/features/perms/fn.wrap_chown.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/fn.wrap_chown.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/index.html b/uucore/features/perms/index.html deleted file mode 100644 index 822a521ba..000000000 --- a/uucore/features/perms/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/constant.ARG_FILES.html b/uucore/features/perms/options/constant.ARG_FILES.html deleted file mode 100644 index cf33be182..000000000 --- a/uucore/features/perms/options/constant.ARG_FILES.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/constant.ARG_FILES.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/constant.ARG_GROUP.html b/uucore/features/perms/options/constant.ARG_GROUP.html deleted file mode 100644 index a4537e5ae..000000000 --- a/uucore/features/perms/options/constant.ARG_GROUP.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/constant.ARG_GROUP.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/constant.ARG_OWNER.html b/uucore/features/perms/options/constant.ARG_OWNER.html deleted file mode 100644 index ab8d8f3a3..000000000 --- a/uucore/features/perms/options/constant.ARG_OWNER.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/constant.ARG_OWNER.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/constant.FROM.html b/uucore/features/perms/options/constant.FROM.html deleted file mode 100644 index bfbbca940..000000000 --- a/uucore/features/perms/options/constant.FROM.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/constant.FROM.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/constant.RECURSIVE.html b/uucore/features/perms/options/constant.RECURSIVE.html deleted file mode 100644 index 7b6ce16b2..000000000 --- a/uucore/features/perms/options/constant.RECURSIVE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/constant.RECURSIVE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/constant.REFERENCE.html b/uucore/features/perms/options/constant.REFERENCE.html deleted file mode 100644 index eda31f68c..000000000 --- a/uucore/features/perms/options/constant.REFERENCE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/constant.REFERENCE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/dereference/constant.DEREFERENCE.html b/uucore/features/perms/options/dereference/constant.DEREFERENCE.html deleted file mode 100644 index fcf7b7eda..000000000 --- a/uucore/features/perms/options/dereference/constant.DEREFERENCE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/dereference/constant.DEREFERENCE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/dereference/constant.NO_DEREFERENCE.html b/uucore/features/perms/options/dereference/constant.NO_DEREFERENCE.html deleted file mode 100644 index 2c2fade59..000000000 --- a/uucore/features/perms/options/dereference/constant.NO_DEREFERENCE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/dereference/constant.NO_DEREFERENCE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/dereference/index.html b/uucore/features/perms/options/dereference/index.html deleted file mode 100644 index d7c8dddfb..000000000 --- a/uucore/features/perms/options/dereference/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/dereference/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/index.html b/uucore/features/perms/options/index.html deleted file mode 100644 index ea8f53db1..000000000 --- a/uucore/features/perms/options/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/perms/options/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/preserve_root/constant.NO_PRESERVE.html b/uucore/features/perms/options/preserve_root/constant.NO_PRESERVE.html deleted file mode 100644 index 8efee5271..000000000 --- a/uucore/features/perms/options/preserve_root/constant.NO_PRESERVE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/preserve_root/constant.NO_PRESERVE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/preserve_root/constant.PRESERVE.html b/uucore/features/perms/options/preserve_root/constant.PRESERVE.html deleted file mode 100644 index 566044e6e..000000000 --- a/uucore/features/perms/options/preserve_root/constant.PRESERVE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/preserve_root/constant.PRESERVE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/preserve_root/index.html b/uucore/features/perms/options/preserve_root/index.html deleted file mode 100644 index 22f86c506..000000000 --- a/uucore/features/perms/options/preserve_root/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/preserve_root/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/traverse/constant.EVERY.html b/uucore/features/perms/options/traverse/constant.EVERY.html deleted file mode 100644 index 3eeaef032..000000000 --- a/uucore/features/perms/options/traverse/constant.EVERY.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/traverse/constant.EVERY.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/traverse/constant.NO_TRAVERSE.html b/uucore/features/perms/options/traverse/constant.NO_TRAVERSE.html deleted file mode 100644 index 6c484498b..000000000 --- a/uucore/features/perms/options/traverse/constant.NO_TRAVERSE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/traverse/constant.NO_TRAVERSE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/traverse/constant.TRAVERSE.html b/uucore/features/perms/options/traverse/constant.TRAVERSE.html deleted file mode 100644 index 94c8d5c02..000000000 --- a/uucore/features/perms/options/traverse/constant.TRAVERSE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/traverse/constant.TRAVERSE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/traverse/index.html b/uucore/features/perms/options/traverse/index.html deleted file mode 100644 index c8576be70..000000000 --- a/uucore/features/perms/options/traverse/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/traverse/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/verbosity/constant.CHANGES.html b/uucore/features/perms/options/verbosity/constant.CHANGES.html deleted file mode 100644 index b2059cacd..000000000 --- a/uucore/features/perms/options/verbosity/constant.CHANGES.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/verbosity/constant.CHANGES.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/verbosity/constant.QUIET.html b/uucore/features/perms/options/verbosity/constant.QUIET.html deleted file mode 100644 index 276524a67..000000000 --- a/uucore/features/perms/options/verbosity/constant.QUIET.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/verbosity/constant.QUIET.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/verbosity/constant.SILENT.html b/uucore/features/perms/options/verbosity/constant.SILENT.html deleted file mode 100644 index cec9d7342..000000000 --- a/uucore/features/perms/options/verbosity/constant.SILENT.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/verbosity/constant.SILENT.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/verbosity/constant.VERBOSE.html b/uucore/features/perms/options/verbosity/constant.VERBOSE.html deleted file mode 100644 index 01f236298..000000000 --- a/uucore/features/perms/options/verbosity/constant.VERBOSE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/verbosity/constant.VERBOSE.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/options/verbosity/index.html b/uucore/features/perms/options/verbosity/index.html deleted file mode 100644 index a9da454dc..000000000 --- a/uucore/features/perms/options/verbosity/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../../uucore/perms/options/verbosity/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/struct.ChownExecutor.html b/uucore/features/perms/struct.ChownExecutor.html deleted file mode 100644 index b167d2416..000000000 --- a/uucore/features/perms/struct.ChownExecutor.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/struct.ChownExecutor.html...

- - - \ No newline at end of file diff --git a/uucore/features/perms/struct.Verbosity.html b/uucore/features/perms/struct.Verbosity.html deleted file mode 100644 index cbb819b5e..000000000 --- a/uucore/features/perms/struct.Verbosity.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/perms/struct.Verbosity.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/fn.pipe.html b/uucore/features/pipes/fn.pipe.html deleted file mode 100644 index c6a836e1d..000000000 --- a/uucore/features/pipes/fn.pipe.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/fn.pipe.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/fn.splice.html b/uucore/features/pipes/fn.splice.html deleted file mode 100644 index 238b99e2d..000000000 --- a/uucore/features/pipes/fn.splice.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/fn.splice.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/fn.splice_exact.html b/uucore/features/pipes/fn.splice_exact.html deleted file mode 100644 index f5ead95b1..000000000 --- a/uucore/features/pipes/fn.splice_exact.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/fn.splice_exact.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/fn.vmsplice.html b/uucore/features/pipes/fn.vmsplice.html deleted file mode 100644 index 000ec8bf4..000000000 --- a/uucore/features/pipes/fn.vmsplice.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/fn.vmsplice.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/index.html b/uucore/features/pipes/index.html deleted file mode 100644 index da0a0fc2d..000000000 --- a/uucore/features/pipes/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/type.Error.html b/uucore/features/pipes/type.Error.html deleted file mode 100644 index 8450e944e..000000000 --- a/uucore/features/pipes/type.Error.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/type.Error.html...

- - - \ No newline at end of file diff --git a/uucore/features/pipes/type.Result.html b/uucore/features/pipes/type.Result.html deleted file mode 100644 index e1dea8f15..000000000 --- a/uucore/features/pipes/type.Result.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/pipes/type.Result.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/enum.ExitStatus.html b/uucore/features/process/enum.ExitStatus.html deleted file mode 100644 index 340f80a27..000000000 --- a/uucore/features/process/enum.ExitStatus.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/enum.ExitStatus.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/fn.getegid.html b/uucore/features/process/fn.getegid.html deleted file mode 100644 index b48580252..000000000 --- a/uucore/features/process/fn.getegid.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/fn.getegid.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/fn.geteuid.html b/uucore/features/process/fn.geteuid.html deleted file mode 100644 index 963a3d09c..000000000 --- a/uucore/features/process/fn.geteuid.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/fn.geteuid.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/fn.getgid.html b/uucore/features/process/fn.getgid.html deleted file mode 100644 index c4c6c73c0..000000000 --- a/uucore/features/process/fn.getgid.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/fn.getgid.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/fn.getuid.html b/uucore/features/process/fn.getuid.html deleted file mode 100644 index 59065103c..000000000 --- a/uucore/features/process/fn.getuid.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/fn.getuid.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/index.html b/uucore/features/process/index.html deleted file mode 100644 index fab407d06..000000000 --- a/uucore/features/process/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/process/trait.ChildExt.html b/uucore/features/process/trait.ChildExt.html deleted file mode 100644 index db70b8378..000000000 --- a/uucore/features/process/trait.ChildExt.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/process/trait.ChildExt.html...

- - - \ No newline at end of file diff --git a/uucore/features/ringbuffer/index.html b/uucore/features/ringbuffer/index.html deleted file mode 100644 index 5cc8f7d52..000000000 --- a/uucore/features/ringbuffer/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/ringbuffer/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/ringbuffer/struct.RingBuffer.html b/uucore/features/ringbuffer/struct.RingBuffer.html deleted file mode 100644 index 8e1387ccf..000000000 --- a/uucore/features/ringbuffer/struct.RingBuffer.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/ringbuffer/struct.RingBuffer.html...

- - - \ No newline at end of file diff --git a/uucore/features/signals/fn.is_signal.html b/uucore/features/signals/fn.is_signal.html deleted file mode 100644 index 49109f9fe..000000000 --- a/uucore/features/signals/fn.is_signal.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/signals/fn.is_signal.html...

- - - \ No newline at end of file diff --git a/uucore/features/signals/fn.signal_by_name_or_value.html b/uucore/features/signals/fn.signal_by_name_or_value.html deleted file mode 100644 index 7a60b6c6f..000000000 --- a/uucore/features/signals/fn.signal_by_name_or_value.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/signals/fn.signal_by_name_or_value.html...

- - - \ No newline at end of file diff --git a/uucore/features/signals/fn.signal_name_by_value.html b/uucore/features/signals/fn.signal_name_by_value.html deleted file mode 100644 index a58453c3a..000000000 --- a/uucore/features/signals/fn.signal_name_by_value.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/signals/fn.signal_name_by_value.html...

- - - \ No newline at end of file diff --git a/uucore/features/signals/index.html b/uucore/features/signals/index.html deleted file mode 100644 index 81cb86805..000000000 --- a/uucore/features/signals/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/signals/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/signals/static.ALL_SIGNALS.html b/uucore/features/signals/static.ALL_SIGNALS.html deleted file mode 100644 index 139a0eebd..000000000 --- a/uucore/features/signals/static.ALL_SIGNALS.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/signals/static.ALL_SIGNALS.html...

- - - \ No newline at end of file diff --git a/uucore/features/signals/static.DEFAULT_SIGNAL.html b/uucore/features/signals/static.DEFAULT_SIGNAL.html deleted file mode 100644 index d4964b3a3..000000000 --- a/uucore/features/signals/static.DEFAULT_SIGNAL.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/signals/static.DEFAULT_SIGNAL.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/fn.endutxent.html b/uucore/features/utmpx/fn.endutxent.html deleted file mode 100644 index 4a0b9cd3f..000000000 --- a/uucore/features/utmpx/fn.endutxent.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/fn.endutxent.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/fn.getutxent.html b/uucore/features/utmpx/fn.getutxent.html deleted file mode 100644 index 52334fce0..000000000 --- a/uucore/features/utmpx/fn.getutxent.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/fn.getutxent.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/fn.setutxent.html b/uucore/features/utmpx/fn.setutxent.html deleted file mode 100644 index 15c8d5a61..000000000 --- a/uucore/features/utmpx/fn.setutxent.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/fn.setutxent.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/fn.utmpxname.html b/uucore/features/utmpx/fn.utmpxname.html deleted file mode 100644 index aab737dd3..000000000 --- a/uucore/features/utmpx/fn.utmpxname.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/fn.utmpxname.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/index.html b/uucore/features/utmpx/index.html deleted file mode 100644 index 44b1449e0..000000000 --- a/uucore/features/utmpx/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/index.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/struct.Utmpx.html b/uucore/features/utmpx/struct.Utmpx.html deleted file mode 100644 index 1d46b9bc7..000000000 --- a/uucore/features/utmpx/struct.Utmpx.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/struct.Utmpx.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/struct.UtmpxIter.html b/uucore/features/utmpx/struct.UtmpxIter.html deleted file mode 100644 index d1e74b3c3..000000000 --- a/uucore/features/utmpx/struct.UtmpxIter.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/utmpx/struct.UtmpxIter.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.ACCOUNTING.html b/uucore/features/utmpx/ut/constant.ACCOUNTING.html deleted file mode 100644 index b567f0581..000000000 --- a/uucore/features/utmpx/ut/constant.ACCOUNTING.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.ACCOUNTING.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.BOOT_TIME.html b/uucore/features/utmpx/ut/constant.BOOT_TIME.html deleted file mode 100644 index 0448fe874..000000000 --- a/uucore/features/utmpx/ut/constant.BOOT_TIME.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.BOOT_TIME.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.DEAD_PROCESS.html b/uucore/features/utmpx/ut/constant.DEAD_PROCESS.html deleted file mode 100644 index ad1ccac25..000000000 --- a/uucore/features/utmpx/ut/constant.DEAD_PROCESS.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.DEAD_PROCESS.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.EMPTY.html b/uucore/features/utmpx/ut/constant.EMPTY.html deleted file mode 100644 index 0db75e022..000000000 --- a/uucore/features/utmpx/ut/constant.EMPTY.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.EMPTY.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.INIT_PROCESS.html b/uucore/features/utmpx/ut/constant.INIT_PROCESS.html deleted file mode 100644 index be258642b..000000000 --- a/uucore/features/utmpx/ut/constant.INIT_PROCESS.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.INIT_PROCESS.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.LOGIN_PROCESS.html b/uucore/features/utmpx/ut/constant.LOGIN_PROCESS.html deleted file mode 100644 index 39f27d0b1..000000000 --- a/uucore/features/utmpx/ut/constant.LOGIN_PROCESS.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.LOGIN_PROCESS.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.NEW_TIME.html b/uucore/features/utmpx/ut/constant.NEW_TIME.html deleted file mode 100644 index 436ed9c3e..000000000 --- a/uucore/features/utmpx/ut/constant.NEW_TIME.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.NEW_TIME.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.OLD_TIME.html b/uucore/features/utmpx/ut/constant.OLD_TIME.html deleted file mode 100644 index bc6e4d291..000000000 --- a/uucore/features/utmpx/ut/constant.OLD_TIME.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.OLD_TIME.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.RUN_LVL.html b/uucore/features/utmpx/ut/constant.RUN_LVL.html deleted file mode 100644 index fc4223ad9..000000000 --- a/uucore/features/utmpx/ut/constant.RUN_LVL.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.RUN_LVL.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.USER_PROCESS.html b/uucore/features/utmpx/ut/constant.USER_PROCESS.html deleted file mode 100644 index b3eb15466..000000000 --- a/uucore/features/utmpx/ut/constant.USER_PROCESS.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.USER_PROCESS.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.UT_HOSTSIZE.html b/uucore/features/utmpx/ut/constant.UT_HOSTSIZE.html deleted file mode 100644 index 435d3d06a..000000000 --- a/uucore/features/utmpx/ut/constant.UT_HOSTSIZE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.UT_HOSTSIZE.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.UT_IDSIZE.html b/uucore/features/utmpx/ut/constant.UT_IDSIZE.html deleted file mode 100644 index 5c5b0b3dc..000000000 --- a/uucore/features/utmpx/ut/constant.UT_IDSIZE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.UT_IDSIZE.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.UT_LINESIZE.html b/uucore/features/utmpx/ut/constant.UT_LINESIZE.html deleted file mode 100644 index 1c9be4f22..000000000 --- a/uucore/features/utmpx/ut/constant.UT_LINESIZE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.UT_LINESIZE.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/constant.UT_NAMESIZE.html b/uucore/features/utmpx/ut/constant.UT_NAMESIZE.html deleted file mode 100644 index b03d79421..000000000 --- a/uucore/features/utmpx/ut/constant.UT_NAMESIZE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/constant.UT_NAMESIZE.html...

- - - \ No newline at end of file diff --git a/uucore/features/utmpx/ut/static.DEFAULT_FILE.html b/uucore/features/utmpx/ut/static.DEFAULT_FILE.html deleted file mode 100644 index ae0ec8896..000000000 --- a/uucore/features/utmpx/ut/static.DEFAULT_FILE.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/utmpx/static.DEFAULT_FILE.html...

- - - \ No newline at end of file diff --git a/uucore/fn.args_os.html b/uucore/fn.args_os.html deleted file mode 100644 index e876c27a8..000000000 --- a/uucore/fn.args_os.html +++ /dev/null @@ -1,3 +0,0 @@ -args_os in uucore - Rust -

Function uucore::args_os[][src]

pub fn args_os() -> impl Iterator<Item = OsString>
- \ No newline at end of file diff --git a/uucore/fn.execution_phrase.html b/uucore/fn.execution_phrase.html deleted file mode 100644 index 3df335b58..000000000 --- a/uucore/fn.execution_phrase.html +++ /dev/null @@ -1,4 +0,0 @@ -execution_phrase in uucore - Rust -

Function uucore::execution_phrase[][src]

pub fn execution_phrase() -> &'static str
Expand description

Derive the complete execution phrase for “usage”.

-
- \ No newline at end of file diff --git a/uucore/fn.get_utility_is_second_arg.html b/uucore/fn.get_utility_is_second_arg.html deleted file mode 100644 index 9eb2b080e..000000000 --- a/uucore/fn.get_utility_is_second_arg.html +++ /dev/null @@ -1,3 +0,0 @@ -get_utility_is_second_arg in uucore - Rust -

Function uucore::get_utility_is_second_arg[][src]

pub fn get_utility_is_second_arg() -> bool
- \ No newline at end of file diff --git a/uucore/fn.set_utility_is_second_arg.html b/uucore/fn.set_utility_is_second_arg.html deleted file mode 100644 index 59b2bef9c..000000000 --- a/uucore/fn.set_utility_is_second_arg.html +++ /dev/null @@ -1,3 +0,0 @@ -set_utility_is_second_arg in uucore - Rust -

Function uucore::set_utility_is_second_arg[][src]

pub fn set_utility_is_second_arg()
- \ No newline at end of file diff --git a/uucore/fn.util_name.html b/uucore/fn.util_name.html deleted file mode 100644 index f18ef022e..000000000 --- a/uucore/fn.util_name.html +++ /dev/null @@ -1,4 +0,0 @@ -util_name in uucore - Rust -

Function uucore::util_name[][src]

pub fn util_name() -> &'static str
Expand description

Derive the utility name.

-
- \ No newline at end of file diff --git a/uucore/fs/enum.MissingHandling.html b/uucore/fs/enum.MissingHandling.html deleted file mode 100644 index 5b5a33732..000000000 --- a/uucore/fs/enum.MissingHandling.html +++ /dev/null @@ -1,30 +0,0 @@ -MissingHandling in uucore::fs - Rust -

Enum uucore::fs::MissingHandling[][src]

pub enum MissingHandling {
-    Normal,
-    Existing,
-    Missing,
-}
Expand description

Controls how symbolic links should be handled when canonicalizing a path.

-

Variants

Normal

Return an error if any part of the path is missing.

-

Existing

Resolve symbolic links, ignoring errors on the final component.

-

Missing

Resolve symbolic links, ignoring errors on the non-final components.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fs/enum.ResolveMode.html b/uucore/fs/enum.ResolveMode.html deleted file mode 100644 index f1054c2c0..000000000 --- a/uucore/fs/enum.ResolveMode.html +++ /dev/null @@ -1,30 +0,0 @@ -ResolveMode in uucore::fs - Rust -

Enum uucore::fs::ResolveMode[][src]

pub enum ResolveMode {
-    None,
-    Physical,
-    Logical,
-}
Expand description

Controls when symbolic links are resolved

-

Variants

None

Do not resolve any symbolic links.

-

Physical

Resolve symlinks as encountered when processing the path

-

Logical

Resolve ‘..’ elements before symlinks

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fs/fn.canonicalize.html b/uucore/fs/fn.canonicalize.html deleted file mode 100644 index 802e91de5..000000000 --- a/uucore/fs/fn.canonicalize.html +++ /dev/null @@ -1,28 +0,0 @@ -canonicalize in uucore::fs - Rust -

Function uucore::fs::canonicalize[][src]

pub fn canonicalize<P: AsRef<Path>>(
    original: P,
    miss_mode: MissingHandling,
    res_mode: ResolveMode
) -> IOResult<PathBuf>
Expand description

Return the canonical, absolute form of a path.

-

This function is a generalization of std::fs::canonicalize that -allows controlling how symbolic links are resolved and how to deal -with missing components. It returns the canonical, absolute form of -a path. -The miss_mode parameter controls how missing path elements are handled

- -

The res_mode parameter controls how symbolic links are -resolved:

- -
- \ No newline at end of file diff --git a/uucore/fs/fn.display_permissions.html b/uucore/fs/fn.display_permissions.html deleted file mode 100644 index 55cb47abd..000000000 --- a/uucore/fs/fn.display_permissions.html +++ /dev/null @@ -1,3 +0,0 @@ -display_permissions in uucore::fs - Rust -

Function uucore::fs::display_permissions[][src]

pub fn display_permissions(
    metadata: &Metadata,
    display_file_type: bool
) -> String
- \ No newline at end of file diff --git a/uucore/fs/fn.display_permissions_unix.html b/uucore/fs/fn.display_permissions_unix.html deleted file mode 100644 index 0ccf3dcd3..000000000 --- a/uucore/fs/fn.display_permissions_unix.html +++ /dev/null @@ -1,3 +0,0 @@ -display_permissions_unix in uucore::fs - Rust -

Function uucore::fs::display_permissions_unix[][src]

pub fn display_permissions_unix(mode: mode_t, display_file_type: bool) -> String
- \ No newline at end of file diff --git a/uucore/fs/fn.normalize_path.html b/uucore/fs/fn.normalize_path.html deleted file mode 100644 index b5eb10f46..000000000 --- a/uucore/fs/fn.normalize_path.html +++ /dev/null @@ -1,3 +0,0 @@ -normalize_path in uucore::fs - Rust -

Function uucore::fs::normalize_path[][src]

pub fn normalize_path(path: &Path) -> PathBuf
- \ No newline at end of file diff --git a/uucore/fs/fn.resolve_relative_path.html b/uucore/fs/fn.resolve_relative_path.html deleted file mode 100644 index fa6ab795c..000000000 --- a/uucore/fs/fn.resolve_relative_path.html +++ /dev/null @@ -1,3 +0,0 @@ -resolve_relative_path in uucore::fs - Rust -

Function uucore::fs::resolve_relative_path[][src]

pub fn resolve_relative_path(path: &Path) -> Cow<'_, Path>
- \ No newline at end of file diff --git a/uucore/fs/index.html b/uucore/fs/index.html deleted file mode 100644 index b0438d286..000000000 --- a/uucore/fs/index.html +++ /dev/null @@ -1,12 +0,0 @@ -uucore::fs - Rust -

Module uucore::fs[][src]

Expand description

Set of functions to manage files and symlinks

-

Macros

-

Structs

-

Information to uniquely identify a file

-

Enums

-

Controls how symbolic links should be handled when canonicalizing a path.

-

Controls when symbolic links are resolved

-

Functions

-
- \ No newline at end of file diff --git a/uucore/fs/macro.has!.html b/uucore/fs/macro.has!.html deleted file mode 100644 index a69015b17..000000000 --- a/uucore/fs/macro.has!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.has.html...

- - - \ No newline at end of file diff --git a/uucore/fs/macro.has.html b/uucore/fs/macro.has.html deleted file mode 100644 index 88b87cbf2..000000000 --- a/uucore/fs/macro.has.html +++ /dev/null @@ -1,6 +0,0 @@ -has in uucore::fs - Rust -

Macro uucore::fs::has[][src]

macro_rules! has {
-    ($mode : expr, $perm : expr) => { ... };
-}
-
- \ No newline at end of file diff --git a/uucore/fs/sidebar-items.js b/uucore/fs/sidebar-items.js deleted file mode 100644 index 3f1ade292..000000000 --- a/uucore/fs/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["MissingHandling","Controls how symbolic links should be handled when canonicalizing a path."],["ResolveMode","Controls when symbolic links are resolved"]],"fn":[["canonicalize","Return the canonical, absolute form of a path."],["display_permissions",""],["display_permissions_unix",""],["normalize_path",""],["resolve_relative_path",""]],"macro":[["has",""]],"struct":[["FileInformation","Information to uniquely identify a file"]]}); \ No newline at end of file diff --git a/uucore/fs/struct.FileInformation.html b/uucore/fs/struct.FileInformation.html deleted file mode 100644 index 9a0131155..000000000 --- a/uucore/fs/struct.FileInformation.html +++ /dev/null @@ -1,23 +0,0 @@ -FileInformation in uucore::fs - Rust -

Struct uucore::fs::FileInformation[][src]

pub struct FileInformation(_);
Expand description

Information to uniquely identify a file

-

Implementations

Get information from a currently open file

-

Get information for a given path.

-

If path points to a symlink and dereference is true, information about -the link’s target will be returned.

-

Trait Implementations

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fsext/fn.StatFs.html b/uucore/fsext/fn.StatFs.html deleted file mode 100644 index a16156eed..000000000 --- a/uucore/fsext/fn.StatFs.html +++ /dev/null @@ -1,3 +0,0 @@ -StatFs in uucore::fsext - Rust -

Function uucore::fsext::StatFs[]

pub unsafe extern "C" fn StatFs(
    path: *const i8,
    buf: *mut statfs
) -> i32
- \ No newline at end of file diff --git a/uucore/fsext/fn.pretty_filetype.html b/uucore/fsext/fn.pretty_filetype.html deleted file mode 100644 index 325059dd3..000000000 --- a/uucore/fsext/fn.pretty_filetype.html +++ /dev/null @@ -1,3 +0,0 @@ -pretty_filetype in uucore::fsext - Rust -

Function uucore::fsext::pretty_filetype[][src]

pub fn pretty_filetype<'a>(mode: mode_t, size: u64) -> &'a str
- \ No newline at end of file diff --git a/uucore/fsext/fn.pretty_fstype.html b/uucore/fsext/fn.pretty_fstype.html deleted file mode 100644 index b5d540d50..000000000 --- a/uucore/fsext/fn.pretty_fstype.html +++ /dev/null @@ -1,3 +0,0 @@ -pretty_fstype in uucore::fsext - Rust -

Function uucore::fsext::pretty_fstype[][src]

pub fn pretty_fstype<'a>(fstype: i64) -> Cow<'a, str>
- \ No newline at end of file diff --git a/uucore/fsext/fn.pretty_time.html b/uucore/fsext/fn.pretty_time.html deleted file mode 100644 index 0594e3497..000000000 --- a/uucore/fsext/fn.pretty_time.html +++ /dev/null @@ -1,3 +0,0 @@ -pretty_time in uucore::fsext - Rust -

Function uucore::fsext::pretty_time[][src]

pub fn pretty_time(sec: i64, nsec: i64) -> String
- \ No newline at end of file diff --git a/uucore/fsext/fn.read_fs_list.html b/uucore/fsext/fn.read_fs_list.html deleted file mode 100644 index b804b0cd0..000000000 --- a/uucore/fsext/fn.read_fs_list.html +++ /dev/null @@ -1,4 +0,0 @@ -read_fs_list in uucore::fsext - Rust -

Function uucore::fsext::read_fs_list[][src]

pub fn read_fs_list() -> Vec<MountInfo>
Expand description

Read file system list.

-
- \ No newline at end of file diff --git a/uucore/fsext/fn.statfs.html b/uucore/fsext/fn.statfs.html deleted file mode 100644 index 18d9bc157..000000000 --- a/uucore/fsext/fn.statfs.html +++ /dev/null @@ -1,3 +0,0 @@ -statfs in uucore::fsext - Rust -

Function uucore::fsext::statfs[][src]

pub fn statfs<P: AsRef<Path>>(path: P) -> Result<StatFs, String> where
    Vec<u8>: From<P>, 
- \ No newline at end of file diff --git a/uucore/fsext/fn.statfs_fn.html b/uucore/fsext/fn.statfs_fn.html deleted file mode 100644 index 0ba7151c7..000000000 --- a/uucore/fsext/fn.statfs_fn.html +++ /dev/null @@ -1,3 +0,0 @@ -statfs_fn in uucore::fsext - Rust -

Function uucore::fsext::statfs_fn[]

pub unsafe extern "C" fn statfs_fn(
    path: *const i8,
    buf: *mut statfs
) -> i32
- \ No newline at end of file diff --git a/uucore/fsext/index.html b/uucore/fsext/index.html deleted file mode 100644 index 54ff579b3..000000000 --- a/uucore/fsext/index.html +++ /dev/null @@ -1,9 +0,0 @@ -uucore::fsext - Rust -

Module uucore::fsext[][src]

Expand description

Set of functions to manage file systems

-

Re-exports

-
pub use crate::*;

Structs

-

Traits

-

Functions

-
- \ No newline at end of file diff --git a/uucore/fsext/sidebar-items.js b/uucore/fsext/sidebar-items.js deleted file mode 100644 index 528a8425f..000000000 --- a/uucore/fsext/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["StatFs",""],["pretty_filetype",""],["pretty_fstype",""],["pretty_time",""],["read_fs_list","Read file system list."],["statfs",""],["statfs_fn",""]],"struct":[["FsUsage",""],["MountInfo",""],["StatFs",""],["statfs_fn",""]],"trait":[["BirthTime",""],["FsMeta",""]]}); \ No newline at end of file diff --git a/uucore/fsext/struct.FsUsage.html b/uucore/fsext/struct.FsUsage.html deleted file mode 100644 index 007a3e698..000000000 --- a/uucore/fsext/struct.FsUsage.html +++ /dev/null @@ -1,26 +0,0 @@ -FsUsage in uucore::fsext - Rust -

Struct uucore::fsext::FsUsage[][src]

pub struct FsUsage {
-    pub blocksize: u64,
-    pub blocks: u64,
-    pub bfree: u64,
-    pub bavail: u64,
-    pub bavail_top_bit_set: bool,
-    pub files: u64,
-    pub ffree: u64,
-}

Fields

blocksize: u64blocks: u64bfree: u64bavail: u64bavail_top_bit_set: boolfiles: u64ffree: u64

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fsext/struct.MountInfo.html b/uucore/fsext/struct.MountInfo.html deleted file mode 100644 index 63199c641..000000000 --- a/uucore/fsext/struct.MountInfo.html +++ /dev/null @@ -1,27 +0,0 @@ -MountInfo in uucore::fsext - Rust -

Struct uucore::fsext::MountInfo[][src]

pub struct MountInfo {
-    pub dev_id: String,
-    pub dev_name: String,
-    pub fs_type: String,
-    pub mount_dir: String,
-    pub mount_option: String,
-    pub mount_root: String,
-    pub remote: bool,
-    pub dummy: bool,
-}

Fields

dev_id: Stringdev_name: Stringfs_type: Stringmount_dir: Stringmount_option: Stringmount_root: Stringremote: booldummy: bool

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fsext/struct.StatFs.html b/uucore/fsext/struct.StatFs.html deleted file mode 100644 index 9535e3b61..000000000 --- a/uucore/fsext/struct.StatFs.html +++ /dev/null @@ -1,36 +0,0 @@ -StatFs in uucore::fsext - Rust -

Struct uucore::fsext::StatFs[]

#[repr(C)]
pub struct StatFs { - pub f_type: i64, - pub f_bsize: i64, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_fsid: fsid_t, - pub f_namelen: i64, - pub f_frsize: i64, - // some fields omitted -}

Fields

f_type: i64f_bsize: i64f_blocks: u64f_bfree: u64f_bavail: u64f_files: u64f_ffree: u64f_fsid: fsid_tf_namelen: i64f_frsize: i64

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fsext/struct.statfs_fn.html b/uucore/fsext/struct.statfs_fn.html deleted file mode 100644 index 3ad822dae..000000000 --- a/uucore/fsext/struct.statfs_fn.html +++ /dev/null @@ -1,36 +0,0 @@ -statfs_fn in uucore::fsext - Rust -

Struct uucore::fsext::statfs_fn[]

#[repr(C)]
pub struct statfs_fn { - pub f_type: i64, - pub f_bsize: i64, - pub f_blocks: u64, - pub f_bfree: u64, - pub f_bavail: u64, - pub f_files: u64, - pub f_ffree: u64, - pub f_fsid: fsid_t, - pub f_namelen: i64, - pub f_frsize: i64, - // some fields omitted -}

Fields

f_type: i64f_bsize: i64f_blocks: u64f_bfree: u64f_bavail: u64f_files: u64f_ffree: u64f_fsid: fsid_tf_namelen: i64f_frsize: i64

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Feeds this value into the given Hasher. Read more

-

Feeds a slice of this type into the given Hasher. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/fsext/trait.BirthTime.html b/uucore/fsext/trait.BirthTime.html deleted file mode 100644 index c3e806156..000000000 --- a/uucore/fsext/trait.BirthTime.html +++ /dev/null @@ -1,6 +0,0 @@ -BirthTime in uucore::fsext - Rust -

Trait uucore::fsext::BirthTime[][src]

pub trait BirthTime {
-    fn pretty_birth(&self) -> String;
-
fn birth(&self) -> String; -}

Required methods

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uucore/fsext/trait.FsMeta.html b/uucore/fsext/trait.FsMeta.html deleted file mode 100644 index 66b3c5e82..000000000 --- a/uucore/fsext/trait.FsMeta.html +++ /dev/null @@ -1,14 +0,0 @@ -FsMeta in uucore::fsext - Rust -

Trait uucore::fsext::FsMeta[][src]

pub trait FsMeta {
-    fn fs_type(&self) -> i64;
-
fn io_size(&self) -> u64; -
fn block_size(&self) -> i64; -
fn total_blocks(&self) -> u64; -
fn free_blocks(&self) -> u64; -
fn avail_blocks(&self) -> u64; -
fn total_file_nodes(&self) -> u64; -
fn free_file_nodes(&self) -> u64; -
fn fsid(&self) -> u64; -
fn namelen(&self) -> u64; -}

Required methods

Implementors

- \ No newline at end of file diff --git a/uucore/index.html b/uucore/index.html deleted file mode 100644 index c6968e827..000000000 --- a/uucore/index.html +++ /dev/null @@ -1,33 +0,0 @@ -uucore - Rust -

Crate uucore[][src]

Re-exports

-
pub extern crate libc;

Modules

-

Implement GNU-style backup functionality.

-

Get password/group file entry

-

All utils return exit with an exit code. Usually, the following scheme is used:

-

Set of functions to manage files and symlinks

-

Set of functions to manage file systems

-

Memo runner of printf -Takes a format string and arguments

-

Set of functions to parse modes

-

Custom panic hooks that allow silencing certain types of errors.

-

Common functions to manage permissions

-

Set of functions to manage IDs

-

A fixed-size ring buffer.

-

Aims to provide platform-independent methods to obtain login records

-

Macros

-

Display an error and [exit!]

-

Unwrap a std::result::Result, crashing instead of panicking.

-

Display a crate::error::UError and set global exit code.

-

Show an error to stderr in a similar style to GNU coreutils.

-

Show a warning to stderr in a similar style to GNU coreutils.

-

Display an error and set global exit code in error case.

-

Show a bad invocation help message in a similar style to GNU coreutils.

-

Print a warning message to stderr.

-

Shorthand to construct UIoError-instances.

-

Enums

-

Traits

-

Functions

-

Derive the complete execution phrase for “usage”.

-

Derive the utility name.

-
- \ No newline at end of file diff --git a/uucore/macro.crash!.html b/uucore/macro.crash!.html deleted file mode 100644 index 568fcb67a..000000000 --- a/uucore/macro.crash!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.crash.html...

- - - \ No newline at end of file diff --git a/uucore/macro.crash.html b/uucore/macro.crash.html deleted file mode 100644 index f2fbd6f7a..000000000 --- a/uucore/macro.crash.html +++ /dev/null @@ -1,13 +0,0 @@ -crash in uucore - Rust -

Macro uucore::crash[][src]

macro_rules! crash {
-    ($exit_code : expr, $($args : tt) +) => { ... };
-}
-
Expand description

Display an error and [exit!]

-

Displays the provided error message using show_error!, then invokes -std::process::exit with the provided exit code.

-

Examples

-
// outputs <name>: Couldn't apply foo to bar
-// and terminates execution
-crash!(1, "Couldn't apply {} to {}", "foo", "bar");
-
- \ No newline at end of file diff --git a/uucore/macro.crash_if_err!.html b/uucore/macro.crash_if_err!.html deleted file mode 100644 index 1d7e6274f..000000000 --- a/uucore/macro.crash_if_err!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.crash_if_err.html...

- - - \ No newline at end of file diff --git a/uucore/macro.crash_if_err.html b/uucore/macro.crash_if_err.html deleted file mode 100644 index eafeb200a..000000000 --- a/uucore/macro.crash_if_err.html +++ /dev/null @@ -1,17 +0,0 @@ -crash_if_err in uucore - Rust -

Macro uucore::crash_if_err[][src]

macro_rules! crash_if_err {
-    ($exit_code : expr, $exp : expr) => { ... };
-}
-
Expand description

Unwrap a std::result::Result, crashing instead of panicking.

-

If the result is an Ok-variant, returns the value contained inside. If it -is an Err-variant, invokes crash! with the formatted error instead.

-

Examples

-
let is_ok: Result<u32, &str> = Ok(1);
-// Does nothing
-crash_if_err!(1, is_ok);
-
-let is_err: Result<u32, &str> = Err("This didn't work...");
-// Calls `crash!`
-crash_if_err!(1, is_err);
-
- \ No newline at end of file diff --git a/uucore/macro.has!.html b/uucore/macro.has!.html deleted file mode 100644 index a69015b17..000000000 --- a/uucore/macro.has!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.has.html...

- - - \ No newline at end of file diff --git a/uucore/macro.has.html b/uucore/macro.has.html deleted file mode 100644 index db6968f9e..000000000 --- a/uucore/macro.has.html +++ /dev/null @@ -1,6 +0,0 @@ -has in uucore - Rust -

Macro uucore::has[][src]

macro_rules! has {
-    ($mode : expr, $perm : expr) => { ... };
-}
-
- \ No newline at end of file diff --git a/uucore/macro.show!.html b/uucore/macro.show!.html deleted file mode 100644 index bb5cc3235..000000000 --- a/uucore/macro.show!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.show.html...

- - - \ No newline at end of file diff --git a/uucore/macro.show.html b/uucore/macro.show.html deleted file mode 100644 index 2a62c4691..000000000 --- a/uucore/macro.show.html +++ /dev/null @@ -1,33 +0,0 @@ -show in uucore - Rust -

Macro uucore::show[][src]

macro_rules! show {
-    ($err : expr) => { ... };
-}
-
Expand description

Display a crate::error::UError and set global exit code.

-

Prints the error message contained in an crate::error::UError to stderr -and sets the exit code through crate::error::set_exit_code. The printed -error message is prepended with the calling utility’s name. A call to this -macro will not finish program execution.

-

Examples

-

The following example would print a message “Some error occurred” and set -the utility’s exit code to 2.

- -

-use uucore::error::{self, USimpleError};
-
-fn main() {
-    let err = USimpleError::new(2, "Some error occurred.");
-    show!(err);
-    assert_eq!(error::get_exit_code(), 2);
-}
-

If not using crate::error::UError, one may achieve the same behavior -like this:

- -

-use uucore::error::set_exit_code;
-
-fn main() {
-    set_exit_code(2);
-    show_error!("Some error occurred.");
-}
-
- \ No newline at end of file diff --git a/uucore/macro.show_error!.html b/uucore/macro.show_error!.html deleted file mode 100644 index 697242dd3..000000000 --- a/uucore/macro.show_error!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.show_error.html...

- - - \ No newline at end of file diff --git a/uucore/macro.show_error.html b/uucore/macro.show_error.html deleted file mode 100644 index 030ec4284..000000000 --- a/uucore/macro.show_error.html +++ /dev/null @@ -1,11 +0,0 @@ -show_error in uucore - Rust -

Macro uucore::show_error[][src]

macro_rules! show_error {
-    ($($args : tt) +) => { ... };
-}
-
Expand description

Show an error to stderr in a similar style to GNU coreutils.

-

Takes a format!-like input and prints it to stderr. The output is -prepended with the current utility’s name.

-

Examples

-
show_error!("Couldn't apply {} to {}", "foo", "bar");
-
- \ No newline at end of file diff --git a/uucore/macro.show_error_custom_description!.html b/uucore/macro.show_error_custom_description!.html deleted file mode 100644 index 19893c824..000000000 --- a/uucore/macro.show_error_custom_description!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.show_error_custom_description.html...

- - - \ No newline at end of file diff --git a/uucore/macro.show_error_custom_description.html b/uucore/macro.show_error_custom_description.html deleted file mode 100644 index bfd158484..000000000 --- a/uucore/macro.show_error_custom_description.html +++ /dev/null @@ -1,16 +0,0 @@ -show_error_custom_description in uucore - Rust -

Macro uucore::show_error_custom_description[][src]

macro_rules! show_error_custom_description {
-    ($err : expr, $($args : tt) +) => { ... };
-}
-
Expand description

Show a warning to stderr in a similar style to GNU coreutils.

-

Is this really required? Used in the following locations:

-

./src/uu/head/src/head.rs:12 -./src/uu/head/src/head.rs:424 -./src/uu/head/src/head.rs:427 -./src/uu/head/src/head.rs:430 -./src/uu/head/src/head.rs:453 -./src/uu/du/src/du.rs:339 -./src/uu/wc/src/wc.rs:270 -./src/uu/wc/src/wc.rs:273

-
- \ No newline at end of file diff --git a/uucore/macro.show_if_err!.html b/uucore/macro.show_if_err!.html deleted file mode 100644 index 32ddd8c57..000000000 --- a/uucore/macro.show_if_err!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.show_if_err.html...

- - - \ No newline at end of file diff --git a/uucore/macro.show_if_err.html b/uucore/macro.show_if_err.html deleted file mode 100644 index 1a04e1dde..000000000 --- a/uucore/macro.show_if_err.html +++ /dev/null @@ -1,22 +0,0 @@ -show_if_err in uucore - Rust -

Macro uucore::show_if_err[][src]

macro_rules! show_if_err {
-    ($res : expr) => { ... };
-}
-
Expand description

Display an error and set global exit code in error case.

-

Wraps around show! and takes a crate::error::UResult instead of a -crate::error::UError type. This macro invokes show! if the -crate::error::UResult is an Err-variant. This can be invoked directly -on the result of a function call, like in the install utility:

- -
show_if_err!(copy(sourcepath, &targetpath, b));
-

Examples

-

-let is_ok = Ok(1);
-// This does nothing at all
-show_if_err!(is_ok);
-
-let is_err = Err(USimpleError::new(1, "I'm an error").into());
-// Calls `show!` on the contained USimpleError
-show_if_err!(is_err);
-
- \ No newline at end of file diff --git a/uucore/macro.show_usage_error!.html b/uucore/macro.show_usage_error!.html deleted file mode 100644 index d49b8be25..000000000 --- a/uucore/macro.show_usage_error!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.show_usage_error.html...

- - - \ No newline at end of file diff --git a/uucore/macro.show_usage_error.html b/uucore/macro.show_usage_error.html deleted file mode 100644 index af8af2ae9..000000000 --- a/uucore/macro.show_usage_error.html +++ /dev/null @@ -1,13 +0,0 @@ -show_usage_error in uucore - Rust -

Macro uucore::show_usage_error[][src]

macro_rules! show_usage_error {
-    ($($args : tt) +) => { ... };
-}
-
Expand description

Show a bad invocation help message in a similar style to GNU coreutils.

-

Takes a format!-compatible input and prepends it with the current -utility’s name before printing to stderr.

-

Examples

-
// outputs <name>: Couldn't apply foo to bar
-//         Try '<name> --help' for more information.
-show_usage_error!("Couldn't apply {} to {}", "foo", "bar");
-
- \ No newline at end of file diff --git a/uucore/macro.show_warning!.html b/uucore/macro.show_warning!.html deleted file mode 100644 index c47251a43..000000000 --- a/uucore/macro.show_warning!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.show_warning.html...

- - - \ No newline at end of file diff --git a/uucore/macro.show_warning.html b/uucore/macro.show_warning.html deleted file mode 100644 index 592dac287..000000000 --- a/uucore/macro.show_warning.html +++ /dev/null @@ -1,12 +0,0 @@ -show_warning in uucore - Rust -

Macro uucore::show_warning[][src]

macro_rules! show_warning {
-    ($($args : tt) +) => { ... };
-}
-
Expand description

Print a warning message to stderr.

-

Takes format!-compatible input and prepends it with the current -utility’s name and “warning: “ before printing to stderr.

-

Examples

-
// outputs <name>: warning: Couldn't apply foo to bar
-show_warning!("Couldn't apply {} to {}", "foo", "bar");
-
- \ No newline at end of file diff --git a/uucore/macro.uio_error!.html b/uucore/macro.uio_error!.html deleted file mode 100644 index 6e7fc9fa5..000000000 --- a/uucore/macro.uio_error!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.uio_error.html...

- - - \ No newline at end of file diff --git a/uucore/macro.uio_error.html b/uucore/macro.uio_error.html deleted file mode 100644 index 708d154fa..000000000 --- a/uucore/macro.uio_error.html +++ /dev/null @@ -1,53 +0,0 @@ -uio_error in uucore - Rust -

Macro uucore::uio_error[][src]

macro_rules! uio_error {
-    ($err : expr, $($args : tt) +) => { ... };
-}
-
Expand description

Shorthand to construct UIoError-instances.

-

This macro serves as a convenience call to quickly construct instances of -UIoError. It takes:

-
    -
  • An instance of std::io::Error
  • -
  • A format!-compatible string and
  • -
  • An arbitrary number of arguments to the format string
  • -
-

In exactly this order. It is equivalent to the more verbose code seen in the -example.

-

Examples

-
use uucore::error::UIoError;
-use uucore::uio_error;
-
-let io_err = std::io::Error::new(
-    std::io::ErrorKind::PermissionDenied, "fix me please!"
-);
-
-let uio_err = UIoError::new(
-    io_err.kind(),
-    format!("Error code: {}", 2)
-);
-
-let other_uio_err = uio_error!(io_err, "Error code: {}", 2);
-
-// prints "fix me please!: Permission denied"
-println!("{}", uio_err);
-// prints "Error code: 2: Permission denied"
-println!("{}", other_uio_err);
-

The std::fmt::Display impl of UIoError will then ensure that an -appropriate error message relating to the actual error kind of the -std::io::Error is appended to whatever error message is defined in -addition (as secondary argument).

-

If you want to show only the error message for the std::io::ErrorKind -that’s contained in UIoError, pass the second argument as empty string:

- -
use uucore::error::UIoError;
-use uucore::uio_error;
-
-let io_err = std::io::Error::new(
-    std::io::ErrorKind::PermissionDenied, "fix me please!"
-);
-
-let other_uio_err = uio_error!(io_err, "");
-
-// prints: ": Permission denied"
-println!("{}", other_uio_err);
-
- \ No newline at end of file diff --git a/uucore/memo/index.html b/uucore/memo/index.html deleted file mode 100644 index 8cd6a8e9a..000000000 --- a/uucore/memo/index.html +++ /dev/null @@ -1,12 +0,0 @@ -uucore::memo - Rust -

Module uucore::memo[][src]

Expand description

Memo runner of printf -Takes a format string and arguments

-
    -
  1. tokenize format string into tokens, consuming -any subst. arguments along the way.
  2. -
  3. feeds remaining arguments into function -that prints tokens.
  4. -
-

Structs

-
- \ No newline at end of file diff --git a/uucore/memo/sidebar-items.js b/uucore/memo/sidebar-items.js deleted file mode 100644 index c351a6d9f..000000000 --- a/uucore/memo/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"struct":[["Memo",""]]}); \ No newline at end of file diff --git a/uucore/memo/struct.Memo.html b/uucore/memo/struct.Memo.html deleted file mode 100644 index 99603c3da..000000000 --- a/uucore/memo/struct.Memo.html +++ /dev/null @@ -1,12 +0,0 @@ -Memo in uucore::memo - Rust -

Struct uucore::memo::Memo[][src]

pub struct Memo { /* fields omitted */ }

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/mode/fn.get_umask.html b/uucore/mode/fn.get_umask.html deleted file mode 100644 index 33b404f03..000000000 --- a/uucore/mode/fn.get_umask.html +++ /dev/null @@ -1,3 +0,0 @@ -get_umask in uucore::mode - Rust -

Function uucore::mode::get_umask[][src]

pub fn get_umask() -> u32
- \ No newline at end of file diff --git a/uucore/mode/fn.parse_mode.html b/uucore/mode/fn.parse_mode.html deleted file mode 100644 index 89c8f3ee4..000000000 --- a/uucore/mode/fn.parse_mode.html +++ /dev/null @@ -1,3 +0,0 @@ -parse_mode in uucore::mode - Rust -

Function uucore::mode::parse_mode[][src]

pub fn parse_mode(mode: &str) -> Result<mode_t, String>
- \ No newline at end of file diff --git a/uucore/mode/fn.parse_numeric.html b/uucore/mode/fn.parse_numeric.html deleted file mode 100644 index e5e9b0c2e..000000000 --- a/uucore/mode/fn.parse_numeric.html +++ /dev/null @@ -1,3 +0,0 @@ -parse_numeric in uucore::mode - Rust -

Function uucore::mode::parse_numeric[][src]

pub fn parse_numeric(
    fperm: u32,
    mode: &str,
    considering_dir: bool
) -> Result<u32, String>
- \ No newline at end of file diff --git a/uucore/mode/fn.parse_symbolic.html b/uucore/mode/fn.parse_symbolic.html deleted file mode 100644 index 981f850d1..000000000 --- a/uucore/mode/fn.parse_symbolic.html +++ /dev/null @@ -1,3 +0,0 @@ -parse_symbolic in uucore::mode - Rust -

Function uucore::mode::parse_symbolic[][src]

pub fn parse_symbolic(
    fperm: u32,
    mode: &str,
    umask: u32,
    considering_dir: bool
) -> Result<u32, String>
- \ No newline at end of file diff --git a/uucore/mode/fn.strip_minus_from_mode.html b/uucore/mode/fn.strip_minus_from_mode.html deleted file mode 100644 index 05885f8b9..000000000 --- a/uucore/mode/fn.strip_minus_from_mode.html +++ /dev/null @@ -1,3 +0,0 @@ -strip_minus_from_mode in uucore::mode - Rust -

Function uucore::mode::strip_minus_from_mode[][src]

pub fn strip_minus_from_mode(args: &mut Vec<String>) -> bool
- \ No newline at end of file diff --git a/uucore/mode/index.html b/uucore/mode/index.html deleted file mode 100644 index e9e321288..000000000 --- a/uucore/mode/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uucore::mode - Rust -

Module uucore::mode[][src]

Expand description

Set of functions to parse modes

-

Functions

-
- \ No newline at end of file diff --git a/uucore/mode/sidebar-items.js b/uucore/mode/sidebar-items.js deleted file mode 100644 index 15455c303..000000000 --- a/uucore/mode/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["get_umask",""],["parse_mode",""],["parse_numeric",""],["parse_symbolic",""],["strip_minus_from_mode",""]]}); \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/fn.backup.html b/uucore/mods/backup_control/arguments/fn.backup.html deleted file mode 100644 index ad2a3e6c8..000000000 --- a/uucore/mods/backup_control/arguments/fn.backup.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/fn.backup.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/fn.backup_no_args.html b/uucore/mods/backup_control/arguments/fn.backup_no_args.html deleted file mode 100644 index 7b1f39692..000000000 --- a/uucore/mods/backup_control/arguments/fn.backup_no_args.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/fn.backup_no_args.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/fn.suffix.html b/uucore/mods/backup_control/arguments/fn.suffix.html deleted file mode 100644 index 766898bf5..000000000 --- a/uucore/mods/backup_control/arguments/fn.suffix.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/fn.suffix.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/index.html b/uucore/mods/backup_control/arguments/index.html deleted file mode 100644 index 0d3e4234d..000000000 --- a/uucore/mods/backup_control/arguments/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/static.OPT_BACKUP.html b/uucore/mods/backup_control/arguments/static.OPT_BACKUP.html deleted file mode 100644 index 16eb496f4..000000000 --- a/uucore/mods/backup_control/arguments/static.OPT_BACKUP.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/static.OPT_BACKUP.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html b/uucore/mods/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html deleted file mode 100644 index bc495dcc3..000000000 --- a/uucore/mods/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/static.OPT_BACKUP_NO_ARG.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/arguments/static.OPT_SUFFIX.html b/uucore/mods/backup_control/arguments/static.OPT_SUFFIX.html deleted file mode 100644 index c8cc7da60..000000000 --- a/uucore/mods/backup_control/arguments/static.OPT_SUFFIX.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../../uucore/backup_control/arguments/static.OPT_SUFFIX.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/enum.BackupError.html b/uucore/mods/backup_control/enum.BackupError.html deleted file mode 100644 index 1321acc41..000000000 --- a/uucore/mods/backup_control/enum.BackupError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/enum.BackupError.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/enum.BackupMode.html b/uucore/mods/backup_control/enum.BackupMode.html deleted file mode 100644 index 8900c0811..000000000 --- a/uucore/mods/backup_control/enum.BackupMode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/enum.BackupMode.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/fn.determine_backup_mode.html b/uucore/mods/backup_control/fn.determine_backup_mode.html deleted file mode 100644 index df1af6cd6..000000000 --- a/uucore/mods/backup_control/fn.determine_backup_mode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/fn.determine_backup_mode.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/fn.determine_backup_suffix.html b/uucore/mods/backup_control/fn.determine_backup_suffix.html deleted file mode 100644 index ed1bee620..000000000 --- a/uucore/mods/backup_control/fn.determine_backup_suffix.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/fn.determine_backup_suffix.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/fn.get_backup_path.html b/uucore/mods/backup_control/fn.get_backup_path.html deleted file mode 100644 index 0deee334b..000000000 --- a/uucore/mods/backup_control/fn.get_backup_path.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/fn.get_backup_path.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/index.html b/uucore/mods/backup_control/index.html deleted file mode 100644 index a2b404ca4..000000000 --- a/uucore/mods/backup_control/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/static.BACKUP_CONTROL_LONG_HELP.html b/uucore/mods/backup_control/static.BACKUP_CONTROL_LONG_HELP.html deleted file mode 100644 index 6046a3f84..000000000 --- a/uucore/mods/backup_control/static.BACKUP_CONTROL_LONG_HELP.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/static.BACKUP_CONTROL_LONG_HELP.html...

- - - \ No newline at end of file diff --git a/uucore/mods/backup_control/static.BACKUP_CONTROL_VALUES.html b/uucore/mods/backup_control/static.BACKUP_CONTROL_VALUES.html deleted file mode 100644 index 3a01e2909..000000000 --- a/uucore/mods/backup_control/static.BACKUP_CONTROL_VALUES.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/backup_control/static.BACKUP_CONTROL_VALUES.html...

- - - \ No newline at end of file diff --git a/uucore/mods/display/fn.print_verbatim.html b/uucore/mods/display/fn.print_verbatim.html deleted file mode 100644 index 7208328aa..000000000 --- a/uucore/mods/display/fn.print_verbatim.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/display/fn.print_verbatim.html...

- - - \ No newline at end of file diff --git a/uucore/mods/display/fn.println_verbatim.html b/uucore/mods/display/fn.println_verbatim.html deleted file mode 100644 index 52bcb60c2..000000000 --- a/uucore/mods/display/fn.println_verbatim.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/display/fn.println_verbatim.html...

- - - \ No newline at end of file diff --git a/uucore/mods/display/index.html b/uucore/mods/display/index.html deleted file mode 100644 index 31f7da8e5..000000000 --- a/uucore/mods/display/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/display/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/display/struct.Quoted.html b/uucore/mods/display/struct.Quoted.html deleted file mode 100644 index 63f15f306..000000000 --- a/uucore/mods/display/struct.Quoted.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/display/struct.Quoted.html...

- - - \ No newline at end of file diff --git a/uucore/mods/display/trait.Quotable.html b/uucore/mods/display/trait.Quotable.html deleted file mode 100644 index caa876ef7..000000000 --- a/uucore/mods/display/trait.Quotable.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/display/trait.Quotable.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/fn.get_exit_code.html b/uucore/mods/error/fn.get_exit_code.html deleted file mode 100644 index 4000fab39..000000000 --- a/uucore/mods/error/fn.get_exit_code.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/fn.get_exit_code.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/fn.set_exit_code.html b/uucore/mods/error/fn.set_exit_code.html deleted file mode 100644 index 185af1485..000000000 --- a/uucore/mods/error/fn.set_exit_code.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/fn.set_exit_code.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/fn.strip_errno.html b/uucore/mods/error/fn.strip_errno.html deleted file mode 100644 index 37137c64f..000000000 --- a/uucore/mods/error/fn.strip_errno.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/fn.strip_errno.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/index.html b/uucore/mods/error/index.html deleted file mode 100644 index a2e10f173..000000000 --- a/uucore/mods/error/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/struct.ExitCode.html b/uucore/mods/error/struct.ExitCode.html deleted file mode 100644 index c0de249bf..000000000 --- a/uucore/mods/error/struct.ExitCode.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/struct.ExitCode.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/struct.UIoError.html b/uucore/mods/error/struct.UIoError.html deleted file mode 100644 index eda01256e..000000000 --- a/uucore/mods/error/struct.UIoError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/struct.UIoError.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/struct.USimpleError.html b/uucore/mods/error/struct.USimpleError.html deleted file mode 100644 index 2c4f24d18..000000000 --- a/uucore/mods/error/struct.USimpleError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/struct.USimpleError.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/struct.UUsageError.html b/uucore/mods/error/struct.UUsageError.html deleted file mode 100644 index f190feaab..000000000 --- a/uucore/mods/error/struct.UUsageError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/struct.UUsageError.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/trait.FromIo.html b/uucore/mods/error/trait.FromIo.html deleted file mode 100644 index 1ea037c10..000000000 --- a/uucore/mods/error/trait.FromIo.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/trait.FromIo.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/trait.UError.html b/uucore/mods/error/trait.UError.html deleted file mode 100644 index dc34b8240..000000000 --- a/uucore/mods/error/trait.UError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/trait.UError.html...

- - - \ No newline at end of file diff --git a/uucore/mods/error/type.UResult.html b/uucore/mods/error/type.UResult.html deleted file mode 100644 index 2571350d0..000000000 --- a/uucore/mods/error/type.UResult.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/error/type.UResult.html...

- - - \ No newline at end of file diff --git a/uucore/mods/os/fn.is_wsl_1.html b/uucore/mods/os/fn.is_wsl_1.html deleted file mode 100644 index 55dabfeca..000000000 --- a/uucore/mods/os/fn.is_wsl_1.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/os/fn.is_wsl_1.html...

- - - \ No newline at end of file diff --git a/uucore/mods/os/fn.is_wsl_2.html b/uucore/mods/os/fn.is_wsl_2.html deleted file mode 100644 index d64caa06c..000000000 --- a/uucore/mods/os/fn.is_wsl_2.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/os/fn.is_wsl_2.html...

- - - \ No newline at end of file diff --git a/uucore/mods/os/index.html b/uucore/mods/os/index.html deleted file mode 100644 index d3d2d8e44..000000000 --- a/uucore/mods/os/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/os/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/panic/fn.mute_sigpipe_panic.html b/uucore/mods/panic/fn.mute_sigpipe_panic.html deleted file mode 100644 index 9fb938615..000000000 --- a/uucore/mods/panic/fn.mute_sigpipe_panic.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/panic/fn.mute_sigpipe_panic.html...

- - - \ No newline at end of file diff --git a/uucore/mods/panic/index.html b/uucore/mods/panic/index.html deleted file mode 100644 index 40843c5c3..000000000 --- a/uucore/mods/panic/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/panic/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/ranges/fn.complement.html b/uucore/mods/ranges/fn.complement.html deleted file mode 100644 index d44c3f075..000000000 --- a/uucore/mods/ranges/fn.complement.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/ranges/fn.complement.html...

- - - \ No newline at end of file diff --git a/uucore/mods/ranges/fn.contain.html b/uucore/mods/ranges/fn.contain.html deleted file mode 100644 index 4f38bf25b..000000000 --- a/uucore/mods/ranges/fn.contain.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/ranges/fn.contain.html...

- - - \ No newline at end of file diff --git a/uucore/mods/ranges/index.html b/uucore/mods/ranges/index.html deleted file mode 100644 index 6e2dc3107..000000000 --- a/uucore/mods/ranges/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/ranges/index.html...

- - - \ No newline at end of file diff --git a/uucore/mods/ranges/struct.Range.html b/uucore/mods/ranges/struct.Range.html deleted file mode 100644 index 8483cb75e..000000000 --- a/uucore/mods/ranges/struct.Range.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/ranges/struct.Range.html...

- - - \ No newline at end of file diff --git a/uucore/mods/version_cmp/fn.version_cmp.html b/uucore/mods/version_cmp/fn.version_cmp.html deleted file mode 100644 index 30aa9a79e..000000000 --- a/uucore/mods/version_cmp/fn.version_cmp.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/version_cmp/fn.version_cmp.html...

- - - \ No newline at end of file diff --git a/uucore/mods/version_cmp/index.html b/uucore/mods/version_cmp/index.html deleted file mode 100644 index 988351405..000000000 --- a/uucore/mods/version_cmp/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/version_cmp/index.html...

- - - \ No newline at end of file diff --git a/uucore/os/fn.is_wsl_1.html b/uucore/os/fn.is_wsl_1.html deleted file mode 100644 index 364ea7cd7..000000000 --- a/uucore/os/fn.is_wsl_1.html +++ /dev/null @@ -1,4 +0,0 @@ -is_wsl_1 in uucore::os - Rust -

Function uucore::os::is_wsl_1[][src]

pub fn is_wsl_1() -> bool
Expand description

Test if the program is running under WSL

-
- \ No newline at end of file diff --git a/uucore/os/fn.is_wsl_2.html b/uucore/os/fn.is_wsl_2.html deleted file mode 100644 index 55dde5a0b..000000000 --- a/uucore/os/fn.is_wsl_2.html +++ /dev/null @@ -1,3 +0,0 @@ -is_wsl_2 in uucore::os - Rust -

Function uucore::os::is_wsl_2[][src]

pub fn is_wsl_2() -> bool
- \ No newline at end of file diff --git a/uucore/os/index.html b/uucore/os/index.html deleted file mode 100644 index c3d6843d4..000000000 --- a/uucore/os/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uucore::os - Rust -

Module uucore::os[][src]

Functions

-

Test if the program is running under WSL

-
- \ No newline at end of file diff --git a/uucore/os/sidebar-items.js b/uucore/os/sidebar-items.js deleted file mode 100644 index 9b9b188e5..000000000 --- a/uucore/os/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["is_wsl_1","Test if the program is running under WSL"],["is_wsl_2",""]]}); \ No newline at end of file diff --git a/uucore/panic/fn.mute_sigpipe_panic.html b/uucore/panic/fn.mute_sigpipe_panic.html deleted file mode 100644 index f95d21e1a..000000000 --- a/uucore/panic/fn.mute_sigpipe_panic.html +++ /dev/null @@ -1,12 +0,0 @@ -mute_sigpipe_panic in uucore::panic - Rust -

Function uucore::panic::mute_sigpipe_panic[][src]

pub fn mute_sigpipe_panic()
Expand description

Terminate without error on panics that occur due to broken pipe errors.

-

For background discussions on SIGPIPE handling, see

-
    -
  • https://github.com/uutils/coreutils/issues/374
  • -
  • https://github.com/uutils/coreutils/pull/1106
  • -
  • https://github.com/rust-lang/rust/issues/62569
  • -
  • https://github.com/BurntSushi/ripgrep/issues/200
  • -
  • https://github.com/crev-dev/cargo-crev/issues/287
  • -
-
- \ No newline at end of file diff --git a/uucore/panic/index.html b/uucore/panic/index.html deleted file mode 100644 index 77bf5443d..000000000 --- a/uucore/panic/index.html +++ /dev/null @@ -1,10 +0,0 @@ -uucore::panic - Rust -

Module uucore::panic[][src]

Expand description

Custom panic hooks that allow silencing certain types of errors.

-

Use the mute_sigpipe_panic function to silence panics caused by -broken pipe errors. This can happen when a process is still -producing data when the consuming process terminates and closes the -pipe. For example,

-
$ seq inf | head -n 1

Functions

-

Terminate without error on panics that occur due to broken pipe errors.

-
- \ No newline at end of file diff --git a/uucore/panic/sidebar-items.js b/uucore/panic/sidebar-items.js deleted file mode 100644 index fe2d7da29..000000000 --- a/uucore/panic/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["mute_sigpipe_panic","Terminate without error on panics that occur due to broken pipe errors."]]}); \ No newline at end of file diff --git a/uucore/parse_size/enum.ParseSizeError.html b/uucore/parse_size/enum.ParseSizeError.html deleted file mode 100644 index caa6bba2d..000000000 --- a/uucore/parse_size/enum.ParseSizeError.html +++ /dev/null @@ -1,26 +0,0 @@ -ParseSizeError in uucore::parse_size - Rust -

Enum uucore::parse_size::ParseSizeError[][src]

pub enum ParseSizeError {
-    ParseFailure(String),
-    SizeTooBig(String),
-}

Variants

ParseFailure(String)

Tuple Fields

0: String

SizeTooBig(String)

Tuple Fields

0: String

Trait Implementations

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-
👎 Deprecated since 1.42.0:

use the Display impl or to_string()

-

The lower-level source of this error, if any. Read more

-
🔬 This is a nightly-only experimental API. (backtrace)

Returns a stack backtrace, if available, of where this error occurred. Read more

-
👎 Deprecated since 1.33.0:

replaced by Error::source, which can support downcasting

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/parse_size/fn.parse_size.html b/uucore/parse_size/fn.parse_size.html deleted file mode 100644 index ecce5be3b..000000000 --- a/uucore/parse_size/fn.parse_size.html +++ /dev/null @@ -1,18 +0,0 @@ -parse_size in uucore::parse_size - Rust -

Function uucore::parse_size::parse_size[][src]

pub fn parse_size(size: &str) -> Result<usize, ParseSizeError>
Expand description

Parse a size string into a number of bytes.

-

A size string comprises an integer and an optional unit. The unit -may be K, M, G, T, P, E, Z or Y (powers of 1024), or KB, MB, -etc. (powers of 1000), or b which is 512. -Binary prefixes can be used, too: KiB=K, MiB=M, and so on.

-

Errors

-

Will return ParseSizeError if it’s not possible to parse this -string into a number, e.g. if the string does not begin with a -numeral, or if the unit is not one of the supported units described -in the preceding section.

-

Examples

-
use uucore::parse_size::parse_size;
-assert_eq!(Ok(123), parse_size("123"));
-assert_eq!(Ok(9 * 1000), parse_size("9kB")); // kB is 1000
-assert_eq!(Ok(2 * 1024), parse_size("2K")); // K is 1024
-
- \ No newline at end of file diff --git a/uucore/parse_size/index.html b/uucore/parse_size/index.html deleted file mode 100644 index 6b6107bbe..000000000 --- a/uucore/parse_size/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uucore::parse_size - Rust -

Module uucore::parse_size[][src]

Enums

-

Functions

-

Parse a size string into a number of bytes.

-
- \ No newline at end of file diff --git a/uucore/parse_size/sidebar-items.js b/uucore/parse_size/sidebar-items.js deleted file mode 100644 index 3aa91d3c0..000000000 --- a/uucore/parse_size/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["ParseSizeError",""]],"fn":[["parse_size","Parse a size string into a number of bytes."]]}); \ No newline at end of file diff --git a/uucore/parse_time/fn.from_str.html b/uucore/parse_time/fn.from_str.html deleted file mode 100644 index f6cc19f9a..000000000 --- a/uucore/parse_time/fn.from_str.html +++ /dev/null @@ -1,3 +0,0 @@ -from_str in uucore::parse_time - Rust -

Function uucore::parse_time::from_str[][src]

pub fn from_str(string: &str) -> Result<Duration, String>
- \ No newline at end of file diff --git a/uucore/parse_time/index.html b/uucore/parse_time/index.html deleted file mode 100644 index e227c6be3..000000000 --- a/uucore/parse_time/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uucore::parse_time - Rust -

Module uucore::parse_time[][src]

Functions

-
- \ No newline at end of file diff --git a/uucore/parse_time/sidebar-items.js b/uucore/parse_time/sidebar-items.js deleted file mode 100644 index e230df5cf..000000000 --- a/uucore/parse_time/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["from_str",""]]}); \ No newline at end of file diff --git a/uucore/parser/parse_size/enum.ParseSizeError.html b/uucore/parser/parse_size/enum.ParseSizeError.html deleted file mode 100644 index d1c47d25e..000000000 --- a/uucore/parser/parse_size/enum.ParseSizeError.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/parse_size/enum.ParseSizeError.html...

- - - \ No newline at end of file diff --git a/uucore/parser/parse_size/fn.parse_size.html b/uucore/parser/parse_size/fn.parse_size.html deleted file mode 100644 index 2891cf150..000000000 --- a/uucore/parser/parse_size/fn.parse_size.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/parse_size/fn.parse_size.html...

- - - \ No newline at end of file diff --git a/uucore/parser/parse_size/index.html b/uucore/parser/parse_size/index.html deleted file mode 100644 index e95a993b8..000000000 --- a/uucore/parser/parse_size/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/parse_size/index.html...

- - - \ No newline at end of file diff --git a/uucore/parser/parse_time/fn.from_str.html b/uucore/parser/parse_time/fn.from_str.html deleted file mode 100644 index 7bf0fa0a2..000000000 --- a/uucore/parser/parse_time/fn.from_str.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/parse_time/fn.from_str.html...

- - - \ No newline at end of file diff --git a/uucore/parser/parse_time/index.html b/uucore/parser/parse_time/index.html deleted file mode 100644 index 4e80d2b2e..000000000 --- a/uucore/parser/parse_time/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to ../../../uucore/parse_time/index.html...

- - - \ No newline at end of file diff --git a/uucore/perms/entries/fn.get_groups.html b/uucore/perms/entries/fn.get_groups.html deleted file mode 100644 index 6b525bb9a..000000000 --- a/uucore/perms/entries/fn.get_groups.html +++ /dev/null @@ -1,12 +0,0 @@ -get_groups in uucore::perms::entries - Rust -

Function uucore::perms::entries::get_groups[][src]

pub fn get_groups() -> IOResult<Vec<gid_t>>
Expand description

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-
-

getgroups() returns the supplementary group IDs of the calling -process in list. -If size is zero, list is not modified, but the total number of -supplementary group IDs for the process is returned. This allows -the caller to determine the size of a dynamically allocated list -to be used in a further call to getgroups().

-
-
- \ No newline at end of file diff --git a/uucore/perms/entries/fn.get_groups_gnu.html b/uucore/perms/entries/fn.get_groups_gnu.html deleted file mode 100644 index 8f3597f95..000000000 --- a/uucore/perms/entries/fn.get_groups_gnu.html +++ /dev/null @@ -1,25 +0,0 @@ -get_groups_gnu in uucore::perms::entries - Rust -

Function uucore::perms::entries::get_groups_gnu[][src]

pub fn get_groups_gnu(arg_id: Option<u32>) -> IOResult<Vec<gid_t>>
Expand description

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-

If arg_id is None (default), get_groups_gnu moves the effective -group id (egid) to the first entry in the returned Vector. -If arg_id is Some(x), get_groups_gnu moves the id with value x -to the first entry in the returned Vector. This might be necessary -for id --groups --real if gid and egid are not equal.

-

From: <https://www.man7.org/linux/man-pages/man3/getgroups.3p.html>

-
-

As implied by the definition of supplementary groups, the -effective group ID may appear in the array returned by -getgroups() or it may be returned only by getegid(). Duplication -may exist, but the application needs to call getegid() to be sure -of getting all of the information. Various implementation -variations and administrative sequences cause the set of groups -appearing in the result of getgroups() to vary in order and as to -whether the effective group ID is included, even when the set of -groups is the same (in the mathematical sense of ``set’’). (The -history of a process and its parents could affect the details of -the result.)

-
-
- \ No newline at end of file diff --git a/uucore/perms/entries/fn.gid2grp.html b/uucore/perms/entries/fn.gid2grp.html deleted file mode 100644 index 39422dcda..000000000 --- a/uucore/perms/entries/fn.gid2grp.html +++ /dev/null @@ -1,3 +0,0 @@ -gid2grp in uucore::perms::entries - Rust -

Function uucore::perms::entries::gid2grp[][src]

pub fn gid2grp(id: gid_t) -> IOResult<String>
- \ No newline at end of file diff --git a/uucore/perms/entries/fn.grp2gid.html b/uucore/perms/entries/fn.grp2gid.html deleted file mode 100644 index 2775999f0..000000000 --- a/uucore/perms/entries/fn.grp2gid.html +++ /dev/null @@ -1,3 +0,0 @@ -grp2gid in uucore::perms::entries - Rust -

Function uucore::perms::entries::grp2gid[][src]

pub fn grp2gid(name: &str) -> IOResult<gid_t>
- \ No newline at end of file diff --git a/uucore/perms/entries/fn.uid2usr.html b/uucore/perms/entries/fn.uid2usr.html deleted file mode 100644 index 0632fc3b0..000000000 --- a/uucore/perms/entries/fn.uid2usr.html +++ /dev/null @@ -1,3 +0,0 @@ -uid2usr in uucore::perms::entries - Rust -

Function uucore::perms::entries::uid2usr[][src]

pub fn uid2usr(id: uid_t) -> IOResult<String>
- \ No newline at end of file diff --git a/uucore/perms/entries/fn.usr2uid.html b/uucore/perms/entries/fn.usr2uid.html deleted file mode 100644 index c3b360d5b..000000000 --- a/uucore/perms/entries/fn.usr2uid.html +++ /dev/null @@ -1,3 +0,0 @@ -usr2uid in uucore::perms::entries - Rust -

Function uucore::perms::entries::usr2uid[][src]

pub fn usr2uid(name: &str) -> IOResult<uid_t>
- \ No newline at end of file diff --git a/uucore/perms/entries/index.html b/uucore/perms/entries/index.html deleted file mode 100644 index 1db17da98..000000000 --- a/uucore/perms/entries/index.html +++ /dev/null @@ -1,33 +0,0 @@ -uucore::perms::entries - Rust -

Module uucore::perms::entries[][src]

Expand description

Get password/group file entry

-

Examples:

-
use uucore::entries::{self, Locate};
-
-let root_group = if cfg!(any(target_os = "linux", target_os = "android")) {
-    "root"
-} else {
-    "wheel"
-};
-
-assert_eq!("root", entries::uid2usr(0).unwrap());
-assert_eq!(0, entries::usr2uid("root").unwrap());
-assert!(entries::gid2grp(0).is_ok());
-assert!(entries::grp2gid(root_group).is_ok());
-
-assert!(entries::Passwd::locate(0).is_ok());
-assert!(entries::Passwd::locate("0").is_ok());
-assert!(entries::Passwd::locate("root").is_ok());
-
-assert!(entries::Group::locate(0).is_ok());
-assert!(entries::Group::locate("0").is_ok());
-assert!(entries::Group::locate(root_group).is_ok());
-

Structs

-

Traits

-

Fetch desired entry.

-

Functions

-

From: <https://man7.org/linux/man-pages/man2/getgroups.2.html>

-

The list of group IDs returned from GNU’s groups and GNU’s id --groups -starts with the effective group ID (egid). -This is a wrapper for get_groups() to mimic this behavior.

-
- \ No newline at end of file diff --git a/uucore/perms/entries/sidebar-items.js b/uucore/perms/entries/sidebar-items.js deleted file mode 100644 index 6dbed1e4a..000000000 --- a/uucore/perms/entries/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["get_groups","From: ``"],["get_groups_gnu","The list of group IDs returned from GNU’s `groups` and GNU’s `id --groups` starts with the effective group ID (egid). This is a wrapper for `get_groups()` to mimic this behavior."],["gid2grp",""],["grp2gid",""],["uid2usr",""],["usr2uid",""]],"struct":[["Group",""],["Passwd",""]],"trait":[["Locate","Fetch desired entry."]]}); \ No newline at end of file diff --git a/uucore/perms/entries/struct.Group.html b/uucore/perms/entries/struct.Group.html deleted file mode 100644 index c9ac996ab..000000000 --- a/uucore/perms/entries/struct.Group.html +++ /dev/null @@ -1,23 +0,0 @@ -Group in uucore::perms::entries - Rust -

Struct uucore::perms::entries::Group[][src]

pub struct Group {
-    pub name: String,
-    pub gid: gid_t,
-}

Fields

name: String

AKA group.gr_name

-
gid: gid_t

AKA group.gr_gid

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/perms/entries/struct.Passwd.html b/uucore/perms/entries/struct.Passwd.html deleted file mode 100644 index 22540afa3..000000000 --- a/uucore/perms/entries/struct.Passwd.html +++ /dev/null @@ -1,47 +0,0 @@ -Passwd in uucore::perms::entries - Rust -

Struct uucore::perms::entries::Passwd[][src]

pub struct Passwd {
-    pub name: String,
-    pub uid: uid_t,
-    pub gid: gid_t,
-    pub user_info: String,
-    pub user_shell: String,
-    pub user_dir: String,
-    pub user_passwd: String,
-}

Fields

name: String

AKA passwd.pw_name

-
uid: uid_t

AKA passwd.pw_uid

-
gid: gid_t

AKA passwd.pw_gid

-
user_info: String

AKA passwd.pw_gecos

-
user_shell: String

AKA passwd.pw_shell

-
user_dir: String

AKA passwd.pw_dir

-
user_passwd: String

AKA passwd.pw_passwd

-

Implementations

This is a wrapper function for libc::getgrouplist.

-

From: <https://man7.org/linux/man-pages/man3/getgrouplist.3.html>

-
-

If the number of groups of which user is a member is less than or -equal to *ngroups, then the value *ngroups is returned. -If the user is a member of more than *ngroups groups, then -getgrouplist() returns -1. In this case, the value returned in -*ngroups can be used to resize the buffer passed to a further -call getgrouplist().

-
-

However, on macOS/darwin (and maybe others?) getgrouplist does -not update ngroups if ngroups is too small. Therefore, if not -updated by getgrouplist, ngroups needs to be increased in a -loop until getgrouplist stops returning -1.

-

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/perms/entries/trait.Locate.html b/uucore/perms/entries/trait.Locate.html deleted file mode 100644 index 020b4bf32..000000000 --- a/uucore/perms/entries/trait.Locate.html +++ /dev/null @@ -1,6 +0,0 @@ -Locate in uucore::perms::entries - Rust -

Trait uucore::perms::entries::Locate[][src]

pub trait Locate<K> {
-    fn locate(key: K) -> IOResult<Self>
    where
        Self: Sized
; -}
Expand description

Fetch desired entry.

-

Required methods

Implementors

- \ No newline at end of file diff --git a/uucore/perms/enum.IfFrom.html b/uucore/perms/enum.IfFrom.html deleted file mode 100644 index 9e2bd9b38..000000000 --- a/uucore/perms/enum.IfFrom.html +++ /dev/null @@ -1,17 +0,0 @@ -IfFrom in uucore::perms - Rust -

Enum uucore::perms::IfFrom[][src]

pub enum IfFrom {
-    All,
-    User(u32),
-    Group(u32),
-    UserGroup(u32u32),
-}

Variants

All

User(u32)

Tuple Fields

0: u32

Group(u32)

Tuple Fields

0: u32

UserGroup(u32u32)

Tuple Fields

0: u32
1: u32

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/perms/enum.TraverseSymlinks.html b/uucore/perms/enum.TraverseSymlinks.html deleted file mode 100644 index 0578151dd..000000000 --- a/uucore/perms/enum.TraverseSymlinks.html +++ /dev/null @@ -1,20 +0,0 @@ -TraverseSymlinks in uucore::perms - Rust -

Enum uucore::perms::TraverseSymlinks[][src]

pub enum TraverseSymlinks {
-    None,
-    First,
-    All,
-}

Variants

None

First

All

Trait Implementations

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/perms/enum.VerbosityLevel.html b/uucore/perms/enum.VerbosityLevel.html deleted file mode 100644 index 899a0f932..000000000 --- a/uucore/perms/enum.VerbosityLevel.html +++ /dev/null @@ -1,27 +0,0 @@ -VerbosityLevel in uucore::perms - Rust -

Enum uucore::perms::VerbosityLevel[][src]

pub enum VerbosityLevel {
-    Silent,
-    Changes,
-    Verbose,
-    Normal,
-}
Expand description

The various level of verbosity

-

Variants

Silent

Changes

Verbose

Normal

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/perms/fn.chown_base.html b/uucore/perms/fn.chown_base.html deleted file mode 100644 index d338ccb13..000000000 --- a/uucore/perms/fn.chown_base.html +++ /dev/null @@ -1,9 +0,0 @@ -chown_base in uucore::perms - Rust -

Function uucore::perms::chown_base[][src]

pub fn chown_base<'a>(
    app: App<'a>,
    args: impl Args,
    add_arg_if_not_reference: &'a str,
    parse_gid_uid_and_filter: fn(_: &ArgMatches) -> UResult<(Option<u32>, Option<u32>, IfFrom)>,
    groups_only: bool
) -> UResult<()>
Expand description

Base implementation for chgrp and chown.

-

An argument called add_arg_if_not_reference will be added to app if -args does not contain the --reference option. -parse_gid_uid_and_filter will be called to obtain the target gid and uid, and the filter, -from ArgMatches. -groups_only determines whether verbose output will only mention the group.

-
- \ No newline at end of file diff --git a/uucore/perms/fn.wrap_chown.html b/uucore/perms/fn.wrap_chown.html deleted file mode 100644 index fd4192f15..000000000 --- a/uucore/perms/fn.wrap_chown.html +++ /dev/null @@ -1,6 +0,0 @@ -wrap_chown in uucore::perms - Rust -

Function uucore::perms::wrap_chown[][src]

pub fn wrap_chown<P: AsRef<Path>>(
    path: P,
    meta: &Metadata,
    dest_uid: Option<u32>,
    dest_gid: Option<u32>,
    follow: bool,
    verbosity: Verbosity
) -> Result<String, String>
Expand description

Perform the change of owner on a path -with the various options -and error messages management

-
- \ No newline at end of file diff --git a/uucore/perms/index.html b/uucore/perms/index.html deleted file mode 100644 index 733c58f6b..000000000 --- a/uucore/perms/index.html +++ /dev/null @@ -1,14 +0,0 @@ -uucore::perms - Rust -

Module uucore::perms[][src]

Expand description

Common functions to manage permissions

-

Modules

-

Get password/group file entry

-

Structs

-

Enums

-

The various level of verbosity

-

Functions

-

Base implementation for chgrp and chown.

-

Perform the change of owner on a path -with the various options -and error messages management

-
- \ No newline at end of file diff --git a/uucore/perms/options/constant.ARG_FILES.html b/uucore/perms/options/constant.ARG_FILES.html deleted file mode 100644 index 8b996a4b1..000000000 --- a/uucore/perms/options/constant.ARG_FILES.html +++ /dev/null @@ -1,3 +0,0 @@ -ARG_FILES in uucore::perms::options - Rust -

Constant uucore::perms::options::ARG_FILES[][src]

pub const ARG_FILES: &str = "FILE";
- \ No newline at end of file diff --git a/uucore/perms/options/constant.ARG_GROUP.html b/uucore/perms/options/constant.ARG_GROUP.html deleted file mode 100644 index c7ae6b660..000000000 --- a/uucore/perms/options/constant.ARG_GROUP.html +++ /dev/null @@ -1,3 +0,0 @@ -ARG_GROUP in uucore::perms::options - Rust -

Constant uucore::perms::options::ARG_GROUP[][src]

pub const ARG_GROUP: &str = "GROUP";
- \ No newline at end of file diff --git a/uucore/perms/options/constant.ARG_OWNER.html b/uucore/perms/options/constant.ARG_OWNER.html deleted file mode 100644 index 2540a081c..000000000 --- a/uucore/perms/options/constant.ARG_OWNER.html +++ /dev/null @@ -1,3 +0,0 @@ -ARG_OWNER in uucore::perms::options - Rust -

Constant uucore::perms::options::ARG_OWNER[][src]

pub const ARG_OWNER: &str = "OWNER";
- \ No newline at end of file diff --git a/uucore/perms/options/constant.FROM.html b/uucore/perms/options/constant.FROM.html deleted file mode 100644 index 0e48a3917..000000000 --- a/uucore/perms/options/constant.FROM.html +++ /dev/null @@ -1,3 +0,0 @@ -FROM in uucore::perms::options - Rust -

Constant uucore::perms::options::FROM[][src]

pub const FROM: &str = "from";
- \ No newline at end of file diff --git a/uucore/perms/options/constant.RECURSIVE.html b/uucore/perms/options/constant.RECURSIVE.html deleted file mode 100644 index 85ff4d3d0..000000000 --- a/uucore/perms/options/constant.RECURSIVE.html +++ /dev/null @@ -1,3 +0,0 @@ -RECURSIVE in uucore::perms::options - Rust -

Constant uucore::perms::options::RECURSIVE[][src]

pub const RECURSIVE: &str = "recursive";
- \ No newline at end of file diff --git a/uucore/perms/options/constant.REFERENCE.html b/uucore/perms/options/constant.REFERENCE.html deleted file mode 100644 index e9ac928c9..000000000 --- a/uucore/perms/options/constant.REFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -REFERENCE in uucore::perms::options - Rust -

Constant uucore::perms::options::REFERENCE[][src]

pub const REFERENCE: &str = "reference";
- \ No newline at end of file diff --git a/uucore/perms/options/dereference/constant.DEREFERENCE.html b/uucore/perms/options/dereference/constant.DEREFERENCE.html deleted file mode 100644 index c63b8c1b3..000000000 --- a/uucore/perms/options/dereference/constant.DEREFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -DEREFERENCE in uucore::perms::options::dereference - Rust -

Constant uucore::perms::options::dereference::DEREFERENCE[][src]

pub const DEREFERENCE: &str = "dereference";
- \ No newline at end of file diff --git a/uucore/perms/options/dereference/constant.NO_DEREFERENCE.html b/uucore/perms/options/dereference/constant.NO_DEREFERENCE.html deleted file mode 100644 index 1b7a56400..000000000 --- a/uucore/perms/options/dereference/constant.NO_DEREFERENCE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_DEREFERENCE in uucore::perms::options::dereference - Rust -

Constant uucore::perms::options::dereference::NO_DEREFERENCE[][src]

pub const NO_DEREFERENCE: &str = "no-dereference";
- \ No newline at end of file diff --git a/uucore/perms/options/dereference/index.html b/uucore/perms/options/dereference/index.html deleted file mode 100644 index b9841b067..000000000 --- a/uucore/perms/options/dereference/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uucore::perms::options::dereference - Rust -

Module uucore::perms::options::dereference[][src]

Constants

-
- \ No newline at end of file diff --git a/uucore/perms/options/dereference/sidebar-items.js b/uucore/perms/options/dereference/sidebar-items.js deleted file mode 100644 index 4b8742f47..000000000 --- a/uucore/perms/options/dereference/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["DEREFERENCE",""],["NO_DEREFERENCE",""]]}); \ No newline at end of file diff --git a/uucore/perms/options/index.html b/uucore/perms/options/index.html deleted file mode 100644 index cd1b848e7..000000000 --- a/uucore/perms/options/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uucore::perms::options - Rust -

Module uucore::perms::options[][src]

Modules

-

Constants

-
- \ No newline at end of file diff --git a/uucore/perms/options/preserve_root/constant.NO_PRESERVE.html b/uucore/perms/options/preserve_root/constant.NO_PRESERVE.html deleted file mode 100644 index e63f381bf..000000000 --- a/uucore/perms/options/preserve_root/constant.NO_PRESERVE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_PRESERVE in uucore::perms::options::preserve_root - Rust -

Constant uucore::perms::options::preserve_root::NO_PRESERVE[][src]

pub const NO_PRESERVE: &str = "no-preserve-root";
- \ No newline at end of file diff --git a/uucore/perms/options/preserve_root/constant.PRESERVE.html b/uucore/perms/options/preserve_root/constant.PRESERVE.html deleted file mode 100644 index eb2efaf76..000000000 --- a/uucore/perms/options/preserve_root/constant.PRESERVE.html +++ /dev/null @@ -1,3 +0,0 @@ -PRESERVE in uucore::perms::options::preserve_root - Rust -

Constant uucore::perms::options::preserve_root::PRESERVE[][src]

pub const PRESERVE: &str = "preserve-root";
- \ No newline at end of file diff --git a/uucore/perms/options/preserve_root/index.html b/uucore/perms/options/preserve_root/index.html deleted file mode 100644 index ae547ee89..000000000 --- a/uucore/perms/options/preserve_root/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uucore::perms::options::preserve_root - Rust -

Module uucore::perms::options::preserve_root[][src]

Constants

-
- \ No newline at end of file diff --git a/uucore/perms/options/preserve_root/sidebar-items.js b/uucore/perms/options/preserve_root/sidebar-items.js deleted file mode 100644 index 4c0d5bca9..000000000 --- a/uucore/perms/options/preserve_root/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["NO_PRESERVE",""],["PRESERVE",""]]}); \ No newline at end of file diff --git a/uucore/perms/options/sidebar-items.js b/uucore/perms/options/sidebar-items.js deleted file mode 100644 index b5c38eddc..000000000 --- a/uucore/perms/options/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["ARG_FILES",""],["ARG_GROUP",""],["ARG_OWNER",""],["FROM",""],["RECURSIVE",""],["REFERENCE",""]],"mod":[["dereference",""],["preserve_root",""],["traverse",""],["verbosity",""]]}); \ No newline at end of file diff --git a/uucore/perms/options/traverse/constant.EVERY.html b/uucore/perms/options/traverse/constant.EVERY.html deleted file mode 100644 index c15f5fbba..000000000 --- a/uucore/perms/options/traverse/constant.EVERY.html +++ /dev/null @@ -1,3 +0,0 @@ -EVERY in uucore::perms::options::traverse - Rust -

Constant uucore::perms::options::traverse::EVERY[][src]

pub const EVERY: &str = "L";
- \ No newline at end of file diff --git a/uucore/perms/options/traverse/constant.NO_TRAVERSE.html b/uucore/perms/options/traverse/constant.NO_TRAVERSE.html deleted file mode 100644 index d0605f799..000000000 --- a/uucore/perms/options/traverse/constant.NO_TRAVERSE.html +++ /dev/null @@ -1,3 +0,0 @@ -NO_TRAVERSE in uucore::perms::options::traverse - Rust -

Constant uucore::perms::options::traverse::NO_TRAVERSE[][src]

pub const NO_TRAVERSE: &str = "P";
- \ No newline at end of file diff --git a/uucore/perms/options/traverse/constant.TRAVERSE.html b/uucore/perms/options/traverse/constant.TRAVERSE.html deleted file mode 100644 index 79ebde1b5..000000000 --- a/uucore/perms/options/traverse/constant.TRAVERSE.html +++ /dev/null @@ -1,3 +0,0 @@ -TRAVERSE in uucore::perms::options::traverse - Rust -

Constant uucore::perms::options::traverse::TRAVERSE[][src]

pub const TRAVERSE: &str = "H";
- \ No newline at end of file diff --git a/uucore/perms/options/traverse/index.html b/uucore/perms/options/traverse/index.html deleted file mode 100644 index 076dd10de..000000000 --- a/uucore/perms/options/traverse/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uucore::perms::options::traverse - Rust -

Module uucore::perms::options::traverse[][src]

Constants

-
- \ No newline at end of file diff --git a/uucore/perms/options/traverse/sidebar-items.js b/uucore/perms/options/traverse/sidebar-items.js deleted file mode 100644 index b90639ba8..000000000 --- a/uucore/perms/options/traverse/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["EVERY",""],["NO_TRAVERSE",""],["TRAVERSE",""]]}); \ No newline at end of file diff --git a/uucore/perms/options/verbosity/constant.CHANGES.html b/uucore/perms/options/verbosity/constant.CHANGES.html deleted file mode 100644 index 3e25fba65..000000000 --- a/uucore/perms/options/verbosity/constant.CHANGES.html +++ /dev/null @@ -1,3 +0,0 @@ -CHANGES in uucore::perms::options::verbosity - Rust -

Constant uucore::perms::options::verbosity::CHANGES[][src]

pub const CHANGES: &str = "changes";
- \ No newline at end of file diff --git a/uucore/perms/options/verbosity/constant.QUIET.html b/uucore/perms/options/verbosity/constant.QUIET.html deleted file mode 100644 index a28c4b77d..000000000 --- a/uucore/perms/options/verbosity/constant.QUIET.html +++ /dev/null @@ -1,3 +0,0 @@ -QUIET in uucore::perms::options::verbosity - Rust -

Constant uucore::perms::options::verbosity::QUIET[][src]

pub const QUIET: &str = "quiet";
- \ No newline at end of file diff --git a/uucore/perms/options/verbosity/constant.SILENT.html b/uucore/perms/options/verbosity/constant.SILENT.html deleted file mode 100644 index b71d4491c..000000000 --- a/uucore/perms/options/verbosity/constant.SILENT.html +++ /dev/null @@ -1,3 +0,0 @@ -SILENT in uucore::perms::options::verbosity - Rust -

Constant uucore::perms::options::verbosity::SILENT[][src]

pub const SILENT: &str = "silent";
- \ No newline at end of file diff --git a/uucore/perms/options/verbosity/constant.VERBOSE.html b/uucore/perms/options/verbosity/constant.VERBOSE.html deleted file mode 100644 index 6f6826dfd..000000000 --- a/uucore/perms/options/verbosity/constant.VERBOSE.html +++ /dev/null @@ -1,3 +0,0 @@ -VERBOSE in uucore::perms::options::verbosity - Rust -

Constant uucore::perms::options::verbosity::VERBOSE[][src]

pub const VERBOSE: &str = "verbose";
- \ No newline at end of file diff --git a/uucore/perms/options/verbosity/index.html b/uucore/perms/options/verbosity/index.html deleted file mode 100644 index 45a6599bf..000000000 --- a/uucore/perms/options/verbosity/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uucore::perms::options::verbosity - Rust -

Module uucore::perms::options::verbosity[][src]

Constants

-
- \ No newline at end of file diff --git a/uucore/perms/options/verbosity/sidebar-items.js b/uucore/perms/options/verbosity/sidebar-items.js deleted file mode 100644 index 590c5c1e9..000000000 --- a/uucore/perms/options/verbosity/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["CHANGES",""],["QUIET",""],["SILENT",""],["VERBOSE",""]]}); \ No newline at end of file diff --git a/uucore/perms/sidebar-items.js b/uucore/perms/sidebar-items.js deleted file mode 100644 index 161a19da0..000000000 --- a/uucore/perms/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["IfFrom",""],["TraverseSymlinks",""],["VerbosityLevel","The various level of verbosity"]],"fn":[["chown_base","Base implementation for `chgrp` and `chown`."],["wrap_chown","Perform the change of owner on a path with the various options and error messages management"]],"mod":[["entries","Get password/group file entry"],["options",""]],"struct":[["ChownExecutor",""],["Verbosity",""]]}); \ No newline at end of file diff --git a/uucore/perms/struct.ChownExecutor.html b/uucore/perms/struct.ChownExecutor.html deleted file mode 100644 index c6c9ca9c0..000000000 --- a/uucore/perms/struct.ChownExecutor.html +++ /dev/null @@ -1,22 +0,0 @@ -ChownExecutor in uucore::perms - Rust -

Struct uucore::perms::ChownExecutor[][src]

pub struct ChownExecutor {
-    pub dest_uid: Option<u32>,
-    pub dest_gid: Option<u32>,
-    pub traverse_symlinks: TraverseSymlinks,
-    pub verbosity: Verbosity,
-    pub filter: IfFrom,
-    pub files: Vec<String>,
-    pub recursive: bool,
-    pub preserve_root: bool,
-    pub dereference: bool,
-}

Fields

dest_uid: Option<u32>dest_gid: Option<u32>traverse_symlinks: TraverseSymlinksverbosity: Verbosityfilter: IfFromfiles: Vec<String>recursive: boolpreserve_root: booldereference: bool

Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/perms/struct.Verbosity.html b/uucore/perms/struct.Verbosity.html deleted file mode 100644 index 4f1e493e8..000000000 --- a/uucore/perms/struct.Verbosity.html +++ /dev/null @@ -1,24 +0,0 @@ -Verbosity in uucore::perms - Rust -

Struct uucore::perms::Verbosity[][src]

pub struct Verbosity {
-    pub groups_only: bool,
-    pub level: VerbosityLevel,
-}

Fields

groups_only: boollevel: VerbosityLevel

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/pipes/fn.pipe.html b/uucore/pipes/fn.pipe.html deleted file mode 100644 index 6c1dc4b72..000000000 --- a/uucore/pipes/fn.pipe.html +++ /dev/null @@ -1,6 +0,0 @@ -pipe in uucore::pipes - Rust -

Function uucore::pipes::pipe[][src]

pub fn pipe() -> Result<(File, File)>
Expand description

A wrapper around [nix::unistd::Pipe] that ensures the pipe is cleaned up.

-

Returns two File objects: everything written to the second can be read -from the first.

-
- \ No newline at end of file diff --git a/uucore/pipes/fn.splice.html b/uucore/pipes/fn.splice.html deleted file mode 100644 index b739f1586..000000000 --- a/uucore/pipes/fn.splice.html +++ /dev/null @@ -1,10 +0,0 @@ -splice in uucore::pipes - Rust -

Function uucore::pipes::splice[][src]

pub fn splice(
    source: &impl AsRawFd,
    target: &impl AsRawFd,
    len: usize
) -> Result<usize>
Expand description

Less noisy wrapper around [nix::fcntl::splice].

-

Up to len bytes are moved from source to target. Returns the number -of successfully moved bytes.

-

At least one of source and target must be some sort of pipe. -To get around this requirement, consider splicing from your source into -a pipe and then from the pipe into your target (with splice_exact): -this is still very efficient.

-
- \ No newline at end of file diff --git a/uucore/pipes/fn.splice_exact.html b/uucore/pipes/fn.splice_exact.html deleted file mode 100644 index d4954798b..000000000 --- a/uucore/pipes/fn.splice_exact.html +++ /dev/null @@ -1,6 +0,0 @@ -splice_exact in uucore::pipes - Rust -

Function uucore::pipes::splice_exact[][src]

pub fn splice_exact(
    source: &impl AsRawFd,
    target: &impl AsRawFd,
    len: usize
) -> Result<()>
Expand description

Splice wrapper which fully finishes the write.

-

Exactly len bytes are moved from source into target.

-

Panics if source runs out of data before len bytes have been moved.

-
- \ No newline at end of file diff --git a/uucore/pipes/fn.vmsplice.html b/uucore/pipes/fn.vmsplice.html deleted file mode 100644 index 59a548a73..000000000 --- a/uucore/pipes/fn.vmsplice.html +++ /dev/null @@ -1,5 +0,0 @@ -vmsplice in uucore::pipes - Rust -

Function uucore::pipes::vmsplice[][src]

pub fn vmsplice(target: &impl AsRawFd, bytes: &[u8]) -> Result<usize>
Expand description

Copy data from bytes into target, which must be a pipe.

-

Returns the number of successfully copied bytes.

-
- \ No newline at end of file diff --git a/uucore/pipes/index.html b/uucore/pipes/index.html deleted file mode 100644 index 2db46e11e..000000000 --- a/uucore/pipes/index.html +++ /dev/null @@ -1,11 +0,0 @@ -uucore::pipes - Rust -

Module uucore::pipes[][src]

Functions

-

A wrapper around [nix::unistd::Pipe] that ensures the pipe is cleaned up.

-

Less noisy wrapper around [nix::fcntl::splice].

-

Splice wrapper which fully finishes the write.

-

Copy data from bytes into target, which must be a pipe.

-

Type Definitions

-

Nix’s main error type.

-

Nix Result Type

-
- \ No newline at end of file diff --git a/uucore/pipes/sidebar-items.js b/uucore/pipes/sidebar-items.js deleted file mode 100644 index ea98ed5bb..000000000 --- a/uucore/pipes/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["pipe","A wrapper around [`nix::unistd::Pipe`] that ensures the pipe is cleaned up."],["splice","Less noisy wrapper around [`nix::fcntl::splice`]."],["splice_exact","Splice wrapper which fully finishes the write."],["vmsplice","Copy data from `bytes` into `target`, which must be a pipe."]],"type":[["Error","Nix’s main error type."],["Result","Nix Result Type"]]}); \ No newline at end of file diff --git a/uucore/pipes/type.Error.html b/uucore/pipes/type.Error.html deleted file mode 100644 index 041806df2..000000000 --- a/uucore/pipes/type.Error.html +++ /dev/null @@ -1,14 +0,0 @@ -Error in uucore::pipes - Rust -

Type Definition uucore::pipes::Error[]

pub type Error = Errno;
Expand description

Nix’s main error type.

-

It’s a wrapper around Errno. As such, it’s very interoperable with -std::io::Error, but it has the advantages of:

-
    -
  • Clone
  • -
  • Copy
  • -
  • Eq
  • -
  • Small size
  • -
  • Represents all of the system’s errnos, instead of just the most common -ones.
  • -
-
- \ No newline at end of file diff --git a/uucore/pipes/type.Result.html b/uucore/pipes/type.Result.html deleted file mode 100644 index 6c6e557f0..000000000 --- a/uucore/pipes/type.Result.html +++ /dev/null @@ -1,4 +0,0 @@ -Result in uucore::pipes - Rust -

Type Definition uucore::pipes::Result[]

pub type Result<T> = Result<T, Errno>;
Expand description

Nix Result Type

-
- \ No newline at end of file diff --git a/uucore/process/enum.ExitStatus.html b/uucore/process/enum.ExitStatus.html deleted file mode 100644 index 30fa34ef2..000000000 --- a/uucore/process/enum.ExitStatus.html +++ /dev/null @@ -1,27 +0,0 @@ -ExitStatus in uucore::process - Rust -

Enum uucore::process::ExitStatus[][src]

pub enum ExitStatus {
-    Code(i32),
-    Signal(i32),
-}

Variants

Code(i32)

Tuple Fields

0: i32

Signal(i32)

Tuple Fields

0: i32

Implementations

Trait Implementations

Returns a copy of the value. Read more

-

Performs copy-assignment from source. Read more

-

Formats the value using the given formatter. Read more

-

Formats the value using the given formatter. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The resulting type after obtaining ownership.

-

Creates owned data from borrowed data, usually by cloning. Read more

-
🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

-

Converts the given value to a String. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/process/fn.getegid.html b/uucore/process/fn.getegid.html deleted file mode 100644 index 0e8d9d190..000000000 --- a/uucore/process/fn.getegid.html +++ /dev/null @@ -1,4 +0,0 @@ -getegid in uucore::process - Rust -

Function uucore::process::getegid[][src]

pub fn getegid() -> gid_t
Expand description

getegid() returns the effective group ID of the calling process.

-
- \ No newline at end of file diff --git a/uucore/process/fn.geteuid.html b/uucore/process/fn.geteuid.html deleted file mode 100644 index ad5226987..000000000 --- a/uucore/process/fn.geteuid.html +++ /dev/null @@ -1,4 +0,0 @@ -geteuid in uucore::process - Rust -

Function uucore::process::geteuid[][src]

pub fn geteuid() -> uid_t
Expand description

geteuid() returns the effective user ID of the calling process.

-
- \ No newline at end of file diff --git a/uucore/process/fn.getgid.html b/uucore/process/fn.getgid.html deleted file mode 100644 index 3110de6d5..000000000 --- a/uucore/process/fn.getgid.html +++ /dev/null @@ -1,4 +0,0 @@ -getgid in uucore::process - Rust -

Function uucore::process::getgid[][src]

pub fn getgid() -> gid_t
Expand description

getgid() returns the real group ID of the calling process.

-
- \ No newline at end of file diff --git a/uucore/process/fn.getuid.html b/uucore/process/fn.getuid.html deleted file mode 100644 index 73f6644c1..000000000 --- a/uucore/process/fn.getuid.html +++ /dev/null @@ -1,4 +0,0 @@ -getuid in uucore::process - Rust -

Function uucore::process::getuid[][src]

pub fn getuid() -> uid_t
Expand description

getuid() returns the real user ID of the calling process.

-
- \ No newline at end of file diff --git a/uucore/process/index.html b/uucore/process/index.html deleted file mode 100644 index 792acefab..000000000 --- a/uucore/process/index.html +++ /dev/null @@ -1,12 +0,0 @@ -uucore::process - Rust -

Module uucore::process[][src]

Expand description

Set of functions to manage IDs

-

Enums

-

Traits

-

Missing methods for Child objects

-

Functions

-

getegid() returns the effective group ID of the calling process.

-

geteuid() returns the effective user ID of the calling process.

-

getgid() returns the real group ID of the calling process.

-

getuid() returns the real user ID of the calling process.

-
- \ No newline at end of file diff --git a/uucore/process/sidebar-items.js b/uucore/process/sidebar-items.js deleted file mode 100644 index 044e1c3d8..000000000 --- a/uucore/process/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["ExitStatus",""]],"fn":[["getegid","`getegid()` returns the effective group ID of the calling process."],["geteuid","`geteuid()` returns the effective user ID of the calling process."],["getgid","`getgid()` returns the real group ID of the calling process."],["getuid","`getuid()` returns the real user ID of the calling process."]],"trait":[["ChildExt","Missing methods for Child objects"]]}); \ No newline at end of file diff --git a/uucore/process/trait.ChildExt.html b/uucore/process/trait.ChildExt.html deleted file mode 100644 index 49545c81c..000000000 --- a/uucore/process/trait.ChildExt.html +++ /dev/null @@ -1,12 +0,0 @@ -ChildExt in uucore::process - Rust -

Trait uucore::process::ChildExt[][src]

pub trait ChildExt {
-    fn send_signal(&mut self, signal: usize) -> Result<()>;
-
fn wait_or_timeout(
        &mut self,
        timeout: Duration
    ) -> Result<Option<ExitStatus>>; -}
Expand description

Missing methods for Child objects

-

Required methods

Send a signal to a Child process.

-

Caller beware: if the process already exited then you may accidentally -send the signal to an unrelated process that recycled the PID.

-

Wait for a process to finish or return after the specified duration. -A timeout of zero disables the timeout.

-

Implementations on Foreign Types

Implementors

- \ No newline at end of file diff --git a/uucore/ranges/fn.complement.html b/uucore/ranges/fn.complement.html deleted file mode 100644 index 87039a0f8..000000000 --- a/uucore/ranges/fn.complement.html +++ /dev/null @@ -1,3 +0,0 @@ -complement in uucore::ranges - Rust -

Function uucore::ranges::complement[][src]

pub fn complement(ranges: &[Range]) -> Vec<Range>
- \ No newline at end of file diff --git a/uucore/ranges/fn.contain.html b/uucore/ranges/fn.contain.html deleted file mode 100644 index e1bbe8645..000000000 --- a/uucore/ranges/fn.contain.html +++ /dev/null @@ -1,18 +0,0 @@ -contain in uucore::ranges - Rust -

Function uucore::ranges::contain[][src]

pub fn contain(ranges: &[Range], n: usize) -> bool
Expand description

Test if at least one of the given Ranges contain the supplied value.

-

Examples:

- -
let ranges = uucore::ranges::Range::from_list("11,2,6-8").unwrap();
-
-assert!(!uucore::ranges::contain(&ranges, 0));
-assert!(!uucore::ranges::contain(&ranges, 1));
-assert!(!uucore::ranges::contain(&ranges, 5));
-assert!(!uucore::ranges::contain(&ranges, 10));
-
-assert!(uucore::ranges::contain(&ranges, 2));
-assert!(uucore::ranges::contain(&ranges, 6));
-assert!(uucore::ranges::contain(&ranges, 7));
-assert!(uucore::ranges::contain(&ranges, 8));
-assert!(uucore::ranges::contain(&ranges, 11));
-
- \ No newline at end of file diff --git a/uucore/ranges/index.html b/uucore/ranges/index.html deleted file mode 100644 index 04a8e7cad..000000000 --- a/uucore/ranges/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uucore::ranges - Rust -

Module uucore::ranges[][src]

Structs

-

Functions

-

Test if at least one of the given Ranges contain the supplied value.

-
- \ No newline at end of file diff --git a/uucore/ranges/sidebar-items.js b/uucore/ranges/sidebar-items.js deleted file mode 100644 index d8ce2d50e..000000000 --- a/uucore/ranges/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["complement",""],["contain","Test if at least one of the given Ranges contain the supplied value."]],"struct":[["Range",""]]}); \ No newline at end of file diff --git a/uucore/ranges/struct.Range.html b/uucore/ranges/struct.Range.html deleted file mode 100644 index 1cd4100f1..000000000 --- a/uucore/ranges/struct.Range.html +++ /dev/null @@ -1,33 +0,0 @@ -Range in uucore::ranges - Rust -

Struct uucore::ranges::Range[][src]

pub struct Range {
-    pub low: usize,
-    pub high: usize,
-}

Fields

low: usizehigh: usize

Implementations

Trait Implementations

Formats the value using the given formatter. Read more

-

The associated error which can be returned from parsing.

-

Parses a string s to return a value of this type. Read more

-

This method returns an Ordering between self and other. Read more

-

Compares and returns the maximum of two values. Read more

-

Compares and returns the minimum of two values. Read more

-

Restrict a value to a certain interval. Read more

-

This method tests for self and other values to be equal, and is used -by ==. Read more

-

This method tests for !=.

-

This method returns an ordering between self and other values if one exists. Read more

-

This method tests less than (for self and other) and is used by the < operator. Read more

-

This method tests less than or equal to (for self and other) and is used by the <= -operator. Read more

-

This method tests greater than (for self and other) and is used by the > operator. Read more

-

This method tests greater than or equal to (for self and other) and is used by the >= -operator. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Compare self to key and return true if they are equal.

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/ringbuffer/index.html b/uucore/ringbuffer/index.html deleted file mode 100644 index b2de6a705..000000000 --- a/uucore/ringbuffer/index.html +++ /dev/null @@ -1,6 +0,0 @@ -uucore::ringbuffer - Rust -

Module uucore::ringbuffer[][src]

Expand description

A fixed-size ring buffer.

-

Structs

-

A fixed-size ring buffer backed by a VecDeque.

-
- \ No newline at end of file diff --git a/uucore/ringbuffer/sidebar-items.js b/uucore/ringbuffer/sidebar-items.js deleted file mode 100644 index 313edcba4..000000000 --- a/uucore/ringbuffer/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"struct":[["RingBuffer","A fixed-size ring buffer backed by a `VecDeque`."]]}); \ No newline at end of file diff --git a/uucore/ringbuffer/struct.RingBuffer.html b/uucore/ringbuffer/struct.RingBuffer.html deleted file mode 100644 index 31817f7fc..000000000 --- a/uucore/ringbuffer/struct.RingBuffer.html +++ /dev/null @@ -1,62 +0,0 @@ -RingBuffer in uucore::ringbuffer - Rust -

Struct uucore::ringbuffer::RingBuffer[][src]

pub struct RingBuffer<T> {
-    pub data: VecDeque<T>,
-    // some fields omitted
-}
Expand description

A fixed-size ring buffer backed by a VecDeque.

-

If the ring buffer is not full, then calling the [push_back] -method appends elements, as in a VecDeque. If the ring buffer -is full, then calling [push_back] removes the element at the -front of the buffer (in a first-in, first-out manner) before -appending the new element to the back of the buffer.

-

Use [from_iter] to take the last size elements from an -iterator.

-

Examples

-

After exceeding the size limit, the oldest elements are dropped in -favor of the newest element:

- -
let mut buffer: RingBuffer<u8> = RingBuffer::new(2);
-buffer.push_back(0);
-buffer.push_back(1);
-buffer.push_back(2);
-assert_eq!(vec![1, 2], buffer.data);
-

Take the last n elements from an iterator:

- -
let iter = [0, 1, 2].iter();
-let actual = RingBuffer::from_iter(iter, 2).data;
-let expected = VecDeque::from_iter([1, 2].iter());
-assert_eq!(expected, actual);
-

Fields

data: VecDeque<T>

Implementations

Append a value to the end of the ring buffer.

-

If the ring buffer is not full, this method return None. If -the ring buffer is full, appending a new element will cause the -oldest element to be evicted. In that case this method returns -that element, or None.

-

In the special case where the size limit is zero, each call to -this method with input value returns Some(value), because -the input is immediately evicted.

-
Examples
-

Appending an element when the buffer is full returns the oldest -element:

- -
let mut buf = RingBuffer::new(3);
-assert_eq!(None, buf.push_back(0));
-assert_eq!(None, buf.push_back(1));
-assert_eq!(None, buf.push_back(2));
-assert_eq!(Some(0), buf.push_back(3));
-

If the size limit is zero, then this method always returns the -input value:

- -
let mut buf = RingBuffer::new(0);
-assert_eq!(Some(0), buf.push_back(0));
-assert_eq!(Some(1), buf.push_back(1));
-assert_eq!(Some(2), buf.push_back(2));
-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/sidebar-items.js b/uucore/sidebar-items.js deleted file mode 100644 index b3da5f2cc..000000000 --- a/uucore/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"enum":[["ConversionResult",""],["InvalidEncodingHandling",""]],"externcrate":[["libc",""]],"fn":[["args_os",""],["execution_phrase","Derive the complete execution phrase for “usage”."],["get_utility_is_second_arg",""],["set_utility_is_second_arg",""],["util_name","Derive the utility name."]],"macro":[["crash","Display an error and [`exit!`]"],["crash_if_err","Unwrap a [`std::result::Result`], crashing instead of panicking."],["has",""],["show","Display a [`crate::error::UError`] and set global exit code."],["show_error","Show an error to stderr in a similar style to GNU coreutils."],["show_error_custom_description","Show a warning to stderr in a similar style to GNU coreutils."],["show_if_err","Display an error and set global exit code in error case."],["show_usage_error","Show a bad invocation help message in a similar style to GNU coreutils."],["show_warning","Print a warning message to stderr."],["uio_error","Shorthand to construct [`UIoError`]-instances."]],"mod":[["backup_control","Implement GNU-style backup functionality."],["display",""],["encoding",""],["entries","Get password/group file entry"],["error","All utils return exit with an exit code. Usually, the following scheme is used:"],["fs","Set of functions to manage files and symlinks"],["fsext","Set of functions to manage file systems"],["memo","Memo runner of printf Takes a format string and arguments"],["mode","Set of functions to parse modes"],["os",""],["panic","Custom panic hooks that allow silencing certain types of errors."],["parse_size",""],["parse_time",""],["perms","Common functions to manage permissions"],["pipes",""],["process","Set of functions to manage IDs"],["ranges",""],["ringbuffer","A fixed-size ring buffer."],["signals",""],["utmpx","Aims to provide platform-independent methods to obtain login records"],["version_cmp",""]],"trait":[["Args",""]]}); \ No newline at end of file diff --git a/uucore/signals/fn.is_signal.html b/uucore/signals/fn.is_signal.html deleted file mode 100644 index 179107439..000000000 --- a/uucore/signals/fn.is_signal.html +++ /dev/null @@ -1,3 +0,0 @@ -is_signal in uucore::signals - Rust -

Function uucore::signals::is_signal[][src]

pub fn is_signal(num: usize) -> bool
- \ No newline at end of file diff --git a/uucore/signals/fn.signal_by_name_or_value.html b/uucore/signals/fn.signal_by_name_or_value.html deleted file mode 100644 index c6e7828fe..000000000 --- a/uucore/signals/fn.signal_by_name_or_value.html +++ /dev/null @@ -1,3 +0,0 @@ -signal_by_name_or_value in uucore::signals - Rust -

Function uucore::signals::signal_by_name_or_value[][src]

pub fn signal_by_name_or_value(signal_name_or_value: &str) -> Option<usize>
- \ No newline at end of file diff --git a/uucore/signals/fn.signal_name_by_value.html b/uucore/signals/fn.signal_name_by_value.html deleted file mode 100644 index 9cff7d6f0..000000000 --- a/uucore/signals/fn.signal_name_by_value.html +++ /dev/null @@ -1,3 +0,0 @@ -signal_name_by_value in uucore::signals - Rust -

Function uucore::signals::signal_name_by_value[][src]

pub fn signal_name_by_value(signal_value: usize) -> Option<&'static str>
- \ No newline at end of file diff --git a/uucore/signals/index.html b/uucore/signals/index.html deleted file mode 100644 index 7e34cd572..000000000 --- a/uucore/signals/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uucore::signals - Rust -

Module uucore::signals[][src]

Statics

-

Functions

-
- \ No newline at end of file diff --git a/uucore/signals/sidebar-items.js b/uucore/signals/sidebar-items.js deleted file mode 100644 index d5db41654..000000000 --- a/uucore/signals/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["is_signal",""],["signal_by_name_or_value",""],["signal_name_by_value",""]],"static":[["ALL_SIGNALS",""],["DEFAULT_SIGNAL",""]]}); \ No newline at end of file diff --git a/uucore/signals/static.ALL_SIGNALS.html b/uucore/signals/static.ALL_SIGNALS.html deleted file mode 100644 index b1a0f0700..000000000 --- a/uucore/signals/static.ALL_SIGNALS.html +++ /dev/null @@ -1,3 +0,0 @@ -ALL_SIGNALS in uucore::signals - Rust -

Static uucore::signals::ALL_SIGNALS[][src]

pub static ALL_SIGNALS: [&str; 32]
- \ No newline at end of file diff --git a/uucore/signals/static.DEFAULT_SIGNAL.html b/uucore/signals/static.DEFAULT_SIGNAL.html deleted file mode 100644 index 11d7fa5f0..000000000 --- a/uucore/signals/static.DEFAULT_SIGNAL.html +++ /dev/null @@ -1,3 +0,0 @@ -DEFAULT_SIGNAL in uucore::signals - Rust -

Static uucore::signals::DEFAULT_SIGNAL[][src]

pub static DEFAULT_SIGNAL: usize
- \ No newline at end of file diff --git a/uucore/trait.Args.html b/uucore/trait.Args.html deleted file mode 100644 index 8ee6a812f..000000000 --- a/uucore/trait.Args.html +++ /dev/null @@ -1,19 +0,0 @@ -Args in uucore - Rust -

Trait uucore::Args[][src]

pub trait Args: Iterator<Item = OsString> + Sized {
-    fn collect_str(self, handling: InvalidEncodingHandling) -> ConversionResult { ... }
-
fn collect_str_lossy(self) -> ConversionResult { ... } -}

Provided methods

Converts each iterator item to a String and collects these into a vector -On invalid encoding, the result will depend on the argument. This method allows to either drop entries with illegal encoding -completely (InvalidEncodingHandling::Ignore), convert them using lossy-conversion (InvalidEncodingHandling::Lossy) which will -result in strange strings or can chosen to panic (InvalidEncodingHandling::Panic).

-
Arguments
-
    -
  • handling - This switch allows to switch the behavior, when invalid encoding is encountered
  • -
-
Panics
-
    -
  • Occurs, when invalid encoding is encountered and handling is set to InvalidEncodingHandling::Panic
  • -
-

convenience function for a more slim interface

-

Implementors

- \ No newline at end of file diff --git a/uucore/utmpx/constant.ACCOUNTING.html b/uucore/utmpx/constant.ACCOUNTING.html deleted file mode 100644 index c34c701cd..000000000 --- a/uucore/utmpx/constant.ACCOUNTING.html +++ /dev/null @@ -1,3 +0,0 @@ -ACCOUNTING in uucore::utmpx - Rust -

Constant uucore::utmpx::ACCOUNTING[]

pub const ACCOUNTING: i16 = 9; // 9i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.BOOT_TIME.html b/uucore/utmpx/constant.BOOT_TIME.html deleted file mode 100644 index e7cd1c4c4..000000000 --- a/uucore/utmpx/constant.BOOT_TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -BOOT_TIME in uucore::utmpx - Rust -

Constant uucore::utmpx::BOOT_TIME[]

pub const BOOT_TIME: i16 = 2; // 2i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.DEAD_PROCESS.html b/uucore/utmpx/constant.DEAD_PROCESS.html deleted file mode 100644 index 90481898f..000000000 --- a/uucore/utmpx/constant.DEAD_PROCESS.html +++ /dev/null @@ -1,3 +0,0 @@ -DEAD_PROCESS in uucore::utmpx - Rust -

Constant uucore::utmpx::DEAD_PROCESS[]

pub const DEAD_PROCESS: i16 = 8; // 8i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.EMPTY.html b/uucore/utmpx/constant.EMPTY.html deleted file mode 100644 index dd1efa4ae..000000000 --- a/uucore/utmpx/constant.EMPTY.html +++ /dev/null @@ -1,3 +0,0 @@ -EMPTY in uucore::utmpx - Rust -

Constant uucore::utmpx::EMPTY[]

pub const EMPTY: i16 = 0; // 0i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.INIT_PROCESS.html b/uucore/utmpx/constant.INIT_PROCESS.html deleted file mode 100644 index 140c6cc39..000000000 --- a/uucore/utmpx/constant.INIT_PROCESS.html +++ /dev/null @@ -1,3 +0,0 @@ -INIT_PROCESS in uucore::utmpx - Rust -

Constant uucore::utmpx::INIT_PROCESS[]

pub const INIT_PROCESS: i16 = 5; // 5i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.LOGIN_PROCESS.html b/uucore/utmpx/constant.LOGIN_PROCESS.html deleted file mode 100644 index ccebe5e4d..000000000 --- a/uucore/utmpx/constant.LOGIN_PROCESS.html +++ /dev/null @@ -1,3 +0,0 @@ -LOGIN_PROCESS in uucore::utmpx - Rust -

Constant uucore::utmpx::LOGIN_PROCESS[]

pub const LOGIN_PROCESS: i16 = 6; // 6i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.NEW_TIME.html b/uucore/utmpx/constant.NEW_TIME.html deleted file mode 100644 index aa408a569..000000000 --- a/uucore/utmpx/constant.NEW_TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -NEW_TIME in uucore::utmpx - Rust -

Constant uucore::utmpx::NEW_TIME[]

pub const NEW_TIME: i16 = 3; // 3i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.OLD_TIME.html b/uucore/utmpx/constant.OLD_TIME.html deleted file mode 100644 index b546f3d70..000000000 --- a/uucore/utmpx/constant.OLD_TIME.html +++ /dev/null @@ -1,3 +0,0 @@ -OLD_TIME in uucore::utmpx - Rust -

Constant uucore::utmpx::OLD_TIME[]

pub const OLD_TIME: i16 = 4; // 4i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.RUN_LVL.html b/uucore/utmpx/constant.RUN_LVL.html deleted file mode 100644 index 131cc20e4..000000000 --- a/uucore/utmpx/constant.RUN_LVL.html +++ /dev/null @@ -1,3 +0,0 @@ -RUN_LVL in uucore::utmpx - Rust -

Constant uucore::utmpx::RUN_LVL[]

pub const RUN_LVL: i16 = 1; // 1i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.USER_PROCESS.html b/uucore/utmpx/constant.USER_PROCESS.html deleted file mode 100644 index 11c592e3e..000000000 --- a/uucore/utmpx/constant.USER_PROCESS.html +++ /dev/null @@ -1,3 +0,0 @@ -USER_PROCESS in uucore::utmpx - Rust -

Constant uucore::utmpx::USER_PROCESS[]

pub const USER_PROCESS: i16 = 7; // 7i16
- \ No newline at end of file diff --git a/uucore/utmpx/constant.UT_HOSTSIZE.html b/uucore/utmpx/constant.UT_HOSTSIZE.html deleted file mode 100644 index 28aa89fd0..000000000 --- a/uucore/utmpx/constant.UT_HOSTSIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -UT_HOSTSIZE in uucore::utmpx - Rust -

Constant uucore::utmpx::UT_HOSTSIZE[]

pub const UT_HOSTSIZE: usize = 256; // 0x0000_0000_0000_0100usize
- \ No newline at end of file diff --git a/uucore/utmpx/constant.UT_IDSIZE.html b/uucore/utmpx/constant.UT_IDSIZE.html deleted file mode 100644 index de734bf9b..000000000 --- a/uucore/utmpx/constant.UT_IDSIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -UT_IDSIZE in uucore::utmpx - Rust -

Constant uucore::utmpx::UT_IDSIZE[][src]

pub const UT_IDSIZE: usize = 4;
- \ No newline at end of file diff --git a/uucore/utmpx/constant.UT_LINESIZE.html b/uucore/utmpx/constant.UT_LINESIZE.html deleted file mode 100644 index 74fd059e7..000000000 --- a/uucore/utmpx/constant.UT_LINESIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -UT_LINESIZE in uucore::utmpx - Rust -

Constant uucore::utmpx::UT_LINESIZE[]

pub const UT_LINESIZE: usize = 32; // 0x0000_0000_0000_0020usize
- \ No newline at end of file diff --git a/uucore/utmpx/constant.UT_NAMESIZE.html b/uucore/utmpx/constant.UT_NAMESIZE.html deleted file mode 100644 index c20445a0c..000000000 --- a/uucore/utmpx/constant.UT_NAMESIZE.html +++ /dev/null @@ -1,3 +0,0 @@ -UT_NAMESIZE in uucore::utmpx - Rust -

Constant uucore::utmpx::UT_NAMESIZE[]

pub const UT_NAMESIZE: usize = 32; // 0x0000_0000_0000_0020usize
- \ No newline at end of file diff --git a/uucore/utmpx/fn.endutxent.html b/uucore/utmpx/fn.endutxent.html deleted file mode 100644 index db145cefd..000000000 --- a/uucore/utmpx/fn.endutxent.html +++ /dev/null @@ -1,3 +0,0 @@ -endutxent in uucore::utmpx - Rust -

Function uucore::utmpx::endutxent[]

pub unsafe extern "C" fn endutxent()
- \ No newline at end of file diff --git a/uucore/utmpx/fn.getutxent.html b/uucore/utmpx/fn.getutxent.html deleted file mode 100644 index 75b7ba3cd..000000000 --- a/uucore/utmpx/fn.getutxent.html +++ /dev/null @@ -1,3 +0,0 @@ -getutxent in uucore::utmpx - Rust -

Function uucore::utmpx::getutxent[]

pub unsafe extern "C" fn getutxent() -> *mut utmpx
- \ No newline at end of file diff --git a/uucore/utmpx/fn.setutxent.html b/uucore/utmpx/fn.setutxent.html deleted file mode 100644 index 4d672341d..000000000 --- a/uucore/utmpx/fn.setutxent.html +++ /dev/null @@ -1,3 +0,0 @@ -setutxent in uucore::utmpx - Rust -

Function uucore::utmpx::setutxent[]

pub unsafe extern "C" fn setutxent()
- \ No newline at end of file diff --git a/uucore/utmpx/fn.utmpxname.html b/uucore/utmpx/fn.utmpxname.html deleted file mode 100644 index 44ad6e624..000000000 --- a/uucore/utmpx/fn.utmpxname.html +++ /dev/null @@ -1,3 +0,0 @@ -utmpxname in uucore::utmpx - Rust -

Function uucore::utmpx::utmpxname[]

pub unsafe extern "C" fn utmpxname(file: *const i8) -> i32
- \ No newline at end of file diff --git a/uucore/utmpx/index.html b/uucore/utmpx/index.html deleted file mode 100644 index ad11a4bf6..000000000 --- a/uucore/utmpx/index.html +++ /dev/null @@ -1,26 +0,0 @@ -uucore::utmpx - Rust -

Module uucore::utmpx[][src]

Expand description

Aims to provide platform-independent methods to obtain login records

-

ONLY support linux, macos and freebsd for the time being

-

Examples:

-
use uucore::utmpx::Utmpx;
-for ut in Utmpx::iter_all_records() {
-    if ut.is_user_process() {
-        println!("{}: {}", ut.host(), ut.user())
-    }
-}
-

Specifying the path to login record:

- -
use uucore::utmpx::Utmpx;
-for ut in Utmpx::iter_all_records_from("/some/where/else") {
-    if ut.is_user_process() {
-        println!("{}: {}", ut.host(), ut.user())
-    }
-}
-

Re-exports

-
pub extern crate time;

Structs

-

Iterator of login records

-

Constants

-

Statics

-

Functions

-
- \ No newline at end of file diff --git a/uucore/utmpx/sidebar-items.js b/uucore/utmpx/sidebar-items.js deleted file mode 100644 index 9764e07e3..000000000 --- a/uucore/utmpx/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"constant":[["ACCOUNTING",""],["BOOT_TIME",""],["DEAD_PROCESS",""],["EMPTY",""],["INIT_PROCESS",""],["LOGIN_PROCESS",""],["NEW_TIME",""],["OLD_TIME",""],["RUN_LVL",""],["USER_PROCESS",""],["UT_HOSTSIZE",""],["UT_IDSIZE",""],["UT_LINESIZE",""],["UT_NAMESIZE",""]],"externcrate":[["time",""]],"fn":[["endutxent",""],["getutxent",""],["setutxent",""],["utmpxname",""]],"static":[["DEFAULT_FILE",""]],"struct":[["Utmpx",""],["UtmpxIter","Iterator of login records"]]}); \ No newline at end of file diff --git a/uucore/utmpx/static.DEFAULT_FILE.html b/uucore/utmpx/static.DEFAULT_FILE.html deleted file mode 100644 index 907701596..000000000 --- a/uucore/utmpx/static.DEFAULT_FILE.html +++ /dev/null @@ -1,3 +0,0 @@ -DEFAULT_FILE in uucore::utmpx - Rust -

Static uucore::utmpx::DEFAULT_FILE[][src]

pub static DEFAULT_FILE: &str
- \ No newline at end of file diff --git a/uucore/utmpx/struct.Utmpx.html b/uucore/utmpx/struct.Utmpx.html deleted file mode 100644 index 14d14b504..000000000 --- a/uucore/utmpx/struct.Utmpx.html +++ /dev/null @@ -1,32 +0,0 @@ -Utmpx in uucore::utmpx - Rust -

Struct uucore::utmpx::Utmpx[][src]

pub struct Utmpx { /* fields omitted */ }

Implementations

A.K.A. ut.ut_type

-

A.K.A. ut.ut_pid

-

A.K.A. ut.ut_id

-

A.K.A. ut.ut_user

-

A.K.A. ut.ut_host

-

A.K.A. ut.ut_line

-

A.K.A. ut.ut_tv

-

A.K.A. ut.ut_exit

-

Return (e_termination, e_exit)

-

Consumes the Utmpx, returning the underlying C struct utmpx

-

Canonicalize host name using DNS

-

Iterate through all the utmp records.

-

This will use the default location, or the path Utmpx::iter_all_records_from -was most recently called with.

-

Only one instance of UtmpxIter may be active at a time. This -function will block as long as one is still active. Beware!

-

Iterate through all the utmp records from a specific file.

-

No failure is reported or detected.

-

This function affects subsequent calls to Utmpx::iter_all_records.

-

The same caveats as for Utmpx::iter_all_records apply.

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/utmpx/struct.UtmpxIter.html b/uucore/utmpx/struct.UtmpxIter.html deleted file mode 100644 index 697445634..000000000 --- a/uucore/utmpx/struct.UtmpxIter.html +++ /dev/null @@ -1,246 +0,0 @@ -UtmpxIter in uucore::utmpx - Rust -

Struct uucore::utmpx::UtmpxIter[][src]

pub struct UtmpxIter { /* fields omitted */ }
Expand description

Iterator of login records

-

Trait Implementations

Executes the destructor for this type. Read more

-

The type of the elements being iterated over.

-

Advances the iterator and returns the next value. Read more

-

Returns the bounds on the remaining length of the iterator. Read more

-

Consumes the iterator, counting the number of iterations and returning it. Read more

-

Consumes the iterator, returning the last element. Read more

-
🔬 This is a nightly-only experimental API. (iter_advance_by)

Advances the iterator by n elements. Read more

-

Returns the nth element of the iterator. Read more

-

Creates an iterator starting at the same point, but stepping by -the given amount at each iteration. Read more

-

Takes two iterators and creates a new iterator over both in sequence. Read more

-

‘Zips up’ two iterators into a single iterator of pairs. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places a copy of separator between adjacent -items of the original iterator. Read more

-
🔬 This is a nightly-only experimental API. (iter_intersperse)

Creates a new iterator which places an item generated by separator -between adjacent items of the original iterator. Read more

-

Takes a closure and creates an iterator which calls that closure on each -element. Read more

-

Calls a closure on each element of an iterator. Read more

-

Creates an iterator which uses a closure to determine if an element -should be yielded. Read more

-

Creates an iterator that both filters and maps. Read more

-

Creates an iterator which gives the current iteration count as well as -the next value. Read more

-

Creates an iterator which can use the peek and peek_mut methods -to look at the next element of the iterator without consuming it. See -their documentation for more information. Read more

-

Creates an iterator that skips elements based on a predicate. Read more

-

Creates an iterator that yields elements based on a predicate. Read more

-

Creates an iterator that both yields elements based on a predicate and maps. Read more

-

Creates an iterator that skips the first n elements. Read more

-

Creates an iterator that yields the first n elements, or fewer -if the underlying iterator ends sooner. Read more

-

An iterator adapter similar to fold that holds internal state and -produces a new iterator. Read more

-

Creates an iterator that works like map, but flattens nested structure. Read more

-

Creates an iterator that flattens nested structure. Read more

-

Creates an iterator which ends after the first None. Read more

-

Does something with each element of an iterator, passing the value on. Read more

-

Borrows an iterator, rather than consuming it. Read more

-

Transforms an iterator into a collection. Read more

-

Consumes an iterator, creating two collections from it. Read more

-
🔬 This is a nightly-only experimental API. (iter_partition_in_place)

Reorders the elements of this iterator in-place according to the given predicate, -such that all those that return true precede all those that return false. -Returns the number of true elements found. Read more

-
🔬 This is a nightly-only experimental API. (iter_is_partitioned)

Checks if the elements of this iterator are partitioned according to the given predicate, -such that all those that return true precede all those that return false. Read more

-

An iterator method that applies a function as long as it returns -successfully, producing a single, final value. Read more

-

An iterator method that applies a fallible function to each item in the -iterator, stopping at the first error and returning that error. Read more

-

Folds every element into an accumulator by applying an operation, -returning the final result. Read more

-

Reduces the elements to a single one, by repeatedly applying a reducing -operation. Read more

-

Tests if every element of the iterator matches a predicate. Read more

-

Tests if any element of the iterator matches a predicate. Read more

-

Searches for an element of an iterator that satisfies a predicate. Read more

-

Applies function to the elements of iterator and returns -the first non-none result. Read more

-
🔬 This is a nightly-only experimental API. (try_find)

Applies function to the elements of iterator and returns -the first true result or the first error. Read more

-

Searches for an element in an iterator, returning its index. Read more

-

Searches for an element in an iterator from the right, returning its -index. Read more

-

Returns the maximum element of an iterator. Read more

-

Returns the minimum element of an iterator. Read more

-

Returns the element that gives the maximum value from the -specified function. Read more

-

Returns the element that gives the maximum value with respect to the -specified comparison function. Read more

-

Returns the element that gives the minimum value from the -specified function. Read more

-

Returns the element that gives the minimum value with respect to the -specified comparison function. Read more

-

Reverses an iterator’s direction. Read more

-

Converts an iterator of pairs into a pair of containers. Read more

-

Creates an iterator which copies all of its elements. Read more

-

Creates an iterator which clones all of its elements. Read more

-

Repeats an iterator endlessly. Read more

-

Sums the elements of an iterator. Read more

-

Iterates over the entire iterator, multiplying all the elements Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Lexicographically compares the elements of this Iterator with those -of another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Lexicographically compares the elements of this Iterator with those -of another with respect to the specified comparison function. Read more

-

Determines if the elements of this Iterator are equal to those of -another. Read more

-
🔬 This is a nightly-only experimental API. (iter_order_by)

Determines if the elements of this Iterator are equal to those of -another with respect to the specified equality function. Read more

-

Determines if the elements of this Iterator are unequal to those of -another. Read more

-

Determines if the elements of this Iterator are lexicographically -less than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -less or equal to those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than those of another. Read more

-

Determines if the elements of this Iterator are lexicographically -greater than or equal to those of another. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given comparator function. Read more

-
🔬 This is a nightly-only experimental API. (is_sorted)

Checks if the elements of this iterator are sorted using the given key extraction -function. Read more

-

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

-

Immutably borrows from an owned value. Read more

-

Mutably borrows from an owned value. Read more

-

Performs the conversion.

-

Performs the conversion.

-

The type of the elements being iterated over.

-

Which kind of iterator are we turning this into?

-

Creates an iterator from a value. Read more

-

Alternate elements from two iterators until both have run out. Read more

-

Alternate elements from two iterators until at least one of them has run -out. Read more

-

An iterator adaptor to insert a particular value -between each element of the adapted iterator. Read more

-

Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of two optional elements. Read more

-

Create an iterator which iterates over both this and the specified -iterator simultaneously, yielding pairs of elements. Read more

-

A “meta iterator adaptor”. Its closure receives a reference to the -iterator and may pick off as many elements as it likes, to produce the -next iterator element. Read more

-

Return an iterable that can group iterator elements. -Consecutive elements that map to the same key (“runs”), are assigned -to the same group. Read more

-

Return an iterable that can chunk the iterator. Read more

-

Return an iterator over all contiguous windows producing tuples of -a specific size (up to 4). Read more

-

Return an iterator that groups the items in tuples of a specific size -(up to 4). Read more

-

Split into an iterator pair that both yield all elements from -the original iterator. Read more

-
👎 Deprecated since 0.8:

Use std .step_by() instead

-

Return an iterator adaptor that steps n elements in the base iterator -for each iteration. Read more

-

Convert each item of the iterator using the Into trait. Read more

-

Return an iterator adaptor that applies the provided closure -to every Result::Ok value. Result::Err values are -unchanged. Read more

-

Return an iterator adaptor that merges the two base iterators in -ascending order. If both base iterators are sorted (ascending), the -result is sorted. Read more

-

Return an iterator adaptor that merges the two base iterators in order. -This is much like .merge() but allows for a custom ordering. Read more

-

Create an iterator that merges items from both this and the specified -iterator in ascending order. Read more

-

Return an iterator adaptor that flattens an iterator of iterators by -merging them in ascending order. Read more

-

Return an iterator adaptor that flattens an iterator of iterators by -merging them according to the given closure. Read more

-

Return an iterator adaptor that iterates over the cartesian product of -the element sets of two iterators self and J. Read more

-

Return an iterator adaptor that iterates over the cartesian product of -all subiterators returned by meta-iterator self. Read more

-

Return an iterator adaptor that uses the passed-in closure to -optionally merge together consecutive elements. Read more

-

Remove duplicates from sections of consecutive identical elements. -If the iterator is sorted, all elements will be unique. Read more

-

Remove duplicates from sections of consecutive identical elements, -determining equality using a comparison function. -If the iterator is sorted, all elements will be unique. Read more

-

Return an iterator adaptor that filters out elements that have -already been produced once during the iteration. Duplicates -are detected using hash and equality. Read more

-

Return an iterator adaptor that filters out elements that have -already been produced once during the iteration. Read more

-

Return an iterator adaptor that borrows from this iterator and -takes items while the closure accept returns true. Read more

-

Return an iterator adaptor that borrows from a Clone-able iterator -to only pick off elements while the predicate accept returns true. Read more

-

Return an iterator adaptor that filters Option<A> iterator elements -and produces A. Stops on the first None encountered. Read more

-

Return an iterator adaptor that iterates over the combinations of the -elements from an iterator. Read more

-

Return an iterator adaptor that iterates over the k-length combinations of -the elements from an iterator. Read more

-

Return an iterator that iterates over the k-length combinations of -the elements from an iterator, with replacement. Read more

-

Return an iterator adaptor that iterates over all k-permutations of the -elements from an iterator. Read more

-

Return an iterator adaptor that pads the sequence to a minimum length of -min by filling missing elements using a closure f. Read more

-

Return an iterator adaptor that wraps each element in a Position to -ease special-case handling of the first or last elements. Read more

-

Return an iterator adaptor that yields the indices of all elements -satisfying a predicate, counted from the start of the iterator. Read more

-

Return an iterator adaptor that applies a mutating function -to each element before yielding it. Read more

-

Advances the iterator and returns the next items grouped in a tuple of -a specific size (up to 4). Read more

-

Collects all items from the iterator into a tuple of a specific size -(up to 4). Read more

-

Find the position and value of the first element satisfying a predicate. Read more

-

Check whether all elements compare equal. Read more

-

Consume the first n elements from the iterator eagerly, -and return the same iterator again. Read more

-

Consume the last n elements from the iterator eagerly, -and return the same iterator again. Read more

-
👎 Deprecated since 0.8:

Use .for_each() instead

-

Run the closure f eagerly on each element of the iterator. Read more

-

Combine all an iterator’s elements into one element by using Extend. Read more

-

.collect_vec() is simply a type specialization of .collect(), -for convenience. Read more

-

Assign to each reference in self from the from iterator, -stopping at the shortest of the two iterators. Read more

-

Combine all iterator elements into one String, separated by sep. Read more

-

Format all iterator elements, separated by sep. Read more

-

Format all iterator elements, separated by sep. Read more

-

Fold Result values from an iterator. Read more

-

Fold Option values from an iterator. Read more

-

Accumulator of the elements in the iterator. Read more

-

Accumulate the elements in the iterator in a tree-like manner. Read more

-
👎 Deprecated since 0.8:

Use .try_fold() instead

-

An iterator method that applies a function, producing a single, final value. Read more

-

Iterate over the entire iterator and add all the elements. Read more

-

Iterate over the entire iterator and multiply all the elements. Read more

-

Sort all iterator elements into a new iterator in ascending order. Read more

-

Sort all iterator elements into a new iterator in ascending order. Read more

-

Sort all iterator elements into a new iterator in ascending order. Read more

-

Collect all iterator elements into one of two -partitions. Unlike Iterator::partition, each partition may -have a distinct type. Read more

-

Return a HashMap of keys mapped to Vecs of values. Keys and values -are taken from (Key, Value) tuple pairs yielded by the input iterator. Read more

-

Return the minimum and maximum elements in the iterator. Read more

-

Return the minimum and maximum element of an iterator, as determined by -the specified function. Read more

-

Return the minimum and maximum element of an iterator, as determined by -the specified comparison function. Read more

-

If the iterator yields exactly one element, that element will be returned, otherwise -an error will be returned containing an iterator that has the same output as the input -iterator. Read more

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-

The type returned in the event of a conversion error.

-

Performs the conversion.

-
- \ No newline at end of file diff --git a/uucore/version_cmp/fn.version_cmp.html b/uucore/version_cmp/fn.version_cmp.html deleted file mode 100644 index 27e8e0b33..000000000 --- a/uucore/version_cmp/fn.version_cmp.html +++ /dev/null @@ -1,3 +0,0 @@ -version_cmp in uucore::version_cmp - Rust -

Function uucore::version_cmp::version_cmp[][src]

pub fn version_cmp(a: &str, b: &str) -> Ordering
- \ No newline at end of file diff --git a/uucore/version_cmp/index.html b/uucore/version_cmp/index.html deleted file mode 100644 index eb91c3e4e..000000000 --- a/uucore/version_cmp/index.html +++ /dev/null @@ -1,4 +0,0 @@ -uucore::version_cmp - Rust -

Module uucore::version_cmp[][src]

Functions

-
- \ No newline at end of file diff --git a/uucore/version_cmp/sidebar-items.js b/uucore/version_cmp/sidebar-items.js deleted file mode 100644 index ed948c6d2..000000000 --- a/uucore/version_cmp/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["version_cmp",""]]}); \ No newline at end of file diff --git a/uucore_procs/all.html b/uucore_procs/all.html deleted file mode 100644 index 835146b01..000000000 --- a/uucore_procs/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Macros

Attribute Macros

- \ No newline at end of file diff --git a/uucore_procs/attr.gen_uumain.html b/uucore_procs/attr.gen_uumain.html deleted file mode 100644 index bdfcc9b4f..000000000 --- a/uucore_procs/attr.gen_uumain.html +++ /dev/null @@ -1,3 +0,0 @@ -gen_uumain in uucore_procs - Rust -

Attribute Macro uucore_procs::gen_uumain[][src]

#[gen_uumain]
- \ No newline at end of file diff --git a/uucore_procs/index.html b/uucore_procs/index.html deleted file mode 100644 index 50f0f8aa1..000000000 --- a/uucore_procs/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uucore_procs - Rust -

Crate uucore_procs[][src]

Macros

-

Attribute Macros

-
- \ No newline at end of file diff --git a/uucore_procs/macro.main!.html b/uucore_procs/macro.main!.html deleted file mode 100644 index 30e847171..000000000 --- a/uucore_procs/macro.main!.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - Redirection - - -

Redirecting to macro.main.html...

- - - \ No newline at end of file diff --git a/uucore_procs/macro.main.html b/uucore_procs/macro.main.html deleted file mode 100644 index 3c0ddbb9a..000000000 --- a/uucore_procs/macro.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in uucore_procs - Rust -

Macro uucore_procs::main[][src]

main!() { /* proc-macro */ }
- \ No newline at end of file diff --git a/uucore_procs/sidebar-items.js b/uucore_procs/sidebar-items.js deleted file mode 100644 index 8c94db323..000000000 --- a/uucore_procs/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"attr":[["gen_uumain",""]],"macro":[["main",""]]}); \ No newline at end of file diff --git a/uudoc/all.html b/uudoc/all.html deleted file mode 100644 index 2a77cd415..000000000 --- a/uudoc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

Typedefs

- \ No newline at end of file diff --git a/uudoc/fn.main.html b/uudoc/fn.main.html deleted file mode 100644 index fc7f346b4..000000000 --- a/uudoc/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in uudoc - Rust -

Function uudoc::main[][src]

pub(crate) fn main() -> Result<()>
- \ No newline at end of file diff --git a/uudoc/fn.util_map.html b/uudoc/fn.util_map.html deleted file mode 100644 index 0b5c29808..000000000 --- a/uudoc/fn.util_map.html +++ /dev/null @@ -1,3 +0,0 @@ -util_map in uudoc - Rust -

Function uudoc::util_map[][src]

pub(crate) fn util_map<T: Args>(
) -> HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>
- \ No newline at end of file diff --git a/uudoc/fn.write_description.html b/uudoc/fn.write_description.html deleted file mode 100644 index f6dfef1be..000000000 --- a/uudoc/fn.write_description.html +++ /dev/null @@ -1,3 +0,0 @@ -write_description in uudoc - Rust -

Function uudoc::write_description[][src]

pub(crate) fn write_description(w: &mut impl Write, app: &App<'_>) -> Result<()>
- \ No newline at end of file diff --git a/uudoc/fn.write_markdown.html b/uudoc/fn.write_markdown.html deleted file mode 100644 index f6c5974bb..000000000 --- a/uudoc/fn.write_markdown.html +++ /dev/null @@ -1,3 +0,0 @@ -write_markdown in uudoc - Rust -

Function uudoc::write_markdown[][src]

pub(crate) fn write_markdown(
    w: impl Write,
    app: &mut App<'_>,
    name: &str
) -> Result<()>
- \ No newline at end of file diff --git a/uudoc/fn.write_options.html b/uudoc/fn.write_options.html deleted file mode 100644 index 84c30470f..000000000 --- a/uudoc/fn.write_options.html +++ /dev/null @@ -1,3 +0,0 @@ -write_options in uudoc - Rust -

Function uudoc::write_options[][src]

pub(crate) fn write_options(w: &mut impl Write, app: &App<'_>) -> Result<()>
- \ No newline at end of file diff --git a/uudoc/fn.write_usage.html b/uudoc/fn.write_usage.html deleted file mode 100644 index 766e088c0..000000000 --- a/uudoc/fn.write_usage.html +++ /dev/null @@ -1,3 +0,0 @@ -write_usage in uudoc - Rust -

Function uudoc::write_usage[][src]

pub(crate) fn write_usage(
    w: &mut impl Write,
    app: &mut App<'_>,
    name: &str
) -> Result<()>
- \ No newline at end of file diff --git a/uudoc/fn.write_version.html b/uudoc/fn.write_version.html deleted file mode 100644 index e81d84b42..000000000 --- a/uudoc/fn.write_version.html +++ /dev/null @@ -1,3 +0,0 @@ -write_version in uudoc - Rust -

Function uudoc::write_version[][src]

pub(crate) fn write_version(w: &mut impl Write, app: &App<'_>) -> Result<()>
- \ No newline at end of file diff --git a/uudoc/index.html b/uudoc/index.html deleted file mode 100644 index 0550b4578..000000000 --- a/uudoc/index.html +++ /dev/null @@ -1,5 +0,0 @@ -uudoc - Rust -

Crate uudoc[][src]

Functions

-

Type Definitions

-
- \ No newline at end of file diff --git a/uudoc/sidebar-items.js b/uudoc/sidebar-items.js deleted file mode 100644 index e2a6ff3af..000000000 --- a/uudoc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""],["util_map",""],["write_description",""],["write_markdown",""],["write_options",""],["write_usage",""],["write_version",""]],"type":[["UtilityMap",""]]}); \ No newline at end of file diff --git a/uudoc/type.UtilityMap.html b/uudoc/type.UtilityMap.html deleted file mode 100644 index 26ad11006..000000000 --- a/uudoc/type.UtilityMap.html +++ /dev/null @@ -1,3 +0,0 @@ -UtilityMap in uudoc - Rust -

Type Definition uudoc::UtilityMap[][src]

pub(crate) type UtilityMap<T> = HashMap<&'static str, (fn(_: T) -> i32, fn() -> App<'static>)>;
- \ No newline at end of file diff --git a/wc/all.html b/wc/all.html deleted file mode 100644 index 3462c9d6b..000000000 --- a/wc/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/wc/fn.main.html b/wc/fn.main.html deleted file mode 100644 index 78a3476d0..000000000 --- a/wc/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in wc - Rust -

Function wc::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/wc/index.html b/wc/index.html deleted file mode 100644 index 78b599cd4..000000000 --- a/wc/index.html +++ /dev/null @@ -1,4 +0,0 @@ -wc - Rust -

Crate wc[][src]

Functions

-
- \ No newline at end of file diff --git a/wc/sidebar-items.js b/wc/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/wc/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/wheel.svg b/wheel.svg deleted file mode 100644 index 01da3b24c..000000000 --- a/wheel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/who/all.html b/who/all.html deleted file mode 100644 index 44a525602..000000000 --- a/who/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/who/fn.main.html b/who/fn.main.html deleted file mode 100644 index 643225932..000000000 --- a/who/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in who - Rust -

Function who::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/who/index.html b/who/index.html deleted file mode 100644 index a26f34a54..000000000 --- a/who/index.html +++ /dev/null @@ -1,4 +0,0 @@ -who - Rust -

Crate who[][src]

Functions

-
- \ No newline at end of file diff --git a/who/sidebar-items.js b/who/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/who/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/whoami/all.html b/whoami/all.html deleted file mode 100644 index 1de9d219d..000000000 --- a/whoami/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/whoami/fn.main.html b/whoami/fn.main.html deleted file mode 100644 index c4311725a..000000000 --- a/whoami/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in whoami - Rust -

Function whoami::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/whoami/index.html b/whoami/index.html deleted file mode 100644 index ef93ed3aa..000000000 --- a/whoami/index.html +++ /dev/null @@ -1,4 +0,0 @@ -whoami - Rust -

Crate whoami[][src]

Functions

-
- \ No newline at end of file diff --git a/whoami/sidebar-items.js b/whoami/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/whoami/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file diff --git a/yes/all.html b/yes/all.html deleted file mode 100644 index d25a52708..000000000 --- a/yes/all.html +++ /dev/null @@ -1,5 +0,0 @@ -List of all items in this crate -

List of all items[] - -

Functions

- \ No newline at end of file diff --git a/yes/fn.main.html b/yes/fn.main.html deleted file mode 100644 index 059406b7b..000000000 --- a/yes/fn.main.html +++ /dev/null @@ -1,3 +0,0 @@ -main in yes - Rust -

Function yes::main[][src]

pub(crate) fn main()
- \ No newline at end of file diff --git a/yes/index.html b/yes/index.html deleted file mode 100644 index a983a3f12..000000000 --- a/yes/index.html +++ /dev/null @@ -1,4 +0,0 @@ -yes - Rust -

Crate yes[][src]

Functions

-
- \ No newline at end of file diff --git a/yes/sidebar-items.js b/yes/sidebar-items.js deleted file mode 100644 index a5d4937c7..000000000 --- a/yes/sidebar-items.js +++ /dev/null @@ -1 +0,0 @@ -initSidebarItems({"fn":[["main",""]]}); \ No newline at end of file