]> arthur.barton.de Git - netatalk.git/blob - include/atalk/vfs.h
afpd: Solaris locking problem, bug #559
[netatalk.git] / include / atalk / vfs.h
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_NFSV4_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, int fd
78 #define VFS_FUNC_VARS_EA_GETSIZE vol, rbuf, rbuflen, uname, oflag, attruname, fd
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, int fd
81 #define VFS_FUNC_VARS_EA_GETCONTENT vol, rbuf, rbuflen, uname, oflag, attruname, maxreply, fd
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, int fd
84 #define VFS_FUNC_VARS_EA_LIST vol, attrnamebuf, buflen, uname, oflag, fd
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, int fd
87 #define VFS_FUNC_VARS_EA_SET vol, uname, attruname, ibuf, attrsize, oflag, fd
88
89 #define VFS_FUNC_ARGS_EA_REMOVE const struct vol * restrict vol, const char * restrict uname, const char * restrict attruname, int oflag, int fd
90 #define VFS_FUNC_VARS_EA_REMOVE vol, uname, attruname, oflag, fd
91
92 /*
93  * Forward declaration. We need it because of the circular inclusion of
94  * of vfs.h <-> volume.h. 
95  */
96 struct vol;
97
98 struct 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
125 extern void initvol_vfs(struct vol * restrict vol);
126
127 #endif /* ATALK_VFS_H */