1/* 2 Copyright (c) 2004 Didier Gautheron 3 4 This program is free software; you can redistribute it and/or modify 5 it under the terms of the GNU General Public License as published by 6 the Free Software Foundation; either version 2 of the License, or 7 (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 18 vfs layer for afp 19*/ 20 21#ifndef ATALK_VFS_H 22#define ATALK_VFS_H 23 24#ifdef HAVE_CONFIG_H 25#include "config.h" 26#endif /* HAVE_CONFIG_H */ 27 28#include <atalk/adouble.h> 29#include <atalk/volume.h> 30#include <atalk/acl.h> 31 32#define VFS_FUNC_ARGS_VALIDUPATH const struct vol *vol, const char *name 33#define VFS_FUNC_VARS_VALIDUPATH vol, name 34 35#define VFS_FUNC_ARGS_CHOWN const struct vol *vol, const char *path, uid_t uid, gid_t gid 36#define VFS_FUNC_VARS_CHOWN vol, path, uid, gid 37 38#define VFS_FUNC_ARGS_RENAMEDIR const struct vol *vol, int dirfd, const char *oldpath, const char *newpath 39#define VFS_FUNC_VARS_RENAMEDIR vol, dirfd, oldpath, newpath 40 41#define VFS_FUNC_ARGS_DELETECURDIR const struct vol *vol 42#define VFS_FUNC_VARS_DELETECURDIR vol 43 44#define VFS_FUNC_ARGS_SETFILEMODE const struct vol *vol, const char *name, mode_t mode, struct stat *st 45#define VFS_FUNC_VARS_SETFILEMODE vol, name, mode, st 46 47#define VFS_FUNC_ARGS_SETDIRMODE const struct vol *vol, const char *name, mode_t mode, struct stat *st 48#define VFS_FUNC_VARS_SETDIRMODE vol, name, mode, st 49 50#define VFS_FUNC_ARGS_SETDIRUNIXMODE const struct vol *vol, const char *name, mode_t mode, struct stat *st 51#define VFS_FUNC_VARS_SETDIRUNIXMODE vol, name, mode, st 52 53#define VFS_FUNC_ARGS_SETDIROWNER const struct vol *vol, const char *name, uid_t uid, gid_t gid 54#define VFS_FUNC_VARS_SETDIROWNER vol, name, uid, gid 55 56#define VFS_FUNC_ARGS_DELETEFILE const struct vol *vol, int dirfd, const char *file 57#define VFS_FUNC_VARS_DELETEFILE vol, dirfd, file 58 59#define VFS_FUNC_ARGS_RENAMEFILE const struct vol *vol, int dirfd, const char *src, const char *dst 60#define VFS_FUNC_VARS_RENAMEFILE vol, dirfd, src, dst 61 62#define VFS_FUNC_ARGS_COPYFILE const struct vol *vol, int sfd, const char *src, const char *dst 63#define VFS_FUNC_VARS_COPYFILE vol, sfd, src, dst 64 65#ifdef HAVE_SOLARIS_ACLS 66#define VFS_FUNC_ARGS_ACL const struct vol *vol, const char *path, int cmd, int count, void *aces 67#define VFS_FUNC_VARS_ACL vol, path, cmd, count, aces 68#endif 69#ifdef HAVE_POSIX_ACLS 70#define VFS_FUNC_ARGS_ACL const struct vol *vol, const char *path, acl_type_t type, int count, acl_t acl 71#define VFS_FUNC_VARS_ACL vol, path, type, count, acl 72#endif 73 74#define VFS_FUNC_ARGS_REMOVE_ACL const struct vol *vol, const char *path, int dir 75#define VFS_FUNC_VARS_REMOVE_ACL vol, path, dir 76 77#define VFS_FUNC_ARGS_EA_GETSIZE const struct vol * __restrict vol, char * __restrict rbuf, size_t * __restrict rbuflen, const char * __restrict uname, int oflag, const char * __restrict attruname 78#define VFS_FUNC_VARS_EA_GETSIZE vol, rbuf, rbuflen, uname, oflag, attruname 79 80#define VFS_FUNC_ARGS_EA_GETCONTENT const struct vol * __restrict vol, char * __restrict rbuf, size_t * __restrict rbuflen, const char * __restrict uname, int oflag, const char * __restrict attruname, int maxreply 81#define VFS_FUNC_VARS_EA_GETCONTENT vol, rbuf, rbuflen, uname, oflag, attruname, maxreply 82 83#define VFS_FUNC_ARGS_EA_LIST const struct vol * __restrict vol, char * __restrict attrnamebuf, size_t * __restrict buflen, const char * __restrict uname, int oflag 84#define VFS_FUNC_VARS_EA_LIST vol, attrnamebuf, buflen, uname, oflag 85 86#define VFS_FUNC_ARGS_EA_SET const struct vol * __restrict vol, const char * __restrict uname, const char * __restrict attruname, const char * __restrict ibuf, size_t attrsize, int oflag 87#define VFS_FUNC_VARS_EA_SET vol, uname, attruname, ibuf, attrsize, oflag 88 89#define VFS_FUNC_ARGS_EA_REMOVE const struct vol * __restrict vol, const char * __restrict uname, const char * __restrict attruname, int oflag 90#define VFS_FUNC_VARS_EA_REMOVE vol, uname, attruname, oflag 91 92/* 93 * Forward declaration. We need it because of the circular inclusion of 94 * of vfs.h <-> volume.h. 95 */ 96struct vol; 97 98struct vfs_ops { 99 int (*vfs_validupath) (VFS_FUNC_ARGS_VALIDUPATH); 100 int (*vfs_chown) (VFS_FUNC_ARGS_CHOWN); 101 int (*vfs_renamedir) (VFS_FUNC_ARGS_RENAMEDIR); 102 int (*vfs_deletecurdir) (VFS_FUNC_ARGS_DELETECURDIR); 103 int (*vfs_setfilmode) (VFS_FUNC_ARGS_SETFILEMODE); 104 int (*vfs_setdirmode) (VFS_FUNC_ARGS_SETDIRMODE); 105 int (*vfs_setdirunixmode)(VFS_FUNC_ARGS_SETDIRUNIXMODE); 106 int (*vfs_setdirowner) (VFS_FUNC_ARGS_SETDIROWNER); 107 int (*vfs_deletefile) (VFS_FUNC_ARGS_DELETEFILE); 108 int (*vfs_renamefile) (VFS_FUNC_ARGS_RENAMEFILE); 109 int (*vfs_copyfile) (VFS_FUNC_ARGS_COPYFILE); 110 111#ifdef HAVE_ACLS 112 /* ACLs */ 113 int (*vfs_acl) (VFS_FUNC_ARGS_ACL); 114 int (*vfs_remove_acl) (VFS_FUNC_ARGS_REMOVE_ACL); 115#endif 116 117 /* Extended Attributes */ 118 int (*vfs_ea_getsize) (VFS_FUNC_ARGS_EA_GETSIZE); 119 int (*vfs_ea_getcontent) (VFS_FUNC_ARGS_EA_GETCONTENT); 120 int (*vfs_ea_list) (VFS_FUNC_ARGS_EA_LIST); 121 int (*vfs_ea_set) (VFS_FUNC_ARGS_EA_SET); 122 int (*vfs_ea_remove) (VFS_FUNC_ARGS_EA_REMOVE); 123}; 124 125extern void initvol_vfs(struct vol * __restrict vol); 126 127#endif /* ATALK_VFS_H */ 128