xref: /csrg-svn/sbin/mount/vfslist.c (revision 69297)
1*69297Smckusick /*
2*69297Smckusick  * Copyright (c) 1995
3*69297Smckusick  *	The Regents of the University of California.  All rights reserved.
4*69297Smckusick  *
5*69297Smckusick  * %sccs.include.redist.c%
6*69297Smckusick  */
7*69297Smckusick 
8*69297Smckusick #ifndef lint
9*69297Smckusick static char sccsid[] = "@(#)vfslist.c	8.1 (Berkeley) 05/08/95";
10*69297Smckusick #endif /* not lint */
11*69297Smckusick 
12*69297Smckusick #include <stdlib.h>
13*69297Smckusick #include <string.h>
14*69297Smckusick #include <unistd.h>
15*69297Smckusick 
16*69297Smckusick int		  checkvfsname __P((const char *, const char **));
17*69297Smckusick const char	**makevfslist __P((char *));
18*69297Smckusick static int	  skipvfs;
19*69297Smckusick 
20*69297Smckusick int
checkvfsname(vfsname,vfslist)21*69297Smckusick checkvfsname(vfsname, vfslist)
22*69297Smckusick 	const char *vfsname;
23*69297Smckusick 	const char **vfslist;
24*69297Smckusick {
25*69297Smckusick 
26*69297Smckusick 	if (vfslist == NULL)
27*69297Smckusick 		return (0);
28*69297Smckusick 	while (*vfslist != NULL) {
29*69297Smckusick 		if (strcmp(vfsname, *vfslist) == 0)
30*69297Smckusick 			return (skipvfs);
31*69297Smckusick 		++vfslist;
32*69297Smckusick 	}
33*69297Smckusick 	return (!skipvfs);
34*69297Smckusick }
35*69297Smckusick 
36*69297Smckusick const char **
makevfslist(fslist)37*69297Smckusick makevfslist(fslist)
38*69297Smckusick 	char *fslist;
39*69297Smckusick {
40*69297Smckusick 	const char **av;
41*69297Smckusick 	int i;
42*69297Smckusick 	char *nextcp;
43*69297Smckusick 
44*69297Smckusick 	if (fslist == NULL)
45*69297Smckusick 		return (NULL);
46*69297Smckusick 	if (fslist[0] == 'n' && fslist[1] == 'o') {
47*69297Smckusick 		fslist += 2;
48*69297Smckusick 		skipvfs = 1;
49*69297Smckusick 	}
50*69297Smckusick 	for (i = 0, nextcp = fslist; *nextcp; nextcp++)
51*69297Smckusick 		if (*nextcp == ',')
52*69297Smckusick 			i++;
53*69297Smckusick 	if ((av = malloc((size_t)(i + 2) * sizeof(char *))) == NULL) {
54*69297Smckusick 		warn(NULL);
55*69297Smckusick 		return (NULL);
56*69297Smckusick 	}
57*69297Smckusick 	nextcp = fslist;
58*69297Smckusick 	i = 0;
59*69297Smckusick 	av[i++] = nextcp;
60*69297Smckusick 	while ((nextcp = strchr(nextcp, ',')) != NULL) {
61*69297Smckusick 		*nextcp++ = '\0';
62*69297Smckusick 		av[i++] = nextcp;
63*69297Smckusick 	}
64*69297Smckusick 	av[i++] = NULL;
65*69297Smckusick 	return (av);
66*69297Smckusick }
67