View | Details | Raw Unified | Return to bug 27075
Collapse All | Expand All

(-)a/twofing/twofingemu.c (-1 / +31 lines)
Lines 33-39 Link Here
33
#include <sys/stat.h>
33
#include <sys/stat.h>
34
#include <sys/select.h>
34
#include <sys/select.h>
35
#include <time.h>
35
#include <time.h>
36
36
#include <signal.h>
37
#include <unistd.h>
37
#define EXIT_SUCCESS 0
38
#define EXIT_SUCCESS 0
38
#define EXIT_FAILURE 1
39
#define EXIT_FAILURE 1
39
40
Lines 87-92 static void daemonize(void) { Link Here
87
	r = r;
88
	r = r;
88
}
89
}
89
90
91
char **my_argv;
92
93
void signal_handler(int s) {
94
	if (s == SIGUSR1) {
95
		/* restarting */
96
		char buf[250];
97
		int i = readlink("/proc/self/exe", buf, sizeof(buf));
98
		if (i <= 0) return;
99
100
		buf[i] = 0;
101
		int maxfd = sysconf(_SC_OPEN_MAX);
102
		for(i = 3; i<maxfd; i++) close(i);
103
		if(debugMode) printf("Running %s\n", buf);
104
		execv(buf, my_argv);
105
	}
106
}
107
108
void set_signal_handler(){
109
	struct sigaction sa;
110
	sigset_t newset;
111
	sigemptyset(&newset);
112
	sigprocmask(SIG_BLOCK, &newset, 0);
113
	sa.sa_handler = signal_handler;
114
	sigaction(SIGUSR1, &sa, 0);
115
}
116
90
/* Finger information */
117
/* Finger information */
91
FingerInfo fingerInfos[2] = { { .rawX=0, .rawY=0, .rawZ=0, .id = -1, .slotUsed = 0, .setThisTime = 0 }, { .rawX=0, .rawY=0, .rawZ=0,
118
FingerInfo fingerInfos[2] = { { .rawX=0, .rawY=0, .rawZ=0, .id = -1, .slotUsed = 0, .setThisTime = 0 }, { .rawX=0, .rawY=0, .rawZ=0,
92
		.id = -1, .slotUsed = 0, .setThisTime = 0 } };
119
		.id = -1, .slotUsed = 0, .setThisTime = 0 } };
Lines 791-796 int main(int argc, char **argv) { Link Here
791
	int doWait = 0;
818
	int doWait = 0;
792
	int clickMode = 2;
819
	int clickMode = 2;
793
820
821
	my_argv = argv;
822
	set_signal_handler();
823
794
	int i;
824
	int i;
795
	for (i = 1; i < argc; i++) {
825
	for (i = 1; i < argc; i++) {
796
		if (strcmp(argv[i], "--debug") == 0) {
826
		if (strcmp(argv[i], "--debug") == 0) {

Return to bug 27075