dd is a thin wrapper around read(2). As open group Issue 7 explains:
It shall read the input one block at a time, using the specified
input block size; it shall then process the block of data
actually returned, which could be smaller than the requested
block size.
Any short read --- for example from a pipe whose capacity cannot fill
a block --- results in that block being truncated. As a result, the
first cat-blob test (9300.114) fails on Mac OS X, where the pipe
capacity is around 8 KiB.
Fix the test by using a block size of 1. Each read will block until
the next byte of input is available.
It would be even nicer to use head -c which expresses the intention
more clearly. Alas, IRIX "head" does not support the -c option.
Reported-by: Brian Gernhardt <brian@gernhardtsoftware.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
read blob_id type size <&3 &&
echo "$blob_id $type $size" >response &&
- dd of=blob bs=$size count=1 <&3 &&
+ dd of=blob bs=1 count=$size <&3 &&
read newline <&3 &&
cat <<EOF &&
EOF
read blob_id type size <&3 &&
- dd of=actual bs=$size count=1 <&3 &&
+ dd of=actual bs=1 count=$size <&3 &&
read newline <&3 &&
echo
echo "cat-blob $to_get" &&
read blob_id type size <&3 &&
- dd of=actual bs=$size count=1 <&3 &&
+ dd of=actual bs=1 count=$size <&3 &&
read newline <&3 &&
echo deleteall