|
|
1.1 ! root 1: /* ! 2: * Virtio 9p ! 3: * ! 4: * Copyright IBM, Corp. 2010 ! 5: * ! 6: * Authors: ! 7: * Aneesh Kumar K.V <[email protected]> ! 8: * ! 9: * This work is licensed under the terms of the GNU GPL, version 2. See ! 10: * the COPYING file in the top-level directory. ! 11: * ! 12: */ ! 13: #ifndef _QEMU_VIRTIO_9P_XATTR_H ! 14: #define _QEMU_VIRTIO_9P_XATTR_H ! 15: ! 16: #include <attr/xattr.h> ! 17: ! 18: typedef struct xattr_operations ! 19: { ! 20: const char *name; ! 21: ssize_t (*getxattr)(FsContext *ctx, const char *path, ! 22: const char *name, void *value, size_t size); ! 23: ssize_t (*listxattr)(FsContext *ctx, const char *path, ! 24: char *name, void *value, size_t size); ! 25: int (*setxattr)(FsContext *ctx, const char *path, const char *name, ! 26: void *value, size_t size, int flags); ! 27: int (*removexattr)(FsContext *ctx, ! 28: const char *path, const char *name); ! 29: } XattrOperations; ! 30: ! 31: ! 32: extern XattrOperations mapped_user_xattr; ! 33: extern XattrOperations passthrough_user_xattr; ! 34: ! 35: extern XattrOperations mapped_pacl_xattr; ! 36: extern XattrOperations mapped_dacl_xattr; ! 37: extern XattrOperations passthrough_acl_xattr; ! 38: extern XattrOperations none_acl_xattr; ! 39: ! 40: extern XattrOperations *mapped_xattr_ops[]; ! 41: extern XattrOperations *passthrough_xattr_ops[]; ! 42: extern XattrOperations *none_xattr_ops[]; ! 43: ! 44: ssize_t v9fs_get_xattr(FsContext *ctx, const char *path, const char *name, ! 45: void *value, size_t size); ! 46: ssize_t v9fs_list_xattr(FsContext *ctx, const char *path, void *value, ! 47: size_t vsize); ! 48: int v9fs_set_xattr(FsContext *ctx, const char *path, const char *name, ! 49: void *value, size_t size, int flags); ! 50: int v9fs_remove_xattr(FsContext *ctx, const char *path, const char *name); ! 51: ssize_t pt_listxattr(FsContext *ctx, const char *path, char *name, void *value, ! 52: size_t size); ! 53: ! 54: static inline ssize_t pt_getxattr(FsContext *ctx, const char *path, ! 55: const char *name, void *value, size_t size) ! 56: { ! 57: char buffer[PATH_MAX]; ! 58: return lgetxattr(rpath(ctx, path, buffer), name, value, size); ! 59: } ! 60: ! 61: static inline int pt_setxattr(FsContext *ctx, const char *path, ! 62: const char *name, void *value, ! 63: size_t size, int flags) ! 64: { ! 65: char buffer[PATH_MAX]; ! 66: return lsetxattr(rpath(ctx, path, buffer), name, value, size, flags); ! 67: } ! 68: ! 69: static inline int pt_removexattr(FsContext *ctx, ! 70: const char *path, const char *name) ! 71: { ! 72: char buffer[PATH_MAX]; ! 73: return lremovexattr(rpath(ctx, path, buffer), name); ! 74: } ! 75: ! 76: static inline ssize_t notsup_getxattr(FsContext *ctx, const char *path, ! 77: const char *name, void *value, ! 78: size_t size) ! 79: { ! 80: errno = ENOTSUP; ! 81: return -1; ! 82: } ! 83: ! 84: static inline int notsup_setxattr(FsContext *ctx, const char *path, ! 85: const char *name, void *value, ! 86: size_t size, int flags) ! 87: { ! 88: errno = ENOTSUP; ! 89: return -1; ! 90: } ! 91: ! 92: static inline ssize_t notsup_listxattr(FsContext *ctx, const char *path, ! 93: char *name, void *value, size_t size) ! 94: { ! 95: return 0; ! 96: } ! 97: ! 98: static inline int notsup_removexattr(FsContext *ctx, ! 99: const char *path, const char *name) ! 100: { ! 101: errno = ENOTSUP; ! 102: return -1; ! 103: } ! 104: ! 105: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.