[Toybox] [PATCH] dd: iflags, oflags, fix ^C.
enh
enh at google.com
Fri Feb 22 21:07:41 PST 2019
Also switch to TAGGED_ARRAY and comma_* for conv rather than add two
more copies of an undesired idiom. It turned out -- contrary to the
belief of cp(1) -- that comma_scan isn't suitable for this because of its
magic handling of "no" prefixes. (It's actually harmless in cp because
none of the --preserve options begin with "no", but some dd options do.)
To this end, comma_remove is a less-magic comma_scan.
I've also changed an `if` to a `while` because other implementations
allow things like `--preserve=mode,mode` or `conv=sync,sync`. (If we
decide this is a bug rather than a feature, we should at least fix the
error message to be clear that we're rejecting the *duplication*, not
the option itself.)
I've also fixed the ^C behavior by simply adding a direct SIGINT handler
rather than trying to be clever inside the read loop (which is why we
weren't handling the SIGINT until the read returned).
I've also removed `strstarteq` and just added the '=' to each literal
when calling regular `strstart`.
Plus basic tests.
(This came up because after suggesting to the author of
https://stackoverflow.com/questions/17157820/access-vdsolinux/54797221#54797221
that he could tell dd to work in bytes rather than blocks, I realized
that our dd doesn't actually support that.)
---
lib/commas.c | 22 ++++++-
lib/lib.h | 1 +
tests/cp.test | 3 +
tests/dd.test | 12 ++++
toys/pending/dd.c | 152 +++++++++++++++++++++++++++++-----------------
toys/posix/cp.c | 4 +-
6 files changed, 135 insertions(+), 59 deletions(-)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-dd-iflags-oflags-fix-C.patch
Type: text/x-patch
Size: 15409 bytes
Desc: not available
URL: <http://lists.landley.net/pipermail/toybox-landley.net/attachments/20190222/94c8373c/attachment-0002.bin>
More information about the Toybox
mailing list