diff options
author | okan | 2015-09-16 17:58:25 +0000 |
---|---|---|
committer | okan | 2015-09-16 17:58:25 +0000 |
commit | ea3954427e3e3453eba49e302bf4e3a0272b172e (patch) | |
tree | 6c8c6c794afa080f95f35faa5c8ba69a756d4a90 /calmwm.c | |
parent | 7d8a5a92b3e6bba227470f31a83772cf42b00fa9 (diff) | |
download | cwm-ea3954427e3e3453eba49e302bf4e3a0272b172e.tar.gz |
On execwm, we should properly release resources before exec'ing into a
new window manager; so allow CWM_EXEC_WM to assign new wm to wm_argv and
pass through cwm_status (now EXECWM) so that x_teardown() gets called
before exec'ing the new window manager. Removes the need for a separate
x_restart() now, using new wm_argv; and consolidates errno for execvp.
Diffstat (limited to 'calmwm.c')
-rw-r--r-- | calmwm.c | 18 |
1 files changed, 5 insertions, 13 deletions
@@ -15,7 +15,7 @@ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * - * $OpenBSD: calmwm.c,v 1.93 2015/01/19 14:54:16 okan Exp $ + * $OpenBSD: calmwm.c,v 1.94 2015/09/16 17:58:25 okan Exp $ */ #include <sys/types.h> @@ -46,12 +46,12 @@ struct screen_ctx_q Screenq = TAILQ_HEAD_INITIALIZER(Screenq); int HasRandr, Randr_ev; struct conf Conf; const char *homedir; +char *wm_argv; volatile sig_atomic_t cwm_status; static void sighdlr(int); static int x_errorhandler(Display *, XErrorEvent *); static void x_init(const char *); -static void x_restart(char **); static void x_teardown(void); static int x_wmerrorhandler(Display *, XErrorEvent *); @@ -60,7 +60,6 @@ main(int argc, char **argv) { const char *conf_file = NULL; char *conf_path, *display_name = NULL; - char **cwm_argv; int ch; struct passwd *pw; @@ -68,7 +67,7 @@ main(int argc, char **argv) warnx("no locale support"); mbtowc(NULL, NULL, MB_CUR_MAX); - cwm_argv = argv; + wm_argv = u_argv(argv); while ((ch = getopt(argc, argv, "c:d:")) != -1) { switch (ch) { case 'c': @@ -117,8 +116,8 @@ main(int argc, char **argv) while (cwm_status == CWM_RUNNING) xev_process(); x_teardown(); - if (cwm_status == CWM_RESTART) - x_restart(cwm_argv); + if (cwm_status == CWM_EXECWM) + u_exec(wm_argv); return(0); } @@ -146,13 +145,6 @@ x_init(const char *dpyname) } static void -x_restart(char **args) -{ - (void)setsid(); - (void)execvp(args[0], args); -} - -static void x_teardown(void) { struct screen_ctx *sc; |