]> git.ipfire.org Git - thirdparty/e2fsprogs.git/commitdiff
tests: try using truncate command before falling back to using dd
authorTheodore Ts'o <tytso@mit.edu>
Thu, 29 Jul 2021 03:56:08 +0000 (23:56 -0400)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 29 Jul 2021 03:56:08 +0000 (23:56 -0400)
On the GNU Hurd, dd seems to be buggy and hangs if seeking beyond 4G.
Fortunately the GNU Hurd does have the truncate command, which does
work correctly.  So try using the truncate command first, and fall
back to using dd only if the truncate command doesn't work.

Signed-off-by: Theodore Ts'o <tytso@mit.edu>
tests/scripts/resize_test

index 3c5e260bf8bcacf0144ce3364ba7ce4cbbc2c46d..fc9d1c246fb3f97b80f09ca23fc2d59a7f8453fc 100755 (executable)
@@ -1,11 +1,13 @@
 #!/bin/sh
 
-# old distros are missing "truncate", emulate it with "dd"
-truncate()
+# old distros are missing "truncate", emulate it with "dd" if necessary
+do_truncate()
 {
        [ "$1" = "-s" ] && size=$2 && shift 2
 
-       dd if=/dev/zero of=$1 bs=1 count=0 seek=$size >> $LOG 2>&1
+       if ! truncate -s $size $1 >> $LOG 2>&1 ; then
+               dd if=/dev/zero of=$1 bs=1 count=0 seek=$size >> $LOG 2>&1
+       fi
 }
 
 resize_test () {
@@ -17,14 +19,14 @@ touch $TMPFILE
 
 # Verify that the $TMP filesystem handles $SIZE_2 sparse files.
 # If that fails, try the local filesystem instead.
-if truncate -s $SIZE_2 $TMPFILE 2> /dev/null; then
+if do_truncate -s $SIZE_2 $TMPFILE 2> /dev/null; then
        echo "using $TMPFILE" >> $LOG
 else
        rm $TMPFILE
        export TMPFILE=$(mktemp ./$test_name.tmp.XXXXXX)
        touch $TMPFILE
        echo "using $TMPFILE" >> $LOG
-       if ! truncate -s $SIZE_2 $TMPFILE >> $LOG 2>&1; then
+       if ! do_truncate -s $SIZE_2 $TMPFILE >> $LOG 2>&1; then
                rm $TMPFILE
                return 111
        fi