FEATURES:
[lwext4.git] / demos / generic / main.c
index ab24bd753b885bbca3ff24fe96e35c8c74250bc6..e6e1f39013936f25f50ddf4846ffd1b15f430922 100644 (file)
 #include <ext4_filedev.h>\r
 #include <ext4.h>\r
 \r
-\r
-\r
 char input_name[128] = "ext2";\r
 \r
 /**@brief      Read-write size*/\r
 static int rw_szie  = 1024;\r
 \r
 /**@brief      Read-write size*/\r
-static int rw_count = 1024;\r
+static int rw_count = 10000;\r
 \r
 /**@brief   Directory test count*/\r
 static int dir_cnt  = 10;\r
 \r
+/**@brief   Static or dynamic cache mode*/\r
 static bool cache_mode = false;\r
 \r
+/**@brief   Cleanup after test.*/\r
+static bool cleanup_flag = false;\r
+\r
+/**@brief   Block device stats.*/\r
+static bool bstat = false;\r
+\r
+/**@brief   Superblock stats.*/\r
+static bool sbstat = false;\r
 \r
 /**@brief      File write buffer*/\r
 static uint8_t *wr_buff;\r
@@ -70,9 +77,12 @@ Copyright (c) 2013 Grzegorz Kostka (kostka.grzegorz@gmail.com)       \n\
 Usage:                                                                                                                 \n\\r
        -i   - input file             (default = ext2)                          \n\\r
        -rws - single R/W size        (default = 1024)                          \n\\r
-       -rwc - R/W count              (default = 1024)                          \n\\r
-       -cache - 0 static, 1 dynamic  (default = 0)                                     \n\\r
-    -dirs  - directory test count (default = 0)                 \n\\r
+       -rwc - R/W count              (default = 10000)                         \n\\r
+       -cache  - 0 static, 1 dynamic  (default = 0)                \n\\r
+    -dirs   - directory test count (default = 10)               \n\\r
+    -clean  - clean up after test                               \n\\r
+    -bstat  - block device stats                                \n\\r
+    -sbstat - superblock stats                                  \n\\r
 \n";\r
 \r
 static char* entry_to_str(uint8_t type)\r
@@ -192,10 +202,6 @@ static bool dir_test(int len)
     int       i;\r
     char path[64];\r
 \r
-    printf("Remove directory /mp/dir1\n");\r
-    ext4_dir_rm("/mp/dir1");\r
-\r
-\r
     printf("Directory create: /mp/dir1\n");\r
     r = ext4_dir_mk("/mp/dir1");\r
     if(r != EOK){\r
@@ -214,31 +220,17 @@ static bool dir_test(int len)
         }\r
     }\r
 \r
-    printf("Add directories to: /mp/dir1\n");\r
-    for (i = 0; i < len; ++i) {\r
-        sprintf(path, "/mp/dir1/d%d", i);\r
-        r = ext4_dir_mk(path);\r
-        if(r != EOK){\r
-            printf("Unable to create directory in directory: /mp/dir1\n");\r
-            return false;\r
-        }\r
-    }\r
-\r
-    printf("Add file directories in: /mp/dir1\n");\r
-\r
-    for (i = 0; i < len; ++i) {\r
-        sprintf(path, "/mp/dir1/d%d/ff", i);\r
-        r = ext4_fopen(&f, path, "wb");\r
-        if(r != EOK){\r
-            printf("Unable to create file in directory: /mp/dir1\n");\r
-            return false;\r
-        }\r
-    }\r
-\r
     dir_ls("/mp/dir1");\r
     return true;\r
 }\r
 \r
+static void cleanup(void)\r
+{\r
+    ext4_fremove("/mp/hello.txt");\r
+    ext4_fremove("/mp/test1");\r
+    ext4_dir_rm("/mp/dir1");\r
+}\r
+\r
 int main(int argc, char **argv)\r
 {\r
        int option_index = 0;\r
@@ -254,11 +246,14 @@ int main(int argc, char **argv)
         {"rws",     required_argument, 0, 'b'},\r
         {"rwc",                required_argument, 0, 'c'},\r
         {"cache",   required_argument, 0, 'd'},\r
-        {"dirs",   required_argument,  0, 'e'},\r
+        {"dirs",    required_argument, 0, 'e'},\r
+        {"clean",   no_argument,       0, 'f'},\r
+        {"bstat",   no_argument,       0, 'g'},\r
+        {"sbstat",  no_argument,       0, 'h'},\r
         {0, 0, 0, 0}\r
       };\r
 \r
-    while(-1 != (c = getopt_long (argc, argv, "a:b:c:d:e:", long_options, &option_index))) {\r
+    while(-1 != (c = getopt_long (argc, argv, "a:b:c:d:e:fgh", long_options, &option_index))) {\r
 \r
        switch(c){\r
                case 'a':\r
@@ -276,6 +271,15 @@ int main(int argc, char **argv)
             case 'e':\r
                 dir_cnt = atoi(optarg);\r
                 break;\r
+            case 'f':\r
+                cleanup_flag = true;\r
+                break;\r
+            case 'g':\r
+                bstat = true;\r
+                break;\r
+            case 'h':\r
+                sbstat = true;\r
+                break;\r
                default:\r
                        printf(usage);\r
                        return EXIT_FAILURE;\r
@@ -323,12 +327,14 @@ int main(int argc, char **argv)
                return EXIT_FAILURE;\r
        }\r
 \r
-       dir_test(dir_cnt);\r
+       cleanup();\r
+\r
+    if(sbstat)\r
+        mp_stats();\r
 \r
-       ext4_fremove("/mp/hello.txt");\r
-       ext4_fremove("/mp/test1");\r
-       mp_stats();\r
-       dir_ls("/mp/");\r
+\r
+    dir_ls("/mp/");\r
+       dir_test(dir_cnt);\r
 \r
     /*Add hello world file.*/\r
     r = ext4_fopen(&f, "/mp/hello.txt", "wb");\r
@@ -390,16 +396,20 @@ int main(int argc, char **argv)
        }\r
 \r
        printf("OK\n");\r
-\r
        r = ext4_fclose(&f);\r
 \r
-\r
-       mp_stats();\r
        dir_ls("/mp/");\r
 \r
-       block_stats();\r
-       r = ext4_umount("/mp/");\r
+       if(sbstat)\r
+           mp_stats();\r
+\r
+       if(bstat)\r
+           block_stats();\r
 \r
+       if(cleanup_flag)\r
+           cleanup();\r
+\r
+       r = ext4_umount("/mp/");\r
        printf("Test finish: OK\n");\r
     return EXIT_SUCCESS;\r
 \r