diff options
| author | Pádraig Brady <P@draigBrady.com> | 2024-10-02 16:33:42 +0100 |
|---|---|---|
| committer | Pádraig Brady <P@draigBrady.com> | 2024-10-02 16:33:42 +0100 |
| commit | 6f1ec80f31164e08ffa048225a6c6142bfaf92b4 (patch) | |
| tree | 5378718135b9c3aa82789a0fb094a62e8227130a /tests | |
| parent | maint: avoid sc_preprocessor_indentation failure in factor.c (diff) | |
| download | coreutils-6f1ec80f31164e08ffa048225a6c6142bfaf92b4.tar.gz coreutils-6f1ec80f31164e08ffa048225a6c6142bfaf92b4.zip | |
tests: fix skipping of mtab simulation tests
Where rpl_fopen() is used rather than fopen(),
wrapping fopen() is ineffective.
Note rpl_fopen() is used as of glibc-2.39 at least
(due to fflush and fclose being replaced).
* tests/df/no-mtab-status.sh: Wrap open() rather than fopen().
* tests/df/skip-duplicates.sh: Likewise.
Diffstat (limited to 'tests')
| -rwxr-xr-x | tests/df/no-mtab-status.sh | 32 | ||||
| -rwxr-xr-x | tests/df/skip-duplicates.sh | 31 |
2 files changed, 41 insertions, 22 deletions
diff --git a/tests/df/no-mtab-status.sh b/tests/df/no-mtab-status.sh index 8bf8ce051..f70c695f8 100755 --- a/tests/df/no-mtab-status.sh +++ b/tests/df/no-mtab-status.sh @@ -31,39 +31,49 @@ grep '^#define HAVE_GETMNTENT 1' $CONFIG_HEADER > /dev/null \ cat > k.c <<EOF || framework_failure_ #define _GNU_SOURCE #include <stdio.h> +#include <stdlib.h> #include <errno.h> +#include <fcntl.h> #include <mntent.h> #include <string.h> +#include <stdarg.h> #include <dlfcn.h> #define STREQ(a, b) (strcmp (a, b) == 0) -FILE* fopen(const char *path, const char *mode) +int open(const char *path, int flags, ...) { - static FILE* (*fopen_func)(char const *, char const *); + static int (*open_func)(const char *, int, ...); - /* get reference to original (libc provided) fopen */ - if (!fopen_func) + /* get reference to original (libc provided) open */ + if (!open_func) { - fopen_func = (FILE*(*)(char const *, char const *)) - dlsym(RTLD_NEXT, "fopen"); - if (!fopen_func) + open_func = (int(*)(const char *, int, ...)) + dlsym(RTLD_NEXT, "open"); + if (!open_func) { - fprintf (stderr, "Failed to find fopen()\n"); + fprintf (stderr, "Failed to find open()\n"); errno = ESRCH; - return NULL; + return -1; } } + va_list ap; + va_start (ap, flags); + mode_t mode = (sizeof (mode_t) < sizeof (int) + ? va_arg (ap, int) + : va_arg (ap, mode_t)); + va_end (ap); + /* Returning ENOENT here will get read_file_system_list() to fall back to using getmntent() below. */ if (STREQ (path, "/proc/self/mountinfo")) { errno = ENOENT; - return NULL; + return -1; } else - return fopen_func(path, mode); + return open_func(path, flags, mode); } struct mntent *getmntent (FILE *fp) diff --git a/tests/df/skip-duplicates.sh b/tests/df/skip-duplicates.sh index cfac82dfd..dd28aba3c 100755 --- a/tests/df/skip-duplicates.sh +++ b/tests/df/skip-duplicates.sh @@ -43,38 +43,47 @@ cat > k.c <<EOF || framework_failure_ #include <stdio.h> #include <stdlib.h> #include <errno.h> +#include <fcntl.h> #include <mntent.h> #include <string.h> +#include <stdarg.h> #include <dlfcn.h> #define STREQ(a, b) (strcmp (a, b) == 0) -FILE* fopen(const char *path, const char *mode) +int open(const char *path, int flags, ...) { - static FILE* (*fopen_func)(char const *, char const *); + static int (*open_func)(const char *, int, ...); - /* get reference to original (libc provided) fopen */ - if (!fopen_func) + /* get reference to original (libc provided) open */ + if (!open_func) { - fopen_func = (FILE*(*)(char const *, char const *)) - dlsym(RTLD_NEXT, "fopen"); - if (!fopen_func) + open_func = (int(*)(const char *, int, ...)) + dlsym(RTLD_NEXT, "open"); + if (!open_func) { - fprintf (stderr, "Failed to find fopen()\n"); + fprintf (stderr, "Failed to find open()\n"); errno = ESRCH; - return NULL; + return -1; } } + va_list ap; + va_start (ap, flags); + mode_t mode = (sizeof (mode_t) < sizeof (int) + ? va_arg (ap, int) + : va_arg (ap, mode_t)); + va_end (ap); + /* Returning ENOENT here will get read_file_system_list() to fall back to using getmntent() below. */ if (STREQ (path, "/proc/self/mountinfo")) { errno = ENOENT; - return NULL; + return -1; } else - return fopen_func(path, mode); + return open_func(path, flags, mode); } #define STREQ(a, b) (strcmp (a, b) == 0) |
