diff options
author | Tao Bao <tbao@google.com> | 2017-05-12 03:35:55 +0200 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2017-05-12 03:35:55 +0200 |
commit | 7ca2e734fc70cf93eced938122bc41738b3bb4bc (patch) | |
tree | 1d6b2f9185d2b9a9a2961ff92482a323081e4578 | |
parent | Merge "recovery: Skip "/" in setup_install_mounts()." (diff) | |
parent | Merge "Don't write to /sys/class/android_usb/android0/enable with configfs." (diff) | |
download | android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.tar android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.tar.gz android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.tar.bz2 android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.tar.lz android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.tar.xz android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.tar.zst android_bootable_recovery-7ca2e734fc70cf93eced938122bc41738b3bb4bc.zip |
-rw-r--r-- | adb_install.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/adb_install.cpp b/adb_install.cpp index e7d7758f9..ac0130651 100644 --- a/adb_install.cpp +++ b/adb_install.cpp @@ -26,7 +26,10 @@ #include <sys/wait.h> #include <unistd.h> +#include <android-base/file.h> +#include <android-base/logging.h> #include <android-base/properties.h> +#include <android-base/unique_fd.h> #include "common.h" #include "fuse_sideload.h" @@ -34,16 +37,22 @@ #include "ui.h" static void set_usb_driver(bool enabled) { - int fd = open("/sys/class/android_usb/android0/enable", O_WRONLY); - if (fd < 0) { - ui->Print("failed to open driver control: %s\n", strerror(errno)); + // USB configfs doesn't use /s/c/a/a/enable. + if (android::base::GetBoolProperty("sys.usb.configfs", false)) { return; } - if (TEMP_FAILURE_RETRY(write(fd, enabled ? "1" : "0", 1)) == -1) { - ui->Print("failed to set driver control: %s\n", strerror(errno)); + + static constexpr const char* USB_DRIVER_CONTROL = "/sys/class/android_usb/android0/enable"; + android::base::unique_fd fd(open(USB_DRIVER_CONTROL, O_WRONLY)); + if (fd == -1) { + PLOG(ERROR) << "Failed to open driver control"; + return; } - if (close(fd) < 0) { - ui->Print("failed to close driver control: %s\n", strerror(errno)); + // Not using android::base::WriteStringToFile since that will open with O_CREAT and give EPERM + // when USB_DRIVER_CONTROL doesn't exist. When it gives EPERM, we don't know whether that's due + // to non-existent USB_DRIVER_CONTROL or indeed a permission issue. + if (!android::base::WriteStringToFd(enabled ? "1" : "0", fd)) { + PLOG(ERROR) << "Failed to set driver control"; } } |