diff --git a/native/jni/magiskhide/hide_utils.cpp b/native/jni/magiskhide/hide_utils.cpp index 0ab7d3993..539ece8da 100644 --- a/native/jni/magiskhide/hide_utils.cpp +++ b/native/jni/magiskhide/hide_utils.cpp @@ -247,10 +247,11 @@ bool init_list() { } void ls_list(int client) { - write_int(client, DAEMON_SUCCESS); - write_int(client, hide_list.size()); + FILE *out = fdopen(recv_fd(client), "a"); for (auto &s : hide_list) - write_string(client, s); + fprintf(out, "%s\n", s.c_str()); + fclose(out); + write_int(client, DAEMON_SUCCESS); close(client); } diff --git a/native/jni/magiskhide/magiskhide.cpp b/native/jni/magiskhide/magiskhide.cpp index 8edf514e9..704f8b1d0 100644 --- a/native/jni/magiskhide/magiskhide.cpp +++ b/native/jni/magiskhide/magiskhide.cpp @@ -97,6 +97,8 @@ int magiskhide_main(int argc, char *argv[]) { write_int(fd, req); if (req == ADD_HIDELIST || req == RM_HIDELIST) write_string(fd, argv[2]); + if (req == LS_HIDELIST) + send_fd(fd, STDOUT_FILENO); // Get response int code = read_int(fd); @@ -129,15 +131,5 @@ int magiskhide_main(int argc, char *argv[]) { return DAEMON_ERROR; } - if (code == DAEMON_SUCCESS && req == LS_HIDELIST) { - int cnt = read_int(fd); - for (int i = 0; i < cnt; ++i) { - char *s = read_string(fd); - printf("%s\n", s); - free(s); - } - } - close(fd); - return req == HIDE_STATUS ? (code == HIDE_IS_ENABLED ? 0 : 1) : code != DAEMON_SUCCESS; }