Add mbtk_reboot

Change-Id: I16682b505016b15c9f69819bd100da7e7fd75ae4
diff --git a/mbtk/libmbtk_lib/src/mbtk_mtd.c b/mbtk/libmbtk_lib/src/mbtk_mtd.c
index 4f1c2be..6129bc1 100755
--- a/mbtk/libmbtk_lib/src/mbtk_mtd.c
+++ b/mbtk/libmbtk_lib/src/mbtk_mtd.c
@@ -42,12 +42,14 @@
     int index = 0;
     char size_str[16];
     char name[32];
+    char erase_size_str[16];
     memset(buff, 0x0, 64);
     while(fgets(buff, 64, fp)) {
         if(str_startwith(buff, "mtd")) {
             memset(size_str, 0x0, 16);
+            memset(erase_size_str, 0x0, sizeof(erase_size_str));
             memset(name, 0x0, 32);
-            if(3 == sscanf(buff, "%s %s %*s %s", partition_list[index].dev, size_str, name)) {
+            if(4 == sscanf(buff, "%s %s %s %s", partition_list[index].dev, size_str, erase_size_str, name)) {
                 if(name[0] == '\"' && name[strlen(name) - 1] == '\"') {
                     memcpy(partition_list[index].name, name + 1, strlen(name) - 2); // No copy ""
                 } else {
@@ -60,6 +62,7 @@
                 }
 
                 partition_list[index].partition_size = (uint32)strtoul(size_str, NULL, 16);
+                partition_list[index].erase_size = (uint32)strtoul(erase_size_str, NULL, 16);
                 if(index > 0) {
                     partition_list[index].partition_start = partition_list[index - 1].partition_start + partition_list[index - 1].partition_size;
                 }
@@ -87,4 +90,51 @@
     return partition_list;
 }
 
+int mbtk_partition_get_by_name(char *partition_name, mbtk_partition_info_t *info)
+{
+    FILE *fp = fopen("/proc/mtd", "r");
+    if(fp == NULL) {
+        LOGE("fopen(/proc/mtd) fail:%d", errno);
+        return -1;
+    }
+
+    char buff[64];
+    char size_str[16];
+    char erase_size_str[16];
+    char name[32];
+    memset(buff, 0x0, sizeof(buff));
+    while(fgets(buff, sizeof(buff), fp)) {
+        if(strstr(buff, partition_name)) {
+            memset(size_str, 0x0, sizeof(size_str));
+            memset(erase_size_str, 0x0, sizeof(erase_size_str));
+            memset(name, 0x0, sizeof(name));
+            memcpy(info->dev, "/dev/", 5);
+            if(4 == sscanf(buff, "%s %s %s %s", info->dev + 5, size_str, erase_size_str, name)) {
+                if(name[0] == '\"' && name[strlen(name) - 1] == '\"') {
+                    memcpy(info->name, name + 1, strlen(name) - 2); // No copy ""
+                } else {
+                    LOGE("partition(%s) name error.", buff);
+                    return -1;
+                }
+
+                if(info->dev[strlen(info->dev) - 1] == ':') {
+                    info->dev[strlen(info->dev) - 1] = '\0';
+                }
+
+                info->partition_size = (uint32)strtoul(size_str, NULL, 16);
+                info->erase_size = (uint32)strtoul(erase_size_str, NULL, 16);
+                //info->partition_start += info->partition_size;
+                break;
+            } else {
+                LOGE("sscanf(%s) fail:%d", buff, errno);
+                return -1;
+            }
+        }
+        memset(buff, 0x0, sizeof(buff));
+    }
+    fclose(fp);
+
+    return 0;
+}
+