blob: b0ce2ea2f3fdf9b65bd7facfcde3f2e615380238 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
int
fake_signal(void)
{
char fsignal[256];
char indicator[9] = "fsignal:";
char str_signum[16];
int i, v, signum;
size_t len_fsignal, len_indicator = strlen(indicator);
// Get root name property
if (gettextprop(root, XA_WM_NAME, fsignal, sizeof(fsignal))) {
len_fsignal = strlen(fsignal);
// Check if this is indeed a fake signal
if (len_indicator > len_fsignal ? 0 : strncmp(indicator, fsignal, len_indicator) == 0) {
memcpy(str_signum, &fsignal[len_indicator], len_fsignal - len_indicator);
str_signum[len_fsignal - len_indicator] = '\0';
// Convert string value into managable integer
for (i = signum = 0; i < strlen(str_signum); i++) {
v = str_signum[i] - '0';
if (v >= 0 && v <= 9) {
signum = signum * 10 + v;
}
}
// Check if a signal was found, and if so handle it
if (signum)
for (i = 0; i < LENGTH(signals); i++)
if (signum == signals[i].signum && signals[i].func)
signals[i].func(&(signals[i].arg));
// A fake signal was sent
return 1;
}
}
// No fake signal was sent, so proceed with update
return 0;
}
|