implemented new iattr interface
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Thu, 19 Feb 2004 22:22:43 +0000 (22:22 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Thu, 19 Feb 2004 22:22:43 +0000 (22:22 +0000)
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
util-vserver/lib/syscall_getiattr.c
util-vserver/lib/syscall_setiattr-v13.hc
util-vserver/lib/syscall_setiattr.c

index 490804e..cca3dea 100644 (file)
 #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;
index 9a75717..fa8f8cc 100644 (file)
 #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));
 }
index 6a97412..754a341 100644 (file)
 #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);
 }
index ffda4d2..5c7a53c 100644 (file)
 #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));
 }