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.3 2005/04/26 06:16:29 joerg Exp $
10 #include <sys/param.h>
11 #include <sys/linker.h>
12 #include <sys/mount.h>
13 #include <sys/sysctl.h>
18 /* XXX hide some compatibility problems. */
21 static struct ovfsconf *_vfslist = 0;
22 static struct ovfsconf _vfsconf;
23 static size_t _vfslistlen = 0;
24 static int _vfs_keeplist = 0;
25 static size_t _vfs_index = 0;
30 int mib[2] = { CTL_VFS, VFS_VFSCONF };
34 rv = sysctl(mib, 2, NULL, &size, NULL, (size_t)0);
40 _vfslist = malloc(size);
44 rv = sysctl(mib, 2, _vfslist, &size, NULL, (size_t)0);
51 _vfslistlen = size / sizeof(_vfslist[0]);
58 if(!_vfslist && !initvfs())
62 if(_vfs_index >= _vfslistlen)
65 _vfsconf = _vfslist[_vfs_index++];
66 } while(!_vfsconf.vfc_vfsops);
76 getvfsbyname(const char *name)
80 if(!_vfslist && !initvfs())
83 for(i = 0; i < _vfslistlen; i++) {
84 if( ! strcmp(_vfslist[i].vfc_name, name) )
89 _vfsconf = _vfslist[i];
103 getvfsbytype(int type)
107 if(!_vfslist && !initvfs())
110 for(i = 0; i < _vfslistlen; i++) {
111 if(_vfslist[i].vfc_index == type)
116 _vfsconf = _vfslist[i];
132 if(_vfslist && !keep) {
137 _vfs_keeplist = keep;
153 vfsisloadable(const char *name __unused)
159 vfsload(const char *name)
163 status = kldload(name);
164 return status == -1 ? status : 0;