File: /Users/paulross/dev/linux/linux-3.13/include/linux/xattr.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: /*
       2:   File: linux/xattr.h
       3: 
       4:   Extended attributes handling.
       5: 
       6:   Copyright (C) 2001 by Andreas Gruenbacher <a.gruenbacher@computer.org>
       7:   Copyright (c) 2001-2002 Silicon Graphics, Inc.  All Rights Reserved.
       8:   Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
       9: */
      10: #ifndef _LINUX_XATTR_H
      11: #define _LINUX_XATTR_H
      12: 
      13: 
      14: #include <linux/slab.h>
      15: #include <linux/types.h>
      16: #include <linux/spinlock.h>
      17: #include <uapi/linux/xattr.h>
      18: 
      19: struct inode;
      20: struct dentry;
      21: 
      22: struct xattr_handler {
      23:     const char *prefix;
      24:     int flags;    /* fs private flags passed back to the handlers */
      25:     size_t (*list)(struct dentry *dentry, char *list, size_t list_size,
      26:                const char *name, size_t name_len, int handler_flags);
      27:     int (*get)(struct dentry *dentry, const char *name, void *buffer,
      28:            size_t size, int handler_flags);
      29:     int (*set)(struct dentry *dentry, const char *name, const void *buffer,
      30:            size_t size, int flags, int handler_flags);
      31: };
      32: 
      33: struct xattr {
      34:     const char *name;
      35:     void *value;
      36:     size_t value_len;
      37: };
      38: 
      39: ssize_t xattr_getsecurity(struct inode *, const char *, void *, size_t);
      40: ssize_t vfs_getxattr(struct dentry *, const char *, void *, size_t);
      41: ssize_t vfs_listxattr(struct dentry *d, char *list, size_t size);
      42: int __vfs_setxattr_noperm(struct dentry *, const char *, const void *, size_t, int);
      43: int vfs_setxattr(struct dentry *, const char *, const void *, size_t, int);
      44: int vfs_removexattr(struct dentry *, const char *);
      45: 
      46: ssize_t generic_getxattr(struct dentry *dentry, const char *name, void *buffer, size_t size);
      47: ssize_t generic_listxattr(struct dentry *dentry, char *buffer, size_t buffer_size);
      48: int generic_setxattr(struct dentry *dentry, const char *name, const void *value, size_t size, int flags);
      49: int generic_removexattr(struct dentry *dentry, const char *name);
      50: ssize_t vfs_getxattr_alloc(struct dentry *dentry, const char *name,
      51:                char **xattr_value, size_t size, gfp_t flags);
      52: int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
      53:           const char *value, size_t size, gfp_t flags);
      54: 
      55: struct simple_xattrs {
      56:     struct list_head head;
      57:     spinlock_t lock;
      58: };
      59: 
      60: struct simple_xattr {
      61:     struct list_head list;
      62:     char *name;
      63:     size_t size;
      64:     char value[0];
      65: };
      66: 
      67: /*
      68:  * initialize the simple_xattrs structure
      69:  */
      70: static inline void simple_xattrs_init(struct simple_xattrs *xattrs)
      71: {
      72:     INIT_LIST_HEAD(&xattrs->head);
      73:     spin_lock_init(&xattrs->lock);
      74: }
      75: 
      76: /*
      77:  * free all the xattrs
      78:  */
      79: static inline void simple_xattrs_free(struct simple_xattrs *xattrs)
      80: {
      81:     struct simple_xattr *xattr, *node;
      82: 
      83:     list_for_each_entry_safe(xattr, node, &xattrs->head, list) {
      84:         kfree(xattr->name);
      85:         kfree(xattr);
      86:     }
      87: }
      88: 
      89: struct simple_xattr *simple_xattr_alloc(const void *value, size_t size);
      90: int simple_xattr_get(struct simple_xattrs *xattrs, const char *name,
      91:              void *buffer, size_t size);
      92: int simple_xattr_set(struct simple_xattrs *xattrs, const char *name,
      93:              const void *value, size_t size, int flags);
      94: int simple_xattr_remove(struct simple_xattrs *xattrs, const char *name);
      95: ssize_t simple_xattr_list(struct simple_xattrs *xattrs, char *buffer,
      96:               size_t size);
      97: void simple_xattr_list_add(struct simple_xattrs *xattrs,
      98:                struct simple_xattr *new_xattr);
      99: 
     100: #endif    /* _LINUX_XATTR_H */
     101: