Don't increment __offset when it's -1.
[glibc/history.git] / misc / fstab.c
blobc3c27df6ef6605674288153d0a5de5c81b4c6269
1 /*
2 Copyright (C) 1995 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;
26 static FILE *
27 fstab_stream (void)
29 if (! fstab)
30 fstab = setmntent (_PATH_FSTAB, "r");
31 return fstab;
34 int
35 setfsent (void)
37 if (fstab)
39 rewind (fstab);
40 return 1;
42 else
43 fstab = setmntent (_PATH_FSTAB, "r");
44 return fstab ? 0 : 1;
47 static struct fstab *
48 mnt2fs (struct mntent *m)
50 static struct fstab f;
51 f.fs_spec = m->mnt_fsname;
52 f.fs_file = m->mnt_dir;
53 f.fs_vfstype = m->mnt_type;
54 f.fs_mntops = m->mnt_opts;
55 f.fs_type = (hasmntopt (m, FSTAB_RW) ? (char *) FSTAB_RW :
56 hasmntopt (m, FSTAB_RQ) ? (char *) FSTAB_RQ :
57 hasmntopt (m, FSTAB_RO) ? (char *) FSTAB_RO :
58 hasmntopt (m, FSTAB_SW) ? (char *) FSTAB_SW :
59 hasmntopt (m, FSTAB_XX) ? (char *) FSTAB_XX :
60 (char *) "??");
61 f.fs_freq = m->mnt_freq;
62 f.fs_passno = m->mnt_passno;
63 return &f;
66 struct fstab *
67 getfsent (void)
69 FILE *s = fstab_stream ();
71 if (! s)
72 return NULL;
74 return mnt2fs (getmntent (s));
77 struct fstab *
78 getfsspec (name)
79 register const char *name;
81 struct mntent *m;
82 if (setfsent ())
83 while (m = getmntent (fstab))
84 if (!strcmp (m->mnt_fsname, name))
85 return mnt2fs (m);
86 return NULL;
89 struct fstab *
90 getfsfile (name)
91 register const char *name;
93 struct mntent *m;
94 if (setfsent ())
95 while (m = getmntent (fstab))
96 if (!strcmp (m->mnt_dir, name))
97 return mnt2fs (m);
98 return NULL;
101 void
102 endfsent ()
104 if (fstab)
106 (void) endmntent (fstab);
107 fstab = NULL;