update from main archive 970129
[glibc.git] / misc / fstab.c
blob7f68cb13095845f85fbc0ada0974cfaa51147045
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 mnt2fs (struct mntent *m)
52 static struct fstab f;
54 if (m == NULL)
55 return NULL;
57 f.fs_spec = m->mnt_fsname;
58 f.fs_file = m->mnt_dir;
59 f.fs_vfstype = m->mnt_type;
60 f.fs_mntops = m->mnt_opts;
61 f.fs_type = (hasmntopt (m, FSTAB_RW) ? (char *) FSTAB_RW :
62 hasmntopt (m, FSTAB_RQ) ? (char *) FSTAB_RQ :
63 hasmntopt (m, FSTAB_RO) ? (char *) FSTAB_RO :
64 hasmntopt (m, FSTAB_SW) ? (char *) FSTAB_SW :
65 hasmntopt (m, FSTAB_XX) ? (char *) FSTAB_XX :
66 (char *) "??");
67 f.fs_freq = m->mnt_freq;
68 f.fs_passno = m->mnt_passno;
69 return &f;
72 struct fstab *
73 getfsent (void)
75 FILE *s = fstab_stream ();
77 if (! s)
78 return NULL;
80 return mnt2fs (__getmntent_r (s, &mntres, buffer, sizeof buffer));
83 struct fstab *
84 getfsspec (name)
85 register const char *name;
87 struct mntent *m;
88 if (setfsent ())
89 while (m = __getmntent_r (fstab, &mntres, buffer, sizeof buffer))
90 if (!strcmp (m->mnt_fsname, name))
91 return mnt2fs (m);
92 return NULL;
95 struct fstab *
96 getfsfile (name)
97 register const char *name;
99 struct mntent *m;
100 if (setfsent ())
101 while (m = __getmntent_r (fstab, &mntres, buffer, sizeof buffer))
102 if (!strcmp (m->mnt_dir, name))
103 return mnt2fs (m);
104 return NULL;
107 void
108 endfsent ()
110 if (fstab)
112 (void) endmntent (fstab);
113 fstab = NULL;