From c2b016370b7bc95f34a4ceb7daa1546b0cd08ffd Mon Sep 17 00:00:00 2001 From: topjohnwu Date: Sat, 20 Oct 2018 21:46:12 -0400 Subject: [PATCH] Make a copy of logcat and use that instead When Magisk is magic mounting /system/bin, there is a chance that logcat would be temporarily unavailable. Leave a copy and use that for magisklogd --- native/jni/daemon/bootstages.c | 3 +++ native/jni/daemon/log_daemon.c | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/native/jni/daemon/bootstages.c b/native/jni/daemon/bootstages.c index 5b0b1883b..8fa6feebf 100644 --- a/native/jni/daemon/bootstages.c +++ b/native/jni/daemon/bootstages.c @@ -772,6 +772,9 @@ void startup() { xsymlink(MIRRDIR "/bin/busybox", BBPATH "/busybox"); } + // Preserve a copy of logcat + cp_afc("/system/bin/logcat", MIRRDIR "/bin/logcat"); + // Start post-fs-data mode execl("/sbin/magisk.bin", "magisk", "--post-fs-data", NULL); } diff --git a/native/jni/daemon/log_daemon.c b/native/jni/daemon/log_daemon.c index cc64d82e3..23cacacc1 100644 --- a/native/jni/daemon/log_daemon.c +++ b/native/jni/daemon/log_daemon.c @@ -132,11 +132,11 @@ static void log_daemon() { // Construct cmdline vec_init(&log_cmd); - vec_push_back(&log_cmd, "/system/bin/logcat"); + vec_push_back(&log_cmd, MIRRDIR "/bin/logcat"); // Test whether these buffers actually works const char* b[] = { "main", "events", "crash" }; for (int i = 0; i < 3; ++i) { - if (exec_command_sync("/system/bin/logcat", "-b", b[i], "-d", "-f", "/dev/null", NULL) == 0) + if (exec_command_sync(MIRRDIR "/bin/logcat", "-b", b[i], "-d", "-f", "/dev/null", NULL) == 0) vec_push_back_all(&log_cmd, "-b", b[i], NULL); } chmod("/dev/null", 0666); @@ -174,7 +174,7 @@ static void log_daemon() { int start_log_daemon() { if (!log_daemon_started) { - if (exec_command_sync("/system/bin/logcat", "-d", "-f", "/dev/null", NULL) == 0) { + if (exec_command_sync(MIRRDIR "/bin/logcat", "-d", "-f", "/dev/null", NULL) == 0) { if (fork_dont_care() == 0) log_daemon(); // Wait till we can connect to log_daemon