date and time created 94/03/27 08:07:46 by bostic
[unix-history] / usr / src / sbin / mount / getmntopts.c
CommitLineData
f6019b74
KB
1/*-
2 * Copyright (c) 1994
3 * The Regents of the University of California. All rights reserved.
4 *
5 * %sccs.include.redist.c%
6 */
7
8#ifndef lint
9static char sccsid[] = "@(#)getmntopts.c 8.1 (Berkeley) %G%";
10#endif /* not lint */
11
12#include <sys/param.h>
13#include <sys/mount.h>
14
15#include <err.h>
16#include <errno.h>
17#include <fstab.h>
18#include <stdlib.h>
19#include <string.h>
20
21#include "mntopts.h"
22
23void
24getmntopts(options, m0, flagp)
25 const char *options;
26 const struct mntopt *m0;
27 int *flagp;
28{
29 const struct mntopt *m;
30 int negative;
31 char *opt, *optbuf;
32
33 /* Copy option string, since it is about to be torn asunder... */
34 if ((optbuf = strdup(options)) == NULL)
35 err(1, NULL);
36
37 for (opt = optbuf; (opt = strtok(opt, ",")) != NULL; opt = NULL) {
38 /* Check for "no" prefix. */
39 if (opt[0] == 'n' && opt[1] == 'o') {
40 negative = 1;
41 opt += 2;
42 } else
43 negative = 0;
44
45 /* Scan option table. */
46 for (m = m0; m->m_option != NULL; ++m)
47 if (strcasecmp(opt, m->m_option) == 0)
48 break;
49
50 /* Save flag, or fail if option is not recognised. */
51 if (m->m_option) {
52 if (negative == m->m_inverse)
53 *flagp |= m->m_flag;
54 else
55 *flagp &= ~m->m_flag;
56 } else
57 errx(1, "-o %s: option not supported", opt);
58 }
59
60 free(optbuf);
61}