diff options
Diffstat (limited to 'adb_install.cpp')
-rw-r--r-- | adb_install.cpp | 43 |
1 files changed, 31 insertions, 12 deletions
diff --git a/adb_install.cpp b/adb_install.cpp index be3b9a063..e10cb4a2e 100644 --- a/adb_install.cpp +++ b/adb_install.cpp @@ -24,11 +24,10 @@ #include <sys/stat.h> #include <signal.h> #include <fcntl.h> +#include <stdio.h> #include "ui.h" #include "cutils/properties.h" -#include "install.h" -#include "common.h" #include "adb_install.h" extern "C" { #include "minadbd/fuse_adb_provider.h" @@ -41,14 +40,24 @@ static void set_usb_driver(bool enabled) { int fd = open("/sys/class/android_usb/android0/enable", O_WRONLY); if (fd < 0) { +/* These error messages show when built in older Android branches (e.g. Gingerbread) + It's not a critical error so we're disabling the error messages. ui->Print("failed to open driver control: %s\n", strerror(errno)); +*/ + printf("failed to open driver control: %s\n", strerror(errno)); return; } if (write(fd, enabled ? "1" : "0", 1) < 0) { +/* ui->Print("failed to set driver control: %s\n", strerror(errno)); +*/ + printf("failed to set driver control: %s\n", strerror(errno)); } if (close(fd) < 0) { +/* ui->Print("failed to close driver control: %s\n", strerror(errno)); +*/ + printf("failed to close driver control: %s\n", strerror(errno)); } } @@ -64,7 +73,7 @@ maybe_restart_adbd() { char value[PROPERTY_VALUE_MAX+1]; int len = property_get("ro.debuggable", value, NULL); if (len == 1 && value[0] == '1') { - ui->Print("Restarting adbd...\n"); + printf("Restarting adbd...\n"); set_usb_driver(true); property_set("ctl.start", "adbd"); } @@ -75,21 +84,24 @@ maybe_restart_adbd() { #define ADB_INSTALL_TIMEOUT 300 int -apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) { - ui = ui_; +apply_from_adb(const char* install_file) { stop_adbd(); set_usb_driver(true); - +/* ui->Print("\n\nNow send the package you want to apply\n" "to the device with \"adb sideload <filename>\"...\n"); - +*/ pid_t child; if ((child = fork()) == 0) { - execl("/sbin/recovery", "recovery", "--adbd", NULL); + execl("/sbin/recovery", "recovery", "--adbd", install_file, NULL); _exit(-1); } + char child_prop[PROPERTY_VALUE_MAX]; + sprintf(child_prop, "%i", child); + property_set("tw_child_pid", child_prop); + // FUSE_SIDELOAD_HOST_PATHNAME will start to exist once the host // connects and starts serving a package. Poll for its // appearance. (Note that inotify doesn't work with FUSE.) @@ -133,14 +145,21 @@ apply_from_adb(RecoveryUI* ui_, int* wipe_cache, const char* install_file) { if (!WIFEXITED(status) || WEXITSTATUS(status) != 0) { if (WEXITSTATUS(status) == 3) { - ui->Print("\nYou need adb 1.0.32 or newer to sideload\nto this device.\n\n"); + printf("\nYou need adb 1.0.32 or newer to sideload\nto this device.\n\n"); } else if (!WIFSIGNALED(status)) { - ui->Print("\n(adbd status %d)\n", WEXITSTATUS(status)); + printf("status %d\n", WEXITSTATUS(status)); } } - set_usb_driver(false); maybe_restart_adbd(); - return result; + if (stat(install_file, &st) != 0) { + if (errno == ENOENT) { + printf("No package received.\n"); + } else { + printf("Error reading package:\n %s\n", strerror(errno)); + } + return -1; + } + return 0; } |