create e2fs_set_sbin_path(), noticed by Tito, Thanks
author"Vladimir N. Oleynik" <dzo@simtreas.ru>
Wed, 12 Oct 2005 16:22:19 +0000 (16:22 -0000)
committer"Vladimir N. Oleynik" <dzo@simtreas.ru>
Wed, 12 Oct 2005 16:22:19 +0000 (16:22 -0000)
e2fsprogs/Makefile.in
e2fsprogs/e2fsck.c
e2fsprogs/fsck.c
e2fsprogs/fsck.h
e2fsprogs/mke2fs.c
e2fsprogs/util.c
e2fsprogs/util.h

index 90aac632767cc26f1289d756afa7bda4903b95e9..181ec7033271c1a70b8d11ea2d15bae99b3a75b2 100644 (file)
@@ -57,7 +57,7 @@ $(patsubst %,$(E2FSPROGS_DIR)/%, $(UUID_OBJS)):|$(E2FSPROGS_DIR)/uuid
 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)
index 42ee8abc4d482e9a27a94bca41c5742ed1c796cb..8b96b506806f765019a39513550f8b1efa60dd14 100644 (file)
 #define EXT2FS_ATTR(x)
 #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 @@ void fatal_error(e2fsck_t ctx, const char *msg)
        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 @@ void preenhalt(e2fsck_t ctx)
                ext2fs_mark_super_dirty(fs);
                ext2fs_close(fs);
        }
-       exit(FSCK_UNCORRECTED);
+       exit(EXIT_UNCORRECTED);
 }
 
 #ifdef RESOURCE_TRACK
@@ -14742,7 +14730,7 @@ static void usage(e2fsck_t ctx)
                " -L bad_blocks_file   Set badblocks list\n"
                ));
 
-       exit(FSCK_USAGE);
+       exit(EXIT_USAGE);
 }
 #endif
 
@@ -14881,7 +14869,7 @@ static int is_on_batt(void)
 
 /*
  * 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 @@ static void check_if_skip(e2fsck_t ctx)
        ext2fs_close(fs);
        ctx->fs = NULL;
        e2fsck_free_context(ctx);
-       exit(FSCK_OK);
+       exit(EXIT_OK);
 }
 
 /*
@@ -15079,8 +15067,6 @@ static int e2fsck_update_progress(e2fsck_t ctx, int pass,
        return 0;
 }
 
-#define PATH_SET "PATH=/sbin"
-
 static void reserve_stdio_fds(void)
 {
        int     fd;
@@ -15379,14 +15365,14 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx)
                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 @@ static errcode_t PRS(int argc, char *argv[], e2fsck_t *ret_ctx)
        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 @@ static const char my_ver_date[] = E2FSPROGS_DATE;
 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 @@ int e2fsck_main (int argc, char *argv[])
        if (retval) {
                com_err("e2fsck", retval,
                        _("while trying to initialize program"));
-               exit(FSCK_ERROR);
+               exit(EXIT_ERROR);
        }
        reserve_stdio_fds();
 
@@ -15484,7 +15456,7 @@ int e2fsck_main (int argc, char *argv[])
        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 @@ restart:
        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;
index 7799faec0b8d31a4d8a95ce72cbfd92d325ed2df..36eebf2c51ba0ce25b6560e7f39b5cef77f0715c 100644 (file)
@@ -282,7 +282,6 @@ static int kill_sent;
 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 fsck_main(int argc, char *argv[])
 {
        int i, status = 0;
        int interactive = 0;
-       char *oldpath = getenv("PATH");
        const char *fstab;
        struct fs_info *fs;
 
@@ -1367,12 +1365,7 @@ int fsck_main(int argc, char *argv[])
                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;
index 537b266193b613c850618642811b1330a206d11c..bd22fbb2465e86b8b11401251fc2c7bf06af8321 100644 (file)
@@ -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);
index ab50717e7dad91d4805d2da2390eb68be07c3ced..9c4f1c4d0ba19dda18d0f8337416566b4662c851 100644 (file)
@@ -685,8 +685,6 @@ static int set_os(struct ext2_super_block *sb, char *os)
        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 @@ static int PRS(int argc, char *argv[])
        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)
index 58f9bbb88f7a5ee180350fd3b42322de36afeebe..e59b18c5a1b7aefec6d02ca942e6a6291b6e9605 100644 (file)
@@ -253,3 +253,14 @@ void make_journal_blocks(ext2_filsys fs, int journal_size, int journal_flags, in
        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);
+}
index f6dc08ac1ac4c30025dedc50ac2cfac29f5500a0..4634b08dd6f78f624c4a03d061b8f2cf1efbc188 100644 (file)
@@ -18,4 +18,4 @@ extern int figure_journal_size(int size, ext2_filsys fs);
 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);