tar: support -T - and -X -
[oweals/busybox.git] / e2fsprogs / fsck.c
index 21b2fdc0d861f562d632e7d9851095d1f9408721..a86a9d96f6577ad13df4e6a9b691da368284e7e8 100644 (file)
@@ -20,7 +20,7 @@
  * Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
  *      2001, 2002, 2003, 2004, 2005 by  Theodore Ts'o.
  *
- * Licensed under GPLv2, see file LICENSE in this tarball for details.
+ * Licensed under GPLv2, see file LICENSE in this source tree.
  */
 
 /* All filesystem specific hooks have been removed.
  * API for fsck.something, NOT ad-hoc hacks in generic fsck. */
 #define DO_PROGRESS_INDICATOR 0
 
+/* fsck 1.41.4 (27-Jan-2009) manpage says:
+ * 0   - No errors
+ * 1   - File system errors corrected
+ * 2   - System should be rebooted
+ * 4   - File system errors left uncorrected
+ * 8   - Operational error
+ * 16  - Usage or syntax error
+ * 32  - Fsck canceled by user request
+ * 128 - Shared library error
+ */
 #define EXIT_OK          0
 #define EXIT_NONDESTRUCT 1
 #define EXIT_DESTRUCT    2
@@ -52,7 +62,6 @@
 /*
  * Internal structure for mount table entries.
  */
-
 struct fs_info {
        struct fs_info *next;
        char    *device;
@@ -160,12 +169,12 @@ static char *base_device(const char *device)
        const char *disk;
        int len;
 #endif
-       cp = str = xstrdup(device);
+       str = xstrdup(device);
 
-       /* Skip over /dev/; if it's not present, give up. */
-       if (strncmp(cp, "/dev/", 5) != 0)
+       /* Skip over "/dev/"; if it's not present, give up */
+       cp = skip_dev_pfx(str);
+       if (cp == str)
                goto errout;
-       cp += 5;
 
        /*
         * For md devices, we treat them all as if they were all
@@ -298,7 +307,7 @@ static void load_fs_info(const char *filename)
 
        fstab = setmntent(filename, "r");
        if (!fstab) {
-               bb_perror_msg("cannot read %s", filename);
+               bb_perror_msg("can't read '%s'", filename);
                return;
        }
 
@@ -963,13 +972,13 @@ int fsck_main(int argc UNUSED_PARAM, char **argv)
                        case 'C':
                                progress = 1;
                                if (arg[++j]) { /* -Cn */
-                                       progress_fd = xatoi_u(&arg[j]);
+                                       progress_fd = xatoi_positive(&arg[j]);
                                        goto next_arg;
                                }
                                /* -C n */
                                if (!*++argv)
                                        bb_show_usage();
-                               progress_fd = xatoi_u(*argv);
+                               progress_fd = xatoi_positive(*argv);
                                goto next_arg;
 #endif
                        case 'V':