From 4acc03ae8b7b33101af2a4df0f84a3405ffba4a4 Mon Sep 17 00:00:00 2001 From: Eric Blake Date: Wed, 1 Oct 2014 21:18:52 -0600 Subject: [PATCH] build: fix build on non-Linux A cygwin build of 1.2.9 fails with: util/virprocess.c:87:27: fatal error: sys/syscall.h: No such file or directory # include But in reality, the ONLY user of setns() is lxc, which is Linux-only. It's easiest to just limit the setns workarounds to Linux. * src/util/virprocess.c (setns): Limit definition to Linux. Signed-off-by: Eric Blake --- src/util/virprocess.c | 44 +++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/util/virprocess.c b/src/util/virprocess.c index 806e7f98da..486123a292 100644 --- a/src/util/virprocess.c +++ b/src/util/virprocess.c @@ -61,44 +61,48 @@ VIR_LOG_INIT("util.process"); +#ifdef __linux__ /* * Workaround older glibc. While kernel may support the setns * syscall, the glibc wrapper might not exist. If that's the * case, use our own. */ -#ifndef __NR_setns -# if defined(__x86_64__) -# define __NR_setns 308 -# elif defined(__i386__) -# define __NR_setns 346 -# elif defined(__arm__) -# define __NR_setns 375 -# elif defined(__aarch64__) -# define __NR_setns 375 -# elif defined(__powerpc__) -# define __NR_setns 350 -# elif defined(__s390__) -# define __NR_setns 339 +# ifndef __NR_setns +# if defined(__x86_64__) +# define __NR_setns 308 +# elif defined(__i386__) +# define __NR_setns 346 +# elif defined(__arm__) +# define __NR_setns 375 +# elif defined(__aarch64__) +# define __NR_setns 375 +# elif defined(__powerpc__) +# define __NR_setns 350 +# elif defined(__s390__) +# define __NR_setns 339 +# endif # endif -#endif -#ifndef HAVE_SETNS -# if defined(__NR_setns) && !defined(WIN32) -# include +# ifndef HAVE_SETNS +# if defined(__NR_setns) +# include static inline int setns(int fd, int nstype) { return syscall(__NR_setns, fd, nstype); } -# else /* __NR_setns && !WIN32 */ +# else /* !__NR_setns */ +# error Please determine the syscall number for setns on your architecture +# endif +# endif +#else /* !__linux__ */ static inline int setns(int fd ATTRIBUTE_UNUSED, int nstype ATTRIBUTE_UNUSED) { virReportSystemError(ENOSYS, "%s", _("Namespaces are not supported on this platform.")); return -1; } -# endif /* __NR_setns && !WIN32 */ -#endif /* HAVE_SETNS */ +#endif /** * virProcessTranslateStatus: