Improve APK installation and add logging

This commit is contained in:
topjohnwu 2018-01-13 05:49:03 +08:00
parent 18f6ead891
commit 558f95cf7e
2 changed files with 15 additions and 4 deletions

View File

@ -648,6 +648,7 @@ core_only:
// Install Magisk Manager if exists // Install Magisk Manager if exists
if (access(MANAGERAPK, F_OK) == 0) { if (access(MANAGERAPK, F_OK) == 0) {
rename(MANAGERAPK, "/data/magisk.apk"); rename(MANAGERAPK, "/data/magisk.apk");
setfilecon("/data/magisk.apk", "u:object_r:su_file:s0");
while (1) { while (1) {
sleep(5); sleep(5);
int apk_res = -1, pid; int apk_res = -1, pid;
@ -656,12 +657,17 @@ core_only:
"/system/bin", "com.android.commands.pm.Pm", "/system/bin", "com.android.commands.pm.Pm",
"install", "-r", "/data/magisk.apk", NULL); "install", "-r", "/data/magisk.apk", NULL);
if (pid != -1) { if (pid != -1) {
int err = 0;
while (fdgets(buf, PATH_MAX, apk_res) > 0) {
LOGD("apk_install: %s", buf);
err |= strstr(buf, "Error:") != NULL;
}
waitpid(pid, NULL, 0); waitpid(pid, NULL, 0);
fdgets(buf, PATH_MAX, apk_res);
close(apk_res); close(apk_res);
// Keep trying until pm is started // Keep trying until pm is started
if (strstr(buf, "Error:") == NULL) if (err)
break; continue;
break;
} }
} }
unlink("/data/magisk.apk"); unlink("/data/magisk.apk");

View File

@ -111,7 +111,12 @@ static int is_num(const char *s) {
ssize_t fdgets(char *buf, const size_t size, int fd) { ssize_t fdgets(char *buf, const size_t size, int fd) {
ssize_t len = 0; ssize_t len = 0;
buf[0] = '\0'; buf[0] = '\0';
while (read(fd, buf + len, 1) >= 0 && len < size - 1) { while (len < size - 1) {
int ret = read(fd, buf + len, 1);
if (ret < 0)
return -1;
if (ret == 0)
break;
if (buf[len] == '\0' || buf[len++] == '\n') { if (buf[len] == '\0' || buf[len++] == '\n') {
buf[len] = '\0'; buf[len] = '\0';
break; break;