summaryrefslogtreecommitdiffstats
path: root/support/nfs
diff options
context:
space:
mode:
Diffstat (limited to 'support/nfs')
-rw-r--r--support/nfs/fstab.c58
1 files changed, 58 insertions, 0 deletions
diff --git a/support/nfs/fstab.c b/support/nfs/fstab.c
index 23ea927..ba7e580 100644
--- a/support/nfs/fstab.c
+++ b/support/nfs/fstab.c
@@ -80,8 +80,11 @@ mtab_is_writable() {
struct mntentchn mounttable;
static int got_mtab = 0;
+struct mntentchn fstab;
+static int got_fstab = 0;
static void read_mounttable(void);
+static void read_fstab(void);
static struct mntentchn *
mtab_head() {
@@ -90,6 +93,14 @@ mtab_head() {
return &mounttable;
}
+static struct mntentchn *
+fstab_head()
+{
+ if (!got_fstab)
+ read_fstab();
+ return &fstab;
+}
+
static void
my_free(const void *s) {
if (s)
@@ -167,6 +178,27 @@ read_mounttable() {
read_mntentchn(mfp, fnam, mc);
}
+static void
+read_fstab()
+{
+ mntFILE *mfp = NULL;
+ const char *fnam;
+ struct mntentchn *mc = &fstab;
+
+ got_fstab = 1;
+ mc->nxt = mc->prev = NULL;
+
+ fnam = _PATH_FSTAB;
+ mfp = nfs_setmntent (fnam, "r");
+ if (mfp == NULL || mfp->mntent_fp == NULL) {
+ int errsv = errno;
+ error(_("warning: can't open %s: %s"),
+ _PATH_FSTAB, strerror (errsv));
+ return;
+ }
+ read_mntentchn(mfp, fnam, mc);
+}
+
/*
* Given the directory name NAME, and the place MCPREV we found it last time,
* try to find more occurrences.
@@ -201,6 +233,32 @@ getmntdevbackward (const char *name, struct mntentchn *mcprev) {
return NULL;
}
+/* Find the dir FILE in fstab. */
+struct mntentchn *
+getfsfile (const char *file)
+{
+ struct mntentchn *mc, *mc0;
+
+ mc0 = fstab_head();
+ for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
+ if (streq(mc->m.mnt_dir, file))
+ return mc;
+ return NULL;
+}
+
+/* Find the device SPEC in fstab. */
+struct mntentchn *
+getfsspec (const char *spec)
+{
+ struct mntentchn *mc, *mc0;
+
+ mc0 = fstab_head();
+ for (mc = mc0->nxt; mc && mc != mc0; mc = mc->nxt)
+ if (streq(mc->m.mnt_fsname, spec))
+ return mc;
+ return NULL;
+}
+
/* Updating mtab ----------------------------------------------*/
/* Flag for already existing lock file. */