aboutsummaryrefslogtreecommitdiff
path: root/sbin/mount/mount.c
diff options
context:
space:
mode:
authorGordon Tetlow <gordon@FreeBSD.org>2003-06-29 17:53:48 +0000
committerGordon Tetlow <gordon@FreeBSD.org>2003-06-29 17:53:48 +0000
commita3ba4c65fd0783dab09e4e3f5ac8967728569cc2 (patch)
treeee59a96fbce376aed725c236e135967facd297a2 /sbin/mount/mount.c
parent09f49aab843136b36644e57acfa3a727098016e9 (diff)
downloadsrc-a3ba4c65fd0783dab09e4e3f5ac8967728569cc2.tar.gz
src-a3ba4c65fd0783dab09e4e3f5ac8967728569cc2.zip
Convert fsck and mount to using execvP to find fsck_foo and mount_foo.
This simplifies the code path and makes the default path easy to override in the /rescue case. Submitted by: Tim Kientzle <kientzle@acm.org>
Notes
Notes: svn path=/head/; revision=117031
Diffstat (limited to 'sbin/mount/mount.c')
-rw-r--r--sbin/mount/mount.c29
1 files changed, 5 insertions, 24 deletions
diff --git a/sbin/mount/mount.c b/sbin/mount/mount.c
index 4fccd91aa3dc..bb4579dac534 100644
--- a/sbin/mount/mount.c
+++ b/sbin/mount/mount.c
@@ -54,6 +54,7 @@ static const char rcsid[] =
#include <err.h>
#include <errno.h>
#include <fstab.h>
+#include <paths.h>
#include <pwd.h>
#include <signal.h>
#include <stdio.h>
@@ -392,13 +393,8 @@ mountfs(vfstype, spec, name, flags, options, mntopts)
const char *vfstype, *spec, *name, *options, *mntopts;
int flags;
{
- /* List of directories containing mount_xxx subcommands. */
- static const char *edirs[] = {
- _PATH_SBIN,
- _PATH_USRSBIN,
- NULL
- };
const char *argv[100], **edir;
+ char *path, *cur;
struct statfs sf;
pid_t pid;
int argc, i, status;
@@ -469,25 +465,10 @@ mountfs(vfstype, spec, name, flags, options, mntopts)
exit(mount_ufs(argc, (char * const *) argv));
/* Go find an executable. */
- for (edir = edirs; *edir; edir++) {
- (void)snprintf(execname,
- sizeof(execname), "%s/mount_%s", *edir, vfstype);
- execv(execname, (char * const *)argv);
- }
+ (void)snprintf(execname, sizeof(execname), "mount_%s", vfstype);
+ execvP(execname, _PATH_SYSPATH, (char * const *)argv);
if (errno == ENOENT) {
- int len = 0;
- char *cp;
- for (edir = edirs; *edir; edir++)
- len += strlen(*edir) + 2; /* ", " */
- if ((cp = malloc(len)) == NULL)
- errx(1, "malloc failed");
- cp[0] = '\0';
- for (edir = edirs; *edir; edir++) {
- strcat(cp, *edir);
- if (edir[1] != NULL)
- strcat(cp, ", ");
- }
- warn("exec mount_%s not found in %s", vfstype, cp);
+ warn("exec mount_%s not found in %s", vfstype, path);
}
exit(1);
/* NOTREACHED */