leftover of e2fsck surgery
authorDenis Vlasenko <vda.linux@googlemail.com>
Tue, 26 Dec 2006 02:51:29 +0000 (02:51 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Tue, 26 Dec 2006 02:51:29 +0000 (02:51 -0000)
Makefile
e2fsprogs/fsck.c
include/applets.h
include/libbb.h
include/usage.h
libbb/dump.c
libbb/skip_whitespace.c

index d218caf8eeccd0051e761adc5df1e3ceb2b0af24..d4cc766ddc60535b42e7dc855570b58575981fc3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -429,10 +429,6 @@ libs-y             := \
                coreutils/libcoreutils/ \
                debianutils/ \
                e2fsprogs/ \
-               e2fsprogs/blkid/ \
-               e2fsprogs/e2p/ \
-               e2fsprogs/ext2fs/ \
-               e2fsprogs/uuid/ \
                editors/ \
                findutils/ \
                init/ \
index d59206ca201b20d2ba6069b42e89d1a73fb37d93..396174ef55bb387ed61a6829dd6c714b831e7623 100644 (file)
@@ -27,7 +27,6 @@
  */
 
 #include "busybox.h"
-/*#include "e2fs_lib.h"*/
 
 #define EXIT_OK          0
 #define EXIT_NONDESTRUCT 1
@@ -41,9 +40,6 @@
 #define DEFAULT_FSTYPE "ext2"
 #endif
 
-#define MAX_DEVICES 32
-#define MAX_ARGS 32
-
 /*
  * Internal structure for mount tabel entries.
  */
@@ -76,7 +72,7 @@ struct fsck_instance {
        struct fsck_instance *next;
 };
 
-static const char * const ignored_types[] = {
+static const char *const ignored_types[] = {
        "ignore",
        "iso9660",
        "nfs",
@@ -88,7 +84,8 @@ static const char * const ignored_types[] = {
        NULL
 };
 
-static const char * const really_wanted[] = {
+#if 0
+static const char *const really_wanted[] = {
        "minix",
        "ext2",
        "ext3",
@@ -98,16 +95,15 @@ static const char * const really_wanted[] = {
        "xfs",
        NULL
 };
+#endif
 
 #define BASE_MD "/dev/md"
 
-/*
- * Global variables for options
- */
+static volatile int cancel_requested;
+
 static char **devices;
 static char **args;
 static int num_devices, num_args;
-
 static int verbose;
 static int doall;
 static int noexecute;
@@ -121,13 +117,10 @@ static int progress_fd;
 static int force_all_parallel;
 static int num_running;
 static int max_running;
-static volatile int cancel_requested;
-static int kill_sent;
 static char *fstype;
-static struct fs_info *filesys_info, *filesys_last;
+static struct fs_info *filesys_info;
+static struct fs_info *filesys_last;
 static struct fsck_instance *instance_list;
-/*static char *fsck_path;*/
-/*static blkid_cache cache;*/
 
 #define FS_TYPE_FLAG_NORMAL 0
 #define FS_TYPE_FLAG_OPT    1
@@ -439,11 +432,10 @@ static void load_fs_info(const char *filename)
        fclose(f);
 
        if (old_fstab) {
-               fputs("\007\007\007"
-               "WARNING: Your /etc/fstab does not contain the fsck passno\n"
-               "       field.  I will kludge around things for you, but you\n"
-               "       should fix your /etc/fstab file as soon as you can.\n\n", stderr);
-
+               fputs("\007"
+"WARNING: Your /etc/fstab does not contain the fsck passno field.\n"
+"I will kludge around things for you, but you should fix\n"
+"your /etc/fstab file as soon as you can.\n\n", stderr);
                for (fs = filesys_info; fs; fs = fs->next) {
                        fs->passno = 1;
                }
@@ -455,10 +447,6 @@ static struct fs_info *lookup(char *filesys)
 {
        struct fs_info *fs;
 
-       /* No filesys name given. */
-       if (filesys == NULL)
-               return NULL;
-
        for (fs = filesys_info; fs; fs = fs->next) {
                if (strcmp(filesys, fs->device) == 0
                 || (fs->mountpt && strcmp(filesys, fs->mountpt) == 0)
@@ -469,29 +457,6 @@ static struct fs_info *lookup(char *filesys)
        return fs;
 }
 
-#if 0
-/* Find fsck program for a given fs type. */
-static char *find_fsck(char *type)
-{
-       char *s;
-       const char *tpl;
-       char *p = xstrdup(fsck_path);
-       struct stat st;
-
-       /* Are we looking for a program or just a type? */
-       tpl = (strncmp(type, "fsck.", 5) ? "%s/fsck.%s" : "%s/%s");
-
-       for (s = strtok(p, ":"); s; s = strtok(NULL, ":")) {
-               s = xasprintf(tpl, s, type);
-               if (stat(s, &st) == 0)
-                       break;
-               free(s);
-       }
-       free(p);
-       return s;
-}
-#endif
-
 static int progress_active(void)
 {
        struct fsck_instance *inst;
@@ -588,18 +553,21 @@ static int execute(const char *type, const char *device, const char *mntpt,
 /*
  * Send a signal to all outstanding fsck child processes
  */
-static int kill_all(int signum)
+static void kill_all_if_cancel_requested(void)
 {
+       static int kill_sent;
+
        struct fsck_instance *inst;
-       int     n = 0;
+
+       if (!cancel_requested || kill_sent)
+               return;
 
        for (inst = instance_list; inst; inst = inst->next) {
                if (inst->flags & FLAG_DONE)
                        continue;
-               kill(inst->pid, signum);
-               n++;
+               kill(inst->pid, SIGTERM);
        }
-       return n;
+       kill_sent = 1;
 }
 
 /*
@@ -637,14 +605,11 @@ static struct fsck_instance *wait_one(int flags)
 
        do {
                pid = waitpid(-1, &status, flags);
-               if (cancel_requested && !kill_sent) {
-                       kill_all(SIGTERM);
-                       kill_sent++;
-               }
-               if ((pid == 0) && (flags & WNOHANG))
+               kill_all_if_cancel_requested();
+               if (pid == 0 && (flags & WNOHANG))
                        return NULL;
                if (pid < 0) {
-                       if ((errno == EINTR) || (errno == EAGAIN))
+                       if (errno == EINTR || errno == EAGAIN)
                                continue;
                        if (errno == ECHILD) {
                                bb_error_msg("wait: no more child process?!?");
@@ -704,7 +669,7 @@ static struct fsck_instance *wait_one(int flags)
                        break;
                }
        }
-ret_inst:
+ ret_inst:
        if (prev)
                prev->next = inst->next;
        else
@@ -758,16 +723,16 @@ static void fsck_device(struct fs_info *fs, int interactive)
 
        interpret_type(fs);
 
+       type = DEFAULT_FSTYPE;
        if (strcmp(fs->type, "auto") != 0)
                type = fs->type;
        else if (fstype
-        && strncmp(fstype, "no", 2)
-        && strncmp(fstype, "opts=", 5) && strncmp(fstype, "loop", 4)
+        && (fstype[0] != 'n' || fstype[1] != 'o') /* != "no" */
+        && strncmp(fstype, "opts=", 5) != 0
+        && strncmp(fstype, "loop", 4) != 0
         && !strchr(fstype, ',')
        )
                type = fstype;
-       else
-               type = DEFAULT_FSTYPE;
 
        num_running++;
        retval = execute(type, fs->device, fs->mountpt, interactive);
@@ -1078,17 +1043,14 @@ static int check_all(void)
                } else
                        not_done_yet++;
        }
-       if (cancel_requested && !kill_sent) {
-               kill_all(SIGTERM);
-               kill_sent++;
-       }
+       kill_all_if_cancel_requested();
        status |= wait_many(FLAG_WAIT_ATLEAST_ONE);
        return status;
 }
 
 static void signal_cancel(int sig ATTRIBUTE_UNUSED)
 {
-       cancel_requested++;
+       cancel_requested = 1;
 }
 
 static int string_to_int(const char *s)
@@ -1126,9 +1088,6 @@ static void parse_args(int argc, char *argv[])
        for (i = 1; i < argc; i++) {
                arg = argv[i];
                if ((arg[0] == '/' && !opts_for_fsck) || strchr(arg, '=')) {
-                       if (num_devices >= MAX_DEVICES) {
-                               bb_error_msg_and_die("too many devices");
-                       }
 #if 0
                        char *dev;
                        dev = blkid_get_devname(cache, arg, NULL);
@@ -1138,8 +1097,8 @@ static void parse_args(int argc, char *argv[])
                                 * /proc/partitions isn't found.
                                 */
                                if (access("/proc/partitions", R_OK) < 0) {
-                                       bb_perror_msg_and_die("cannot open /proc/partitions "
-                                                       "(is /proc mounted?)");
+                                       bb_perror_msg_and_die(
+"cannot open /proc/partitions (is /proc mounted?)");
                                }
                                /*
                                 * Check to see if this is because
@@ -1147,10 +1106,10 @@ static void parse_args(int argc, char *argv[])
                                 */
                                if (geteuid())
                                        bb_error_msg_and_die(
-               "must be root to scan for matching filesystems: %s\n", arg);
+"must be root to scan for matching filesystems: %s\n", arg);
                                else
                                        bb_error_msg_and_die(
-               "cannot find matching filesystem: %s", arg);
+"cannot find matching filesystem: %s", arg);
                        }
                        devices = xrealloc(devices, (num_devices+1) * sizeof(devices[0]));
                        devices[num_devices++] = dev ? dev : xstrdup(arg);
@@ -1271,8 +1230,6 @@ int fsck_main(int argc, char *argv[])
                fstab = "/etc/fstab";
        load_fs_info(fstab);
 
-       /*fsck_path = e2fs_set_sbin_path();*/
-
        if (num_devices == 1 || serialize)
                interactive = 1;
 
@@ -1286,12 +1243,9 @@ int fsck_main(int argc, char *argv[])
                return check_all();
        }
 
-       for (i = 0 ; i < num_devices; i++) {
+       for (i = 0; i < num_devices; i++) {
                if (cancel_requested) {
-                       if (!kill_sent) {
-                               kill_all(SIGTERM);
-                               kill_sent++;
-                       }
+                       kill_all_if_cancel_requested();
                        break;
                }
                fs = lookup(devices[i]);
index d4a5564b13ec3dcd5f77e8978c093d0926de5fc8..8586ffc869d0c49108d43c4ed5154fec37eb1c33 100644 (file)
@@ -102,8 +102,8 @@ USE_DPKG_DEB(APPLET_ODDNAME(dpkg-deb, dpkg_deb, _BB_DIR_USR_BIN, _BB_SUID_NEVER,
 USE_DU(APPLET(du, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_DUMPKMAP(APPLET(dumpkmap, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_APP_DUMPLEASES(APPLET(dumpleases, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
-USE_E2LABEL(APPLET_NOUSAGE(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_E2FSCK(APPLET(e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_E2LABEL(APPLET_NOUSAGE(e2label, tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_ECHO(APPLET(echo, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_ED(APPLET(ed, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_FEATURE_GREP_EGREP_ALIAS(APPLET_NOUSAGE(egrep, grep, _BB_DIR_BIN, _BB_SUID_NEVER))
@@ -121,13 +121,13 @@ USE_FDFORMAT(APPLET(fdformat, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_FDISK(APPLET(fdisk, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_FEATURE_GREP_FGREP_ALIAS(APPLET_NOUSAGE(fgrep, grep, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_FIND(APPLET(find, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_FINDFS(APPLET_NOUSAGE(findfs, tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_FINDFS(APPLET_NOUSAGE(findfs, tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_FOLD(APPLET(fold, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_FREE(APPLET(free, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_FREERAMDISK(APPLET(freeramdisk, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_FSCK(APPLET(fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
-USE_E2FSCK(APPLET_NOUSAGE(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
-USE_E2FSCK(APPLET_NOUSAGE(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_E2FSCK(APPLET_NOUSAGE(fsck.ext2, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_E2FSCK(APPLET_NOUSAGE(fsck.ext3, e2fsck, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_FSCK_MINIX(APPLET_ODDNAME(fsck.minix, fsck_minix, _BB_DIR_SBIN, _BB_SUID_NEVER, fsck_minix))
 USE_FTPGET(APPLET_ODDNAME(ftpget, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_NEVER,ftpget))
 USE_FTPPUT(APPLET_ODDNAME(ftpput, ftpgetput, _BB_DIR_USR_BIN, _BB_SUID_NEVER,ftpput))
@@ -191,10 +191,10 @@ USE_MD5SUM(APPLET_ODDNAME(md5sum, md5_sha1_sum, _BB_DIR_USR_BIN, _BB_SUID_NEVER,
 USE_MDEV(APPLET(mdev, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MESG(APPLET(mesg, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_MKDIR(APPLET(mkdir, _BB_DIR_BIN, _BB_SUID_NEVER))
-USE_MKE2FS(APPLET(mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_MKE2FS(APPLET(mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MKFIFO(APPLET(mkfifo, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext2, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
-USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext2, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_MKE2FS(APPLET_NOUSAGE(mkfs.ext3, mke2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_MKFS_MINIX(APPLET_ODDNAME(mkfs.minix, mkfs_minix, _BB_DIR_SBIN, _BB_SUID_NEVER, mkfs_minix))
 USE_MKNOD(APPLET(mknod, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_MKSWAP(APPLET(mkswap, _BB_DIR_SBIN, _BB_SUID_NEVER))
@@ -294,7 +294,7 @@ USE_TR(APPLET(tr, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
 USE_TRACEROUTE(APPLET(traceroute, _BB_DIR_USR_BIN, _BB_SUID_MAYBE))
 USE_TRUE(APPLET(true, _BB_DIR_BIN, _BB_SUID_NEVER))
 USE_TTY(APPLET(tty, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
-USE_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
+//USE_TUNE2FS(APPLET(tune2fs, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_APP_UDHCPC(APPLET(udhcpc, _BB_DIR_SBIN, _BB_SUID_NEVER))
 USE_APP_UDHCPD(APPLET(udhcpd, _BB_DIR_USR_SBIN, _BB_SUID_NEVER))
 USE_UMOUNT(APPLET(umount, _BB_DIR_BIN, _BB_SUID_NEVER))
index d94dd598eaa45719c65b23ee5a99f776a11f8fca..68e4851db23e9d6762bf70c47c87217f389ab60a 100644 (file)
@@ -190,6 +190,7 @@ extern int sysinfo(struct sysinfo* info);
 extern void chomp(char *s);
 extern void trim(char *s);
 extern char *skip_whitespace(const char *);
+extern char *skip_non_whitespace(const char *);
 
 extern const char *bb_mode_string(int mode);
 extern int is_directory(const char *name, int followLinks, struct stat *statBuf);
index 59b052826eb068632bc9ae46946f41d6d94d294e..42b51fa81de404d896a0547f402019405a3a2ba3 100644 (file)
        "$ freeramdisk /dev/ram2\n"
 
 #define fsck_trivial_usage \
-       "[-ANPRTV] [ -C [ fd ] ] [-t fstype] [fs-options] [filesys ...]"
+       "[-ANPRTV] [ -C fd ] [-t fstype] [fs-options] [filesys ...]"
 #define fsck_full_usage \
        "Check and repair filesystems" \
        "\n\nOptions:\n" \
        "       -P      When using -A, check filesystems in parallel\n" \
        "       -R      When using -A, skip the root filesystem\n" \
        "       -T      Don't show title on startup\n" \
-       "       -V      Verbose mode\n" \
-       "       -C      Write status information to specified filedescriptor\n" \
-       "       -t      List of filesystem types to check"
+       "       -V      Verbose\n" \
+       "       -C n    Write status information to specified filedescriptor\n" \
+       "       -t type List of filesystem types to check"
 
 #define fsck_minix_trivial_usage \
        "[-larvsmf] /dev/name"
index d6e31b9b135ed8f06879c39f5d70c367a3bd6bfe..06b73c9557a572313b30cf5012b4661563409f7d 100644 (file)
@@ -724,7 +724,9 @@ void bb_dump_add(const char *fmt)
 
                /* byte count */
                if (isdigit(*p)) {
-                       for (savep = p; isdigit(*p); ++p);
+// TODO: use bb_strtou
+                       savep = p;
+                       do p++; while(isdigit(*p));
                        if (!isspace(*p)) {
                                bb_error_msg_and_die("bad format {%s}", fmt);
                        }
index 02c1f5828897a42c6def21c97d054a26cabb3a0e..bdfb97d70258a91ec7acd8f992ec9fbf1641e006 100644 (file)
@@ -7,12 +7,19 @@
  * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
  */
 
-#include <ctype.h>
 #include "libbb.h"
 
 char *skip_whitespace(const char *s)
 {
+       /* NB: isspace('0') returns 0 */
        while (isspace(*s)) ++s;
 
        return (char *) s;
 }
+
+char *skip_non_whitespace(const char *s)
+{
+       while (*s && !isspace(*s)) ++s;
+
+       return (char *) s;
+}