| #!/bin/sh |
| |
|
|
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
|
|
| . "${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 |
|
|
| |
| LC_ALL=C |
| export LC_ALL |
|
|
| |
| cat > k.c <<'EOF' || framework_failure_ |
| |
| |
|
|
| |
| |
|
|
| 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 |
|
|
| |
| returns_ 1 seq 1 >/dev/full 2>msgt || framework_failure_ |
| sed 's/seq: write error: //' msgt > msg || framework_failure_ |
|
|
| |
| { printf "%s" "csplit: write error for 'xx01': " ; cat msg ; } > exp \ |
| || framework_failure_ |
|
|
| |
| gcc_shared_ k.c k.so \ |
| || skip_ 'failed to build forced-fwrite-failure shared library' |
|
|
| |
| |
| |
| 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' |
|
|
| |
| compare exp out || fail=1 |
|
|
| Exit $fail |
|
|