1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
From 3671d4a878fb58aa953810ecf9af41809317294f Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak@redhat.com>
Date: Mon, 4 Apr 2022 13:17:44 +0200
Subject: [PATCH] build-sys: improve dependences for lib/procfs.c

* add #ifdefs when use statfs() and include statfs.h or vfs.h

Addresses: https://github.com/util-linux/util-linux/issues/1634
Signed-off-by: Karel Zak <kzak@redhat.com>
---
 configure.ac           |  2 ++
 include/statfs_magic.h |  4 +++-
 lib/procfs.c           | 15 +++++++++++++--
 misc-utils/hardlink.c  |  2 +-
 4 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/configure.ac b/configure.ac
index 3fba95336a5b60b277d90615089093901fec723e..11c86b9a70809cbade98539b17fb2e1186984ebb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -346,6 +346,7 @@ AC_CHECK_HEADERS([ \
 	sys/socket.h \
 	sys/sockio.h \
 	sys/stat.h \
+	sys/statfs.h \
 	sys/swap.h \
 	sys/syscall.h \
 	sys/sysmacros.h \
@@ -355,6 +356,7 @@ AC_CHECK_HEADERS([ \
 	sys/types.h \
 	sys/ucred.h \
 	sys/un.h \
+	sys/vfs.h \
 	sys/xattr.h \
 	unistd.h \
 	utmp.h \
diff --git a/include/statfs_magic.h b/include/statfs_magic.h
index b6b0225e865aeb3c04610ecab177f3e95f1cc61a..67ad0af2595862795299f0bcdb7baa5778742185 100644
--- a/include/statfs_magic.h
+++ b/include/statfs_magic.h
@@ -1,7 +1,9 @@
 #ifndef UTIL_LINUX_STATFS_MAGIC_H
 #define UTIL_LINUX_STATFS_MAGIC_H

-#include <sys/statfs.h>
+#ifdef HAVE_SYS_STATFS_H
+# include <sys/statfs.h>
+#endif

 /*
  * If possible then don't depend on internal libc __SWORD_TYPE type.
diff --git a/lib/procfs.c b/lib/procfs.c
index 4d6d25b6d78eba56aada4cd9acacee4d2e69f656..0d58857c83b378cb1cb3baf00f88f992ff8dce1e 100644
--- a/lib/procfs.c
+++ b/lib/procfs.c
@@ -6,9 +6,13 @@
  */
 #include <ctype.h>
 #include <unistd.h>
-#include <sys/vfs.h>
 #include <errno.h>

+#ifdef HAVE_SYS_VFS_H
+# include <sys/vfs.h>
+# include "statfs_magic.h"
+#endif
+
 #include "c.h"
 #include "pathnames.h"
 #include "procfs.h"
@@ -16,7 +20,6 @@
 #include "all-io.h"
 #include "debug.h"
 #include "strutils.h"
-#include "statfs_magic.h"

 static void procfs_process_deinit_path(struct path_cxt *pc);

@@ -356,6 +359,7 @@ int procfs_dirent_match_name(DIR *procfs, struct dirent *d, const char *name)
 	return 0;
 }

+#ifdef HAVE_SYS_VFS_H
 /* checks if fd is file in a procfs;
  * returns 1 if true, 0 if false or couldn't determine */
 int fd_is_procfs(int fd)
@@ -375,7 +379,14 @@ int fd_is_procfs(int fd)
 	} while (ret != 0);

 	return st.f_type == STATFS_PROC_MAGIC;
+	return 0;
 }
+#else
+int fd_is_procfs(int fd __attribute__((__unused__)))
+{
+	return 0;
+}
+#endif

 static char *strdup_procfs_file(pid_t pid, const char *name)
 {
diff --git a/misc-utils/hardlink.c b/misc-utils/hardlink.c
index dd55af12aab7903e6025d0a39ea020c2400300e8..08af2882c1359e41fba37377a08c9a18647b0f9f 100644
--- a/misc-utils/hardlink.c
+++ b/misc-utils/hardlink.c
@@ -38,7 +38,7 @@
 #include <ctype.h>		/* tolower() */
 #include <sys/ioctl.h>

-#if defined(HAVE_LINUX_FIEMAP_H)
+#if defined(HAVE_LINUX_FIEMAP_H) && defined(HAVE_SYS_VFS_H)
 # include <linux/fs.h>
 # include <linux/fiemap.h>
 # ifdef FICLONE