[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