On Wed, Nov 1, 2017 at 10:37 PM, Nicholas Clark
<[email protected]> wrote:
>
> Busybox dd expects that read() calls (as provided by safe_read) will
> always return the requested amount of data unless at EOF. This isn't
> true for safe_read(), but it is true for full_read() (which loops
> over safe_read until enough data has been retrieved).
>
> This patch replaces dd's safe_read() calls with full_read() to make
> sure that the underlying assumptions about read-length always hold
> true.

coreutils dd performs short reads:

while sleep 1; do echo -n "."; done | strace -oLOG -s99 -tt dd bs=2

16:23:23.806219 read(0, ".", 2)         = 1
16:23:24.794404 write(1, ".", 1)        = 1
16:23:24.794833 read(0, ".", 2)         = 1
16:23:25.796523 write(1, ".", 1)        = 1
16:23:25.796784 read(0, ".", 2)         = 1
16:23:26.798174 write(1, ".", 1)        = 1
16:23:26.798562 read(0, ".", 2)         = 1
16:23:27.800102 write(1, ".", 1)        = 1
16:23:27.800267 read(0, ".", 2)         = 1
16:23:28.802201 write(1, ".", 1)        = 1
16:23:28.802440 read(0, ".", 2)         = 1
16:23:29.804255 write(1, ".", 1)        = 1
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to