[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 1/2] tests: fix skipping of mtab simulation tests
From: |
Pádraig Brady |
Subject: |
[PATCH 1/2] tests: fix skipping of mtab simulation tests |
Date: |
Wed, 2 Oct 2024 16:49:40 +0100 |
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.
---
tests/df/no-mtab-status.sh | 32 +++++++++++++++++++++-----------
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)
--
2.46.0
- [PATCH 1/2] tests: fix skipping of mtab simulation tests,
Pádraig Brady <=