Merge "Switch to <android-base/properties.h>."
diff --git a/adb_install.cpp b/adb_install.cpp
index b05fda1..fab72f8 100644
--- a/adb_install.cpp
+++ b/adb_install.cpp
@@ -26,13 +26,14 @@
 #include <fcntl.h>
 
 #include "ui.h"
-#include "cutils/properties.h"
 #include "install.h"
 #include "common.h"
 #include "adb_install.h"
 #include "minadbd/fuse_adb_provider.h"
 #include "fuse_sideload.h"
 
+#include <android-base/properties.h>
+
 static void set_usb_driver(RecoveryUI* ui, bool enabled) {
     int fd = open("/sys/class/android_usb/android0/enable", O_WRONLY);
     if (fd < 0) {
@@ -49,7 +50,7 @@
 
 static void stop_adbd(RecoveryUI* ui) {
     ui->Print("Stopping adbd...\n");
-    property_set("ctl.stop", "adbd");
+    android::base::SetProperty("ctl.stop", "adbd");
     set_usb_driver(ui, false);
 }
 
@@ -57,7 +58,7 @@
     if (is_ro_debuggable()) {
         ui->Print("Restarting adbd...\n");
         set_usb_driver(ui, true);
-        property_set("ctl.start", "adbd");
+        android::base::SetProperty("ctl.start", "adbd");
     }
 }
 
diff --git a/recovery.cpp b/recovery.cpp
index aad2464..bd06aaf 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -43,11 +43,12 @@
 #include <android-base/file.h>
 #include <android-base/logging.h>
 #include <android-base/parseint.h>
+#include <android-base/properties.h>
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 #include <cutils/android_reboot.h>
-#include <cutils/properties.h>
+#include <cutils/properties.h> /* for property_list */
 #include <healthd/BatteryMonitor.h>
 #include <private/android_logger.h> /* private pmsg functions */
 #include <selinux/label.h>
@@ -205,8 +206,7 @@
 }
 
 bool is_ro_debuggable() {
-    char value[PROPERTY_VALUE_MAX+1];
-    return (property_get("ro.debuggable", value, NULL) == 1 && value[0] == '1');
+    return android::base::GetBoolProperty("ro.debuggable", false);
 }
 
 static void redirect_stdio(const char* filename) {
@@ -1182,15 +1182,12 @@
                 break;
 
             case Device::MOUNT_SYSTEM:
-                char system_root_image[PROPERTY_VALUE_MAX];
-                property_get("ro.build.system_root_image", system_root_image, "");
-
                 // For a system image built with the root directory (i.e.
                 // system_root_image == "true"), we mount it to /system_root, and symlink /system
                 // to /system_root/system to make adb shell work (the symlink is created through
                 // the build system).
                 // Bug: 22855115
-                if (strcmp(system_root_image, "true") == 0) {
+                if (android::base::GetBoolProperty("ro.build.system_root_image", false)) {
                     if (ensure_path_mounted_at("/", "/system_root") != -1) {
                         ui->Print("Mounted /system.\n");
                     }
@@ -1584,8 +1581,7 @@
                     ui->Print("Retry attempt %d\n", retry_count);
 
                     // Reboot and retry the update
-                    int ret = property_set(ANDROID_RB_PROPERTY, "reboot,recovery");
-                    if (ret < 0) {
+                    if (!android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,recovery")) {
                         ui->Print("Reboot failed\n");
                     } else {
                         while (true) {
@@ -1665,17 +1661,17 @@
     switch (after) {
         case Device::SHUTDOWN:
             ui->Print("Shutting down...\n");
-            property_set(ANDROID_RB_PROPERTY, "shutdown,");
+            android::base::SetProperty(ANDROID_RB_PROPERTY, "shutdown,");
             break;
 
         case Device::REBOOT_BOOTLOADER:
             ui->Print("Rebooting to bootloader...\n");
-            property_set(ANDROID_RB_PROPERTY, "reboot,bootloader");
+            android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,bootloader");
             break;
 
         default:
             ui->Print("Rebooting...\n");
-            property_set(ANDROID_RB_PROPERTY, "reboot,");
+            android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,");
             break;
     }
     while (true) {
diff --git a/screen_ui.cpp b/screen_ui.cpp
index 79b5466..c617272 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -32,9 +32,9 @@
 #include <vector>
 
 #include <android-base/logging.h>
+#include <android-base/properties.h>
 #include <android-base/strings.h>
 #include <android-base/stringprintf.h>
-#include <cutils/properties.h>
 
 #include "common.h"
 #include "device.h"
@@ -281,8 +281,8 @@
 
         int y = 0;
         if (show_menu) {
-            char recovery_fingerprint[PROPERTY_VALUE_MAX];
-            property_get("ro.bootimage.build.fingerprint", recovery_fingerprint, "");
+            std::string recovery_fingerprint =
+                    android::base::GetProperty("ro.bootimage.build.fingerprint", "");
 
             SetColor(INFO);
             DrawTextLine(TEXT_INDENT, &y, "Android Recovery", true);
@@ -439,7 +439,7 @@
 void ScreenRecoveryUI::Init() {
     gr_init();
 
-    density_ = static_cast<float>(property_get_int32("ro.sf.lcd_density", 160)) / 160.f;
+    density_ = static_cast<float>(android::base::GetIntProperty("ro.sf.lcd_density", 160)) / 160.f;
     is_large_ = gr_fb_height() > PixelsFromDp(800);
 
     gr_font_size(&char_width_, &char_height_);
diff --git a/ui.cpp b/ui.cpp
index 2efb759..78b6e4f 100644
--- a/ui.cpp
+++ b/ui.cpp
@@ -28,7 +28,7 @@
 #include <time.h>
 #include <unistd.h>
 
-#include <cutils/properties.h>
+#include <android-base/properties.h>
 #include <cutils/android_reboot.h>
 
 #include "common.h"
@@ -175,7 +175,7 @@
 
           case RecoveryUI::REBOOT:
             if (reboot_enabled) {
-                property_set(ANDROID_RB_PROPERTY, "reboot,");
+                android::base::SetProperty(ANDROID_RB_PROPERTY, "reboot,");
                 while (true) { pause(); }
             }
             break;
diff --git a/uncrypt/bootloader_message_writer.cpp b/uncrypt/bootloader_message_writer.cpp
index 3bb106a..db52121 100644
--- a/uncrypt/bootloader_message_writer.cpp
+++ b/uncrypt/bootloader_message_writer.cpp
@@ -17,12 +17,12 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <string.h>
-#include <sys/system_properties.h>
 
 #include <string>
 #include <vector>
 
 #include <android-base/file.h>
+#include <android-base/properties.h>
 #include <android-base/stringprintf.h>
 #include <android-base/unique_fd.h>
 #include <fs_mgr.h>
@@ -30,14 +30,13 @@
 #include "bootloader.h"
 
 static struct fstab* read_fstab(std::string* err) {
-  // The fstab path is always "/fstab.${ro.hardware}".
-  std::string fstab_path = "/fstab.";
-  char value[PROP_VALUE_MAX];
-  if (__system_property_get("ro.hardware", value) == 0) {
+  std::string ro_hardware = android::base::GetProperty("ro.hardware", "");
+  if (ro_hardware.empty()) {
     *err = "failed to get ro.hardware";
     return nullptr;
   }
-  fstab_path += value;
+  // The fstab path is always "/fstab.${ro.hardware}".
+  std::string fstab_path = "/fstab." + ro_hardware;
   struct fstab* fstab = fs_mgr_read_fstab(fstab_path.c_str());
   if (fstab == nullptr) {
     *err = "failed to read " + fstab_path;
diff --git a/uncrypt/uncrypt.cpp b/uncrypt/uncrypt.cpp
index 96edfd7..dea8445 100644
--- a/uncrypt/uncrypt.cpp
+++ b/uncrypt/uncrypt.cpp
@@ -107,12 +107,12 @@
 
 #include <android-base/file.h>
 #include <android-base/logging.h>
+#include <android-base/properties.h>
 #include <android-base/stringprintf.h>
 #include <android-base/strings.h>
 #include <android-base/unique_fd.h>
 #include <bootloader_message_writer.h>
 #include <cutils/android_reboot.h>
-#include <cutils/properties.h>
 #include <cutils/sockets.h>
 #include <fs_mgr.h>
 
@@ -163,13 +163,15 @@
     fstab = NULL;
 
     // The fstab path is always "/fstab.${ro.hardware}".
-    char fstab_path[PATH_MAX+1] = "/fstab.";
-    if (!property_get("ro.hardware", fstab_path+strlen(fstab_path), "")) {
+    std::string ro_hardware = android::base::GetProperty("ro.hardware", "");
+    if (ro_hardware.empty()) {
         LOG(ERROR) << "failed to get ro.hardware";
         return NULL;
     }
 
-    fstab = fs_mgr_read_fstab(fstab_path);
+    std::string fstab_path = "/fstab." + ro_hardware;
+
+    fstab = fs_mgr_read_fstab(fstab_path.c_str());
     if (!fstab) {
         LOG(ERROR) << "failed to read " << fstab_path;
         return NULL;
@@ -194,9 +196,7 @@
             *encryptable = false;
             if (fs_mgr_is_encryptable(v) || fs_mgr_is_file_encrypted(v)) {
                 *encryptable = true;
-                char buffer[PROPERTY_VALUE_MAX+1];
-                if (property_get("ro.crypto.state", buffer, "") &&
-                    strcmp(buffer, "encrypted") == 0) {
+                if (android::base::GetProperty("ro.crypto.state", "") == "encrypted") {
                     *encrypted = true;
                 }
             }
diff --git a/updater/install.cpp b/updater/install.cpp
index 4c4886d..8c33c2b 100644
--- a/updater/install.cpp
+++ b/updater/install.cpp
@@ -37,6 +37,7 @@
 #include <vector>
 
 #include <android-base/parseint.h>
+#include <android-base/properties.h>
 #include <android-base/strings.h>
 #include <android-base/stringprintf.h>
 #include <selinux/label.h>
@@ -46,7 +47,6 @@
 #include "applypatch/applypatch.h"
 #include "cutils/android_reboot.h"
 #include "cutils/misc.h"
-#include "cutils/properties.h"
 #include "edify/expr.h"
 #include "error_code.h"
 #include "minzip/DirUtil.h"
@@ -906,11 +906,10 @@
     char* key = Evaluate(state, argv[0]);
     if (key == NULL) return NULL;
 
-    char value[PROPERTY_VALUE_MAX];
-    property_get(key, value, "");
+    std::string value = android::base::GetProperty(key, "");
     free(key);
 
-    return StringValue(strdup(value));
+    return StringValue(strdup(value.c_str()));
 }
 
 
@@ -1301,9 +1300,8 @@
     char* property;
     if (ReadArgs(state, argv, 2, &filename, &property) < 0) return NULL;
 
-    char buffer[80];
-
     // zero out the 'command' field of the bootloader message.
+    char buffer[80];
     memset(buffer, 0, sizeof(((struct bootloader_message*)0)->command));
     FILE* f = ota_fopen(filename, "r+b");
     fseek(f, offsetof(struct bootloader_message, command), SEEK_SET);
@@ -1311,12 +1309,9 @@
     ota_fclose(f);
     free(filename);
 
-    strcpy(buffer, "reboot,");
-    if (property != NULL) {
-        strncat(buffer, property, sizeof(buffer)-10);
-    }
-
-    property_set(ANDROID_RB_PROPERTY, buffer);
+    std::string reboot_cmd = "reboot,";
+    if (property != nullptr) reboot_cmd += property;
+    android::base::SetProperty(ANDROID_RB_PROPERTY, reboot_cmd);
 
     sleep(5);
     free(property);
diff --git a/wear_ui.cpp b/wear_ui.cpp
index e078134..1788907 100644
--- a/wear_ui.cpp
+++ b/wear_ui.cpp
@@ -30,7 +30,7 @@
 #include "common.h"
 #include "device.h"
 #include "wear_ui.h"
-#include "cutils/properties.h"
+#include "android-base/properties.h"
 #include "android-base/strings.h"
 #include "android-base/stringprintf.h"
 
@@ -160,8 +160,8 @@
         int y = outer_height;
         int x = outer_width;
         if (show_menu) {
-            char recovery_fingerprint[PROPERTY_VALUE_MAX];
-            property_get("ro.bootimage.build.fingerprint", recovery_fingerprint, "");
+            std::string recovery_fingerprint =
+                    android::base::GetProperty("ro.bootimage.build.fingerprint", "");
             SetColor(HEADER);
             DrawTextLine(x + 4, &y, "Android Recovery", true);
             for (auto& chunk: android::base::Split(recovery_fingerprint, ":")) {