X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fmount.c;h=639ff4bcb9999335506828d70ce8df02978c1d7e;hp=5e0e599578a9cad26ea12916e6c49e0c3bb99f0f;hb=880305fe1659ab289a917c7627aa014343f46bc9;hpb=a0e8627a9265725f4ece39516d5b40ea2e7cc8ac diff --git a/utils/mount/mount.c b/utils/mount/mount.c index 5e0e599..639ff4b 100644 --- a/utils/mount/mount.c +++ b/utils/mount/mount.c @@ -139,7 +139,6 @@ static char * fix_opts_string (int flags, const char *extra_opts) { int add_mtab(char *fsname, char *mount_point, char *fstype, int flags, char *opts, int freq, int passno) { struct mntent ment; - int fd; FILE *mtab; ment.mnt_fsname = fsname; @@ -256,6 +255,26 @@ static void mount_error(char *node) } } +static void start_statd() +{ + /* If /var/run/rpc.statd.pid exists and is non-empty, + * assume statd already running. + * If START_STATD not defined, or defined to a non-existent file, + * don't bother, + * else run that file (typically a shell script) + */ + struct stat stb; + if (stat("/var/run/rpc.statd.pid", &stb) == 0 && + stb.st_size > 0) + return; +#ifdef START_STATD + if (stat(START_STATD, &stb) ==0 && + S_ISREG(stb.st_mode) && + (stb.st_mode & S_IXUSR)) + system(START_STATD); +#endif +} + int main(int argc, char *argv[]) { int c, flags = 0, nfs_mount_vers = 0, mnt_err = 1, fake = 0; @@ -276,7 +295,7 @@ int main(int argc, char *argv[]) umount_usage(); exit(1); } - return(nfsumount(argc, argv)); + exit(nfsumount(argc, argv) ? 0 : 1); } if ((argc < 2)) { @@ -359,11 +378,13 @@ int main(int argc, char *argv[]) nfs_mount_vers = 4; mnt_err = nfs4mount(spec, mount_point, &flags, &extra_opts, &mount_opts, 0); } - else { - if (!strcmp(progname, "mount.nfs")) { - mnt_err = nfsmount(spec, mount_point, &flags, - &extra_opts, &mount_opts, &nfs_mount_vers, 0); - } + else if (!strcmp(progname, "mount.nfs")) { + int need_statd = 0; + mnt_err = nfsmount(spec, mount_point, &flags, + &extra_opts, &mount_opts, &nfs_mount_vers, + 0, &need_statd); + if (!mnt_err && !fake && need_statd) + start_statd(); } if (!mnt_err && !fake) {