aboutsummaryrefslogtreecommitdiff
path: root/coreutils/dd.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2018-01-10 10:58:55 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2018-01-10 10:58:55 +0100
commit5afd63a631f49112ac305ea1532dd226e9c39d12 (patch)
treea784d6c135a15acc44dad94539820fae054e51d9 /coreutils/dd.c
parentd1df1a709f05a737d2477a08eea8c743e83f8f8f (diff)
downloadbusybox-5afd63a631f49112ac305ea1532dd226e9c39d12.tar.gz
dd: exit with 1 if last write was incomplete
$ busybox dd if=/dev/zero of=/dev/loop0 bs=100M count=8; echo $? 8+0 records in 7+1 records out 805220352 bytes (767.9MB) copied, 0.464010 seconds, 1.6GB/s 1 <=========== FIXED function old new delta write_and_stats 96 97 +1 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'coreutils/dd.c')
-rw-r--r--coreutils/dd.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/coreutils/dd.c b/coreutils/dd.c
index d302f35d3..9d173cc13 100644
--- a/coreutils/dd.c
+++ b/coreutils/dd.c
@@ -195,14 +195,16 @@ static bool write_and_stats(const void *buf, size_t len, size_t obs,
ssize_t n = full_write_or_warn(buf, len, filename);
if (n < 0)
return 1;
- if ((size_t)n == obs)
- G.out_full++;
- else if (n) /* > 0 */
- G.out_part++;
#if ENABLE_FEATURE_DD_THIRD_STATUS_LINE
G.total_bytes += n;
#endif
- return 0;
+ if ((size_t)n == obs) {
+ G.out_full++;
+ return 0;
+ }
+ if (n) /* > 0 */
+ G.out_part++;
+ return 1;
}
#if ENABLE_LFS