diff options
author | Pádraig Brady <P@draigBrady.com> | 2015-04-30 11:33:38 +0100 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2015-04-30 18:24:47 +0100 |
commit | 88a03548248cac37662f5044df5c35152c5eb937 (patch) | |
tree | 81536b5549137289f28e98f9d5e7cb300430c643 /tests | |
parent | c77a96ccba91ca687fe0c22e3b2bb1141fbab421 (diff) | |
download | coreutils-88a03548248cac37662f5044df5c35152c5eb937.tar.xz |
tests: don't skip df tests with /proc/self/mountinfo
* tests/df/no-mtab-status.sh: getmntent is no longer called
when /proc/self/mountinfo is present, thus causing the test
to be skipped. Therefore wrap fopen() to ignore mountinfo,
and use the test genmntent table instead.
* tests/df/skip-duplicates.sh: Likewise.
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/df/no-mtab-status.sh | 36 | ||||
-rwxr-xr-x | tests/df/skip-duplicates.sh | 38 |
2 files changed, 59 insertions, 15 deletions
diff --git a/tests/df/no-mtab-status.sh b/tests/df/no-mtab-status.sh index 49d12558d..58a1852a2 100755 --- a/tests/df/no-mtab-status.sh +++ b/tests/df/no-mtab-status.sh @@ -32,20 +32,42 @@ grep '^#define HAVE_GETMNTENT 1' $CONFIG_HEADER > /dev/null \ # Simulate "mtab" failure. cat > k.c <<EOF || framework_failure_ +#define _GNU_SOURCE #include <stdio.h> #include <errno.h> #include <mntent.h> -#include "$CONFIG_HEADER" +#include <string.h> +#include <dlfcn.h> -#ifdef MOUNTED_PROC_MOUNTINFO -# include <libmount/libmount.h> -struct libmnt_table *mnt_new_table_from_file(const char *filename) +#define STREQ(a, b) (strcmp (a, b) == 0) + +FILE* fopen(const char *path, const char *mode) { - /* Returning NULL here will get read_file_system_list() + static FILE* (*fopen_func)(char const *, char const *); + + /* get reference to original (libc provided) fopen */ + if (!fopen_func) + { + fopen_func = (FILE*(*)(char const *, char const *)) + dlsym(RTLD_NEXT, "fopen"); + if (!fopen_func) + { + fprintf (stderr, "Failed to find fopen()\n"); + errno = ESRCH; + return NULL; + } + } + + /* Returning ENOENT here will get read_file_system_list() to fall back to using getmntent() below. */ - return NULL; + if (STREQ (path, "/proc/self/mountinfo")) + { + errno = ENOENT; + return NULL; + } + else + return fopen_func(path, mode); } -#endif struct mntent *getmntent (FILE *fp) { diff --git a/tests/df/skip-duplicates.sh b/tests/df/skip-duplicates.sh index 256070849..c13787665 100755 --- a/tests/df/skip-duplicates.sh +++ b/tests/df/skip-duplicates.sh @@ -41,21 +41,43 @@ grep '^#define HAVE_GETMNTENT 1' $CONFIG_HEADER > /dev/null \ # Simulate an mtab file to test various cases. cat > k.c <<EOF || framework_failure_ +#define _GNU_SOURCE #include <stdio.h> #include <stdlib.h> -#include <string.h> +#include <errno.h> #include <mntent.h> -#include "$CONFIG_HEADER" +#include <string.h> +#include <dlfcn.h> + +#define STREQ(a, b) (strcmp (a, b) == 0) -#ifdef MOUNTED_PROC_MOUNTINFO -# include <libmount/libmount.h> -struct libmnt_table *mnt_new_table_from_file(const char *filename) +FILE* fopen(const char *path, const char *mode) { - /* Returning NULL here will get read_file_system_list() + static FILE* (*fopen_func)(char const *, char const *); + + /* get reference to original (libc provided) fopen */ + if (!fopen_func) + { + fopen_func = (FILE*(*)(char const *, char const *)) + dlsym(RTLD_NEXT, "fopen"); + if (!fopen_func) + { + fprintf (stderr, "Failed to find fopen()\n"); + errno = ESRCH; + return NULL; + } + } + + /* Returning ENOENT here will get read_file_system_list() to fall back to using getmntent() below. */ - return NULL; + if (STREQ (path, "/proc/self/mountinfo")) + { + errno = ENOENT; + return NULL; + } + else + return fopen_func(path, mode); } -#endif #define STREQ(a, b) (strcmp (a, b) == 0) |