diff options
author | Jérémy Compostella <jeremy.compostella@gmail.com> | 2012-02-04 15:25:54 +0100 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2012-02-12 17:34:28 +0000 |
commit | 140eca15c4a3d3213629a048cc307fde0d094738 (patch) | |
tree | 941ed670b65b4b85d4a629a7d43da3c1acca1363 /tests | |
parent | da2b32e7af52f41501ded604dd84c1078583a8d0 (diff) | |
download | coreutils-140eca15c4a3d3213629a048cc307fde0d094738.tar.xz |
dd: add count_bytes, skip_bytes and seek_bytes flags
dd now accepts the count_bytes and skip_bytes input flag and the
seek_bytes output flag, to more easily allow processing portions of a
file.
* src/dd.c (scanargs): Compute skip_records and skip_bytes when
'skip_bytes' iflag is used. Compute max_records and max_bytes when
'count_bytes' iflag is used. Compute seek_records and seek_bytes
when 'seek_bytes' oflag is used.
(skip_via_lseek): Use new 'bytes' parameter and handle potential
'records' equals to zero. Update the bytes parameter when called with
'fdesc' equal to STDOUT_FILENO. Update the header comments.
(dd_copy): Skip accordingly to skip_records AND skip_bytes. Count
accordingly to max_records AND max_bytes. Seek on output accordingly
to seek_records AND seek_bytes.
* NEWS (New features): Mention it.
* doc/coreutils.texi (dd invocation): Detail new flags and behaviors.
* tests/dd/bytes: New file. Tests for these new flags.
* tests/Makefile.am (TESTS): Add it.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rwxr-xr-x | tests/dd/bytes | 57 |
2 files changed, 58 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index c951f69a1..7b5368195 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -369,6 +369,7 @@ TESTS = \ dd/reblock \ dd/skip-seek \ dd/skip-seek2 \ + dd/bytes \ dd/skip-seek-past-file \ dd/stderr \ dd/unblock \ diff --git a/tests/dd/bytes b/tests/dd/bytes new file mode 100755 index 000000000..603874290 --- /dev/null +++ b/tests/dd/bytes @@ -0,0 +1,57 @@ +#!/bin/sh + +# Copyright (C) 2012 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 <http://www.gnu.org/licenses/>. + +. "${srcdir=.}/init.sh"; path_prepend_ ../src +print_ver_ dd + +# count_bytes +echo 0123456789abcdefghijklm > in || framework_failure_ +dd count=14 conv=swab iflag=count_bytes < in > out 2> /dev/null || fail=1 +case `cat out` in + 1032547698badc) ;; + *) fail=1 ;; +esac + +# skip_bytes +echo 0123456789abcdefghijklm > in || framework_failure_ +dd skip=10 iflag=skip_bytes < in > out 2> /dev/null || fail=1 +case `cat out` in + abcdefghijklm) ;; + *) fail=1 ;; +esac + +# skip records and bytes from pipe +echo 0123456789abcdefghijklm | + dd skip=10 bs=2 iflag=skip_bytes > out 2> /dev/null || fail=1 +case `cat out` in + abcdefghijklm) ;; + *) fail=1 ;; +esac + +# seek bytes +echo abcdefghijklm | + dd bs=5 seek=8 oflag=seek_bytes > out 2> /dev/null || fail=1 +echo abcdefghijklm | + dd bs=4 seek=2 > expected 2> /dev/null || fail=1 +compare expected out || fail=1 + +# seek bytes on empty file +echo abcdefghijklm | + dd bs=5 seek=8 oflag=seek_bytes > out2 2> /dev/null || fail=1 +compare expected out2 || fail=1 + +Exit $fail |