diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2014-05-06 18:38:09 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2014-05-06 18:38:46 -0700 |
commit | 3974c0932df8281f4e0fa34c36c07a9d72f1155d (patch) | |
tree | 11ac3df3d1ed48724732d1cf747ae61d05236c3c /tests/dd | |
parent | 8840a00cd79b8beae72b1a0ec6b9e64912633c13 (diff) | |
download | coreutils-3974c0932df8281f4e0fa34c36c07a9d72f1155d.tar.xz |
dd: fix conv=ascii, conv=ebcdic, conv=ibm to match POSIX
Problem reported by Don Baggett in <http:/bugs.gnu.org/17422>.
* NEWS:
* doc/coreutils.texi (dd invocation): Document this.
* src/dd.c (conversions): conv=ascii implies conv=unblock.
conv=ebcdic and conv=ibm imply conv=block.
(ascii_to_ebcdic, ebcdic_to_ascii): Correct to match
POSIX 1003.1-2013.
* tests/dd/ascii.sh: New file.
* tests/local.mk (all_tests): Add it.
Diffstat (limited to 'tests/dd')
-rwxr-xr-x | tests/dd/ascii.sh | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/dd/ascii.sh b/tests/dd/ascii.sh new file mode 100755 index 000000000..9ef158f78 --- /dev/null +++ b/tests/dd/ascii.sh @@ -0,0 +1,71 @@ +#!/bin/sh +# test conv=ascii + +# Copyright (C) 2014 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=.}/tests/init.sh"; path_prepend_ ./src +print_ver_ dd + +( + # Two lines, EBCDIC " A A" and " A ", followed by all the bytes in order. + printf '\100\301\100\301\100\301\100\100' && + printf $(for i in $(seq 0 255); do printf '\\%03o' $i; done; echo '') +) >in || framework_failure_ + +( + # The converted lines, with trailing spaces removed. + printf ' A A\n A\n' && + printf '\000\001\002\003\n\234\011\206\177\n' && + printf '\227\215\216\013\n\014\015\016\017\n' && + printf '\020\021\022\023\n\235\205\010\207\n' && + printf '\030\031\222\217\n\034\035\036\037\n' && + printf '\200\201\202\203\n\204\012\027\033\n' && + printf '\210\211\212\213\n\214\005\006\007\n' && + printf '\220\221\026\223\n\224\225\226\004\n' && + printf '\230\231\232\233\n\024\025\236\032\n' && + printf '\040\240\241\242\n\243\244\245\246\n' && + printf '\247\250\325\056\n\074\050\053\174\n' && + printf '\046\251\252\253\n\254\255\256\257\n' && + printf '\260\261\041\044\n\052\051\073\176\n' && + printf '\055\057\262\263\n\264\265\266\267\n' && + printf '\270\271\313\054\n\045\137\076\077\n' && + printf '\272\273\274\275\n\276\277\300\301\n' && + printf '\302\140\072\043\n\100\047\075\042\n' && + printf '\303\141\142\143\n\144\145\146\147\n' && + printf '\150\151\304\305\n\306\307\310\311\n' && + printf '\312\152\153\154\n\155\156\157\160\n' && + printf '\161\162\136\314\n\315\316\317\320\n' && + printf '\321\345\163\164\n\165\166\167\170\n' && + printf '\171\172\322\323\n\324\133\326\327\n' && + printf '\330\331\332\333\n\334\335\336\337\n' && + printf '\340\341\342\343\n\344\135\346\347\n' && + printf '\173\101\102\103\n\104\105\106\107\n' && + printf '\110\111\350\351\n\352\353\354\355\n' && + printf '\175\112\113\114\n\115\116\117\120\n' && + printf '\121\122\356\357\n\360\361\362\363\n' && + printf '\134\237\123\124\n\125\126\127\130\n' && + printf '\131\132\364\365\n\366\367\370\371\n' && + printf '\060\061\062\063\n\064\065\066\067\n' && + printf '\070\071\372\373\n\374\375\376\377\n' +) >exp || framework_failure_ + +dd if=in of=out conv=ascii cbs=4 +cp ./in ./out ./exp /tmp + +fail=0 +compare exp out || fail=1 + +Exit $fail |