X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=support%2Fnfs%2Ffstab.c;h=ba7e580eb08f97978bee156a9e81ecc6dc4b0120;hp=23ea927cc8b80624463345679a18fe5bda16db6c;hb=ae5ec51e0ddc99dc5552e51bd5c095084dbb61aa;hpb=3eb4c9aaa218f2af4bbea2073f02e419c50d3d3d 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. */