summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Support/Unix
diff options
context:
space:
mode:
authorMichal Gorny <mgorny@gentoo.org>2017-02-22 18:09:15 +0000
committerMichal Gorny <mgorny@gentoo.org>2017-02-22 18:09:15 +0000
commit5ddd2a5bdada3792380b1a87f8cb3b394be9860d (patch)
tree2998de69660d51f692fc65013c45a2f1d95b17d8 /llvm/lib/Support/Unix
parent1aeb0e73e0c37105ede0de7a1b36e20ae406e3b6 (diff)
downloadbcm5719-llvm-5ddd2a5bdada3792380b1a87f8cb3b394be9860d.tar.gz
bcm5719-llvm-5ddd2a5bdada3792380b1a87f8cb3b394be9860d.zip
[Support] Provide linux/magic.h fallback for older kernels
The function for distinguishing local and remote files added in r295768 unconditionally uses linux/magic.h header to provide necessary filesystem magic numbers. However, in kernel headers predating 2.6.18 the magic numbers are spread throughout multiple include files. Furthermore, LLVM did not require kernel headers being installed so far. To increase the portability across different versions of Linux kernel and different Linux systems, add CMake header checks for linux/magic.h and -- if it is missing -- the linux/nfs_fs.h and linux/smb.h headers which contained the numbers previously. Furthermore, since the numbers are static and the feature does not seem critical enough to make LLVM require kernel headers at all, add fallback constants for the case when none of the necessary headers is available. Differential Revision: https://reviews.llvm.org/D30261 llvm-svn: 295854
Diffstat (limited to 'llvm/lib/Support/Unix')
-rw-r--r--llvm/lib/Support/Unix/Path.inc15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Support/Unix/Path.inc b/llvm/lib/Support/Unix/Path.inc
index 4b35c7b4687..56fa01ab512 100644
--- a/llvm/lib/Support/Unix/Path.inc
+++ b/llvm/lib/Support/Unix/Path.inc
@@ -76,7 +76,16 @@
#include <sys/param.h>
#include <sys/mount.h>
#elif defined(__linux__)
+#if defined(HAVE_LINUX_MAGIC_H)
#include <linux/magic.h>
+#else
+#if defined(HAVE_LINUX_NFS_FS_H)
+#include <linux/nfs_fs.h>
+#endif
+#if defined(HAVE_LINUX_SMB_H)
+#include <linux/smb.h>
+#endif
+#endif
#include <sys/vfs.h>
#else
#include <sys/mount.h>
@@ -346,6 +355,12 @@ std::error_code remove(const Twine &path, bool IgnoreNonExisting) {
static bool is_local_impl(struct STATVFS &Vfs) {
#if defined(__linux__)
+#ifndef NFS_SUPER_MAGIC
+#define NFS_SUPER_MAGIC 0x6969
+#endif
+#ifndef SMB_SUPER_MAGIC
+#define SMB_SUPER_MAGIC 0x517B
+#endif
#ifndef CIFS_MAGIC_NUMBER
#define CIFS_MAGIC_NUMBER 0xFF534D42
#endif
OpenPOWER on IntegriCloud