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