diff options
author | Luke Smith <luke@lukesmith.xyz> | 2020-05-04 15:27:46 -0400 |
---|---|---|
committer | Luke Smith <luke@lukesmith.xyz> | 2020-05-04 15:27:46 -0400 |
commit | ff41f8e71ec6fafdcc8fa25367d5ad01dbdd8519 (patch) | |
tree | 6bb67ff1636d7a4f37caf13507c87154648efef2 /patches | |
parent | a0ebcc3f5448204a9414691fea0f496404f81560 (diff) | |
download | dwmblocks-ff41f8e71ec6fafdcc8fa25367d5ad01dbdd8519.tar.gz dwmblocks-ff41f8e71ec6fafdcc8fa25367d5ad01dbdd8519.tar.bz2 dwmblocks-ff41f8e71ec6fafdcc8fa25367d5ad01dbdd8519.zip |
statuscmd programs forked
Diffstat (limited to 'patches')
-rw-r--r-- | patches/dwmblocks-statuscmd-fork.diff | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/patches/dwmblocks-statuscmd-fork.diff b/patches/dwmblocks-statuscmd-fork.diff new file mode 100644 index 0000000..1ae7d7a --- /dev/null +++ b/patches/dwmblocks-statuscmd-fork.diff @@ -0,0 +1,77 @@ +diff --git a/dwmblocks.c b/dwmblocks.c +index 7d7a564..e2c5dd0 100644 +--- a/dwmblocks.c ++++ b/dwmblocks.c +@@ -34,8 +34,6 @@ static int screen; + static Window root; + static char statusbar[LENGTH(blocks)][CMDLENGTH] = {0}; + static char statusstr[2][256]; +-static char exportstring[CMDLENGTH + 22] = "export BLOCK_BUTTON=-;"; +-static int button = 0; + static int statusContinue = 1; + static void (*writestatus) () = setroot; + +@@ -55,21 +53,8 @@ void getcmd(const Block *block, char *output) + output[0] = block->signal; + output++; + } +- char* cmd; +- FILE *cmdf; +- if (button) +- { +- cmd = strcat(exportstring, block->command); +- cmd[20] = '0' + button; +- button = 0; +- cmdf = popen(cmd,"r"); +- cmd[22] = '\0'; +- } +- else +- { +- cmd = block->command; +- cmdf = popen(cmd,"r"); +- } ++ char *cmd = block->command; ++ FILE *cmdf = popen(cmd,"r"); + if (!cmdf) + return; + fgets(output, CMDLENGTH, cmdf); +@@ -117,6 +102,7 @@ void setupsignals() + sa.sa_sigaction = buttonhandler; + sa.sa_flags = SA_SIGINFO; + sigaction(SIGUSR1, &sa, NULL); ++ signal(SIGCHLD, SIG_IGN); + + } + #endif +@@ -179,9 +165,29 @@ void sighandler(int signum) + + void buttonhandler(int sig, siginfo_t *si, void *ucontext) + { +- button = si->si_value.sival_int & 0xff; +- getsigcmds(si->si_value.sival_int >> 8); ++ int button = si->si_value.sival_int & 0xff; ++ sig = si->si_value.sival_int >> 8; ++ getsigcmds(sig); + writestatus(); ++ if (fork() == 0) ++ { ++ static char exportstring[CMDLENGTH + 22] = "export BLOCK_BUTTON=-;"; ++ const Block *current; ++ int i; ++ for (i = 0; i < LENGTH(blocks); i++) ++ { ++ current = blocks + i; ++ if (current->signal == sig) ++ break; ++ } ++ char *cmd = strcat(exportstring, blocks[i].command); ++ cmd[20] = '0' + button; ++ char *command[] = { "/bin/sh", "-c", cmd, NULL }; ++ setsid(); ++ execvp(command[0], command); ++ exit(EXIT_SUCCESS); ++ cmd[22] = '\0'; ++ } + } + + #endif |