Improve adb sideload - use storage vs tmp
diff --git a/adb_install.cpp b/adb_install.cpp
index f5ba89c..3b64606 100644
--- a/adb_install.cpp
+++ b/adb_install.cpp
@@ -84,7 +84,7 @@
pid_t child;
if ((child = fork()) == 0) {
- execl("/sbin/recovery", "recovery", "--adbd", NULL);
+ execl("/sbin/recovery", "recovery", "--adbd", install_file, NULL);
_exit(-1);
}
DataManager_SetIntValue("tw_child_pid", child);
@@ -102,7 +102,7 @@
maybe_restart_adbd();
struct stat st;
- if (stat(ADB_SIDELOAD_FILENAME, &st) != 0) {
+ if (stat(install_file, &st) != 0) {
if (errno == ENOENT) {
ui->Print("No package received.\n");
} else {
@@ -110,17 +110,5 @@
}
return INSTALL_ERROR;
}
- char zip_file[255];
- if (strncmp(ADB_SIDELOAD_FILENAME, "/tmp", 4) == 0) {
- char command[255];
- sprintf(zip_file, "%s/%s", DataManager_GetCurrentStoragePath(), "sideload.zip");
- ui->Print("Copying zip to '%s'\n", zip_file);
- sprintf(command, "cp %s %s", ADB_SIDELOAD_FILENAME, zip_file);
- system(command);
- sprintf(command, "rm %s", ADB_SIDELOAD_FILENAME);
- system(command);
- } else {
- strcpy(zip_file, ADB_SIDELOAD_FILENAME);
- }
- return TWinstall_zip(zip_file, wipe_cache);
+ return TWinstall_zip(install_file, wipe_cache);
}
diff --git a/gui/action.cpp b/gui/action.cpp
index 4114bf0..15180ca 100644
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -1057,22 +1057,19 @@
simulate_progress_bar();
} else {
int wipe_cache = 0;
- string Command;
+ string Command, Sideload_File;
if (!PartitionManager.Mount_Current_Storage(true)) {
operation_end(1, simulate);
return 0;
}
- if (TWFunc::Path_Exists(ADB_SIDELOAD_FILENAME)) {
- Command = "rm ";
- Command += ADB_SIDELOAD_FILENAME;
+ Sideload_File = DataManager::GetCurrentStoragePath() + "/sideload.zip";
+ if (TWFunc::Path_Exists(Sideload_File)) {
+ Command = "rm " + Sideload_File;
system(Command.c_str());
}
- Command = "touch ";
- Command += ADB_SIDELOAD_FILENAME;
- system(Command.c_str());
ui_print("Starting ADB sideload feature...\n");
- ret = apply_from_adb(ui, &wipe_cache, "/tmp/install_log");
+ ret = apply_from_adb(ui, &wipe_cache, Sideload_File.c_str());
if (ret != 0)
ret = 1; // failure
else if (wipe_cache)
@@ -1084,9 +1081,9 @@
if (function == "adbsideloadcancel")
{
int child_pid;
- string Command;
- Command = "rm ";
- Command += ADB_SIDELOAD_FILENAME;
+ string Command, Sideload_File;
+ Sideload_File = DataManager::GetCurrentStoragePath() + "/sideload.zip";
+ Command = "rm " + Sideload_File;
system(Command.c_str());
DataManager::GetValue("tw_child_pid", child_pid);
ui_print("Cancelling ADB sideload...\n");
diff --git a/minadbd/adb.c b/minadbd/adb.c
index 0e8fd2a..54adba0 100644
--- a/minadbd/adb.c
+++ b/minadbd/adb.c
@@ -40,6 +40,8 @@
static const char *adb_device_banner = "sideload";
+char ADB_SIDELOAD_FILENAME[255];
+
void fatal(const char *fmt, ...)
{
va_list ap;
@@ -378,8 +380,9 @@
usb_cleanup();
}
-int adb_main()
+int adb_main(const char* path)
{
+ strcpy(ADB_SIDELOAD_FILENAME, path);
atexit(adb_cleanup);
#if defined(HAVE_FORKEXEC)
// No SIGCHLD. Let the service subproc handle its children.
@@ -394,6 +397,7 @@
usb_init();
}
+/* Remove this so that perms work properly
if (setgid(AID_SHELL) != 0) {
fprintf(stderr, "failed to setgid to shell\n");
exit(1);
@@ -402,8 +406,9 @@
fprintf(stderr, "failed to setuid to shell\n");
exit(1);
}
- fprintf(stderr, "userid is %d\n", getuid());
+ fprintf(stderr, "userid is %d\n", getuid());
+*/
D("Event loop starting\n");
fdevent_loop();
diff --git a/minadbd/adb.h b/minadbd/adb.h
index 98fa597..19c22e8 100644
--- a/minadbd/adb.h
+++ b/minadbd/adb.h
@@ -217,7 +217,7 @@
void get_my_path(char *s, size_t maxLen);
int launch_server(int server_port);
-int adb_main();
+int adb_main(const char* path);
/* transports are ref-counted
@@ -413,6 +413,7 @@
int sendfailmsg(int fd, const char *reason);
int handle_host_request(char *service, transport_type ttype, char* serial, int reply_fd, asocket *s);
-#define ADB_SIDELOAD_FILENAME "/tmp/update.zip"
+//#define ADB_SIDELOAD_FILENAME "/tmp/update.zip"
+extern char ADB_SIDELOAD_FILENAME[255];
#endif
diff --git a/recovery.cpp b/recovery.cpp
index b8bb099..2d89014 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -790,8 +790,8 @@
// anything in the command file or bootloader control block; the
// only way recovery should be run with this argument is when it
// starts a copy of itself from the apply_from_adb() function.
- if (argc == 2 && strcmp(argv[1], "--adbd") == 0) {
- adb_main();
+ if (argc == 3 && strcmp(argv[1], "--adbd") == 0) {
+ adb_main(argv[2]);
return 0;
}