Update.
[glibc.git] / misc / fstab.c
blob8b87a1f1f0e00b3c51a2ba3feb7cb2fc76bd5b19
1 /* Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public License as
6 published by the Free Software Foundation; either version 2 of the
7 License, or (at your option) any later version.
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
14 You should have received a copy of the GNU Library General Public
15 License along with the GNU C Library; see the file COPYING.LIB. If not,
16 write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 Boston, MA 02111-1307, USA. */
19 #include <fstab.h>
20 #include <mntent.h>
21 #include <stdio.h>
23 static FILE *fstab;
24 static struct mntent mntres;
25 static char buffer[8192];
28 static FILE *
29 fstab_stream (void)
31 if (! fstab)
32 fstab = setmntent (_PATH_FSTAB, "r");
33 return fstab;
36 int
37 setfsent (void)
39 if (fstab)
41 rewind (fstab);
42 return 1;
44 else
45 fstab = setmntent (_PATH_FSTAB, "r");
46 return fstab ? 0 : 1;
49 static struct fstab *
50 internal_function
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;