uncrypt: Write status when it reboots to factory reset

When it reboots into recovery for a factory reset, it still needs to
write the uncrypt status (-1) to the pipe.

Bug: 21511893
Change-Id: I1a725820f1e1875146e49b5a6f28af2fbf284fc7
diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp
index 6e670a4..1db3013 100644
--- a/uncrypt/uncrypt.cpp
+++ b/uncrypt/uncrypt.cpp
@@ -427,26 +427,29 @@
         wipe_misc();
         reboot_to_recovery();
     } else {
-        std::string package;
-        if (argc == 3) {
-            // when command-line args are given this binary is being used
-            // for debugging.
-            input_path = argv[1];
-            map_file = argv[2];
-        } else {
-            if (!find_uncrypt_package(package)) {
-                return 1;
-            }
-            input_path = package.c_str();
-            map_file = cache_block_map.c_str();
-        }
-
         // The pipe has been created by the system server.
         int status_fd = open(status_file.c_str(), O_WRONLY | O_CREAT | O_SYNC, S_IRUSR | S_IWUSR);
         if (status_fd == -1) {
             ALOGE("failed to open pipe \"%s\": %s\n", status_file.c_str(), strerror(errno));
             return 1;
         }
+
+        if (argc == 3) {
+            // when command-line args are given this binary is being used
+            // for debugging.
+            input_path = argv[1];
+            map_file = argv[2];
+        } else {
+            std::string package;
+            if (!find_uncrypt_package(package)) {
+                android::base::WriteStringToFd("-1\n", status_fd);
+                close(status_fd);
+                return 1;
+            }
+            input_path = package.c_str();
+            map_file = cache_block_map.c_str();
+        }
+
         int status = uncrypt(input_path, map_file, status_fd);
         if (status != 0) {
             android::base::WriteStringToFd("-1\n", status_fd);