sendKillSequence(): added
[util-vserver.git] / util-vserver / lib / vserver-internal.h
index cbf67c2..601f687 100644 (file)
 #include <syscall.h>
 #include <errno.h>
 #include <stdint.h>
+#include <sys/syscall.h>
+#include <unistd.h>
 
-#ifndef __NR_sys_virtual_context
-#  define __NR_sys_virtual_context     273
+#include "internal.h"
+
+#ifndef __NR_vserver
+#  define __NR_vserver 273
 #endif
 
 #define VC_PREFIX      0)
@@ -37,7 +41,7 @@
 #if 1
 #  define VC_SELECT(ID)        case ID: if(1)
 #  define CALL_VC(...)                                 \
-  switch (utilvserver_checkCompatVersion()) {          \
+  switch (utilvserver_checkCompatVersion()&~0xff) {    \
     case -1    :  if (1) break;                        \
       VC_SUFFIX, __VA_ARGS__ , VC_PREFIX;              \
     default    :  errno = EINVAL;                      \
 #  define CALL_VC_LEGACY(F,...) CALL_VC_NOOP
 #endif
 
-#ifndef HAVE_SYS_VIRTUAL_CONTEXT
-static UNUSED
-_syscall3(int, sys_virtual_context,
+#ifdef VC_ENABLE_API_V11
+#  define CALL_VC_V11(F,...)   CALL_VC_GENERAL(0x00010000, v11, F, __VA_ARGS__)
+#else
+#  define CALL_VC_V11(F,...)   CALL_VC_NOOP
+#endif
+
+
+#if 1
+#  define CTX_KERNEL2USER(X)   (((X)==(uint32_t)(-1)) ? VC_NOCTX   : \
+                                ((X)==(uint32_t)(-2)) ? VC_SAMECTX : \
+                                (xid_t)(X))
+
+#  define CTX_USER2KERNEL(X)   (((X)==VC_RANDCTX) ? (uint32_t)(-1) : \
+                                ((X)==VC_SAMECTX) ? (uint32_t)(-2) : \
+                                (uint32_t)(X))
+#else
+#  define CTX_USER2KERNEL(X)   (X)
+#  define CTX_KERNEL2USER(X)   (X)
+#endif
+
+
+#ifndef HAVE_VSERVER
+#if defined(__pic__) && defined(__i386)
+inline static UNUSED ALWAYSINLINE
+int vserver(uint32_t cmd, uint32_t id, void *data)
+{
+#if defined __dietlibc__
+  extern long int syscall (long int __sysno, ...);
+#endif
+  return syscall(__NR_vserver, cmd, id, data);
+}
+#else
+inline static UNUSED ALWAYSINLINE
+_syscall3(int, vserver,
          uint32_t, cmd, uint32_t, id, void *, data)
 #endif
+#endif
 
 #endif //  H_VSERVER_SYSCALL_INTERNAL_H