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