create e2fs_set_sbin_path(), noticed by Tito, Thanks
diff --git a/e2fsprogs/Makefile.in b/e2fsprogs/Makefile.in
index 90aac63..181ec70 100644
--- a/e2fsprogs/Makefile.in
+++ b/e2fsprogs/Makefile.in
@@ -57,7 +57,7 @@
 E2FSPROGS-y:=
 E2FSPROGS-$(CONFIG_CHATTR)     += chattr.o $(E2P_OBJS)
 E2FSPROGS-$(CONFIG_E2FSCK)     += e2fsck.o util.o $(BLKID_OBJS) $(EXT2FS_OBJS) $(UUID_OBJS)
-E2FSPROGS-$(CONFIG_FSCK)       += fsck.o $(BLKID_OBJS) $(UUID_OBJS)
+E2FSPROGS-$(CONFIG_FSCK)       += fsck.o util.o $(BLKID_OBJS) $(UUID_OBJS)
 E2FSPROGS-$(CONFIG_LSATTR)     += lsattr.o $(E2P_OBJS)
 E2FSPROGS-$(CONFIG_MKE2FS)     += mke2fs.o util.o $(E2P_OBJS) $(BLKID_OBJS) $(EXT2FS_OBJS) $(UUID_OBJS)
 E2FSPROGS-$(CONFIG_TUNE2FS)    += tune2fs.o util.o $(E2P_OBJS) $(BLKID_OBJS) $(EXT2FS_OBJS) $(UUID_OBJS)
diff --git a/e2fsprogs/e2fsck.c b/e2fsprogs/e2fsck.c
index 42ee8ab..8b96b50 100644
--- a/e2fsprogs/e2fsck.c
+++ b/e2fsprogs/e2fsck.c
@@ -79,18 +79,6 @@
 #endif
 
 /*
- * Exit codes used by fsck-type programs
- */
-#define FSCK_OK          0      /* No errors */
-#define FSCK_NONDESTRUCT 1      /* File system errors corrected */
-#define FSCK_REBOOT      2      /* System should be rebooted */
-#define FSCK_UNCORRECTED 4      /* File system errors left uncorrected */
-#define FSCK_ERROR       8      /* Operational error */
-#define FSCK_USAGE       16     /* Usage or syntax error */
-#define FSCK_CANCELED    32     /* Aborted with a signal or ^C */
-#define FSCK_LIBRARY     128    /* Shared library error */
-
-/*
  * The last ext2fs revision level that this version of e2fsck is able to
  * support
  */
@@ -14255,7 +14243,7 @@
 	ctx->flags |= E2F_FLAG_ABORT;
 	if (ctx->flags & E2F_FLAG_SETJMP_OK)
 		longjmp(ctx->abort_loc, 1);
-	exit(FSCK_ERROR);
+	exit(EXIT_ERROR);
 }
 #endif
 
@@ -14461,7 +14449,7 @@
 		ext2fs_mark_super_dirty(fs);
 		ext2fs_close(fs);
 	}
-	exit(FSCK_UNCORRECTED);
+	exit(EXIT_UNCORRECTED);
 }
 
 #ifdef RESOURCE_TRACK
@@ -14742,7 +14730,7 @@
 		" -L bad_blocks_file   Set badblocks list\n"
 		));
 
-	exit(FSCK_USAGE);
+	exit(EXIT_USAGE);
 }
 #endif
 
@@ -14881,7 +14869,7 @@
 
 /*
  * This routine checks to see if a filesystem can be skipped; if so,
- * it will exit with E2FSCK_OK.  Under some conditions it will print a
+ * it will exit with EXIT_OK.  Under some conditions it will print a
  * message explaining why a check is being forced.
  */
 static void check_if_skip(e2fsck_t ctx)
@@ -14949,7 +14937,7 @@
 	ext2fs_close(fs);
 	ctx->fs = NULL;
 	e2fsck_free_context(ctx);
-	exit(FSCK_OK);
+	exit(EXIT_OK);
 }
 
 /*
@@ -15079,8 +15067,6 @@
 	return 0;
 }
 
-#define PATH_SET "PATH=/sbin"
-
 static void reserve_stdio_fds(void)
 {
 	int     fd;
@@ -15379,14 +15365,14 @@
 		if (cflag || bad_blocks_file) {
 			fprintf(stderr, _("Incompatible options not "
 					  "allowed when byte-swapping.\n"));
-			exit(FSCK_USAGE);
+			exit(EXIT_USAGE);
 		}
 	}
 #endif
 	if (cflag && bad_blocks_file) {
 		fprintf(stderr, _("The -c and the -l/-L options may "
 				  "not be both used at the same time.\n"));
-		exit(FSCK_USAGE);
+		exit(EXIT_USAGE);
 	}
 	/*
 	 * Set up signal action
@@ -15405,22 +15391,8 @@
 	sigaction(SIGUSR2, &sa, 0);
 
 	/* Update our PATH to include /sbin if we need to run badblocks  */
-	if (cflag) {
-		char *oldpath = getenv("PATH");
-		if (oldpath) {
-			char *newpath;
-
-			newpath = (char *) malloc(sizeof (PATH_SET) + 1 +
-						  strlen (oldpath));
-			if (!newpath)
-				fatal_error(ctx, "Couldn't malloc() newpath");
-			strcpy (newpath, PATH_SET);
-			strcat (newpath, ":");
-			strcat (newpath, oldpath);
-			putenv (newpath);
-		} else
-			putenv (PATH_SET);
-	}
+	if (cflag)
+		e2fs_set_sbin_path();
 #ifdef __CONFIG_JBD_DEBUG__E2FS
 	if (getenv("E2FSCK_JBD_DEBUG"))
 		journal_enable_debug = atoi(getenv("E2FSCK_JBD_DEBUG"));
@@ -15434,7 +15406,7 @@
 int e2fsck_main (int argc, char *argv[])
 {
 	errcode_t       retval;
-	int             exit_value = FSCK_OK;
+	int             exit_value = EXIT_OK;
 	ext2_filsys     fs = 0;
 	io_manager      io_ptr;
 	struct ext2_super_block *sb;
@@ -15469,7 +15441,7 @@
 	if (retval) {
 		com_err("e2fsck", retval,
 			_("while trying to initialize program"));
-		exit(FSCK_ERROR);
+		exit(EXIT_ERROR);
 	}
 	reserve_stdio_fds();
 
@@ -15484,7 +15456,7 @@
 	if (show_version_only) {
 		fprintf(stderr, _("\tUsing %s, %s\n"),
 			error_message(EXT2_ET_BASE), lib_ver_date);
-		exit(FSCK_OK);
+		exit(EXIT_OK);
 	}
 
 	check_mount(ctx);
@@ -15756,30 +15728,30 @@
 	mtrace_print("Cleanup");
 #endif
 	if (ext2fs_test_changed(fs)) {
-		exit_value |= FSCK_NONDESTRUCT;
+		exit_value |= EXIT_NONDESTRUCT;
 		if (!(ctx->options & E2F_OPT_PREEN))
 		    printf(_("\n%s: ***** FILE SYSTEM WAS MODIFIED *****\n"),
 			       ctx->device_name);
 		if (ctx->mount_flags & EXT2_MF_ISROOT) {
 			printf(_("%s: ***** REBOOT LINUX *****\n"),
 			       ctx->device_name);
-			exit_value |= FSCK_REBOOT;
+			exit_value |= EXIT_DESTRUCT;
 		}
 	}
 	if (!ext2fs_test_valid(fs)) {
 		printf(_("\n%s: ********** WARNING: Filesystem still has "
 			 "errors **********\n\n"), ctx->device_name);
-		exit_value |= FSCK_UNCORRECTED;
-		exit_value &= ~FSCK_NONDESTRUCT;
+		exit_value |= EXIT_UNCORRECTED;
+		exit_value &= ~EXIT_NONDESTRUCT;
 	}
 	if (exit_value & FSCK_CANCELED)
-		exit_value &= ~FSCK_NONDESTRUCT;
+		exit_value &= ~EXIT_NONDESTRUCT;
 	else {
 		show_stats(ctx);
 		if (!(ctx->options & E2F_OPT_READONLY)) {
 			if (ext2fs_test_valid(fs)) {
 				if (!(sb->s_state & EXT2_VALID_FS))
-					exit_value |= FSCK_NONDESTRUCT;
+					exit_value |= EXIT_NONDESTRUCT;
 				sb->s_state = EXT2_VALID_FS;
 			} else
 				sb->s_state &= ~EXT2_VALID_FS;
diff --git a/e2fsprogs/fsck.c b/e2fsprogs/fsck.c
index 7799fae..36eebf2 100644
--- a/e2fsprogs/fsck.c
+++ b/e2fsprogs/fsck.c
@@ -282,7 +282,6 @@
 static char *fstype;
 static struct fs_info *filesys_info, *filesys_last;
 static struct fsck_instance *instance_list;
-static const char *fsck_prefix_path = "/sbin:/sbin/fs.d:/sbin/fs:/etc/fs:/etc";
 static char *fsck_path;
 static blkid_cache cache;
 
@@ -1349,7 +1348,6 @@
 {
 	int i, status = 0;
 	int interactive = 0;
-	char *oldpath = getenv("PATH");
 	const char *fstab;
 	struct fs_info *fs;
 
@@ -1367,12 +1365,7 @@
 		fstab = _PATH_MNTTAB;
 	load_fs_info(fstab);
 
-	/* Update our search path to include uncommon directories. */
-	if (oldpath) {
-		fsck_path = bb_xasprintf("%s:%s", fsck_prefix_path, oldpath);
-	} else {
-		fsck_path = string_copy(fsck_prefix_path);
-	}
+	e2fs_set_sbin_path();
 
 	if ((num_devices == 1) || (serialize))
 		interactive = 1;
diff --git a/e2fsprogs/fsck.h b/e2fsprogs/fsck.h
index 537b266..bd22fbb 100644
--- a/e2fsprogs/fsck.h
+++ b/e2fsprogs/fsck.h
@@ -10,4 +10,7 @@
 #define EXIT_UNCORRECTED 4
 #define EXIT_ERROR       8
 #define EXIT_USAGE       16
+#define FSCK_CANCELED    32     /* Aborted with a signal or ^C */
 #define EXIT_LIBRARY     128
+
+extern void e2fs_set_sbin_path(void);
diff --git a/e2fsprogs/mke2fs.c b/e2fsprogs/mke2fs.c
index ab50717..9c4f1c4 100644
--- a/e2fsprogs/mke2fs.c
+++ b/e2fsprogs/mke2fs.c
@@ -685,8 +685,6 @@
 	return 0;
 }
 
-#define PATH_SET "PATH=/sbin"
-
 static void parse_extended_opts(struct ext2_super_block *sb_param,
 				const char *opts)
 {
@@ -801,17 +799,13 @@
 	int		show_version_only = 0;
 	ext2_ino_t	num_inodes = 0;
 	errcode_t	retval;
-	char *		oldpath = getenv("PATH");
 	char *		extended_opts = 0;
 	const char *	fs_type = 0;
 	blk_t		dev_size;
 	long		sysval;
 
 	/* Update our PATH to include /sbin  */
-	if (oldpath) {
-		putenv (bb_xasprintf("%s:%s", PATH_SET, oldpath));
-	} else
-		putenv (PATH_SET);
+	e2fs_set_sbin_path();
 
 	tmp = getenv("MKE2FS_SYNC");
 	if (tmp)
diff --git a/e2fsprogs/util.c b/e2fsprogs/util.c
index 58f9bbb..e59b18c 100644
--- a/e2fsprogs/util.c
+++ b/e2fsprogs/util.c
@@ -253,3 +253,14 @@
 	if(!quiet)
 		puts("done");
 }
+
+void e2fs_set_sbin_path(void)
+{
+	char *oldpath = getenv("PATH");
+	/* Update our PATH to include /sbin  */
+#define PATH_SET "/sbin"
+	if (oldpath)
+		putenv (bb_xasprintf("%s:%s", PATH_SET, oldpath));
+	else
+		putenv (PATH_SET);
+}
diff --git a/e2fsprogs/util.h b/e2fsprogs/util.h
index f6dc08a..4634b08 100644
--- a/e2fsprogs/util.h
+++ b/e2fsprogs/util.h
@@ -18,4 +18,4 @@
 extern void print_check_message(ext2_filsys fs);
 extern void make_journal_device(char *journal_device, ext2_filsys fs, int quiet, int force);
 extern void make_journal_blocks(ext2_filsys fs, int journal_size, int journal_flags, int quiet);
-
+extern void e2fs_set_sbin_path(void);