2 * getvfsent.c - get a listing of installed filesystems
3 * Written September 1994 by Garrett A. Wollman
4 * This file is in the public domain.
6 * $FreeBSD: src/lib/libc/gen/getvfsent.c,v 1.14.2.1 2001/03/05 09:19:38 obrien Exp $
7 * $DragonFly: src/lib/libc/gen/getvfsent.c,v 1.2 2003/06/17 04:26:42 dillon Exp $
10 #include <sys/param.h>
11 #include <sys/types.h>
12 #include <sys/mount.h>
13 #include <sys/sysctl.h>
22 /* XXX hide some compatibility problems. */
24 #define vfsconf ovfsconf
26 static struct vfsconf *_vfslist = 0;
27 static struct vfsconf _vfsconf;
28 static size_t _vfslistlen = 0;
29 static int _vfs_keeplist = 0;
30 static int _vfs_index = 0;
35 int mib[2] = { CTL_VFS, VFS_VFSCONF };
39 rv = sysctl(mib, 2, (void *)0, &size, (void *)0, (size_t)0);
45 _vfslist = malloc(size);
49 rv = sysctl(mib, 2, _vfslist, &size, (void *)0, (size_t)0);
56 _vfslistlen = size / sizeof _vfslist[0];
63 if(!_vfslist && !initvfs()) {
68 if(_vfs_index >= _vfslistlen) {
72 _vfsconf = _vfslist[_vfs_index++];
73 } while(!_vfsconf.vfc_vfsops);
83 getvfsbyname(const char *name)
87 if(!_vfslist && !initvfs()) {
91 for(i = 0; i < _vfslistlen; i++) {
92 if( ! strcmp(_vfslist[i].vfc_name, name) )
97 _vfsconf = _vfslist[i];
105 if(i < _vfslistlen) {
113 getvfsbytype(int type)
117 if(!_vfslist && !initvfs()) {
121 for(i = 0; i < _vfslistlen; i++) {
122 if(_vfslist[i].vfc_index == type)
126 if(i < _vfslistlen) {
127 _vfsconf = _vfslist[i];
135 if(i < _vfslistlen) {
145 if(_vfslist && !keep) {
150 _vfs_keeplist = keep;
166 vfsisloadable(const char *name)
172 vfsload(const char *name)
176 status = kldload(name);
177 return status == -1 ? status : 0;