diff --git a/native/jni/daemon/bootstages.cpp b/native/jni/daemon/bootstages.cpp index 2f2886ae7..406071c83 100644 --- a/native/jni/daemon/bootstages.cpp +++ b/native/jni/daemon/bootstages.cpp @@ -317,7 +317,7 @@ static void exec_common_script(const char* stage) { if (access(entry->d_name, X_OK) == -1) continue; LOGI("%s.d: exec [%s]\n", stage, entry->d_name); - int pid = exec_command(0, nullptr, + int pid = exec_command(false, nullptr, strcmp(stage, "post-fs-data") ? set_path : set_mirror_path, "sh", entry->d_name, nullptr); if (pid != -1) @@ -336,8 +336,7 @@ static void exec_module_script(const char* stage) { if (access(buf2, F_OK) == -1 || access(buf, F_OK) == 0) continue; LOGI("%s: exec [%s.sh]\n", module, stage); - int pid = exec_command( - 0, nullptr, + int pid = exec_command(false, nullptr, strcmp(stage, "post-fs-data") ? set_path : set_mirror_path, "sh", buf2, nullptr); if (pid != -1) @@ -555,7 +554,7 @@ static void install_apk(const char *apk) { sleep(5); LOGD("apk_install: attempting to install APK"); int apk_res = -1, pid; - pid = exec_command(1, &apk_res, nullptr, "/system/bin/pm", "install", "-r", apk, nullptr); + pid = exec_command(true, &apk_res, nullptr, "/system/bin/pm", "install", "-r", apk, nullptr); if (pid != -1) { int err = 0; while (fdgets(buf, PATH_MAX, apk_res) > 0) { diff --git a/native/jni/daemon/log_daemon.cpp b/native/jni/daemon/log_daemon.cpp index 36923aeaf..7c72a6645 100644 --- a/native/jni/daemon/log_daemon.cpp +++ b/native/jni/daemon/log_daemon.cpp @@ -83,7 +83,7 @@ static void *logcat_thread(void *) { char line[4096]; while (1) { // Start logcat - log_pid = exec_array(0, &log_fd, nullptr, log_cmd.data()); + log_pid = exec_array(false, &log_fd, nullptr, log_cmd.data()); FILE *logs = fdopen(log_fd, "r"); while (fgets(line, sizeof(line), logs)) { if (line[0] == '-') @@ -104,7 +104,7 @@ static void *logcat_thread(void *) { LOGI("magisklogd: logcat output EOF"); // Clear buffer - log_pid = exec_array(0, nullptr, nullptr, clear_cmd.data()); + log_pid = exec_array(false, nullptr, nullptr, clear_cmd.data()); waitpid(log_pid, nullptr, 0); } } diff --git a/native/jni/utils/include/utils.h b/native/jni/utils/include/utils.h index 6f71bef76..e4c79ec2d 100644 --- a/native/jni/utils/include/utils.h +++ b/native/jni/utils/include/utils.h @@ -91,8 +91,8 @@ unsigned get_system_uid(); unsigned get_radio_uid(); ssize_t fdgets(char *buf, size_t size, int fd); int is_num(const char *s); -int exec_array(int err, int *fd, void (*cb)(void), const char *argv[]); -int exec_command(int err, int *fd, void (*cb)(void), const char *argv0, ...); +int exec_array(bool err, int *fd, void (*cb)(void), const char **argv); +int exec_command(bool err, int *fd, void (*cb)(void), const char *argv0, ...); int exec_command_sync(const char *argv0, ...); int fork_dont_care(); void gen_rand_str(char *buf, int len); diff --git a/native/jni/utils/misc.cpp b/native/jni/utils/misc.cpp index de860a358..62a1c9383 100644 --- a/native/jni/utils/misc.cpp +++ b/native/jni/utils/misc.cpp @@ -181,21 +181,21 @@ int __fsetxattr(int fd, const char *name, const void *value, size_t size, int fl } /* - fd == NULL -> Ignore output + fd == nullptr -> Ignore output *fd < 0 -> Open pipe and set *fd to the read end *fd >= 0 -> STDOUT (or STDERR) will be redirected to *fd *cb -> A callback function which calls after forking */ -int exec_array(int err, int *fd, void (*cb)(void), const char *argv[]) { - int pipefd[2], write_end = -1; +int exec_array(bool err, int *fd, void (*cb)(void), const char **argv) { + int pipefd[2], outfd = -1; if (fd) { if (*fd < 0) { if (xpipe2(pipefd, O_CLOEXEC) == -1) return -1; - write_end = pipefd[1]; + outfd = pipefd[1]; } else { - write_end = *fd; + outfd = *fd; } } @@ -210,9 +210,9 @@ int exec_array(int err, int *fd, void (*cb)(void), const char *argv[]) { } if (fd) { - xdup2(write_end, STDOUT_FILENO); + xdup2(outfd, STDOUT_FILENO); if (err) - xdup2(write_end, STDERR_FILENO); + xdup2(outfd, STDERR_FILENO); } // Setup environment @@ -224,7 +224,7 @@ int exec_array(int err, int *fd, void (*cb)(void), const char *argv[]) { return -1; } -static int v_exec_command(int err, int *fd, void (*cb)(void), const char *argv0, va_list argv) { +static int v_exec_command(bool err, int *fd, void (*cb)(void), const char *argv0, va_list argv) { // Collect va_list into vector Vector args; args.push_back(argv0); @@ -239,7 +239,7 @@ int exec_command_sync(const char *argv0, ...) { va_list argv; va_start(argv, argv0); int pid, status; - pid = v_exec_command(0, NULL, NULL, argv0, argv); + pid = v_exec_command(false, nullptr, nullptr, argv0, argv); va_end(argv); if (pid < 0) return pid; @@ -247,7 +247,7 @@ int exec_command_sync(const char *argv0, ...) { return WEXITSTATUS(status); } -int exec_command(int err, int *fd, void (*cb)(void), const char *argv0, ...) { +int exec_command(bool err, int *fd, void (*cb)(void), const char *argv0, ...) { va_list argv; va_start(argv, argv0); int pid = v_exec_command(err, fd, cb, argv0, argv);