tune2fs: add support for -C MOUNT_COUNT. +40 bytes. Closes 3901.
authorDenys Vlasenko <vda.linux@googlemail.com>
Sun, 11 Sep 2011 18:08:12 +0000 (20:08 +0200)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sun, 11 Sep 2011 18:08:12 +0000 (20:08 +0200)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
e2fsprogs/tune2fs.c

index 9daec54..020bdaa 100644 (file)
@@ -28,12 +28,13 @@ do { \
        (sizeof(field) == 4 ? SWAP_LE32(field) : BUG_wrong_field_size())
 
 //usage:#define tune2fs_trivial_usage
-//usage:       "[-c MOUNT_CNT] "
+//usage:       "[-c MAX_MOUNT_COUNT] "
 ////usage:     "[-e errors-behavior] [-g group] "
 //usage:       "[-i DAYS] "
 ////usage:     "[-j] [-J journal-options] [-l] [-s sparse-flag] "
 ////usage:     "[-m reserved-blocks-percent] [-o [^]mount-options[,...]] "
-////usage:     "[-r reserved-blocks-count] [-u user] [-C mount-count] "
+////usage:     "[-r reserved-blocks-count] [-u user] "
+//usage:       "[-C MOUNT_COUNT] "
 //usage:       "[-L LABEL] "
 ////usage:     "[-M last-mounted-dir] [-O [^]feature[,...]] "
 ////usage:     "[-T last-check-time] [-U UUID] "
@@ -46,18 +47,19 @@ enum {
        OPT_L = 1 << 0, // label
        OPT_c = 1 << 1, // max mount count
        OPT_i = 1 << 2, // check interval
+       OPT_C = 1 << 3, // current mount count
 };
 
 int tune2fs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int tune2fs_main(int argc UNUSED_PARAM, char **argv)
 {
        unsigned opts;
-       const char *label, *str_c, *str_i;
+       const char *label, *str_c, *str_i, *str_C;
        struct ext2_super_block *sb;
        int fd;
 
        opt_complementary = "=1";
-       opts = getopt32(argv, "L:c:i:", &label, &str_c, &str_i);
+       opts = getopt32(argv, "L:c:i:C:", &label, &str_c, &str_i, &str_C);
        if (!opts)
                bb_show_usage();
        argv += optind; // argv[0] -- device
@@ -71,6 +73,11 @@ int tune2fs_main(int argc UNUSED_PARAM, char **argv)
        // mangle superblock
        //STORE_LE(sb->s_wtime, time(NULL)); - why bother?
 
+       if (opts & OPT_C) {
+               int n = xatoi_range(str_C, 1, 0xfffe);
+               STORE_LE(sb->s_mnt_count, (unsigned)n);
+       }
+
        // set the label
        if (opts & OPT_L)
                safe_strncpy((char *)sb->s_volume_name, label, sizeof(sb->s_volume_name));