| tre-applied Neale's spawn patch, credited Neale in LICENSE - dwm - [fork] custo… | |
| git clone git://src.adamsgaard.dk/dwm | |
| Log | |
| Files | |
| Refs | |
| README | |
| LICENSE | |
| --- | |
| commit 62a491e36d493bf4585b348a4c28c5ed9bd3ea4e | |
| parent 0b5dcf229f64a23438e6ef5929d78b7f9bd48355 | |
| Author: a@null <unknown> | |
| Date: Fri, 12 Dec 2008 19:55:03 +0000 | |
| re-applied Neale's spawn patch, credited Neale in LICENSE | |
| Diffstat: | |
| M LICENSE | 1 + | |
| M README | 3 ++- | |
| M config.mk | 2 +- | |
| M dwm.c | 25 ++++++++++++++----------- | |
| 4 files changed, 18 insertions(+), 13 deletions(-) | |
| --- | |
| diff --git a/LICENSE b/LICENSE | |
| t@@ -9,6 +9,7 @@ MIT/X Consortium License | |
| © 2007-2008 Enno Gottox Boland <gottox at s01 dot de> | |
| © 2007-2008 Peter Hartlich <sgkkr at hartlich dot com> | |
| © 2008 Martin Hurton <martin dot hurton at gmail dot com> | |
| +© 2008 Neale Pickett <neale dot woozle dot org> | |
| Permission is hereby granted, free of charge, to any person obtaining a | |
| copy of this software and associated documentation files (the "Software"), | |
| diff --git a/README b/README | |
| t@@ -38,11 +38,12 @@ the DISPLAY environment variable is set correctly, e.g.: | |
| In order to display status info in the bar, you can do something | |
| like this in your .xinitrc: | |
| + dwm & | |
| while true | |
| do | |
| xsetroot -name "`date` `uptime | sed 's/.*,//'`" | |
| sleep 1 | |
| - done | dwm | |
| + done | |
| Configuration | |
| diff --git a/config.mk b/config.mk | |
| t@@ -1,5 +1,5 @@ | |
| # dwm version | |
| -VERSION = 5.3.1 | |
| +VERSION = 5.4 | |
| # Customize below to fit your system | |
| diff --git a/dwm.c b/dwm.c | |
| t@@ -178,6 +178,7 @@ static void setlayout(const Arg *arg); | |
| static void setmfact(const Arg *arg); | |
| static void setup(void); | |
| static void showhide(Client *c); | |
| +static void sigchld(int signal); | |
| static void spawn(const Arg *arg); | |
| static void tag(const Arg *arg); | |
| static int textnw(const char *text, unsigned int len); | |
| t@@ -1340,22 +1341,24 @@ showhide(Client *c) { | |
| } | |
| } | |
| + | |
| +void | |
| +sigchld(int signal) { | |
| + while(0 < waitpid(-1, NULL, WNOHANG)); | |
| +} | |
| + | |
| void | |
| spawn(const Arg *arg) { | |
| - /* The double-fork construct avoids zombie processes and keeps the code | |
| - * clean from stupid signal handlers. */ | |
| + signal(SIGCHLD, sigchld); | |
| if(fork() == 0) { | |
| - if(fork() == 0) { | |
| - if(dpy) | |
| - close(ConnectionNumber(dpy)); | |
| - setsid(); | |
| - execvp(((char **)arg->v)[0], (char **)arg->v); | |
| - fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]… | |
| - perror(" failed"); | |
| - } | |
| + if(dpy) | |
| + close(ConnectionNumber(dpy)); | |
| + setsid(); | |
| + execvp(((char **)arg->v)[0], (char **)arg->v); | |
| + fprintf(stderr, "dwm: execvp %s", ((char **)arg->v)[0]); | |
| + perror(" failed"); | |
| exit(0); | |
| } | |
| - wait(0); | |
| } | |
| void |