Merge "Fix vdc to add sequence number for NativeConectorDaemon"
diff --git a/Android.mk b/Android.mk
index bba6122..54abb23 100644
--- a/Android.mk
+++ b/Android.mk
@@ -53,7 +53,7 @@
 
 LOCAL_C_INCLUDES := $(common_c_includes)
 
-LOCAL_CFLAGS := 
+LOCAL_CFLAGS := -Werror=format
 
 LOCAL_SHARED_LIBRARIES := $(common_shared_libraries)
 
diff --git a/CommandListener.cpp b/CommandListener.cpp
index 97ed2ce..33af9e5 100644
--- a/CommandListener.cpp
+++ b/CommandListener.cpp
@@ -40,7 +40,7 @@
 #include "cryptfs.h"
 
 CommandListener::CommandListener() :
-                 FrameworkListener("vold") {
+                 FrameworkListener("vold", true) {
     registerCmd(new DumpCmd());
     registerCmd(new VolumeCmd());
     registerCmd(new AsecCmd());
@@ -566,4 +566,3 @@
 
     return 0;
 }
-
diff --git a/cryptfs.c b/cryptfs.c
index a3cfc37..5bd6de7 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -40,6 +40,7 @@
 #include <linux/kdev_t.h>
 #include "cryptfs.h"
 #define LOG_TAG "Cryptfs"
+#include "cutils/android_reboot.h"
 #include "cutils/log.h"
 #include "cutils/properties.h"
 #include "hardware_legacy/power.h"
@@ -1386,8 +1387,26 @@
         sleep(2); /* Give the UI a chance to show 100% progress */
         android_reboot(ANDROID_RB_RESTART, 0, 0);
     } else {
-        property_set("vold.encrypt_progress", "error_partially_encrypted");
-        release_wake_lock(lockid);
+        char value[PROPERTY_VALUE_MAX];
+
+        property_get("ro.vold.wipe_on_cyrypt_fail", value, "0");
+        if (!strcmp(value, "1")) {
+            /* wipe data if encryption failed */
+            SLOGE("encryption failed - rebooting into recovery to wipe data\n");
+            mkdir("/cache/recovery", 0700);
+            int fd = open("/cache/recovery/command", O_RDWR|O_CREAT|O_TRUNC);
+            if (fd >= 0) {
+                write(fd, "--wipe_data", strlen("--wipe_data") + 1);
+                close(fd);
+            } else {
+                SLOGE("could not open /cache/recovery/command\n");
+            }
+            android_reboot(ANDROID_RB_RESTART2, 0, "recovery");
+        } else {
+            /* set property to trigger dialog */
+            property_set("vold.encrypt_progress", "error_partially_encrypted");
+            release_wake_lock(lockid);
+        }
         return -1;
     }
 
diff --git a/logwrapper.c b/logwrapper.c
index 8ef583b..34a1e5a 100644
--- a/logwrapper.c
+++ b/logwrapper.c
@@ -25,6 +25,7 @@
 
 #include "private/android_filesystem_config.h"
 #include "cutils/log.h"
+#include "cutils/sched_policy.h"
 
 int parent(const char *tag, int parent_read) {
     int status;
@@ -148,18 +149,10 @@
         close(child_ptty);
 
         if (background) {
-            int fd = open("/dev/cpuctl/bg_non_interactive/tasks", O_WRONLY);
-            if (fd >= 0) {
-                char text[64];
-                sprintf(text, "%d", getpid());
-                if (write(fd, text, strlen(text)) < 0) {
-                    ALOG(LOG_WARN, "logwrapper",
-                        "Unable to background process (%s)", strerror(errno));
-                }
-                close(fd);
-            } else {
+            int err = set_sched_policy(getpid(), SP_BACKGROUND);
+            if (err < 0) {
                 ALOG(LOG_WARN, "logwrapper",
-                    "Unable to background process (%s)", strerror(errno));
+                    "Unable to background process (%s)", strerror(-err));
             }
         }