#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