1*68721Smckusick /*
2*68721Smckusick * Copyright (c) 1995
3*68721Smckusick * The Regents of the University of California. All rights reserved.
4*68721Smckusick *
5*68721Smckusick * %sccs.include.redist.c%
6*68721Smckusick */
7*68721Smckusick
8*68721Smckusick #ifndef lint
9*68721Smckusick static char sccsid[] = "@(#)getvfsbyname.c 8.1 (Berkeley) 04/03/95";
10*68721Smckusick #endif /* not lint */
11*68721Smckusick
12*68721Smckusick #include <sys/param.h>
13*68721Smckusick #include <sys/mount.h>
14*68721Smckusick #include <sys/sysctl.h>
15*68721Smckusick #include <errno.h>
16*68721Smckusick #include <kvm.h>
17*68721Smckusick
18*68721Smckusick int getvfsbyname __P((const char *, struct vfsconf *));
19*68721Smckusick
20*68721Smckusick /*
21*68721Smckusick * Given a filesystem name, determine if it is resident in the kernel,
22*68721Smckusick * and if it is resident, return its vfsconf structure.
23*68721Smckusick */
getvfsbyname(fsname,vfcp)24*68721Smckusick getvfsbyname(fsname, vfcp)
25*68721Smckusick const char *fsname;
26*68721Smckusick struct vfsconf *vfcp;
27*68721Smckusick {
28*68721Smckusick int name[4], maxtypenum, cnt;
29*68721Smckusick size_t buflen;
30*68721Smckusick
31*68721Smckusick name[0] = CTL_VFS;
32*68721Smckusick name[1] = VFS_GENERIC;
33*68721Smckusick name[2] = VFS_MAXTYPENUM;
34*68721Smckusick buflen = 4;
35*68721Smckusick if (sysctl(name, 3, &maxtypenum, &buflen, (void *)0, (size_t)0) < 0)
36*68721Smckusick return (-1);
37*68721Smckusick name[2] = VFS_CONF;
38*68721Smckusick buflen = sizeof *vfcp;
39*68721Smckusick for (cnt = 0; cnt < maxtypenum; cnt++) {
40*68721Smckusick name[3] = cnt;
41*68721Smckusick if (sysctl(name, 4, vfcp, &buflen, (void *)0, (size_t)0) < 0) {
42*68721Smckusick if (errno != EOPNOTSUPP)
43*68721Smckusick return (-1);
44*68721Smckusick continue;
45*68721Smckusick }
46*68721Smckusick if (!strcmp(fsname, vfcp->vfc_name))
47*68721Smckusick return (0);
48*68721Smckusick }
49*68721Smckusick errno = ENOENT;
50*68721Smckusick return (-1);
51*68721Smckusick }
52