Commit graph

205 commits

Author SHA1 Message Date
Sylvestre Ledru
9c813be5f1
Merge pull request #3076 from jfinkels/dd-seek-truncate
dd: truncate to specified seek length
2022-02-08 11:16:15 +01:00
Jeffrey Finkelstein
c002b16c67 dd: make main loop more concise
Add some helper functions and adjust some error-handling to make the
`Output::dd_out()` method, containing the main loop of the `dd`
program, more concise. This commit also adds documentation and
comments describing the main loop procedure in more detail.
2022-02-07 10:00:49 -05:00
Jeffrey Finkelstein
9f8ec676c5 dd: show warning if skipping past end of input
Show a warning if the `skip=N` command-line argument would cause `dd`
to skip past the end of the input. For example:

    $ printf "abcd" | dd bs=1 skip=5 count=0 status=noxfer
    'standard input': cannot skip to specified offset
    0+0 records in
    0+0 records out
2022-02-06 20:10:42 -05:00
Jeffrey Finkelstein
84d4f24b8c dd: avoid infinite loop in Input::force_fill()
Avoid an infinite loop in `Input::force_fill()` when the input has
fewer bytes than are being requested to be read from the input.
2022-02-06 20:10:41 -05:00
ndd7xv
3842ecb1b4 dd: status=progress rewrites once/sec 2022-02-06 17:56:08 -05:00
Jeffrey Finkelstein
fec662a623 dd: show warning when using 0x size multiplier
Show a warning when a block size includes "0x" since this is
ambiguous: the user may have meant "multiply the next number by zero"
or they may have meant "the following characters should be interpreted
as a hexadecimal number".
2022-02-06 17:13:15 -05:00
Jeffrey Finkelstein
1af709f642 dd: truncate to specified seek length
When specifying `seek=N` and *not* specifying `conv=notrunc`, truncate
the output file to `N` blocks instead of truncating it to zero before
starting to write output. For example

    $ printf "abc" > outfile
    $ printf "123" | dd bs=1 skip=1 seek=1 count=1 status=noxfer of=outfile
    1+0 records in
    1+0 records out
    $ cat outfile
    a2

Fixes #3068.
2022-02-05 16:07:44 -05:00
Jeffrey Finkelstein
3fbaa79359 dd: add support for 'b' and 'x' multipliers
Support the suffix 'b' (multiply by 512) and 'x' (multiply by an
arbitrary amount) when specifying numeric arguments to dd.
2022-02-03 21:56:13 -05:00
Ivan Majeru
19cc63df9a dd: allow multiple instances of arguments
Correct the behavior of `dd` when multiple arguments are provided.
Before this commit, if the multiple arguments was provided then
the validation error are returned.

For example

```
$ printf '' | ./target/debug/dd status=none status=noxfer
error: The argument '--status=<LEVEL>' was provided more than once, but cannot be used multiple times

USAGE:
    dd [OPTIONS]

For more information try --help
```

The unittest was added for this case.
2022-02-01 20:32:56 +02:00
Daniel Eades
41e2197188 squash some repeated match blocks 2022-01-30 18:32:09 +01:00
Daniel Eades
ba45fe312a use 'Self' and derive 'Default' where possible 2022-01-30 15:08:26 +01:00
Daniel Eades
2f85610cc3 remove explicit iter loops 2022-01-30 15:08:26 +01:00
Daniel Eades
784f2e2ea1 use semicolons if nothing returned 2022-01-30 15:08:26 +01:00
Daniel Eades
a2d5f06be4 remove needless pass by value 2022-01-30 15:08:26 +01:00
Terts Diepraam
eb82015b23 all: change macros
- Change the main! proc_macro to a bin! macro_rules macro.
- Reexport uucore_procs from uucore
- Make utils to not import uucore_procs directly
- Remove the `syn` dependency and don't parse proc_macro input (hopefully for faster compile times)
2022-01-29 15:26:32 +01:00
Sylvestre Ledru
24744ca42b
Merge pull request #2911 from jfinkels/dd-seek-stdout
dd: support seek=N when destination is stdout
2022-01-29 10:47:17 +01:00
Terts Diepraam
9c8e865b55 all: enable infer long arguments in clap 2022-01-29 02:06:29 +01:00
Sylvestre Ledru
7f79fef2cd fix various doc warnings 2022-01-29 00:09:09 +01:00
Sylvestre Ledru
5c45911c13
Merge pull request #2915 from jfinkels/dd-status-noxfer
dd: correct behavior when status=noxfer
2022-01-25 23:19:53 +01:00
Jeffrey Finkelstein
e8df666c2e dd: support seek=N when destination is stdout
Add support for the `seek=N` argument when the destination is stdout
and not a file. Previously, the argument was ignored when writing to
stdout.
2022-01-25 12:34:13 -05:00
Jeffrey Finkelstein
80ac2619e4 dd: correct behavior when status=noxfer
Correct the behavior of `dd` with the `status=noxfer` option. Before
this commit, the status output was entirely suppressed (as happens
with `status=none`). This was incorrect behavior. After this commit,
the input/output counts are printed to stderr as expected.

For example,

    $ printf "" | dd status=noxfer
    0+0 records in
    0+0 records out

This commit also updates a unit test that was enforcing the wrong
behavior.
2022-01-23 17:36:14 -05:00
Jeffrey Finkelstein
1c8df122d7 dd: block/unblock on ebcdic/ascii conversions
Update `dd` so that the conversion `conv=ascii` implies `conv=unblock`
and, symmetrically, the conversion `conv=ebcdic` implies `conv=block`.
2022-01-23 09:57:37 -05:00
Terts Diepraam
55a47f6fc0
Merge pull request #2863 from tertsdiepraam/clap-3
Clap 3
2022-01-20 23:14:52 +01:00
Roy Ivy III
2e251f91f1 0.0.12 2022-01-19 05:35:00 -06:00
Terts Diepraam
8872485922 Merge branch 'main' into clap-3 2022-01-17 13:25:51 +01:00
Sylvestre Ledru
1fbda8003c coreutils 0.0.8 => 0.0.9, uucore_procs 0.0.7 => 0.0.8, uucore 0.0.10 => 0.0.11 2022-01-16 17:05:48 +01:00
Terts Diepraam
11bfb5c73f dd: clap 3 2022-01-11 19:16:47 +01:00
jfinkels
3f18b98c9d
dd: return UResult from uumain() function (#2792)
* dd: return UResult from uumain() function

* fixup! dd: return UResult from uumain() function
2021-12-29 15:13:52 +01:00
Roy Ivy III
f07a1749a1 fix spell-check errors 2021-11-19 17:55:02 -06:00
Roy Ivy III
f20aa49821 maint/CICD ~ (GHA) fix cargo-udeps false positives (add 'ignore' exceptions to sub-crates) 2021-11-19 17:55:02 -06:00
Sylvestre Ledru
59e9870c56 Prepare version 0.0.8 2021-10-23 19:21:50 +02:00
Jeffrey Finkelstein
548a5121ae dd: use assert! instead of if then panic! 2021-10-02 10:15:15 -04:00
Sylvestre Ledru
7eaae75bfc add a github action job to identify unused deps 2021-09-15 12:06:50 +02:00
Jan Verbeek
acfd1ebe57 fixup! Run clippy on the full workspace 2021-08-24 17:28:10 +02:00
Jan Verbeek
d06c074829 Run clippy on the full workspace
These lints were cluttering up the "problems" tab in my VS
Code. `--workspace` fixes the disparity.
2021-08-24 17:10:16 +02:00
Sylvestre Ledru
114c9a409c
Merge pull request #2471 from miDeb/real-exe-name
make executable!() return the real executable name
2021-08-22 16:55:06 +02:00
Tyler
20c63caa0c Merge branch 'master' of github.com:backwaterred/coreutils into dedup-dd-mideb 2021-08-18 17:11:58 -07:00
Tyler
6f6f6251e9 dd: apply @miDeb patch to address issue #2572 2021-08-18 17:08:01 -07:00
Michael Debertol
252220e9eb refactor/uucore ~ make util_name and execution_phrase functions
Since util_name and execution_phrase no longer rely on features that are
only available to macros, they may as well be plain functions.
2021-08-14 17:55:18 +02:00
Michael Debertol
813b477859 fix ~ fixes for newly added utilities 2021-08-14 14:10:35 +02:00
Jeremy Soller
27f53aa0df
dd: only require signal-hook on linux 2021-08-06 13:56:20 -06:00
Tyler
0864234e3d Removes unused macros from windows & macos builds 2021-08-04 12:47:03 -07:00
Tyler
7ed7c840bd Fix clippy warnings and build issues. Defer NL to seperate issue. 2021-08-03 17:18:34 -07:00
Tyler
e1fcc85b0a Merge branch 'master' of github.com:backwaterred/coreutils 2021-08-03 16:39:17 -07:00
Sylvestre Ledru
e780fba2e5
fix a clippy warning 2021-07-31 10:27:51 +02:00
Tyler
0cb5cff697 Build blockers
- cSpell valiantly vanquished
- fmt issues addressed
2021-07-28 14:29:07 -07:00
Tyler
2ab238a0f1 Attempts to fix remaining checks.
- Adds more jargon to the spellchecker jargon file.
- Adds more ignores to the per-project ignores.
- Fixes clippy warnigns about uneeded clones on non-linux.
- Block/Unblock now account for system dependend newlines.
2021-07-26 17:43:49 -07:00
Tyler
d1907edd65 Adds additional words to exclude list. Improves documentation in dd.rs. 2021-07-24 16:38:08 -07:00
Tyler
86245ec754 Adds spell checker ignores to remaining project files. 2021-07-24 15:03:17 -07:00
Tyler
076ff32e85 Removes project-specific cspell files. 2021-07-23 14:53:24 -07:00
Tyler
885a875552 Addresses build errors
- Adds words to cspell exceptions
- Converts test macros to use Default trait.
- Converts parser to use Default trait.
- Adds Windows-friendly test files for block/unblock when nl is present
  in test/spec file.
2021-07-22 16:04:35 -07:00
Tyler
989849eca7 Ignores linux-only tests on non-linux platforms. 2021-07-21 18:24:31 -07:00
Tyler
9d9267e08b Addresses code-quality issues from testsdiepraam and miDeb.
- Removes dd from feat_require_unix (keeps it in feat_common_core)
- Changes name of make_linux_iflags parameter from oflags to iflags.
- Removes roughed out SIGINFO impl.
- Renames plen -> target_len.
- Removes internal fn def for build_blocks and replaces with a call to
  chunks from std.
- Renames apply_ct to the more descriptive apply_conversion
- Replaces manual swap steps in perform_swab with call to swap from std.
- Replaces manual solution with chunks where appropriate (in Read, and Write impl).
- Renames xfer -> transfer (in local variable names).
- Improves documentation for dd_filout/dd_stdout issue.
- Removes commented debug_assert statements.
- Modifies ProdUpdate to contain ReadStat and WriteStat rather than
  copying their fields.
- Addresses verbose return in `Output<File>::new(...)`
- Resoves compiler warning when built as release when signal handler fails to
  register.
- Derives _Default_ trait on ReadStat.
- Adds comments for truncated lines in block unblock tests
- Removes `as u8` in block unblock tests.
- Removes unecessary `#[inline]`
- Delegates multiplier string parsing to uucore::parse_size.
- Renames 'unfailed' -> 'succeeded' for clairity.
- Removes #dead_code warnings. No clippy warnings on my local machine.
- Reworks signal handler to better accomodate platform-specific signals.
- Removes explicit references to "if" and "of" in dd.rs.
- Removes explicit references to "bs", "ibs", "cbs" and "status" in
  parseargs.rs.
- Removes `#[allow(deadcode)]` for OFlags, and IFlags.
- Removes spellchecker ignore from all dd files.
- Adds tests for 'traditional' and 'modern' CLI.
2021-07-21 17:25:10 -07:00
Tyler
94e0145d51 fixes more minor issues 2021-07-12 12:54:39 -07:00
Tyler
bb0d70965d Commits changed Cargo.toml in dd 2021-07-12 10:36:38 -07:00
Tyler
88363858d5 Minor changes. 2021-07-12 10:13:47 -07:00
Tyler
47806ddd39 build issues
- Address Rust fmt issue
- ignores run-without-noatime test which fails on some build machines
- adds cspell:disable to all project files.
- adds .../dd/fixtures/cspell.json to ignore test fixtures.
2021-07-08 11:10:48 -07:00
Tyler
4f7dda4be9 Completes final? issues barring PR
- Adds cspell.json. Hopefully this will make you happy, spellchecker.
- Removes non-functional spellchecker-ignore tags
- Adds a sleep call to the no noatime test. Some systems were did not notice a changed
  atime without the option present.
- Adds a test with a unicode filename.
- Addresses clippy lints and rustfmt issues.
2021-07-07 17:34:31 -07:00
Tyler
74e0071cfe fixes conv=nocreat test failure 2021-07-06 17:47:26 -07:00
Tyler
d2cebad931 addresses a few more issues from PR#2474
- adds project header to multiple files
- updates spell check skip words
- removes linux only flags direct,noatime from mac_os build
- applies rustfmt to test_dd
2021-07-06 15:35:48 -07:00
Tyler
09acfce995 Merge branch 'master' of github.com:backwaterred/coreutils 2021-07-06 11:55:25 -07:00
Tyler
1ad89c5e89 Addresses issues raised in PR#2474
- runs rustfmt on test_dd.rs
- eliminates compiler warnings
- adds many words to spellchecker ignore list
- adds sanity test for vexing conv=nocreat issue. Still WIP.
2021-07-06 11:52:48 -07:00
backwaterred
0b981d9dc3
Update src/uu/dd/src/datastructures.rs
Adds project header to conversion_tables.rs

Co-authored-by: Sylvestre Ledru <sledru@mozilla.com>
2021-07-05 11:34:22 -07:00
Tyler
418ecbe61a Makes multiplier parsing system dependant
- multipler is now created as u128, then returned as usize after
  conversion. Errors due to overflow now depend on the system on which
the code is run.
2021-07-05 11:27:17 -07:00
Tyler
860cbc6311 Removes or ignores all compiler warnings 2021-07-02 15:30:46 -07:00
Tyler
8e862b86dd More minor cleanup.
- Runs rustfmt.
- Speel check help-text
2021-07-02 14:24:01 -07:00
Tyler
7f03ecf74b Adds failures & tests for unimplmented flags. 2021-07-02 13:17:34 -07:00
Tyler
5b030b4855 Minor cleanup
- Removes compiler warnings.
- Renames conv=nocreat test to be more descriptive.
2021-07-02 11:50:33 -07:00
Tyler
951d9c0822 Completes transition to clap
- fixes build issues in parser tests.
2021-07-02 11:31:06 -07:00
Tyler
8334d9f574 Build changes after merge with uutils main 2021-07-02 10:53:15 -07:00
Tyler
92281585a7 Merge branch 'master' of https://github.com/uutils/coreutils into uutils-master 2021-07-01 14:33:30 -07:00
Tyler
17cfba41cc Implements project testfing from root.
- conv=FLAG testing. (1) WIP conv=nocreat
- iflag & oflag testing.
- conv=CONV ascii,...,ucase,...,block,...sync tests at unit-test-level
  (project root is todo)
2021-06-30 14:47:48 -07:00
Tyler
47464f50a1 Begin project level testing. Minor fixes. 2021-06-21 11:17:47 -07:00
Tyler
22265814ba Cleans up compiler warnings. 2021-06-17 14:49:08 -07:00
Tyler
d14b5843a3 Implements libc file open flags (unix only) 2021-06-17 14:33:30 -07:00
Tyler
19996c10a9 Removes 'fast read' plumbing.
- The dd info page mentions a special fast-read framework if no conv=FLAG is
  specified (see bs=N) which I left space for. As it turns out, this is performed already
  so it does not need to be implemented.
2021-06-16 12:59:43 -07:00
Tyler
06dcdc0f1f Implements status=LEVEL parser. 2021-06-15 12:19:18 -07:00
Tyler
8141919064 Implements count=N
- Adds tests for count=READS and count=BYTES.
- Implements count logic for read count and bytes count limits.
2021-06-15 11:06:36 -07:00
Tyler
fc110bb656 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)
2021-06-11 17:00:25 -07:00
Tyler
a511db504b Minor optimization in calculation of lcm for internal r/w buffer. 2021-06-08 14:33:48 -07:00
Tyler
96fd665ce1 Implements internal read/write buffer optimization
- Spoiler Alert: Turns out it was just the lcm.
2021-06-08 14:14:19 -07:00
Tyler
ef6c850833 Adds additional conv=sync test for short reads. 2021-06-08 12:37:03 -07:00
Tyler
841faebdac Impl conv=sync
- Adds tests where ibs causes extention
- Impl conv=sync. All tests passing.
2021-06-07 16:13:46 -07:00
Tyler
f7eaf96eda Fixes bugs. Prepares for conv=sync
- Splits read fn into conv=sync and standard (consecutive)
  versions.
- Fixes bug in previous read/fill where short reads would copy to wrong
  position in output buffer.
- Fixes bug in unit tests. Empty source would pass (since no bytes
  failed to match).
2021-06-04 11:29:41 -07:00
Tyler
787b9696cb Implements Unblock
- Adds unit tests
- Implements unblock
- All tests passing
2021-06-02 15:11:14 -07:00
Tyler
7bc151d561 Project structure refactor (cont'd)
- Move test macros to specific modules.
2021-06-01 13:02:02 -07:00
Tyler
ead3c8c8fc Project structure refactor.
- Unit tests split into individual folders
- Parseargs test module renamed unit_tests to match new structure
2021-06-01 12:53:23 -07:00
Tyler
391a175dbb Fix regression in converison logic. 2021-06-01 12:34:15 -07:00
Tyler
48374ab0a2 Imlements block. All tests passing. 2021-06-01 11:39:18 -07:00
Tyler
f2fa1e1be1 Adds additional test resources & unit tests for block. 2021-05-29 15:22:42 -07:00
Tyler
d0b4fe34c1 Refactor. Returns code to buildable
- Pushes file/stdout specific logic to trait objects.
- Extracts read/write helper
- Extracts conv/block/unblock helper
- Impl block
- WIP: Many failing tests!
2021-05-27 15:55:29 -07:00
Tyler
d97672dfd3 Continues impl
- Completes impl of skip=N, and seek=N
- Parses cbs=N
2021-04-27 12:21:35 -07:00
Tyler
4d7be2f098 Implements functionality for seeking output files
- Adds duplicate dd fn :-( for differentiating between File backed and
  non-File outputs.
- Implements cflag=sparse,fsync,fdatasync which were previously blocked.
- Adds plumbing for IFlags & OFlags incl parsing.
- Partial impl for seek=N and skip=N which were previously blocked.
2021-04-26 15:17:48 -07:00
Tyler
3c3af72d9a Implements noerror (ignores read errors) 2021-04-22 14:14:32 -07:00
Tyler
beb7abcff0 Implements swab. Adds odd & even tests. 2021-04-22 13:19:51 -07:00
Tyler
5aabdf854d Adds plumbing for conv=sparse. Not impl.
- conv=sparse option requires knowledge of File/Stdout to change
  behaviour.
- Unclear how best to impl this.
- Possible option: develop 4 versions of dd<X,Y> for each valid pair of { File, Stdin,
  Stdout }.
2021-04-22 10:56:33 -07:00
Tyler
b461f102cc Testt conv arg parsing. 2021-04-21 15:24:14 -07:00
Tyler
7f7dd2ad4e Improves multiplier tests 2021-04-08 19:14:26 -07:00
Tyler
9e933a3860 Completes refactor & clean-up. Implements full conv flag parsing.
- All conv flags now parsed (full functionality is TODO)
- Changes functionality of eg. conv=ebcdic,ucase to match gnudd
2021-04-08 19:07:52 -07:00
Tyler
5c8c7efe68 Starts arg parsing. Cleans & refactors.
- Moves all arg parsing & tests to parseargs.rs
- Moves conversion tables to conversion_tables.rs
- Adds ebcdic_lcase and _ucase tables
- Refactors options: This **Breaks Write for Output**
2021-04-06 20:44:37 -07:00
Tyler
4996308753 Builds out arg parsing. Adds support for if, of, & multiplier strings)
- Adds support for calling dd fn from cl
- Adds basic cl tests from project root
- Adds support for multiplier strings (c, w, b, kB, KB, KiB, ... EB, E,
  EiB.
2021-04-03 12:59:03 -07:00
Tyler
0df457596c Implements conversions:- ascii, ebcdic, ibm, lcase, ucase- adds (simple) tests for conversions 2021-03-25 18:32:47 -07:00
ty
d6086fc649 Adds impl & tests
- implements basic copy & progress functionality
- rough work for conversion tables
- adds sanity tests (mt, zeros, ones, deadbeef & rand)
2021-03-18 14:38:08 -07:00
ty
28e6d0d385 Develop prototype code
- Move code closer to real impl
- Remove Makefile from repo
2021-03-16 19:39:22 -07:00
ty
af6bf3a224 Begins work on dd
- Prototype code.
- Adds project boilerplate for integration with coreutils framework.
2021-03-16 14:32:55 -07:00