|
|
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.