dd: minor fullblock changes
[platform/upstream/coreutils.git] / tests / dd / misc
1 #!/bin/sh
2 # Ensure dd treats `--' properly.
3 # Also test some flag values.
4
5 # Copyright (C) 1999, 2004-2008 Free Software Foundation, Inc.
6
7 # This program is free software: you can redistribute it and/or modify
8 # it under the terms of the GNU General Public License as published by
9 # the Free Software Foundation, either version 3 of the License, or
10 # (at your option) any later version.
11
12 # This program is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 # GNU General Public License for more details.
16
17 # You should have received a copy of the GNU General Public License
18 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
20 if test "$VERBOSE" = yes; then
21   set -x
22   dd --version
23 fi
24
25 . $srcdir/test-lib.sh
26
27 tmp_in=dd-in.$$
28 tmp_in2=dd-in2.$$
29 tmp_sym=dd-sym.$$
30 tmp_out=dd-out.$$
31
32 fail=0
33 warn=0
34 echo data > $tmp_in || framework_failure
35 ln $tmp_in $tmp_in2 || framework_failure
36 ln -s $tmp_in $tmp_sym || framework_failure
37
38 dd if=$tmp_in of=$tmp_out 2> /dev/null || fail=1
39 compare $tmp_in $tmp_out || fail=1
40
41 rm $tmp_out
42 dd -- if=$tmp_in of=$tmp_out 2> /dev/null || fail=1
43 compare $tmp_in $tmp_out || fail=1
44
45 if dd oflag=append if=$tmp_in of=$tmp_out 2> /dev/null; then
46   compare $tmp_in $tmp_out || fail=1
47 fi
48
49 case $(cat /dev/stdin <$tmp_in 2>/dev/null) in
50 (data)
51   rm -f $tmp_out
52   dd if=/dev/stdin of=$tmp_out <$tmp_in || fail=1
53   compare $tmp_in $tmp_out || fail=1
54 esac
55
56 if dd iflag=nofollow if=$tmp_in count=0 2> /dev/null; then
57   dd iflag=nofollow if=$tmp_sym count=0 2> /dev/null && fail=1
58 fi
59
60 if dd iflag=directory if=. count=0 2> /dev/null; then
61   dd iflag=directory count=0 <. 2> /dev/null || fail=1
62   dd iflag=directory count=0 <$tmp_in 2> /dev/null && fail=1
63 fi
64
65 old_ls=`ls -u --full-time $tmp_in`
66 sleep 1
67 if dd iflag=noatime if=$tmp_in of=$tmp_out 2> /dev/null; then
68   new_ls=`ls -u --full-time $tmp_in`
69   if test "x$old_ls" != "x$new_ls"; then
70     cat >&2 <<EOF
71 =================================================================
72 $0: WARNING!!!
73 This operating system has the O_NOATIME file status flag,
74 but it is silently ignored in some cases.
75 Therefore, dd options like iflag=noatime may be silently ignored.
76 =================================================================
77 EOF
78     warn=77
79   fi
80 fi
81
82 if dd oflag=nolinks if=$tmp_in of=$tmp_out 2> /dev/null; then
83   dd iflag=nolinks if=$tmp_in > /dev/null 2>&1 && fail=1
84   dd iflag=nolinks < $tmp_in > /dev/null 2>&1 && fail=1
85   dd oflag=nolinks < $tmp_in > $tmp_out 2>&1 || fail=1
86 fi
87
88 outbytes=`echo x | dd bs=3 ibs=10 obs=10 conv=sync 2>/dev/null | wc -c`
89 test "$outbytes" -eq 3 || fail=1
90
91 (echo a; sleep .1; echo b) \
92   | LC_ALL=C dd bs=4 status=noxfer iflag=fullblock >out 2>err || fail=1
93 printf 'a\nb\n' > out_ok || framework_failure
94 echo "1+0 records in
95 1+0 records out" > err_ok || framework_failure
96 compare out_ok out || fail=1
97 compare err_ok err || fail=1
98
99 test $fail -eq 0 && fail=$warn
100
101 (exit $fail); exit $fail