#include "vserver.h"
static inline ALWAYSINLINE int
-vc_get_iattr_v13(dev_t dev, ino_t ino,
+vc_get_iattr_v13(char const *filename,
xid_t *xid, uint32_t *flags, uint32_t *mask)
{
- struct vcmd_ctx_iattr_v0 attr;
+ struct vcmd_ctx_iattr_v1 attr;
int rc;
- attr.ino = ino;
+ attr.file_name = filename;
- rc = vserver(VCMD_get_iattr, dev, &attr);
+ rc = vserver(VCMD_get_iattr, 0, &attr);
if (xid) *xid = CTX_KERNEL2USER(attr.xid);
if (flags) *flags = attr.flags;
if (mask) *mask = attr.mask;
#endif
#include "vserver.h"
-#include "vserver-internal.h"
#include "linuxvirtual.h"
+#if defined(VC_ENABLE_API_FSCOMPAT) && defined(VC_ENABLE_API_V13)
+# define VC_MULTIVERSION_SYSCALL 1
+#endif
+#include "vserver-internal.h"
+
#ifdef VC_ENABLE_API_V13
# include "syscall_getiattr-v13.hc"
#endif
+#ifdef VC_ENABLE_API_FSCOMPAT
+# include "syscall_getiattr-fscompat.hc"
+#endif
+
int
-vc_get_iattr(dev_t dev, ino_t ino, xid_t *xid, uint32_t *flags, uint32_t *mask)
+vc_get_iattr(char const *filename, xid_t *xid, uint32_t *flags, uint32_t *mask)
{
- CALL_VC(CALL_VC_V13(vc_get_iattr, dev, ino, xid, flags, mask));
+ if ( (mask==0) ||
+ ((*mask&VC_IATTR_XID) && xid==0) ||
+ ((*mask&~VC_IATTR_XID) && flags==0) ) {
+ errno = EINVAL;
+ return -1;
+ }
+ if ( flags ) *flags &= ~*mask;
+
+ CALL_VC(CALL_VC_V13 (vc_get_iattr, filename, xid, flags, mask),
+ CALL_VC_FSCOMPAT(vc_get_iattr, filename, xid, flags, mask));
}
#include "vserver.h"
static inline ALWAYSINLINE int
-vc_set_iattr_v13(dev_t dev, ino_t ino, xid_t xid, uint32_t flags, uint32_t mask)
+vc_set_iattr_v13(char const *filename, xid_t xid, uint32_t flags, uint32_t mask)
{
- struct vcmd_ctx_iattr_v0 attr;
+ struct vcmd_ctx_iattr_v1 attr;
- attr.ino = ino;
- attr.xid = CTX_USER2KERNEL(xid);
- attr.flags = flags;
- attr.mask = mask;
- return vserver(VCMD_set_iattr, dev, &attr);
+ attr.file_name = filename;
+ attr.xid = CTX_USER2KERNEL(xid);
+ attr.flags = flags;
+ attr.mask = mask;
+ return vserver(VCMD_set_iattr, 0, &attr);
}
#endif
#include "vserver.h"
-#include "vserver-internal.h"
#include "linuxvirtual.h"
+#if defined(VC_ENABLE_API_FSCOMPAT) && defined(VC_ENABLE_API_V13)
+# define VC_MULTIVERSION_SYSCALL 1
+#endif
+#include "vserver-internal.h"
+
#ifdef VC_ENABLE_API_V13
# include "syscall_setiattr-v13.hc"
#endif
+#ifdef VC_ENABLE_API_FSCOMPAT
+# include "syscall_setiattr-fscompat.hc"
+#endif
+
int
-vc_set_iattr(dev_t dev, ino_t ino, xid_t xid, uint32_t flags, uint32_t mask)
+vc_set_iattr(char const *filename, xid_t xid, uint32_t flags, uint32_t mask)
{
- CALL_VC(CALL_VC_V13(vc_set_iattr, dev, ino, xid, flags, mask));
+ CALL_VC(CALL_VC_V13 (vc_set_iattr, filename, xid, flags, mask),
+ CALL_VC_FSCOMPAT(vc_set_iattr, filename, xid, flags, mask));
}