Fix various bugs.

Change-Id: I46e3001e6857480a77253be24b1753b2e4d88e69
diff --git a/nandroid.c b/nandroid.c
index 4f7724a..5d7b9d4 100644
--- a/nandroid.c
+++ b/nandroid.c
@@ -227,7 +227,7 @@
         return ret;
     }
     */
-    if (0 != (ret = format_device(mount_point))) {
+    if (0 != (ret = format_volume(mount_point))) {
         ui_print("Error while formatting %s!\n", mount_point);
         return ret;
     }
diff --git a/recovery.c b/recovery.c
index 04d13c9..33b54ba 100644
--- a/recovery.c
+++ b/recovery.c
@@ -681,8 +681,9 @@
     device_wipe_data();
     erase_volume("/data");
     erase_volume("/cache");
+#ifdef BOARD_HAS_DATADATA
     erase_volume("/datadata");
-    erase_volume("/datadata");
+#endif
     erase_volume("/sd-ext");
     erase_volume("/sdcard/.android_secure");
     ui_print("Data wipe complete.\n");
diff --git a/roots.c b/roots.c
index 184bfd0..70d5578 100644
--- a/roots.c
+++ b/roots.c
@@ -196,6 +196,9 @@
 int format_volume(const char* volume) {
     Volume* v = volume_for_path(volume);
     if (v == NULL) {
+        // silent failure for sd-ext
+        if (strcmp(volume, "/sd-ext") == 0)
+            return -1;
         LOGE("unknown volume \"%s\"\n", volume);
         return -1;
     }
@@ -205,8 +208,11 @@
         return -1;
     }
     if (strcmp(v->mount_point, volume) != 0) {
+#if 0
         LOGE("can't give path \"%s\" to format_volume\n", volume);
         return -1;
+#endif
+        return format_unknown_device(volume);
     }
 
     if (ensure_path_unmounted(volume) != 0) {