74 lines
1.5 KiB
C
74 lines
1.5 KiB
C
#include "magiskhide.h"
|
|
|
|
#ifdef INDEP_BINARY
|
|
int magiskhide_main(int argc, char *argv[]);
|
|
int main(int argc, char *argv[]) {
|
|
return magiskhide_main(argc, argv);
|
|
}
|
|
#else
|
|
#include "magisk.h"
|
|
#endif
|
|
|
|
FILE *logfile;
|
|
int i, list_size, pipefd[2];
|
|
char **hide_list = NULL, buffer[512];
|
|
pthread_t list_monitor;
|
|
pthread_mutex_t mutex;
|
|
|
|
static void terminate(int sig) {
|
|
// Close the config list monitor
|
|
pthread_kill(list_monitor, SIGQUIT);
|
|
pthread_mutex_destroy(&mutex);
|
|
|
|
// Terminate our children
|
|
i = -1;
|
|
write(pipefd[1], &i, sizeof(i));
|
|
exit(0);
|
|
}
|
|
|
|
int magiskhide_main(int argc, char *argv[]) {
|
|
|
|
if (argc > 1) {
|
|
if (strcmp(argv[1], "--daemon") == 0)
|
|
run_as_daemon();
|
|
else {
|
|
fprintf(stderr, "%s (with no options)\n\tRun magiskhide and output to stdout\n", argv[0]);
|
|
fprintf(stderr, "%s --daemon\n\tRun magiskhide as daemon, output to magisk.log\n", argv[0]);
|
|
return 1;
|
|
}
|
|
} else
|
|
logfile = stdout;
|
|
|
|
|
|
// Handle all killing signals
|
|
signal(SIGINT, terminate);
|
|
signal(SIGTERM, terminate);
|
|
|
|
// Fork a child to handle namespace switches and unmounts
|
|
pipe(pipefd);
|
|
switch(fork()) {
|
|
case -1:
|
|
exit(-1);
|
|
case 0:
|
|
return hideMagisk();
|
|
default:
|
|
break;
|
|
}
|
|
close(pipefd[0]);
|
|
|
|
// Start a thread to constantly check the hide list
|
|
pthread_mutex_init(&mutex, NULL);
|
|
pthread_create(&list_monitor, NULL, monitor_list, HIDELIST);
|
|
|
|
// Set main process to the top priority
|
|
setpriority(PRIO_PROCESS, 0, -20);
|
|
|
|
monitor_proc();
|
|
|
|
terminate(0);
|
|
|
|
fprintf(logfile, "MagiskHide: Cannot monitor am_proc_start, abort...\n");
|
|
fclose(logfile);
|
|
|
|
return 1;
|
|
} |