summaryrefslogtreecommitdiff
path: root/tests/df
diff options
context:
space:
mode:
authorPádraig Brady <P@draigBrady.com>2015-04-30 11:33:38 +0100
committerPádraig Brady <P@draigBrady.com>2015-04-30 18:24:47 +0100
commit88a03548248cac37662f5044df5c35152c5eb937 (patch)
tree81536b5549137289f28e98f9d5e7cb300430c643 /tests/df
parentc77a96ccba91ca687fe0c22e3b2bb1141fbab421 (diff)
downloadcoreutils-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/df')
-rwxr-xr-xtests/df/no-mtab-status.sh36
-rwxr-xr-xtests/df/skip-duplicates.sh38
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)