summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--configure.ac5
-rw-r--r--src/readahead/readahead-collect.c4
-rw-r--r--src/shared/missing.h35
-rw-r--r--src/shared/path-util.c1
4 files changed, 45 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac
index 4bafbfb2ea..f1b88384f1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -154,6 +154,11 @@ CAP_LIBS="$LIBS"
LIBS="$save_LIBS"
AC_SUBST(CAP_LIBS)
+AC_CHECK_FUNCS([fanotify_init fanotify_mark name_to_handle_at])
+AC_CHECK_DECLS([gettid, pivot_root], [], [], [[#include <sys/types.h>
+#include <unistd.h>
+#include <sys/mount.h>]])
+
# This makes sure pkg.m4 is available.
m4_pattern_forbid([^_?PKG_[A-Z_]+$],[*** pkg.m4 missing, please install pkg-config])
diff --git a/src/readahead/readahead-collect.c b/src/readahead/readahead-collect.c
index 4fcf64c24d..a3f7df5f6a 100644
--- a/src/readahead/readahead-collect.c
+++ b/src/readahead/readahead-collect.c
@@ -43,6 +43,10 @@
#include <getopt.h>
#include <sys/inotify.h>
+#ifdef HAVE_FANOTIFY_INIT
+#include <sys/fanotify.h>
+#endif
+
#include <systemd/sd-daemon.h>
#include "missing.h"
diff --git a/src/shared/missing.h b/src/shared/missing.h
index df3fd0e839..7fbb9259eb 100644
--- a/src/shared/missing.h
+++ b/src/shared/missing.h
@@ -83,9 +83,11 @@
#define IP_TRANSPARENT 19
#endif
+#if !HAVE_DECL_PIVOT_ROOT
static inline int pivot_root(const char *new_root, const char *put_old) {
return syscall(SYS_pivot_root, new_root, put_old);
}
+#endif
#ifdef __x86_64__
# ifndef __NR_fanotify_init
@@ -126,10 +128,13 @@ static inline int pivot_root(const char *new_root, const char *put_old) {
# endif
#endif
+#ifndef HAVE_FANOTIFY_INIT
static inline int fanotify_init(unsigned int flags, unsigned int event_f_flags) {
return syscall(__NR_fanotify_init, flags, event_f_flags);
}
+#endif
+#ifndef HAVE_FANOTIFY_MARK
static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t mask,
int dfd, const char *pathname) {
#if defined _MIPS_SIM && _MIPS_SIM == _MIPS_SIM_ABI32 || defined __powerpc__ && !defined __powerpc64__
@@ -145,6 +150,7 @@ static inline int fanotify_mark(int fanotify_fd, unsigned int flags, uint64_t ma
return syscall(__NR_fanotify_mark, fanotify_fd, flags, mask, dfd, pathname);
#endif
}
+#endif
#ifndef BTRFS_IOCTL_MAGIC
#define BTRFS_IOCTL_MAGIC 0x94
@@ -175,9 +181,11 @@ struct btrfs_ioctl_vol_args {
#define MS_PRIVATE (1 << 18)
#endif
+#if !HAVE_DECL_GETTID
static inline pid_t gettid(void) {
return (pid_t) syscall(SYS_gettid);
}
+#endif
#ifndef SCM_SECURITY
#define SCM_SECURITY 0x03
@@ -194,3 +202,30 @@ static inline pid_t gettid(void) {
#ifndef PR_SET_CHILD_SUBREAPER
#define PR_SET_CHILD_SUBREAPER 36
#endif
+
+#ifndef MAX_HANDLE_SZ
+#define MAX_HANDLE_SZ 128
+#endif
+
+#ifdef __x86_64__
+# ifndef __NR_name_to_handle
+# define __NR_name_to_handle 303
+# endif
+#else
+# ifndef __NR_name_to_handle
+# define __NR_name_to_handle 341
+# endif
+#endif
+
+#ifndef HAVE_NAME_TO_HANDLE_AT
+
+struct file_handle {
+ unsigned int handle_bytes;
+ int handle_type;
+ unsigned char f_handle[0];
+};
+
+static inline int name_to_handle_at(int fd, const char *name, struct file_handle *handle, int *mnt_id, int flags) {
+ return syscall(__NR_name_to_handle_at, fd, name, handle, mnt_id, flags);
+}
+#endif
diff --git a/src/shared/path-util.c b/src/shared/path-util.c
index 2bdbd22dc7..4cb0b03c5a 100644
--- a/src/shared/path-util.c
+++ b/src/shared/path-util.c
@@ -35,6 +35,7 @@
#include "log.h"
#include "strv.h"
#include "path-util.h"
+#include "missing.h"
bool path_is_absolute(const char *p) {
return p[0] == '/';