From f013ef2cabd47dadaae7546d830089f879130575 Mon Sep 17 00:00:00 2001 From: Enrico Scholz Date: Thu, 19 Feb 2004 22:22:43 +0000 Subject: [PATCH] implemented new iattr interface git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@953 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- util-vserver/lib/syscall_getiattr-v13.hc | 8 ++++---- util-vserver/lib/syscall_getiattr.c | 23 ++++++++++++++++++++--- util-vserver/lib/syscall_setiattr-v13.hc | 14 +++++++------- util-vserver/lib/syscall_setiattr.c | 15 ++++++++++++--- 4 files changed, 43 insertions(+), 17 deletions(-) diff --git a/util-vserver/lib/syscall_getiattr-v13.hc b/util-vserver/lib/syscall_getiattr-v13.hc index 490804e..cca3dea 100644 --- a/util-vserver/lib/syscall_getiattr-v13.hc +++ b/util-vserver/lib/syscall_getiattr-v13.hc @@ -23,15 +23,15 @@ #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; diff --git a/util-vserver/lib/syscall_getiattr.c b/util-vserver/lib/syscall_getiattr.c index 9a75717..fa8f8cc 100644 --- a/util-vserver/lib/syscall_getiattr.c +++ b/util-vserver/lib/syscall_getiattr.c @@ -21,15 +21,32 @@ #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)); } diff --git a/util-vserver/lib/syscall_setiattr-v13.hc b/util-vserver/lib/syscall_setiattr-v13.hc index 6a97412..754a341 100644 --- a/util-vserver/lib/syscall_setiattr-v13.hc +++ b/util-vserver/lib/syscall_setiattr-v13.hc @@ -23,13 +23,13 @@ #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); } diff --git a/util-vserver/lib/syscall_setiattr.c b/util-vserver/lib/syscall_setiattr.c index ffda4d2..5c7a53c 100644 --- a/util-vserver/lib/syscall_setiattr.c +++ b/util-vserver/lib/syscall_setiattr.c @@ -21,15 +21,24 @@ #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)); } -- 1.8.1.5