aboutsummaryrefslogtreecommitdiff
path: root/toys/pending/dd.c
AgeCommit message (Collapse)Author
2021-02-23dd: simplify signal handling and fix status output.Elliott Hughes
Other dd implementations always show the status on exit, whether success or failure. Fix that by using xsigatexit() (and clarify the comment for that function a little, since it didn't previously address the "at exit" part of its behavior at all). This also fixes SIGUSR1 behavior so that we show the status immediately rather than on the next trip round the read/write loop. Tested with `dd of=/dev/full`, sending SIGUSR1 twice from another shell (to see the status immediately each time, without exiting), then hitting ^C (to see the status and then exiting), then restarting dd and hitting enter (to see a write error followed by the status before exiting). Bug: https://issuetracker.google.com/177017283
2020-09-23Only attempt to truncate regular files in dd.Rob Landley
2020-09-23Add ftruncate logic to handle non-regular filesChris Sarra
ftruncate was failing on device files, leading to whole dd.c failures. This patch allows us to dump device files.
2020-05-28remove unneeded ; after GLOBALSEthan Sommer
2019-08-15dd: fix skip= with short reads.Elliott Hughes
Subtract the amount we actually read, not what we asked for.
2019-07-10dd: iflags, oflags, fix ^C, fix the fundamental loop.Elliott Hughes
Investigating why the toybox tar tests fail on Android with toybox dd, I realized I was rewriting a part of dd I'd rewritten before! This is a re-send of my 2019-02-22 patch, rebased against the current ToT... This patch was originally motivated 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. But the rewrite of the main loop is necessary to fix the incorrect output from the dd calls in the tar test. Without this patch, `yes | dd bs=65536 count=1 > fweep` basically gives random output, based on how many bytes the pipe feels like giving you in your first read. (As far as I know, dd *without* bs= was fine, but I can't guarantee that that's true, just that I haven't seen it fail.) 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.
2019-07-09dd: fix seek= on stdout.Elliott Hughes
2018-10-20Some more --help consistency.Elliott Hughes
From eyeballing the output of for i in `./toybox | tr " " "\n"` ; do ./toybox $i --help ; done | \ grep '^-' | grep -v "\t"
2017-07-09dd cleanup: binary search is overkill, eliminate struct pair,Rob Landley
simplify strstarteq, use local variable "conv" instead of toys.optargs.
2017-07-07Make dd use atolx_range(), and teach atolx_range() about "w" suffix (word, *2).Rob Landley
2016-08-21A round of dd cleanup.Rob Landley
2016-08-06Inline setup_inout(), test ftruncate() return value, move gettimeofday() beforeRob Landley
seek so seek time is included in total.
2016-08-04Make xopen() skip stdin/stdout/stderr, add xopen_stdio() if you want stdout,Rob Landley
add xopenro() that takes one argument and understands "-" means stdin, and switch over lots of users.
2016-07-08dd improvements.Elliott Hughes
Support hex (requested by users). Support status=noxfer and status=none (requested by users). Fix status output. Clarify large numbers in --help output. Use O_TRUNC rather than ftruncate unless we're also seeking. New tests. Also partial cleanup (reuse of existing code, removal of non-GLOBALS globals, and merge dd_main and do_dd).
2015-09-11Replace toys.exithelp with help_exit() in lib.Rob Landley
2015-08-08Different tools have different ideas about what human-readable outputElliott Hughes
looks like. dd uses "7 MB" where du uses "7M", for example. this patch adds flags, similar to the BSD humanize_number. most callers will pass 0.
2015-03-23add missing space in dd outputElliott Hughes
Also, coreutils says "s" instead of "seconds". POSIX specifies the format of the previous two lines, but doesn't even mention this line.
2014-05-06Switch human_readable() to just outputing decimal kilo/mega/gigabytes, make ↵Rob Landley
du use it, move it from lib/pending.c to lib.c.
2013-11-10du from Ashwini Sharma.Rob Landley