Hi, If the dd command fails in a sequence of copying, it always returns EXIT_SUCCESS. So, I can't judge whether the command had succeeded or failed.
Its behavior doesn't conform to POSIX. POSIX 1003.1: http://www.opengroup.org/onlinepubs/009695399/utilities/dd.html | EXIT STATUS | The following exit values shall be returned: | | 0 | The input file was copied successfully. | >0 | An error occurred. For example, copy some data to a small size device repeatly. -------------------------------------------------- (with a root account) # ./busybox dd if=/dev/zero of=/dev/ram dd: writing '/dev/ram': No space left on device 32769+0 records in 32768+0 records out # echo $? 0 <= should be failed!! # ./busybox dd if=/dev/zero of=/dev/ram count=1 1+0 records in 1+0 records out # echo $? 0 # /bin/dd if=/dev/zero of=/dev/ram <= GNU's one dd: writing to `/dev/ram': No space left on device 32769+0 records in 32768+0 records out # echo $? 1 -------------------------------------------------- The old busybox-1.2.2.1 returns EXIT_FAILURE. It is the version that dd had not reconstructed yet. Can you accept the patch below? write_and_stats() is the function which returns a bool value. ---------------------------------------------------------------------- --- coreutils/dd.c.orig 2007-09-03 20:48:39.000000000 +0900 +++ coreutils/dd.c 2007-10-03 10:31:50.000000000 +0900 @@ -106,7 +106,7 @@ #endif }; size_t ibs = 512, obs = 512; - ssize_t n, w; + ssize_t n, w = 0; char *ibuf, *obuf; /* And these are all zeroed at once! */ struct { @@ -303,13 +303,17 @@ tmp += d; oc += d; if (oc == obs) { - if (write_and_stats(ofd, obuf, obs, obs, outfile)) + if (write_and_stats(ofd, obuf, obs, obs, outfile)) { + w = -1; goto out_status; + } oc = 0; } } - } else if (write_and_stats(ofd, ibuf, n, obs, outfile)) + } else if (write_and_stats(ofd, ibuf, n, obs, outfile)) { + w = -1; goto out_status; + } } if (ENABLE_FEATURE_DD_IBS_OBS && oc) { @@ -330,5 +334,5 @@ out_status: dd_output_status(0); - return EXIT_SUCCESS; + return (w >= 0 ? EXIT_SUCCESS : EXIT_FAILURE); } ---------------------------------------------------------------------- Best regards, Kazuo TAKADA _______________________________________________ busybox mailing list [email protected] http://busybox.net/cgi-bin/mailman/listinfo/busybox
