recovery: Update recovery from CM.

Change-Id: Ibda5ba8bbfc93ef6ff565128b63adc2991218a70
diff --git a/mmcutils/mmcutils.c b/mmcutils/mmcutils.c
index e0efe55..76b8ff8 100644
--- a/mmcutils/mmcutils.c
+++ b/mmcutils/mmcutils.c
@@ -340,13 +340,18 @@
 
 int
 format_ext3_device (const char *device) {
-    // Run mke2fs
+#ifdef BOARD_HAS_LARGE_FILESYSTEM
+    char *const mke2fs[] = {MKE2FS_BIN, "-j", "-q", device, NULL};
+    char *const tune2fs[] = {TUNE2FS_BIN, "-C", "1", device, NULL};
+#else
     char *const mke2fs[] = {MKE2FS_BIN, "-j", device, NULL};
+    char *const tune2fs[] = {TUNE2FS_BIN, "-j", "-C", "1", device, NULL};
+#endif
+    // Run mke2fs
     if(run_exec_process(mke2fs))
         return -1;
 
     // Run tune2fs
-    char *const tune2fs[] = {TUNE2FS_BIN, "-j", "-C", "1", device, NULL};
     if(run_exec_process(tune2fs))
         return -1;
 
@@ -464,9 +469,8 @@
 }
 
 
-// TODO: refactor this to not be a giant copy paste mess
 int
-mmc_raw_dump (const MmcPartition *partition, char *out_file) {
+mmc_raw_dump_internal (const char* in_file, const char *out_file) {
     int ch;
     FILE *in;
     FILE *out;
@@ -475,7 +479,6 @@
     unsigned sz = 0;
     unsigned i;
     int ret = -1;
-    char *in_file = partition->device_index;
 
     in  = fopen ( in_file,  "r" );
     if (in == NULL)
@@ -516,6 +519,12 @@
 
 }
 
+// TODO: refactor this to not be a giant copy paste mess
+int
+mmc_raw_dump (const MmcPartition *partition, char *out_file) {
+    return mmc_raw_dump_internal(partition->device_index, out_file);
+}
+
 
 int
 mmc_raw_read (const MmcPartition *partition, char *data, int data_size) {
@@ -575,33 +584,36 @@
 
 int cmd_mmc_restore_raw_partition(const char *partition, const char *filename)
 {
-    mmc_scan_partitions();
-    const MmcPartition *p;
-    p = mmc_find_partition_by_name(partition);
-    if (p == NULL)
-        return -1;
-    return mmc_raw_copy(p, filename);
+    if (partition[0] != '/') {
+        mmc_scan_partitions();
+        const MmcPartition *p;
+        p = mmc_find_partition_by_name(partition);
+        if (p == NULL)
+            return -1;
+        return mmc_raw_copy(p, filename);
+    }
+    else {
+        return mmc_raw_dump_internal(filename, partition);
+    }
 }
 
 int cmd_mmc_backup_raw_partition(const char *partition, const char *filename)
 {
-    mmc_scan_partitions();
-    const MmcPartition *p;
-    p = mmc_find_partition_by_name(partition);
-    if (p == NULL)
-        return -1;
-    return mmc_raw_dump(p, filename);
+    if (partition[0] != '/') {
+        mmc_scan_partitions();
+        const MmcPartition *p;
+        p = mmc_find_partition_by_name(partition);
+        if (p == NULL)
+            return -1;
+        return mmc_raw_dump(p, filename);
+    }
+    else {
+        return mmc_raw_dump_internal(partition, filename);
+    }
 }
 
 int cmd_mmc_erase_raw_partition(const char *partition)
 {
-    mmc_scan_partitions();
-    const MmcPartition *p;
-    p = mmc_find_partition_by_name(partition);
-    if (p == NULL)
-        return -1;
-
-    // TODO: implement raw wipe
     return 0;
 }