mirror of
https://github.com/uutils/coreutils.git
synced 2026-06-10 15:48:22 -07:00
Implements status=LEVEL
- Adds print fn's - Modifies internal fn's as needed to track read/write state - Modifies status update thread to respect status level - Adds signal handler for SIGUSR1 (print xfer stats)
This commit is contained in:
Generated
+43
@@ -134,6 +134,15 @@ version = "0.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "560c32574a12a89ecd91f5e742165893f86e3ab98d21f8ea548658eb9eef5f40"
|
||||
|
||||
[[package]]
|
||||
name = "byte-unit"
|
||||
version = "4.0.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "063197e6eb4b775b64160dedde7a0986bb2836cce140e9492e9e96f28e18bcd8"
|
||||
dependencies = [
|
||||
"utf8-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "byteorder"
|
||||
version = "1.3.4"
|
||||
@@ -548,6 +557,12 @@ version = "2.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "f4f47ca1860a761136924ddd2422ba77b2ea54fe8cc75b9040804a0d9d32ad97"
|
||||
|
||||
[[package]]
|
||||
name = "debug_print"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8f215f9b7224f49fb73256115331f677d868b34d18b65dbe4db392e6021eea90"
|
||||
|
||||
[[package]]
|
||||
name = "digest"
|
||||
version = "0.6.2"
|
||||
@@ -1370,6 +1385,25 @@ dependencies = [
|
||||
"generic-array 0.8.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook"
|
||||
version = "0.3.9"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "470c5a6397076fae0094aaf06a08e6ba6f37acb77d3b1b91ea92b4d6c8650c39"
|
||||
dependencies = [
|
||||
"libc",
|
||||
"signal-hook-registry",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "signal-hook-registry"
|
||||
version = "1.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "smallvec"
|
||||
version = "0.6.14"
|
||||
@@ -1564,6 +1598,12 @@ dependencies = [
|
||||
"log",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "utf8-width"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7cf7d77f457ef8dfa11e4cd5933c5ddb5dc52a94664071951219a97710f0a32b"
|
||||
|
||||
[[package]]
|
||||
name = "uu_arch"
|
||||
version = "0.0.4"
|
||||
@@ -1715,10 +1755,13 @@ dependencies = [
|
||||
name = "uu_dd"
|
||||
version = "0.0.4"
|
||||
dependencies = [
|
||||
"byte-unit",
|
||||
"debug_print",
|
||||
"gcd",
|
||||
"getopts",
|
||||
"hex-literal",
|
||||
"md-5",
|
||||
"signal-hook",
|
||||
"uucore",
|
||||
"uucore_procs",
|
||||
]
|
||||
|
||||
@@ -15,11 +15,14 @@ edition = "2018"
|
||||
path = "src/dd.rs"
|
||||
|
||||
[dependencies]
|
||||
uucore = { version=">=0.0.7", package="uucore", path="../../uucore" }
|
||||
uucore_procs = { version=">=0.0.5", package="uucore_procs", path="../../uucore_procs" }
|
||||
byte-unit = "4.0"
|
||||
debug_print = "1.0"
|
||||
# Probably best to keep this identical to the version of getopts in the uucore crate
|
||||
getopts = "<= 0.2.21"
|
||||
gcd = "2.0"
|
||||
signal-hook = "0.3.9"
|
||||
uucore = { version=">=0.0.7", package="uucore", path="../../uucore" }
|
||||
uucore_procs = { version=">=0.0.5", package="uucore_procs", path="../../uucore_procs" }
|
||||
|
||||
[dev-dependencies]
|
||||
md-5 = "0.9"
|
||||
|
||||
+373
-115
File diff suppressed because it is too large
Load Diff
@@ -1,7 +1,18 @@
|
||||
use super::*;
|
||||
|
||||
static NL: u8 = '\n' as u8;
|
||||
static SPACE: u8 = ' ' as u8;
|
||||
const NL: u8 = '\n' as u8;
|
||||
const SPACE: u8 = ' ' as u8;
|
||||
|
||||
macro_rules! rs (
|
||||
() =>
|
||||
{
|
||||
ReadStat {
|
||||
reads_complete: 0,
|
||||
reads_partial: 0,
|
||||
records_truncated: 0,
|
||||
}
|
||||
};
|
||||
);
|
||||
|
||||
macro_rules! make_block_test (
|
||||
( $test_id:ident, $test_name:expr, $src:expr, $block:expr, $spec:expr ) =>
|
||||
@@ -12,7 +23,7 @@ macro_rules! make_block_test (
|
||||
src: $src,
|
||||
non_ascii: false,
|
||||
ibs: 512,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: IConvFlags {
|
||||
ctable: None,
|
||||
block: $block,
|
||||
@@ -44,7 +55,7 @@ macro_rules! make_unblock_test (
|
||||
src: $src,
|
||||
non_ascii: false,
|
||||
ibs: 512,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: IConvFlags {
|
||||
ctable: None,
|
||||
block: None,
|
||||
@@ -70,8 +81,9 @@ macro_rules! make_unblock_test (
|
||||
#[test]
|
||||
fn block_test_no_nl()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8],
|
||||
@@ -81,8 +93,9 @@ fn block_test_no_nl()
|
||||
#[test]
|
||||
fn block_test_no_nl_short_record()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8];
|
||||
let res = block(buf, 8);
|
||||
let res = block(buf, 8, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
|
||||
@@ -92,19 +105,22 @@ fn block_test_no_nl_short_record()
|
||||
#[test]
|
||||
fn block_test_no_nl_trunc()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, 4u8];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8/*, 4u8*/],
|
||||
]);
|
||||
assert_eq!(rs.records_truncated, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn block_test_nl_gt_cbs_trunc()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, 4u8, NL, 0u8, 1u8, 2u8, 3u8, 4u8, NL, 5u8, 6u8, 7u8, 8u8];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8],
|
||||
@@ -113,13 +129,15 @@ fn block_test_nl_gt_cbs_trunc()
|
||||
// vec![4u8, SPACE, SPACE, SPACE],
|
||||
vec![5u8, 6u8, 7u8, 8u8],
|
||||
]);
|
||||
assert_eq!(rs.records_truncated, 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn block_test_surrounded_nl()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, 5u8, 6u8, 7u8, 8u8];
|
||||
let res = block(buf, 8);
|
||||
let res = block(buf, 8, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
|
||||
@@ -130,8 +148,9 @@ fn block_test_surrounded_nl()
|
||||
#[test]
|
||||
fn block_test_multiple_nl_same_cbs_block()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, NL, 5u8, 6u8, 7u8, 8u8, 9u8];
|
||||
let res = block(buf, 8);
|
||||
let res = block(buf, 8, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
|
||||
@@ -143,8 +162,9 @@ fn block_test_multiple_nl_same_cbs_block()
|
||||
#[test]
|
||||
fn block_test_multiple_nl_diff_cbs_block()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, 4u8, 5u8, 6u8, 7u8, NL, 8u8, 9u8];
|
||||
let res = block(buf, 8);
|
||||
let res = block(buf, 8, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
|
||||
@@ -156,8 +176,9 @@ fn block_test_multiple_nl_diff_cbs_block()
|
||||
#[test]
|
||||
fn block_test_end_nl_diff_cbs_block()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, NL];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8],
|
||||
@@ -167,8 +188,9 @@ fn block_test_end_nl_diff_cbs_block()
|
||||
#[test]
|
||||
fn block_test_end_nl_same_cbs_block()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, NL];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, SPACE]
|
||||
@@ -178,8 +200,9 @@ fn block_test_end_nl_same_cbs_block()
|
||||
#[test]
|
||||
fn block_test_double_end_nl()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, NL, NL];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, SPACE],
|
||||
@@ -190,8 +213,9 @@ fn block_test_double_end_nl()
|
||||
#[test]
|
||||
fn block_test_start_nl()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![NL, 0u8, 1u8, 2u8, 3u8];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![SPACE, SPACE, SPACE, SPACE],
|
||||
@@ -202,8 +226,9 @@ fn block_test_start_nl()
|
||||
#[test]
|
||||
fn block_test_double_surrounded_nl_no_trunc()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, NL, 4u8, 5u8, 6u8, 7u8];
|
||||
let res = block(buf, 8);
|
||||
let res = block(buf, 8, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8, SPACE, SPACE, SPACE, SPACE],
|
||||
@@ -215,14 +240,16 @@ fn block_test_double_surrounded_nl_no_trunc()
|
||||
#[test]
|
||||
fn block_test_double_surrounded_nl_double_trunc()
|
||||
{
|
||||
let mut rs = rs!();
|
||||
let buf = vec![0u8, 1u8, 2u8, 3u8, NL, NL, 4u8, 5u8, 6u8, 7u8, 8u8];
|
||||
let res = block(buf, 4);
|
||||
let res = block(buf, 4, &mut rs);
|
||||
|
||||
assert_eq!(res, vec![
|
||||
vec![0u8, 1u8, 2u8, 3u8],
|
||||
vec![SPACE, SPACE, SPACE, SPACE],
|
||||
vec![4u8, 5u8, 6u8, 7u8/*, 8u8*/],
|
||||
]);
|
||||
assert_eq!(rs.records_truncated, 1);
|
||||
}
|
||||
|
||||
make_block_test!(
|
||||
|
||||
@@ -9,8 +9,8 @@ impl<R: Read> Read for LazyReader<R>
|
||||
{
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize>
|
||||
{
|
||||
let half = buf.len() / 2;
|
||||
self.src.read(&mut buf[..half])
|
||||
let reduced = cmp::max(buf.len() / 2, 1);
|
||||
self.src.read(&mut buf[..reduced])
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ macro_rules! make_sync_test (
|
||||
src: $src,
|
||||
non_ascii: false,
|
||||
ibs: $ibs,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: IConvFlags {
|
||||
ctable: None,
|
||||
block: None,
|
||||
|
||||
@@ -9,7 +9,7 @@ macro_rules! make_conv_test (
|
||||
src: $src,
|
||||
non_ascii: false,
|
||||
ibs: 512,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: icf!($ctable),
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
},
|
||||
@@ -34,7 +34,7 @@ macro_rules! make_icf_test (
|
||||
src: $src,
|
||||
non_ascii: false,
|
||||
ibs: 512,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: $icf,
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
},
|
||||
@@ -137,7 +137,7 @@ fn all_valid_ascii_ebcdic_ascii_roundtrip_conv_test()
|
||||
src: File::open("./test-resources/all-valid-ascii-chars-37eff01866ba3f538421b30b7cbefcac.test").unwrap(),
|
||||
non_ascii: false,
|
||||
ibs: 128,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: icf!(Some(&ASCII_TO_EBCDIC)),
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
};
|
||||
@@ -159,7 +159,7 @@ fn all_valid_ascii_ebcdic_ascii_roundtrip_conv_test()
|
||||
src: File::open(&tmp_fname_ae).unwrap(),
|
||||
non_ascii: false,
|
||||
ibs: 256,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: icf!(Some(&EBCDIC_TO_ASCII)),
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
};
|
||||
|
||||
@@ -94,7 +94,7 @@ macro_rules! make_spec_test (
|
||||
src: $src,
|
||||
non_ascii: false,
|
||||
ibs: 512,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: icf!(),
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
},
|
||||
|
||||
@@ -31,7 +31,7 @@ make_spec_test!(
|
||||
src: File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap(),
|
||||
non_ascii: false,
|
||||
ibs: 521,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: icf!(),
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
},
|
||||
@@ -52,7 +52,7 @@ make_spec_test!(
|
||||
src: File::open("./test-resources/random-5828891cb1230748e146f34223bbd3b5.test").unwrap(),
|
||||
non_ascii: false,
|
||||
ibs: 1031,
|
||||
xfer_stats: StatusLevel::None,
|
||||
xfer_stats: None,
|
||||
cflags: icf!(),
|
||||
iflags: DEFAULT_IFLAGS,
|
||||
},
|
||||
|
||||
@@ -297,7 +297,7 @@ fn parse_cbs(matches: &getopts::Matches) -> Result<Option<usize>, ParseError>
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_status_level(matches: &getopts::Matches) -> Result<StatusLevel, ParseError>
|
||||
pub fn parse_status_level(matches: &getopts::Matches) -> Result<Option<StatusLevel>, ParseError>
|
||||
{
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user