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 $
10 #include <sys/linker.h>
11 #include <sys/mount.h>
12 #include <sys/sysctl.h>
17 /* XXX hide some compatibility problems. */
20 static struct ovfsconf
*_vfslist
= NULL
;
21 static struct ovfsconf _vfsconf
;
22 static size_t _vfslistlen
= 0;
23 static int _vfs_keeplist
= 0;
24 static size_t _vfs_index
= 0;
29 int mib
[2] = { CTL_VFS
, VFS_VFSCONF
};
33 rv
= sysctl(mib
, 2, NULL
, &size
, NULL
, (size_t)0);
39 _vfslist
= malloc(size
);
43 rv
= sysctl(mib
, 2, _vfslist
, &size
, NULL
, (size_t)0);
50 _vfslistlen
= size
/ sizeof(_vfslist
[0]);
57 if(!_vfslist
&& !initvfs())
61 if(_vfs_index
>= _vfslistlen
)
64 _vfsconf
= _vfslist
[_vfs_index
++];
65 } while(!_vfsconf
.vfc_vfsops
);
75 getvfsbyname(const char *name
)
79 if(!_vfslist
&& !initvfs())
82 for(i
= 0; i
< _vfslistlen
; i
++) {
83 if( ! strcmp(_vfslist
[i
].vfc_name
, name
) )
88 _vfsconf
= _vfslist
[i
];
102 getvfsbytype(int type
)
106 if(!_vfslist
&& !initvfs())
109 for(i
= 0; i
< _vfslistlen
; i
++) {
110 if(_vfslist
[i
].vfc_index
== type
)
115 _vfsconf
= _vfslist
[i
];
131 if(_vfslist
&& !keep
) {
136 _vfs_keeplist
= keep
;
152 vfsisloadable(const char *name __unused
)
158 vfsload(const char *name
)
162 status
= kldload(name
);
163 return status
== -1 ? status
: 0;