nandroid/root/extendedcommands: attenuate for /data not being auto in fstab

Change-Id: I0e7bec03bb29f1ae72f23321f89cf704e54ff4d9
diff --git a/extendedcommands.c b/extendedcommands.c
index 44e7117..729778c 100644
--- a/extendedcommands.c
+++ b/extendedcommands.c
@@ -453,6 +453,9 @@
         LOGE("unknown volume \"%s\"\n", path);
         return -1;
     }
+    if (strstr(path, "/data") == path && volume_for_path("/sdcard") == NULL && is_data_media()) {
+        return format_unknown_device(NULL, path, NULL);
+    }
     if (strcmp(fs_type, "ramdisk") == 0) {
         // you can't format the ramdisk.
         LOGE("can't format_volume \"%s\"", path);
diff --git a/nandroid.c b/nandroid.c
index ad44ae6..76d0962 100644
--- a/nandroid.c
+++ b/nandroid.c
@@ -436,8 +436,10 @@
             printf("Found new backup image: %s\n", tmp);
         }
 
-        // If the fs_type of this volume is "auto", let's revert to using a
-        // rm -rf, rather than trying to do a ext3/ext4/whatever format.
+        // If the fs_type of this volume is "auto" or mount_point is /data
+        // and vol for /sdcard is NULL and is_data_media, let's revert
+        // to using a rm -rf, rather than trying to do a
+        // ext3/ext4/whatever format.
         // This is because some phones (like DroidX) will freak out if you
         // reformat the /system or /data partitions, and not boot due to
         // a locked bootloader.
@@ -449,6 +451,8 @@
         // Or of volume does not exist (.android_secure), just rm -rf.
         if (vol == NULL || 0 == strcmp(vol->fs_type, "auto"))
             backup_filesystem = NULL;
+        else if (0 == strcmp(vol->mount_point, "/data") && volume_for_path("/sdcard") == NULL && is_data_media())
+	         backup_filesystem = NULL;
     }
 
     ensure_directory(mount_point);
diff --git a/roots.c b/roots.c
index 4835ce8..4997350 100644
--- a/roots.c
+++ b/roots.c
@@ -197,7 +197,7 @@
 
 int is_data_media() {
     Volume *data = volume_for_path("/data");
-    return data != NULL && strcmp(data->fs_type, "auto") == 0 && volume_for_path("/sdcard") == NULL;
+    return data != NULL && strcmp(data->fs_type, "auto") == 0 || volume_for_path("/sdcard") == NULL;
 }
 
 void setup_data_media() {
@@ -334,6 +334,9 @@
         LOGE("unknown volume \"%s\"\n", volume);
         return -1;
     }
+    if (strstr(volume, "/data") == volume && volume_for_path("/sdcard") == NULL && is_data_media()) {
+	return format_unknown_device(NULL, volume, NULL);
+    }
     if (strcmp(v->fs_type, "ramdisk") == 0) {
         // you can't format the ramdisk.
         LOGE("can't format_volume \"%s\"", volume);