From ff41f8e71ec6fafdcc8fa25367d5ad01dbdd8519 Mon Sep 17 00:00:00 2001 From: Luke Smith Date: Mon, 4 May 2020 15:27:46 -0400 Subject: statuscmd programs forked --- patches/dwmblocks-statuscmd-fork.diff | 77 +++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 patches/dwmblocks-statuscmd-fork.diff (limited to 'patches/dwmblocks-statuscmd-fork.diff') 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 -- cgit v1.2.3