# define __NR_vserver ENSC_SYSCALL__NR_vserver
#endif
+inline static ALWAYSINLINE void vc_noop0() {}
+
#define VC_PREFIX 0)
-#define VC_SUFFIX else (void)((void)0
-#define CALL_VC_NOOP (void)0
+#define VC_SUFFIX else (void)(vc_noop0()
+#define CALL_VC_NOOP vc_noop0()
#define CALL_VC_GENERAL(ID, SUFFIX, FUNC, ...) \
VC_PREFIX; VC_SELECT(ID) return FUNC ## _ ## SUFFIX(__VA_ARGS__); VC_SUFFIX
# define NETTYPE_KERNEL2USER(X) (X)
#endif
+#define CDLIM_USER2KERNEL(X) ((X)==VC_CDLIM_UNSET ? CDLIM_UNSET : \
+ (X)==VC_CDLIM_INFINITY ? CDLIM_INFINITY : \
+ (X)==VC_CDLIM_KEEP ? CDLIM_KEEP : \
+ (X))
+
+ /// the __typeof__ thing is a hack to deal with the kernel interface
+ /// using an unsigned long long value for a uint32_t type
+#define CDLIM_KERNEL2USER(X) ((X)==(__typeof__(X))CDLIM_UNSET ? VC_CDLIM_UNSET : \
+ (X)==(__typeof__(X))CDLIM_INFINITY ? VC_CDLIM_INFINITY : \
+ (X)==(__typeof__(X))CDLIM_KEEP ? VC_CDLIM_KEEP : \
+ (X))
+
-#define ENSC_STRUCT_IDX(STRUCT,ATTR) \
+#define ENSC_STRUCT_IDX(STRUCT,ATTR) \
((char*)(&(STRUCT).ATTR) - (char*)(&(STRUCT)))
-#define ENSC_SAME_STRUCT_IDX(LHS,RHS,ATTR) \
+#define ENSC_SAME_STRUCT_IDX(LHS,RHS,ATTR) \
(ENSC_STRUCT_IDX(LHS,ATTR) == ENSC_STRUCT_IDX(RHS,ATTR))
+#define ENSC_SAME_STRUCT_ITEM(LHS,RHS,ATTR) \
+ (ENSC_SAME_STRUCT_IDX(LHS,RHS,ATTR) && \
+ sizeof((LHS).ATTR)==sizeof((RHS).ATTR) && \
+ sizeof(LHS)==sizeof(RHS))
#define EXT2_IOC_GETCONTEXT _IOR('x', 1, long)
#define EXT2_IOC_SETCONTEXT _IOW('x', 2, long)