]> xenbits.xensource.com Git - people/liuw/libxenctrl-split/libvirt.git/commitdiff
build: fix build on non-Linux
authorEric Blake <eblake@redhat.com>
Thu, 2 Oct 2014 03:18:52 +0000 (21:18 -0600)
committerEric Blake <eblake@redhat.com>
Thu, 2 Oct 2014 03:23:09 +0000 (21:23 -0600)
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 <sys/syscall.h>

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 <eblake@redhat.com>
src/util/virprocess.c

index 806e7f98dab101e3b996095b4c0d0aaf8972820e..486123a2922f6e0b6432b7e0baeff656be1882b7 100644 (file)
 
 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 <sys/syscall.h>
+# ifndef HAVE_SETNS
+#  if defined(__NR_setns)
+#   include <sys/syscall.h>
 
 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: