From 599610fd6f2e733f1e77b88ca4560448053d6428 Mon Sep 17 00:00:00 2001 From: Paul Breugnot Date: Sun, 9 Feb 2025 13:56:27 +0100 Subject: [PATCH] :goal_net: Clean exit if XOpenDisplay fails --- src/aswm/aswm.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/aswm/aswm.c b/src/aswm/aswm.c index a87e8b7..1c346ec 100644 --- a/src/aswm/aswm.c +++ b/src/aswm/aswm.c @@ -17,14 +17,20 @@ Aswm _aswm; void aswm_open(const char* zlog_conf) { + atexit(aswm_close); + set_up_logger(zlog_conf); + XSetErrorHandler(aswm_error_handler); + _aswm.display = XOpenDisplay(NULL); _aswm.desktops = malloc(0); _aswm.desktops_count = 0; - XSetErrorHandler(aswm_error_handler); - + if(_aswm.display == NULL) { + aswm_error("Cannot open X Display. Check the DISPLAY environement variable, and ensure an X server is running for the corresponding DISPLAY."); + exit(1); + } Window x_root_window = DefaultRootWindow(_aswm.display); XWindowAttributes x_root_attributes; XGetWindowAttributes(_aswm.display, x_root_window, &x_root_attributes); @@ -50,8 +56,6 @@ void aswm_open(const char* zlog_conf) { aswm_debug("ASWM Root window %lu", _aswm.root_window); aswm_log_tree(aswm_debug, &_aswm, DefaultRootWindow(_aswm.display), 1); - - atexit(aswm_close); } void aswm_create_workspace() { @@ -153,7 +157,8 @@ void aswm_event_loop() { void aswm_close() { free(_aswm.desktops); tear_down_logger(); - XCloseDisplay(_aswm.display); + if(_aswm.display != NULL) + XCloseDisplay(_aswm.display); } Window aswm_currently_active() {