Merge from vendor branch GDB:
[dragonfly.git] / contrib / amd / amd / ops_TEMPLATE.c
1 /*
2  * Copyright (c) 1997-1999 Erez Zadok
3  * Copyright (c) 1990 Jan-Simon Pendry
4  * Copyright (c) 1990 Imperial College of Science, Technology & Medicine
5  * Copyright (c) 1990 The Regents of the University of California.
6  * All rights reserved.
7  *
8  * This code is derived from software contributed to Berkeley by
9  * Jan-Simon Pendry at Imperial College, London.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  * 3. All advertising materials mentioning features or use of this software
20  *    must display the following acknowledgment:
21  *      This product includes software developed by the University of
22  *      California, Berkeley and its contributors.
23  * 4. Neither the name of the University nor the names of its contributors
24  *    may be used to endorse or promote products derived from this software
25  *    without specific prior written permission.
26  *
27  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
28  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
31  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
32  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
33  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
34  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
36  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
37  * SUCH DAMAGE.
38  *
39  *      %W% (Berkeley) %G%
40  *
41  * $Id: ops_TEMPLATE.c,v 1.2 1999/01/10 21:53:48 ezk Exp $
42  *
43  */
44
45 /*
46  * An empty template for an amd pseudo filesystem "foofs".
47  */
48
49 /*
50  * NOTE: if this is an Amd file system, prepend "amfs_" to all foofs symbols
51  * and renamed the file name to amfs_foofs.c.  If it is a native file system
52  * (such as pcfs, isofs, or ffs), then you can keep the names as is, and
53  * just rename the file to ops_foofs.c.
54  */
55
56 #ifdef HAVE_CONFIG_H
57 # include <config.h>
58 #endif /* HAVE_CONFIG_H */
59 #include <am_defs.h>
60 #include <amd.h>
61
62 /* forward declarations */
63 static char * foofs_match(am_opts *fo);
64 static int foofs_init(mntfs *mf);
65 static int foofs_mount(am_node *mp);
66 static int foofs_fmount(mntfs *mf);
67 static int foofs_umount(am_node *mp);
68 static int foofs_fumount(mntfs *mf);
69 static am_node * foofs_lookuppn(am_node *mp, char *fname, int *error_return, int op);
70 static int foofs_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count);
71 static am_node * foofs_readlink(am_node *mp, int *error_return);
72 static void foofs_mounted(mntfs *mf);
73 static void foofs_umounted(am_node *mp);
74 fserver * foofs_ffserver(mntfs *mf);
75
76
77 /*
78  * Foofs operations.
79  * Define only those you need, others set to 0 (NULL)
80  */
81 am_ops foofs_ops =
82 {
83   "foofs",                      /* name of file system */
84   foofs_match,                  /* match */
85   foofs_init,                   /* initialize */
86   foofs_mount,                  /* mount vnode */
87   foofs_fmount,                 /* mount vfs */
88   foofs_umount,                 /* unmount vnode */
89   foofs_fumount,                /* unmount VFS */
90   foofs_lookuppn,               /* lookup path-name */
91   foofs_readdir,                /* read directory */
92   foofs_readlink,               /* read link */
93   foofs_mounted,                /* after-mount extra actions */
94   foofs_umounted,               /* after-umount extra actions */
95   foofs_ffserver,               /* find a file server */
96   FS_MKMNT | FS_BACKGROUND | FS_AMQINFO /* flags */
97 };
98
99
100 /*
101  * Check that f/s has all needed fields.
102  * Returns: matched string if found, NULL otherwise.
103  */
104 static char *
105 foofs_match(am_opts *fo)
106 {
107   char *cp = "fill this with a way to find the match";
108
109   plog(XLOG_INFO, "entering foofs_match...");
110
111   if (cp)
112     return cp;                  /* OK */
113
114   return NULL;                  /* not OK */
115 }
116
117
118 /*
119  * Initialize.
120  * Returns: 0 if OK, non-zero (errno) if failed.
121  */
122 static int
123 foofs_init(mntfs *mf)
124 {
125   int error = 0;
126
127   plog(XLOG_INFO, "entering foofs_init...");
128
129   error = EPERM;                /* XXX: fixme */
130   return error;
131 }
132
133
134 /*
135  * Mount vnode.
136  * Returns: 0 if OK, non-zero (errno) if failed.
137  */
138 static int
139 foofs_mount(am_node *mp)
140 {
141   int error = 0;
142
143   plog(XLOG_INFO, "entering foofs_mount...");
144
145   error = EPERM;                /* XXX: fixme */
146   return error;
147 }
148
149
150 /*
151  * Mount vfs.
152  * Returns: 0 if OK, non-zero (errno) if failed.
153  */
154 static int
155 foofs_fmount(mntfs *mf)
156 {
157   int error = 0;
158
159   plog(XLOG_INFO, "entering foofs_fmount...");
160
161   error = EPERM;                /* XXX: fixme */
162   return error;
163 }
164
165
166 /*
167  * Unmount vnode.
168  * Returns: 0 if OK, non-zero (errno) if failed.
169  */
170 static int
171 foofs_umount(am_node *mp)
172 {
173   int error = 0;
174
175   plog(XLOG_INFO, "entering foofs_umount...");
176
177   error = EPERM;                /* XXX: fixme */
178   return error;
179 }
180
181
182 /*
183  * Unmount VFS.
184  * Returns: 0 if OK, non-zero (errno) if failed.
185  */
186 static int
187 foofs_fumount(mntfs *mf)
188 {
189   int error = 0;
190
191   plog(XLOG_INFO, "entering foofs_fumount...");
192
193   error = EPERM;                /* XXX: fixme */
194   return error;
195 }
196
197
198 /*
199  * Lookup path-name.
200  * Returns: the am_node that was found, or NULL if failed.
201  * If failed, also fills in errno in error_return.
202  */
203 static am_node *
204 foofs_lookuppn(am_node *mp, char *fname, int *error_return, int op)
205 {
206   int error = 0;
207
208   plog(XLOG_INFO, "entering foofs_lookuppn...");
209
210   error = EPERM;                        /* XXX: fixme */
211
212   *error_return = error;
213   return NULL;
214 }
215
216
217 /*
218  * Read directory.
219  * Returns: 0 if OK, non-zero (errno) if failed.
220  * If OK, fills in ep with chain of directory entries.
221  */
222 static int
223 foofs_readdir(am_node *mp, nfscookie cookie, nfsdirlist *dp, nfsentry *ep, int count)
224 {
225   int error = 0;
226
227   plog(XLOG_INFO, "entering foofs_readdir...");
228
229   error = EPERM;                /* XXX: fixme */
230   return error;
231 }
232
233
234 /*
235  * Read link.
236  * Returns: am_node found, or NULL if not found.
237  * If failed, fills in errno in error_return.
238  */
239 static am_node *
240 foofs_readlink(am_node *mp, int *error_return)
241 {
242   int error = 0;
243
244   plog(XLOG_INFO, "entering foofs_readlink...");
245
246   error = EPERM;                        /* XXX: fixme */
247
248   *error_return = error;
249   return NULL;
250 }
251
252
253 /*
254  * Async mount callback function.
255  * After the base mount went OK, sometimes
256  * there are additional actions that are needed.  See union_mounted() and
257  * toplvl_mounted().
258  */
259 static void
260 foofs_mounted(mntfs *mf)
261 {
262   plog(XLOG_INFO, "entering foofs_mounted...");
263
264   return;
265 }
266
267
268 /*
269  * Async unmount callback function.
270  * After the base umount() succeeds, we may want to take extra actions,
271  * such as informing remote mount daemons that we've unmounted them.
272  * See amfs_auto_umounted(), host_umounted(), nfs_umounted().
273  */
274 static void
275 foofs_umounted(am_node *mp)
276 {
277   plog(XLOG_INFO, "entering foofs_umounted...");
278
279   return;
280 }
281
282
283 /*
284  * Find a file server.
285  * Returns: fserver of found server, or NULL if not found.
286  */
287 fserver *
288 foofs_ffserver(mntfs *mf)
289 {
290   plog(XLOG_INFO, "entering foofs_ffserver...");
291
292   return NULL;
293 }