]> git.ipfire.org Git - thirdparty/coreutils.git/commitdiff
tests: consolidate csplit-io-err tests
authoroech3 <79379754+oech3@users.noreply.github.com>
Sat, 27 Dec 2025 12:45:31 +0000 (12:45 +0000)
committerPádraig Brady <P@draigBrady.com>
Sat, 27 Dec 2025 12:48:57 +0000 (12:48 +0000)
* tests/csplit/csplit-io-err.sh: Replace this LD_PRELOAD test with...
* tests/csplit/csplit-io-err-2.sh: This more general test,
that leverages /dev/full.
* tests/local.mk: Remove tests/csplit/csplit-io-err-2.sh.

tests/csplit/csplit-io-err-2.sh [deleted file]
tests/csplit/csplit-io-err.sh
tests/local.mk

diff --git a/tests/csplit/csplit-io-err-2.sh b/tests/csplit/csplit-io-err-2.sh
deleted file mode 100755 (executable)
index 358d937..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-#!/bin/sh
-# Ensure we handle i/o errors correctly in csplit via /dev/full
-
-# Copyright (C) 2025 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_ csplit
-
-cp -sf /dev/full xx01 || skip_ '/dev/full is required'
-
-# Get the wording of the OS-dependent ENOSPC message
-returns_ 1 seq 1 >/dev/full 2>msgt || framework_failure_
-sed 's/seq: write error: //' msgt > msg || framework_failure_
-
-# Create the expected error message
-{ printf "%s" "csplit: xx01: " ; cat msg ; } > exp || framework_failure_
-
-# the 'csplit' command should fail with exit code 1
-seq 2 | returns_ 1 csplit - 1 2> err || fail=1
-# csplit should cleanup broken files
-test -e xx01 && fail=1
-
-# Ensure we got the expected error message
-compare exp err || fail=1
-
-Exit $fail
index 2cb06efd12de875a73a3e8a8e9b957682cf8e8a8..358d937ce836c6d35dda3105da6f07322e810e7a 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/sh
-# Ensure we handle i/o errors correctly in csplit
+# Ensure we handle i/o errors correctly in csplit via /dev/full
 
-# Copyright (C) 2015-2025 Free Software Foundation, Inc.
+# Copyright (C) 2025 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
 
 . "${srcdir=.}/tests/init.sh"; path_prepend_ ./src
 print_ver_ csplit
-require_gcc_shared_
 
-if ! test -w /dev/full || ! test -c /dev/full; then
-  skip_ '/dev/full is required'
-fi
-
-# Ensure error messages are in English
-LC_ALL=C
-export LC_ALL
-
-# Replace fwrite and ferror, always returning an error
-cat > k.c <<'EOF' || framework_failure_
-#include <stdio.h>
-#include <errno.h>
-
-#undef fwrite
-#undef fwrite_unlocked
-
-size_t
-fwrite (const void *ptr, size_t size, size_t nitems, FILE *stream)
-{
-  if (stream == stderr)
-    {
-      /* Perform the normal operation of fwrite.  */
-      const char *p = ptr;
-      size_t count = size * nitems;
-      size_t i;
-      for (i = 0; i < count; i++)
-        if (putc ((unsigned char) *p++, stream) == EOF)
-          break;
-      return i / size;
-    }
-  else
-    {
-      fclose (fopen ("preloaded","w")); /* marker for preloaded interception */
-      errno = ENOSPC;
-      return 0;
-    }
-}
-
-size_t
-fwrite_unlocked (const void *ptr, size_t size, size_t nitems, FILE *stream)
-{
-  return fwrite (ptr, size, nitems, stream);
-}
-EOF
+cp -sf /dev/full xx01 || skip_ '/dev/full is required'
 
 # Get the wording of the OS-dependent ENOSPC message
 returns_ 1 seq 1 >/dev/full 2>msgt || framework_failure_
 sed 's/seq: write error: //' msgt > msg || framework_failure_
 
 # Create the expected error message
-{ printf "%s" "csplit: write error for 'xx01': " ; cat msg ; } > exp \
-  || framework_failure_
-
-# compile/link the interception shared library:
-gcc_shared_ k.c k.so \
-  || skip_ 'failed to build forced-fwrite-failure shared library'
+{ printf "%s" "csplit: xx01: " ; cat msg ; } > exp || framework_failure_
 
-# Split the input, and force fwrite() failure -
 # the 'csplit' command should fail with exit code 1
-# (checked with 'returns_ 1 ... || fail=1')
-seq 10 |
-(export LD_PRELOAD=$LD_PRELOAD:./k.so
- returns_ 1 csplit - 1 4 2>out) || fail=1
-
-test -e preloaded || skip_ 'LD_PRELOAD interception failed'
+seq 2 | returns_ 1 csplit - 1 2> err || fail=1
+# csplit should cleanup broken files
+test -e xx01 && fail=1
 
 # Ensure we got the expected error message
-compare exp out || fail=1
+compare exp err || fail=1
 
 Exit $fail
index f75f8bf75a199eb63e2551bbc656139723587828..56a37c5242df5dc4ee40c9cd57a54b3edb4ef3c0 100644 (file)
@@ -317,7 +317,6 @@ all_tests =                                 \
   tests/csplit/csplit-1000.sh                  \
   tests/csplit/csplit-heap.sh                  \
   tests/csplit/csplit-io-err.sh                        \
-  tests/csplit/csplit-io-err-2.sh                      \
   tests/csplit/csplit-suppress-matched.pl      \
   tests/date/date-debug.sh                     \
   tests/date/date-ethiopia.sh                  \