version 0.23.93
[util-vserver.git] / util-vserver / lib / syscall.c
index c411922..fc0896e 100644 (file)
 #include <stdbool.h>
 #include <errno.h>
 
-
-
-static int
-checkCompatVersion()
-{
-  static int   res=0;
-  static int   v_errno;
-
-  if (res==0) {
-    res     = sys_virtual_context(VC_CMD(VERSION, 0, 0), VC_CAT_COMPAT, 0);
-    v_errno = errno;
-#ifdef VC_ENABLE_API_LEGACY
-    if (res==-1 && errno==ENOSYS) res=0;
-#endif    
-  }
-
-  errno = v_errno;
-  return res;
-}
+#if defined(VC_ENABLE_API_COMPAT) || defined(VC_ENABLE_API_LEGACY)
 
 int
 vc_new_s_context(ctx_t ctx, unsigned int remove_cap, unsigned int flags)
 {
-  switch (checkCompatVersion()) {
-#ifdef VC_ENABLE_API_COMPAT    
-    case 0x00010000    :
-      return vc_new_s_context_compat(ctx, remove_cap, flags);
-#endif      
-#ifdef VC_ENABLE_API_LEGACY
-    case 0x0000000     :
-      return vc_new_s_context_legacy(ctx, remove_cap, flags);
-#endif
-    case -1            :  break;
-    default            :  errno = EINVAL;
-  }
-
-  return -1;
+  CALL_VC(CALL_VC_COMPAT(vc_new_s_context, ctx, remove_cap, flags),
+         CALL_VC_LEGACY(vc_new_s_context, ctx, remove_cap, flags));
 }
 
 int
 vc_set_ipv4root(uint32_t  bcast, size_t nb, struct vc_ip_mask_pair const *ips)
 {
-  switch (checkCompatVersion()) {
-#ifdef VC_ENABLE_API_COMPAT    
-    case 0x00010000    :
-      return vc_set_ipv4root_compat(bcast, nb, ips);
-#endif
-#ifdef VC_ENABLE_API_LEGACY
-    case 0x0000000     :
-      return vc_set_ipv4root_legacy(bcast, nb, ips);
-#endif
-    case -1            :  break;
-    default            :  errno = EINVAL;
-  }
-
-  return -1;
+  CALL_VC(CALL_VC_COMPAT(vc_set_ipv4root, bcast, nb, ips),
+         CALL_VC_LEGACY(vc_set_ipv4root, bcast, nb, ips));
 }
 
 int
 vc_chrootsafe(char const *dir)
 {
-  switch (checkCompatVersion()) {
-#ifdef VC_ENABLE_API_COMPAT    
-    case 0x00010000    :
-      return vc_chrootsafe_compat(dir);
-#endif
-#ifdef VC_ENABLE_API_LEGACY
-    case 0x0000000     :
-      return vc_chrootsafe_legacy(dir);
-#endif
-    case -1            :  break;
-    default            :  errno = EINVAL;
-  }
-
-  return -1;
+  CALL_VC(CALL_VC_COMPAT(vc_chrootsafe, dir),
+         CALL_VC_LEGACY(vc_chrootsafe, dir));
 }
+
+#endif