2016-12-30 19:44:24 +01:00
|
|
|
#include "magiskhide.h"
|
|
|
|
|
|
|
|
void *monitor_list(void *path) {
|
|
|
|
char* listpath = (char*) path;
|
|
|
|
signal(SIGQUIT, quit_pthread);
|
|
|
|
|
|
|
|
int inotifyFd = -1;
|
|
|
|
char str[512];
|
|
|
|
|
|
|
|
while(1) {
|
|
|
|
if (inotifyFd == -1 || read(inotifyFd, str, sizeof(str)) == -1) {
|
|
|
|
close(inotifyFd);
|
|
|
|
inotifyFd = inotify_init();
|
|
|
|
if (inotifyFd == -1) {
|
|
|
|
fprintf(logfile, "MagiskHide: Unable to watch %s\n", listpath);
|
|
|
|
exit(1);
|
|
|
|
}
|
2017-03-26 07:20:40 +02:00
|
|
|
if (inotify_add_watch(inotifyFd, listpath, IN_CLOSE_WRITE) == -1) {
|
2016-12-30 19:44:24 +01:00
|
|
|
fprintf(logfile, "MagiskHide: Unable to watch %s\n", listpath);
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
update_list(listpath);
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void update_list(const char *listpath) {
|
|
|
|
FILE *hide_fp = fopen(listpath, "r");
|
|
|
|
if (hide_fp == NULL) {
|
|
|
|
fprintf(logfile, "MagiskHide: Error opening hide list\n");
|
|
|
|
exit(1);
|
|
|
|
}
|
|
|
|
pthread_mutex_lock(&mutex);
|
|
|
|
if (hide_list) {
|
|
|
|
// Free memory
|
|
|
|
for(i = 0; i < list_size; ++i)
|
|
|
|
free(hide_list[i]);
|
|
|
|
free(hide_list);
|
|
|
|
}
|
|
|
|
hide_list = file_to_str_arr(hide_fp, &list_size);
|
|
|
|
pthread_mutex_unlock(&mutex);
|
|
|
|
fclose(hide_fp);
|
|
|
|
if (list_size) fprintf(logfile, "MagiskHide: Update process/package list:\n");
|
|
|
|
for(i = 0; i < list_size; i++)
|
|
|
|
fprintf(logfile, "MagiskHide: [%s]\n", hide_list[i]);
|
|
|
|
}
|
|
|
|
|
|
|
|
void quit_pthread(int sig) {
|
|
|
|
// Free memory
|
|
|
|
for(i = 0; i < list_size; ++i)
|
|
|
|
free(hide_list[i]);
|
|
|
|
free(hide_list);
|
|
|
|
pthread_exit(NULL);
|
|
|
|
}
|