From mboxrd@z Thu Jan 1 00:00:00 1970 From: Josef 'Jeff' Sipek Subject: [PATCH 08/12] cmsfs: export extra file attributes via xattr Date: Sun, 21 Sep 2008 21:29:24 -0400 Message-ID: <1222046968-3364-9-git-send-email-jeffpc@josefsipek.net> References: <1222046968-3364-1-git-send-email-jeffpc@josefsipek.net> Cc: hch@infradead.org, Josef 'Jeff' Sipek To: linux-fsdevel@vger.kernel.org Return-path: Received: from [148.100.96.56] ([148.100.96.56]:54352 "EHLO ldave2.osdl.marist.edu" rhost-flags-FAIL-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1752842AbYIVBrh (ORCPT ); Sun, 21 Sep 2008 21:47:37 -0400 In-Reply-To: <1222046968-3364-1-git-send-email-jeffpc@josefsipek.net> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Signed-off-by: Josef 'Jeff' Sipek --- fs/cmsfs/xattr.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 74 insertions(+), 0 deletions(-) create mode 100644 fs/cmsfs/xattr.c diff --git a/fs/cmsfs/xattr.c b/fs/cmsfs/xattr.c new file mode 100644 index 0000000..df48aed --- /dev/null +++ b/fs/cmsfs/xattr.c @@ -0,0 +1,74 @@ +#include +#include +#include +#include + +#include + +#include "cmsfs.h" + +ssize_t cmsfs_getxattr(struct dentry *dentry, const char *name, void *value, + size_t size) +{ + char tmp[16]; + char *out = NULL; + + if (!strcmp("system.recfm", name)) { + switch (CMSFS_I(dentry->d_inode)->recfm) { + case RECFM_FIXED: + out = "fixed"; + break; + case RECFM_VAR: + out = "variable"; + break; + default: + out = "???"; + break; + } + } else if (!strcmp("system.lrecl", name)) { + snprintf(tmp, 16, "%d", CMSFS_I(dentry->d_inode)->lrecl); + out = tmp; + } else if (!strcmp("system.items", name)) { + snprintf(tmp, 16, "%d", CMSFS_I(dentry->d_inode)->items); + out = tmp; + } + + if (!out) + return -ENODATA; + + if (!value && !size) + return strlen(out); + + if (size < strlen(out)) + return -ERANGE; + + strcpy(value, out); + + return strlen(out); +} + +#define ATTRLIST "system.recfm\0system.lrecl\0system.items\0" + +ssize_t cmsfs_listxattr(struct dentry *dentry, char *list, size_t size) +{ + if (!list || !size) + return sizeof(ATTRLIST); + + if (size < sizeof(ATTRLIST)) + return -ERANGE; + + memcpy(list, ATTRLIST, sizeof(ATTRLIST)); + + return sizeof(ATTRLIST); +} + +int cmsfs_setxattr(struct dentry *dentry, const char *name, const void *value, + size_t size, int flags) +{ + return -EOPNOTSUPP; +} + +int cmsfs_removexattr(struct dentry *dentry, const char *name) +{ + return -EOPNOTSUPP; +} -- 1.5.6.3