/*
 * fs/generic_acl.c
 *
 * (C) 2005 Andreas Gruenbacher <agruen@suse.de>
 *
 * This file is released under the GPL.
 */

#ifndef GENERIC_ACL_H
#define GENERIC_ACL_H

#include <linux/posix_acl.h>
#include <linux/posix_acl_xattr.h>

/**
 * struct generic_acl_operations  -  filesystem operations
 *
 * Filesystems must make these operations available to the generic
 * operations.
 */
struct generic_acl_operations {
	struct posix_acl *(*getacl)(struct inode *, int);
	void (*setacl)(struct inode *, int, struct posix_acl *);
};

size_t generic_acl_list(struct inode *, struct generic_acl_operations *, int,
			char *, size_t);
int generic_acl_get(struct inode *, struct generic_acl_operations *, int,
		    void *, size_t);
int generic_acl_set(struct inode *, struct generic_acl_operations *, int,
		    const void *, size_t);
int generic_acl_init(struct inode *, struct inode *,
		     struct generic_acl_operations *);
int generic_acl_chmod(struct inode *, struct generic_acl_operations *);

#endif
