#!/bin/sh # test diagnostics are printed when seeking too far in seekable files. # Copyright (C) 2008 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . if test "$VERBOSE" = yes; then set -x dd --version fi . $srcdir/test-lib.sh eval $(getlimits) #for OFF_T limits fail=0 printf "1234" > file || framework_failure echo "\ dd: \`standard input': cannot skip to specified offset 0+0 records in 0+0 records out" > skip_err || framework_failure # skipping beyond number of blocks in file should issue a warning dd bs=1 skip=5 count=0 status=noxfer < file 2> err || fail=1 compare skip_err err || fail=1 # skipping beyond number of bytes in file should issue a warning dd bs=3 skip=2 count=0 status=noxfer < file 2> err || fail=1 compare skip_err err || fail=1 # skipping beyond number of blocks in pipe should issue a warning cat file | dd bs=1 skip=5 count=0 status=noxfer 2> err || fail=1 compare skip_err err || fail=1 # skipping beyond number of bytes in pipe should issue a warning cat file | dd bs=3 skip=2 count=0 status=noxfer 2> err || fail=1 compare skip_err err || fail=1 # Check seeking beyond file already offset into # skipping beyond number of blocks in file should issue a warning (dd bs=1 skip=1 count=0 2>/dev/null && dd bs=1 skip=4 status=noxfer 2> err) < file || fail=1 compare skip_err err || fail=1 # Check seeking beyond file already offset into # skipping beyond number of bytes in file should issue a warning (dd bs=1 skip=1 count=0 2>/dev/null && dd bs=2 skip=2 status=noxfer 2> err) < file || fail=1 compare skip_err err || fail=1 # seeking beyond end of file is OK dd bs=1 seek=5 count=0 status=noxfer > file 2> err || fail=1 echo "0+0 records in 0+0 records out" > err_ok || framework_failure compare err_ok err || fail=1 # skipping > OFF_T_MAX should fail immediately dd bs=1 skip=$OFF_T_OFLOW count=0 status=noxfer < file 2> err && fail=1 echo "dd: \`standard input': cannot skip: Value too large for defined data type 0+0 records in 0+0 records out" > err_ok || framework_failure compare err_ok err || fail=1 # skipping > max file size should fail immediately # Note I'm guessing there is a small chance that an lseek() could actually work # and only a write() would fail (with EFBIG) when offset > max file size. # So this test will both test for that, and ensure that dd # exits immediately with an appropriate error when lseek() does error. if ! truncate --size=$OFF_T_MAX in 2>/dev/null; then # truncate is to ensure file system doesn't actually support OFF_T_MAX files dd bs=1 skip=$OFF_T_MAX count=0 status=noxfer < file 2> err && fail=1 echo "dd: \`standard input': cannot skip: Invalid argument 0+0 records in 0+0 records out" > err_ok || framework_failure compare err_ok err || fail=1 fi Exit $fail