mtdutils: Fix mounting partitions by-name

Change-Id: I8314bb94bf5bcd9576995cd2ecdc5133c5f5ea11
diff --git a/mtdutils/Android.mk b/mtdutils/Android.mk
index 7e5fadc..87ac081 100644
--- a/mtdutils/Android.mk
+++ b/mtdutils/Android.mk
@@ -5,13 +5,17 @@
 
 LOCAL_SRC_FILES := \
 	mtdutils.c \
-	mounts.c 
+	mounts.c
 
 ifneq ($(filter rk30xx rk3188,$(TARGET_BOARD_PLATFORM)),)
 LOCAL_SRC_FILES += rk3xhack.c
 LOCAL_CFLAGS += -DRK3X
 endif
 
+ifeq ($(TARGET_MTD_BY_NAME),true)
+LOCAL_CFLAGS += -DBYNAME
+endif
+
 LOCAL_MODULE := libmtdutils
 LOCAL_STATIC_LIBRARIES := libcutils libc
 LOCAL_CLANG := true
@@ -22,13 +26,17 @@
 
 LOCAL_SRC_FILES := \
 	mtdutils.c \
-	mounts.c 
+	mounts.c
 
 ifneq ($(filter rk30xx rk3188,$(TARGET_BOARD_PLATFORM)),)
 LOCAL_SRC_FILES += rk3xhack.c
 LOCAL_CFLAGS += -DRK3X
 endif
 
+ifeq ($(TARGET_MTD_BY_NAME),true)
+LOCAL_CFLAGS += -DBYNAME
+endif
+
 LOCAL_MODULE := libmtdutils
 LOCAL_SHARED_LIBRARIES := libcutils libc
 LOCAL_CLANG := true
diff --git a/mtdutils/mtdutils.c b/mtdutils/mtdutils.c
index 6779d6e..7a22efe 100644
--- a/mtdutils/mtdutils.c
+++ b/mtdutils/mtdutils.c
@@ -32,6 +32,11 @@
     #include "rk3xhack.h"
 #endif
 
+#ifdef BYNAME
+static const char mtdprefix[] = "/dev/block/mtd/by-name/";
+#define MTD_BASENAME_OFFSET (sizeof(mtdprefix)-1)
+#endif
+
 struct MtdReadContext {
     const MtdPartition *partition;
     char *buffer;
@@ -141,7 +146,11 @@
             p->device_index = mtdnum;
             p->size = mtdsize;
             p->erase_size = mtderasesize;
+#ifdef BYNAME
+            asprintf(&p->name, "%s%s", mtdprefix, mtdname);
+#else
             p->name = strdup(mtdname);
+#endif
             if (p->name == NULL) {
                 errno = ENOMEM;
                 goto bail;
@@ -180,6 +189,11 @@
                 if (strcmp(p->name, name) == 0) {
                     return p;
                 }
+#ifdef BYNAME
+                if (strcmp(p->name+MTD_BASENAME_OFFSET, name) == 0) {
+                    return p;
+                }
+#endif
             }
         }
     }
@@ -795,4 +809,4 @@
         return -1;
     sprintf(device, "/dev/block/mtdblock%d", p->device_index);
     return 0;
-}
+}
\ No newline at end of file