1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

Merge branch 'main' into tail_notify

This commit is contained in:
Jan Scheer 2022-05-18 14:28:19 +02:00
commit 6a1cf72316
No known key found for this signature in database
GPG key ID: C62AD4C29E2B9828
11 changed files with 195 additions and 141 deletions

212
Cargo.lock generated
View file

@ -256,9 +256,9 @@ dependencies = [
[[package]]
name = "clap"
version = "3.1.15"
version = "3.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85a35a599b11c089a7f49105658d089b8f2cf0882993c17daf6de15285c2c35d"
checksum = "d2dbdf4bdacb33466e854ce889eee8dfd5729abf7ccd7664d0a2d60cd384440b"
dependencies = [
"atty",
"bitflags",
@ -277,7 +277,7 @@ version = "3.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da92e6facd8d73c22745a5d3cbb59bdf8e46e3235c923e516527d8e81eec14a4"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
]
[[package]]
@ -316,7 +316,7 @@ version = "0.0.13"
dependencies = [
"atty",
"chrono",
"clap 3.1.15",
"clap 3.1.18",
"clap_complete",
"conv",
"filetime",
@ -2133,7 +2133,7 @@ checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b"
name = "uu_arch"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"platform-info",
"uucore",
]
@ -2142,7 +2142,7 @@ dependencies = [
name = "uu_base32"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2158,7 +2158,7 @@ dependencies = [
name = "uu_basename"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2166,7 +2166,7 @@ dependencies = [
name = "uu_basenc"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uu_base32",
"uucore",
]
@ -2176,7 +2176,7 @@ name = "uu_cat"
version = "0.0.13"
dependencies = [
"atty",
"clap 3.1.15",
"clap 3.1.18",
"nix",
"thiserror",
"unix_socket",
@ -2187,7 +2187,7 @@ dependencies = [
name = "uu_chcon"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"fts-sys",
"libc",
"selinux",
@ -2199,7 +2199,7 @@ dependencies = [
name = "uu_chgrp"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2207,7 +2207,7 @@ dependencies = [
name = "uu_chmod"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2216,7 +2216,7 @@ dependencies = [
name = "uu_chown"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2224,7 +2224,7 @@ dependencies = [
name = "uu_chroot"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2232,7 +2232,7 @@ dependencies = [
name = "uu_cksum"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2240,7 +2240,7 @@ dependencies = [
name = "uu_comm"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2248,7 +2248,7 @@ dependencies = [
name = "uu_cp"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"exacl",
"filetime",
"ioctl-sys",
@ -2265,7 +2265,7 @@ dependencies = [
name = "uu_csplit"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"regex",
"thiserror",
"uucore",
@ -2277,7 +2277,7 @@ version = "0.0.13"
dependencies = [
"atty",
"bstr",
"clap 3.1.15",
"clap 3.1.18",
"memchr 2.5.0",
"uucore",
]
@ -2287,7 +2287,7 @@ name = "uu_date"
version = "0.0.13"
dependencies = [
"chrono",
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
"winapi 0.3.9",
@ -2298,7 +2298,7 @@ name = "uu_dd"
version = "0.0.13"
dependencies = [
"byte-unit",
"clap 3.1.15",
"clap 3.1.18",
"gcd",
"libc",
"signal-hook",
@ -2309,7 +2309,7 @@ dependencies = [
name = "uu_df"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"number_prefix",
"unicode-width",
"uucore",
@ -2319,7 +2319,7 @@ dependencies = [
name = "uu_dir"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"selinux",
"uu_ls",
"uucore",
@ -2329,7 +2329,7 @@ dependencies = [
name = "uu_dircolors"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"glob",
"uucore",
]
@ -2338,7 +2338,7 @@ dependencies = [
name = "uu_dirname"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2347,7 +2347,7 @@ name = "uu_du"
version = "0.0.13"
dependencies = [
"chrono",
"clap 3.1.15",
"clap 3.1.18",
"glob",
"uucore",
"winapi 0.3.9",
@ -2357,7 +2357,7 @@ dependencies = [
name = "uu_echo"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2365,7 +2365,7 @@ dependencies = [
name = "uu_env"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"rust-ini",
"uucore",
]
@ -2374,7 +2374,7 @@ dependencies = [
name = "uu_expand"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"unicode-width",
"uucore",
]
@ -2383,7 +2383,7 @@ dependencies = [
name = "uu_expr"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"num-bigint",
"num-traits",
"onig",
@ -2394,7 +2394,7 @@ dependencies = [
name = "uu_factor"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"coz",
"num-traits",
"paste",
@ -2408,7 +2408,7 @@ dependencies = [
name = "uu_false"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2416,7 +2416,7 @@ dependencies = [
name = "uu_fmt"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"unicode-width",
"uucore",
]
@ -2425,7 +2425,7 @@ dependencies = [
name = "uu_fold"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2433,7 +2433,7 @@ dependencies = [
name = "uu_groups"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2443,7 +2443,7 @@ version = "0.0.13"
dependencies = [
"blake2b_simd",
"blake3",
"clap 3.1.15",
"clap 3.1.18",
"digest",
"hex",
"md-5",
@ -2459,7 +2459,7 @@ dependencies = [
name = "uu_head"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"memchr 2.5.0",
"uucore",
]
@ -2468,7 +2468,7 @@ dependencies = [
name = "uu_hostid"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2477,7 +2477,7 @@ dependencies = [
name = "uu_hostname"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"hostname",
"uucore",
"winapi 0.3.9",
@ -2487,7 +2487,7 @@ dependencies = [
name = "uu_id"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"selinux",
"uucore",
]
@ -2496,7 +2496,7 @@ dependencies = [
name = "uu_install"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"file_diff",
"filetime",
"libc",
@ -2508,7 +2508,7 @@ dependencies = [
name = "uu_join"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"memchr 2.5.0",
"uucore",
]
@ -2517,7 +2517,7 @@ dependencies = [
name = "uu_kill"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2526,7 +2526,7 @@ dependencies = [
name = "uu_link"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2534,7 +2534,7 @@ dependencies = [
name = "uu_ln"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2542,7 +2542,7 @@ dependencies = [
name = "uu_logname"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2553,7 +2553,7 @@ version = "0.0.13"
dependencies = [
"atty",
"chrono",
"clap 3.1.15",
"clap 3.1.18",
"glob",
"lazy_static",
"lscolors",
@ -2570,7 +2570,7 @@ dependencies = [
name = "uu_mkdir"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2578,7 +2578,7 @@ dependencies = [
name = "uu_mkfifo"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2587,7 +2587,7 @@ dependencies = [
name = "uu_mknod"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2596,7 +2596,7 @@ dependencies = [
name = "uu_mktemp"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"rand",
"tempfile",
"uucore",
@ -2607,7 +2607,7 @@ name = "uu_more"
version = "0.0.13"
dependencies = [
"atty",
"clap 3.1.15",
"clap 3.1.18",
"crossterm",
"nix",
"unicode-segmentation",
@ -2619,7 +2619,7 @@ dependencies = [
name = "uu_mv"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"fs_extra",
"uucore",
]
@ -2628,7 +2628,7 @@ dependencies = [
name = "uu_nice"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"nix",
"uucore",
@ -2638,7 +2638,7 @@ dependencies = [
name = "uu_nl"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"regex",
"uucore",
]
@ -2648,7 +2648,7 @@ name = "uu_nohup"
version = "0.0.13"
dependencies = [
"atty",
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2657,7 +2657,7 @@ dependencies = [
name = "uu_nproc"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"num_cpus",
"uucore",
@ -2667,7 +2667,7 @@ dependencies = [
name = "uu_numfmt"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2676,7 +2676,7 @@ name = "uu_od"
version = "0.0.13"
dependencies = [
"byteorder",
"clap 3.1.15",
"clap 3.1.18",
"half",
"uucore",
]
@ -2685,7 +2685,7 @@ dependencies = [
name = "uu_paste"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2693,7 +2693,7 @@ dependencies = [
name = "uu_pathchk"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2702,7 +2702,7 @@ dependencies = [
name = "uu_pinky"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2711,7 +2711,7 @@ name = "uu_pr"
version = "0.0.13"
dependencies = [
"chrono",
"clap 3.1.15",
"clap 3.1.18",
"itertools",
"quick-error",
"regex",
@ -2722,7 +2722,7 @@ dependencies = [
name = "uu_printenv"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2730,7 +2730,7 @@ dependencies = [
name = "uu_printf"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2738,7 +2738,7 @@ dependencies = [
name = "uu_ptx"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"regex",
"uucore",
]
@ -2747,7 +2747,7 @@ dependencies = [
name = "uu_pwd"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2755,7 +2755,7 @@ dependencies = [
name = "uu_readlink"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2763,7 +2763,7 @@ dependencies = [
name = "uu_realpath"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2771,7 +2771,7 @@ dependencies = [
name = "uu_relpath"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2779,7 +2779,7 @@ dependencies = [
name = "uu_rm"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"remove_dir_all 0.7.0",
"uucore",
"walkdir",
@ -2790,7 +2790,7 @@ dependencies = [
name = "uu_rmdir"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -2799,7 +2799,7 @@ dependencies = [
name = "uu_runcon"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"selinux",
"thiserror",
@ -2811,7 +2811,7 @@ name = "uu_seq"
version = "0.0.13"
dependencies = [
"bigdecimal",
"clap 3.1.15",
"clap 3.1.18",
"num-bigint",
"num-traits",
"uucore",
@ -2821,7 +2821,7 @@ dependencies = [
name = "uu_shred"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"rand",
"uucore",
]
@ -2830,7 +2830,7 @@ dependencies = [
name = "uu_shuf"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"rand",
"rand_core",
"uucore",
@ -2840,7 +2840,7 @@ dependencies = [
name = "uu_sleep"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2849,7 +2849,7 @@ name = "uu_sort"
version = "0.0.13"
dependencies = [
"binary-heap-plus",
"clap 3.1.15",
"clap 3.1.18",
"compare",
"ctrlc",
"fnv",
@ -2867,7 +2867,7 @@ dependencies = [
name = "uu_split"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"memchr 2.5.0",
"uucore",
]
@ -2876,7 +2876,7 @@ dependencies = [
name = "uu_stat"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2884,7 +2884,7 @@ dependencies = [
name = "uu_stdbuf"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"tempfile",
"uu_stdbuf_libstdbuf",
"uucore",
@ -2904,7 +2904,7 @@ dependencies = [
name = "uu_sum"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -2912,7 +2912,7 @@ dependencies = [
name = "uu_sync"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
"winapi 0.3.9",
@ -2922,7 +2922,7 @@ dependencies = [
name = "uu_tac"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"memchr 2.5.0",
"memmap2",
"regex",
@ -2933,7 +2933,7 @@ dependencies = [
name = "uu_tail"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"nix",
"notify",
@ -2945,7 +2945,7 @@ dependencies = [
name = "uu_tee"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"retain_mut",
"uucore",
@ -2955,7 +2955,7 @@ dependencies = [
name = "uu_test"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"redox_syscall",
"uucore",
@ -2965,7 +2965,7 @@ dependencies = [
name = "uu_timeout"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"nix",
"uucore",
@ -2975,7 +2975,7 @@ dependencies = [
name = "uu_touch"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"filetime",
"time 0.3.9",
"uucore",
@ -2986,7 +2986,7 @@ dependencies = [
name = "uu_tr"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"nom",
"uucore",
]
@ -2995,7 +2995,7 @@ dependencies = [
name = "uu_true"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3003,7 +3003,7 @@ dependencies = [
name = "uu_truncate"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3011,7 +3011,7 @@ dependencies = [
name = "uu_tsort"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3020,7 +3020,7 @@ name = "uu_tty"
version = "0.0.13"
dependencies = [
"atty",
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
]
@ -3029,7 +3029,7 @@ dependencies = [
name = "uu_uname"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"platform-info",
"uucore",
]
@ -3038,7 +3038,7 @@ dependencies = [
name = "uu_unexpand"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"unicode-width",
"uucore",
]
@ -3047,7 +3047,7 @@ dependencies = [
name = "uu_uniq"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"strum",
"strum_macros",
"uucore",
@ -3057,7 +3057,7 @@ dependencies = [
name = "uu_unlink"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3066,7 +3066,7 @@ name = "uu_uptime"
version = "0.0.13"
dependencies = [
"chrono",
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3074,7 +3074,7 @@ dependencies = [
name = "uu_users"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3082,7 +3082,7 @@ dependencies = [
name = "uu_vdir"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"selinux",
"uu_ls",
"uucore",
@ -3093,7 +3093,7 @@ name = "uu_wc"
version = "0.0.13"
dependencies = [
"bytecount",
"clap 3.1.15",
"clap 3.1.18",
"libc",
"nix",
"unicode-width",
@ -3105,7 +3105,7 @@ dependencies = [
name = "uu_who"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"uucore",
]
@ -3113,7 +3113,7 @@ dependencies = [
name = "uu_whoami"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"libc",
"uucore",
"winapi 0.3.9",
@ -3123,7 +3123,7 @@ dependencies = [
name = "uu_yes"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"nix",
"uucore",
]
@ -3132,7 +3132,7 @@ dependencies = [
name = "uucore"
version = "0.0.13"
dependencies = [
"clap 3.1.15",
"clap 3.1.18",
"data-encoding",
"data-encoding-macro",
"dns-lookup",

View file

@ -388,7 +388,7 @@ fn parse_bytes_no_x(s: &str) -> Result<u64, ParseError> {
let (num, multiplier) = match (s.find('c'), s.rfind('w'), s.rfind('b')) {
(None, None, None) => match uucore::parse_size::parse_size(s) {
Ok(n) => (n, 1),
Err(ParseSizeError::ParseFailure(s)) => {
Err(ParseSizeError::InvalidSuffix(s)) | Err(ParseSizeError::ParseFailure(s)) => {
return Err(ParseError::MultiplierStringParseFailure(s))
}
Err(ParseSizeError::SizeTooBig(s)) => {

View file

@ -121,6 +121,7 @@ impl Default for Options {
enum OptionsError {
BlockSizeTooLarge(String),
InvalidBlockSize(String),
InvalidSuffix(String),
/// An error getting the columns to display in the output table.
ColumnError(ColumnError),
@ -139,6 +140,9 @@ impl fmt::Display for OptionsError {
// TODO This needs to vary based on whether `--block-size`
// or `-B` were provided.
Self::InvalidBlockSize(s) => write!(f, "invalid --block-size argument {}", s),
// TODO This needs to vary based on whether `--block-size`
// or `-B` were provided.
Self::InvalidSuffix(s) => write!(f, "invalid suffix in --block-size argument {}", s),
Self::ColumnError(ColumnError::MultipleColumns(s)) => write!(
f,
"option --output: field {} used more than once",
@ -174,6 +178,7 @@ impl Options {
show_local_fs: matches.is_present(OPT_LOCAL),
show_all_fs: matches.is_present(OPT_ALL),
block_size: block_size_from_matches(matches).map_err(|e| match e {
ParseSizeError::InvalidSuffix(s) => OptionsError::InvalidSuffix(s),
ParseSizeError::SizeTooBig(_) => OptionsError::BlockSizeTooLarge(
matches.value_of(OPT_BLOCKSIZE).unwrap().to_string(),
),

View file

@ -953,8 +953,10 @@ impl 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::InvalidSuffix(_) => {
format!("invalid suffix in --{} argument {}", option, s.quote())
}
ParseSizeError::ParseFailure(_) => format!("invalid --{} argument {}", option, s.quote()),
ParseSizeError::SizeTooBig(_) => format!("--{} argument {} too large", option, s.quote()),
}

View file

@ -679,8 +679,10 @@ fn open_input_peek_reader(
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::InvalidSuffix(_) => {
format!("invalid suffix in --{} argument {}", option, s.quote())
}
ParseSizeError::ParseFailure(_) => format!("invalid --{} argument {}", option, s.quote()),
ParseSizeError::SizeTooBig(_) => format!("--{} argument {} too large", option, s.quote()),
}

View file

@ -362,8 +362,10 @@ impl GlobalSettings {
size
))
})
} else if size_string.starts_with(|c: char| c.is_ascii_digit()) {
Err(ParseSizeError::InvalidSuffix("invalid suffix".to_string()))
} else {
Err(ParseSizeError::ParseFailure("invalid suffix".to_string()))
Err(ParseSizeError::ParseFailure("parse failure".to_string()))
}
}
@ -1833,8 +1835,10 @@ fn open(path: impl AsRef<OsStr>) -> UResult<Box<dyn Read + Send>> {
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::InvalidSuffix(_) => {
format!("invalid suffix in --{} argument {}", option, s.quote())
}
ParseSizeError::ParseFailure(_) => format!("invalid --{} argument {}", option, s.quote()),
ParseSizeError::SizeTooBig(_) => format!("--{} argument {} too large", option, s.quote()),
}

View file

@ -72,7 +72,8 @@ pub fn parse_size(size: &str) -> Result<u64, ParseSizeError> {
"EB" | "eB" => (1000, 6),
"ZB" | "zB" => (1000, 7),
"YB" | "yB" => (1000, 8),
_ => return Err(ParseSizeError::parse_failure(size)),
_ if numeric_string.is_empty() => return Err(ParseSizeError::parse_failure(size)),
_ => return Err(ParseSizeError::invalid_suffix(size)),
};
let factor = match u64::try_from(base.pow(exponent)) {
Ok(n) => n,
@ -85,13 +86,15 @@ pub fn parse_size(size: &str) -> Result<u64, ParseSizeError> {
#[derive(Debug, PartialEq, Eq)]
pub enum ParseSizeError {
ParseFailure(String), // Syntax
SizeTooBig(String), // Overflow
InvalidSuffix(String), // Suffix
ParseFailure(String), // Syntax
SizeTooBig(String), // Overflow
}
impl Error for ParseSizeError {
fn description(&self) -> &str {
match *self {
ParseSizeError::InvalidSuffix(ref s) => &*s,
ParseSizeError::ParseFailure(ref s) => &*s,
ParseSizeError::SizeTooBig(ref s) => &*s,
}
@ -101,7 +104,9 @@ impl Error for ParseSizeError {
impl fmt::Display for ParseSizeError {
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
let s = match self {
ParseSizeError::ParseFailure(s) | ParseSizeError::SizeTooBig(s) => s,
ParseSizeError::InvalidSuffix(s)
| ParseSizeError::ParseFailure(s)
| ParseSizeError::SizeTooBig(s) => s,
};
write!(f, "{}", s)
}
@ -111,6 +116,10 @@ impl fmt::Display for ParseSizeError {
// but there's a lot of downstream code that constructs these errors manually
// that would be affected
impl ParseSizeError {
fn invalid_suffix(s: &str) -> Self {
Self::InvalidSuffix(format!("{}", s.quote()))
}
fn parse_failure(s: &str) -> Self {
// stderr on linux (GNU coreutils 8.32) (LC_ALL=C)
// has to be handled in the respective uutils because strings differ, e.g.:
@ -237,20 +246,20 @@ mod tests {
);
}
#[test]
fn invalid_suffix() {
let test_strings = ["328hdsf3290", "5mib", "1e2", "1H", "1.2"];
for &test_string in &test_strings {
assert_eq!(
parse_size(test_string).unwrap_err(),
ParseSizeError::InvalidSuffix(format!("{}", test_string.quote()))
);
}
}
#[test]
fn invalid_syntax() {
let test_strings = [
"328hdsf3290",
"5MiB nonsense",
"5mib",
"biB",
"-",
"+",
"",
"-1",
"1e2",
"",
];
let test_strings = ["biB", "-", "+", "", "-1", ""];
for &test_string in &test_strings {
assert_eq!(
parse_size(test_string).unwrap_err(),

View file

@ -566,6 +566,19 @@ fn test_invalid_block_size() {
.stderr_contains("invalid --block-size argument '0K'");
}
#[test]
fn test_invalid_block_size_suffix() {
new_ucmd!()
.arg("--block-size=1H")
.fails()
.stderr_contains("invalid suffix in --block-size argument '1H'");
new_ucmd!()
.arg("--block-size=1.2")
.fails()
.stderr_contains("invalid suffix in --block-size argument '1.2'");
}
#[test]
fn test_output_selects_columns() {
let output = new_ucmd!()

View file

@ -94,7 +94,13 @@ fn test_du_invalid_size() {
.arg("/tmp")
.fails()
.code_is(1)
.stderr_only(format!("du: invalid --{} argument '1fb4t'", s));
.stderr_only(format!("du: invalid suffix in --{} argument '1fb4t'", s));
ts.ucmd()
.arg(format!("--{}=x", s))
.arg("/tmp")
.fails()
.code_is(1)
.stderr_only(format!("du: invalid --{} argument 'x'", s));
#[cfg(not(target_pointer_width = "128"))]
ts.ucmd()
.arg(format!("--{}=1Y", s))

View file

@ -827,7 +827,8 @@ fn test_traditional_only_label() {
#[test]
fn test_od_invalid_bytes() {
const INVALID_SIZE: &str = "1fb4t";
const INVALID_SIZE: &str = "x";
const INVALID_SUFFIX: &str = "1fb4t";
const BIG_SIZE: &str = "1Y";
// NOTE:
@ -852,6 +853,16 @@ fn test_od_invalid_bytes() {
option, INVALID_SIZE
));
new_ucmd!()
.arg(format!("{}={}", option, INVALID_SUFFIX))
.arg("file")
.fails()
.code_is(1)
.stderr_only(format!(
"od: invalid suffix in {} argument '{}'",
option, INVALID_SUFFIX
));
#[cfg(not(target_pointer_width = "128"))]
new_ucmd!()
.arg(format!("{}={}", option, BIG_SIZE))

View file

@ -56,18 +56,20 @@ fn test_buffer_sizes() {
#[test]
fn test_invalid_buffer_size() {
let buffer_sizes = ["asd", "100f"];
for invalid_buffer_size in &buffer_sizes {
new_ucmd!()
.arg("-S")
.arg(invalid_buffer_size)
.fails()
.code_is(2)
.stderr_only(format!(
"sort: invalid --buffer-size argument '{}'",
invalid_buffer_size
));
}
new_ucmd!()
.arg("-S")
.arg("asd")
.fails()
.code_is(2)
.stderr_only("sort: invalid --buffer-size argument 'asd'");
new_ucmd!()
.arg("-S")
.arg("100f")
.fails()
.code_is(2)
.stderr_only("sort: invalid suffix in --buffer-size argument '100f'");
#[cfg(not(target_pointer_width = "128"))]
new_ucmd!()
.arg("-n")