test_lwext4: add journaling to generic test module
[lwext4.git] / fs_test / lwext4_mkfs.c
index 6bc3fe6ce1a30bf6641370b792f57046e5b5fb46..b7ff601a0f09d3a63d15beb2af65f721a2e52963 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com)
+ * Copyright (c) 2015 Grzegorz Kostka (kostka.grzegorz@gmail.com)
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -51,9 +51,12 @@ static struct ext4_blockdev *bd;
 /**@brief   Indicates that input is windows partition.*/
 static bool winpart = false;
 
-static struct ext4_fs fs;
+static int fs_type = F_SET_EXT4;
 
-static struct ext4_mkfs_info info;
+static struct ext4_fs fs;
+static struct ext4_mkfs_info info = {
+       .block_size = 1024,
+};
 
 static bool verbose = false;
 
@@ -64,6 +67,8 @@ Usage:                                                          \n\
 [-i] --input   - input file name (or blockdevice)               \n\
 [-w] --wpart   - windows partition mode                         \n\
 [-v] --verbose - verbose mode                                  \n\
+[-b] --block   - block size: 1024, 2048, 4096 (default 1024)    \n\
+[-e] --ext     - fs type (ext2: 2, ext3: 3 ext4: 4))           \n\
 \n";
 
 
@@ -115,17 +120,25 @@ static bool parse_opt(int argc, char **argv)
 
        static struct option long_options[] = {
            {"input", required_argument, 0, 'i'},
+           {"block", required_argument, 0, 'b'},
+           {"ext", required_argument, 0, 'e'},
            {"wpart", no_argument, 0, 'w'},
            {"verbose", no_argument, 0, 'v'},
            {0, 0, 0, 0}};
 
-       while (-1 != (c = getopt_long(argc, argv, "i:wv",
+       while (-1 != (c = getopt_long(argc, argv, "i:b:e:wv",
                                      long_options, &option_index))) {
 
                switch (c) {
                case 'i':
                        input_name = optarg;
                        break;
+               case 'b':
+                       info.block_size = atoi(optarg);
+                       break;
+               case 'e':
+                       fs_type = atoi(optarg);
+                       break;
                case 'w':
                        winpart = true;
                        break;
@@ -137,6 +150,28 @@ static bool parse_opt(int argc, char **argv)
                        return false;
                }
        }
+
+       switch (info.block_size) {
+       case 1024:
+       case 2048:
+       case 4096:
+               break;
+       default:
+               printf("parse_opt: block_size = %"PRIu32" unsupported\n",
+                               info.block_size);
+               return false;
+       }
+
+       switch (fs_type) {
+       case F_SET_EXT2:
+       case F_SET_EXT3:
+       case F_SET_EXT4:
+               break;
+       default:
+               printf("parse_opt: fs_type = %"PRIu32" unsupported\n", fs_type);
+               return false;
+       }
+
        return true;
 }
 
@@ -156,13 +191,14 @@ int main(int argc, char **argv)
        if (verbose)
                ext4_dmask_set(DEBUG_ALL);
 
-       printf("ext4_mkfs\n");
-       r = ext4_mkfs(&fs, bd, &info);
+       printf("ext4_mkfs: ext%d\n", fs_type);
+       r = ext4_mkfs(&fs, bd, &info, fs_type);
        if (r != EOK) {
                printf("ext4_mkfs error: %d\n", r);
                return EXIT_FAILURE;
        }
 
+       memset(&info, 0, sizeof(struct ext4_mkfs_info));
        r = ext4_mkfs_read_info(bd, &info);
        if (r != EOK) {
                printf("ext4_mkfs_read_info error: %d\n", r);
@@ -182,7 +218,6 @@ int main(int argc, char **argv)
        printf("Features incompat: 0x%x\n", info.feat_incompat);
        printf("BG desc reserve: %"PRIu32"\n", info.bg_desc_reserve_blocks);
        printf("Descriptor size: %"PRIu32"\n",info.dsc_size);
-       printf("journal: %s\n", !info.no_journal ? "yes" : "no");
        printf("Label: %s\n", info.label);
 
        printf("\nDone ...\n");