update from main archive 961016
[glibc.git] / misc / fstab.c
blob30a60a734c0c28f7fa4d00ceb8d04efd283cf2d1
1 /*
2 Copyright (C) 1995, 1996 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public License as
7 published by the Free Software Foundation; either version 2 of the
8 License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
15 You should have received a copy of the GNU Library General Public
16 License along with the GNU C Library; see the file COPYING.LIB. If
17 not, write to the Free Software Foundation, Inc., 675 Mass Ave,
18 Cambridge, MA 02139, USA. */
20 #include <fstab.h>
21 #include <mntent.h>
22 #include <stdio.h>
24 static FILE *fstab;
25 static struct mntent mntres;
26 static char buffer[8192];
29 static FILE *
30 fstab_stream (void)
32 if (! fstab)
33 fstab = setmntent (_PATH_FSTAB, "r");
34 return fstab;
37 int
38 setfsent (void)
40 if (fstab)
42 rewind (fstab);
43 return 1;
45 else
46 fstab = setmntent (_PATH_FSTAB, "r");
47 return fstab ? 0 : 1;
50 static struct fstab *
51 mnt2fs (struct mntent *m)
53 static struct fstab f;
55 if (m == NULL)
56 return NULL;
58 f.fs_spec = m->mnt_fsname;
59 f.fs_file = m->mnt_dir;
60 f.fs_vfstype = m->mnt_type;
61 f.fs_mntops = m->mnt_opts;
62 f.fs_type = (hasmntopt (m, FSTAB_RW) ? (char *) FSTAB_RW :
63 hasmntopt (m, FSTAB_RQ) ? (char *) FSTAB_RQ :
64 hasmntopt (m, FSTAB_RO) ? (char *) FSTAB_RO :
65 hasmntopt (m, FSTAB_SW) ? (char *) FSTAB_SW :
66 hasmntopt (m, FSTAB_XX) ? (char *) FSTAB_XX :
67 (char *) "??");
68 f.fs_freq = m->mnt_freq;
69 f.fs_passno = m->mnt_passno;
70 return &f;
73 struct fstab *
74 getfsent (void)
76 FILE *s = fstab_stream ();
78 if (! s)
79 return NULL;
81 return mnt2fs (__getmntent_r (s, &mntres, buffer, sizeof buffer));
84 struct fstab *
85 getfsspec (name)
86 register const char *name;
88 struct mntent *m;
89 if (setfsent ())
90 while (m = __getmntent_r (fstab, &mntres, buffer, sizeof buffer))
91 if (!strcmp (m->mnt_fsname, name))
92 return mnt2fs (m);
93 return NULL;
96 struct fstab *
97 getfsfile (name)
98 register const char *name;
100 struct mntent *m;
101 if (setfsent ())
102 while (m = __getmntent_r (fstab, &mntres, buffer, sizeof buffer))
103 if (!strcmp (m->mnt_dir, name))
104 return mnt2fs (m);
105 return NULL;
108 void
109 endfsent ()
111 if (fstab)
113 (void) endmntent (fstab);
114 fstab = NULL;