int install_package(const char* path, int* wipe_cache, const char* install_file) { FILE* install_log = fopen_path(install_file, "w"); if (install_log) { fputs(path, install_log); fputc('\n', install_log); } else { LOGE("failed to open last_install: %s\n", strerror(errno)); } int result; if (strstr(path, AROMA_FM_PATH) == NULL && setup_install_mounts() != 0) { // do not umount any partition when starting up aroma file manager from default location // in some devices, aroma have trouble mounting /system and /data if they are unmounted at this stage LOGE("failed to set up expected mounts for install; aborting\n"); result = INSTALL_ERROR; } else { result = really_install_package(path, wipe_cache); } #ifdef ENABLE_LOKI if (result == INSTALL_SUCCESS && loki_support_enabled() > 0) { ui_print("Checking if loki-fying is needed\n"); result = loki_check(); } #endif if (install_log) { fputc(result == INSTALL_SUCCESS ? '1' : '0', install_log); fputc('\n', install_log); fclose(install_log); } return result; }
int apply_from_adb() { #ifdef ENABLE_LOKI int loki_support; #endif stop_adbd(); set_usb_driver(1); ui_print("\n\nSideload started ...\nNow send the package you want to apply\n" "to the device with \"adb sideload <filename>\"...\n\n"); struct sideload_waiter_data data; if ((data.child = fork()) == 0) { execl("/sbin/recovery", "recovery", "adbd", NULL); _exit(-1); } pthread_t sideload_thread; pthread_create(&sideload_thread, NULL, &adb_sideload_thread, &data); static const char* headers[] = { "ADB Sideload", "", NULL }; static char* list[] = { "Cancel sideload", NULL }; get_menu_selection(headers, list, 0, 0); set_usb_driver(0); maybe_restart_adbd(); // kill the child kill(data.child, SIGTERM); pthread_join(sideload_thread, NULL); ui_clear_key_queue(); struct stat st; if (stat(ADB_SIDELOAD_FILENAME, &st) != 0) { if (errno == ENOENT) { ui_print("No package received.\n"); ui_set_background(BACKGROUND_ICON_ERROR); } else { ui_print("Error reading package:\n %s\n", strerror(errno)); ui_set_background(BACKGROUND_ICON_ERROR); } return INSTALL_ERROR; } int install_status = install_package(ADB_SIDELOAD_FILENAME); ui_reset_progress(); if (install_status != INSTALL_SUCCESS) { ui_set_background(BACKGROUND_ICON_ERROR); ui_print("Installation aborted.\n"); } remove(ADB_SIDELOAD_FILENAME); #ifdef ENABLE_LOKI if(loki_support_enabled) { ui_print("Checking if loki-fying is needed"); int result; if(result = loki_check()) { return result; } } #endif return install_status; }