1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-19 18:26:32 +02:00
Files
coreutils/tests/misc/cat-E.sh
Pádraig Brady a574283c7a cat: with -E fix handling of \r\n spanning buffers
We must delay handling when \r is the last character
of the buffer being processed, as the next character
may or may not be \n.

* src/cat.c (pending_cr): A new global to record whether
the last character processed (in -E mode) is '\r'.
(cat): Honor pending_cr when processing the start of the buffer.
(main): Honor pending_cr if no more files to process.
* tests/misc/cat-E.sh: Add test cases.
Fixes https://bugs.gnu.org/49925
2021-08-08 00:09:38 +01:00

43 lines
1.6 KiB
Bash
Executable File

#!/bin/sh
# Copyright (C) 2021 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 <https://www.gnu.org/licenses/>.
. "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
print_ver_ cat
# \r followed by \n is displayed as ^M$
# Up to and including 8.32 the $ would have displayed at the start of the line
# overwriting the first character
printf 'a\rb\r\nc\n\r\nd\r' > 'in' || framework_failure_
printf 'a\rb^M$\nc$\n^M$\nd\r' > 'exp' || framework_failure_
cat -E 'in' > out || fail=1
compare exp out || fail=1
# Ensure \r\n spanning files (or buffers) is handled
printf '1\r' > in2 || framework_failure_
printf '\n2\r\n' > in2b || framework_failure_
printf '1^M$\n2^M$\n' > 'exp' || framework_failure_
cat -E 'in2' 'in2b' > out || fail=1
compare exp out || fail=1
# Ensure \r at end of buffer is handled
printf '1\r' > in2 || framework_failure_
printf '2\r\n' > in2b || framework_failure_
printf '1\r2^M$\n' > 'exp' || framework_failure_
cat -E 'in2' 'in2b' > out || fail=1
compare exp out || fail=1
Exit $fail