9
#include <fs/file_desc.h>
11
#include <util/member.h>
13
#include <kernel/task/resource/idesc.h>
15
static int file_idesc_getxattr(struct idesc *idesc, const char *name, void *value,
17
static int file_idesc_setxattr(struct idesc *idesc, const char *name,
18
const void *value, size_t size, int flags);
19
static int file_idesc_listxattr(struct idesc *idesc, char *list, size_t size);
20
static int file_idesc_removexattr(struct idesc *idesc, const char *name);
22
const struct idesc_xattrops file_idesc_xattrops = {
23
.getxattr = file_idesc_getxattr,
24
.setxattr = file_idesc_setxattr,
25
.listxattr = file_idesc_listxattr,
26
.removexattr = file_idesc_removexattr,
29
static int file_idesc_getxattr(struct idesc *idesc, const char *name, void *value,
31
struct file_desc *desc;
33
desc = member_cast_out(idesc, struct file_desc, f_idesc);
35
return kfile_xattr_get(desc->f_inode, name, value, size);
38
static int file_idesc_setxattr(struct idesc *idesc, const char *name,
39
const void *value, size_t size, int flags) {
40
struct file_desc *desc;
42
desc = member_cast_out(idesc, struct file_desc, f_idesc);
44
return kfile_xattr_set(desc->f_inode, name, value, size, flags);
47
static int file_idesc_listxattr(struct idesc *idesc, char *list, size_t size) {
48
struct file_desc *desc;
50
desc = member_cast_out(idesc, struct file_desc, f_idesc);
52
return kfile_xattr_list(desc->f_inode, list, size);
55
static int file_idesc_removexattr(struct idesc *idesc, const char *name) {
56
struct file_desc *desc;
58
desc = member_cast_out(idesc, struct file_desc, f_idesc);
60
return kfile_xattr_set(desc->f_inode, name, NULL, 0, XATTR_REMOVE);