Directly print output over socket

This commit is contained in:
topjohnwu 2018-11-16 01:49:15 -05:00
parent 77fd5fa7de
commit ba70269398
2 changed files with 6 additions and 13 deletions

View File

@ -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);
}

View File

@ -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;
}