From a32eb91c6cc3a95ab182ff061cd5f866a09d0959 Mon Sep 17 00:00:00 2001 From: afiw Date: Sun, 18 Jan 2026 19:21:13 +0100 Subject: [PATCH] calmwm.c: fix undefined macros on Linux --- calmwm.c | 256 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 130 insertions(+), 126 deletions(-) diff --git a/calmwm.c b/calmwm.c index 23f3b96..d634c62 100644 --- a/calmwm.c +++ b/calmwm.c @@ -36,6 +36,10 @@ #include "calmwm.h" +#define __dead +#define INFTIM (-1) +#define WAIT_ANY (-1) + Display *X_Dpy; Time Last_Event_Time = CurrentTime; Atom cwmh[CWMH_NITEMS]; @@ -54,184 +58,184 @@ static int x_wmerrorhandler(Display *, XErrorEvent *); int main(int argc, char **argv) { - char *display_name = NULL; - char *fallback; - int ch, xfd, nflag = 0; - struct pollfd pfd[1]; + char *display_name = NULL; + char *fallback; + int ch, xfd, nflag = 0; + struct pollfd pfd[1]; - if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) - warnx("no locale support"); - mbtowc(NULL, NULL, MB_CUR_MAX); + if (!setlocale(LC_CTYPE, "") || !XSupportsLocale()) + warnx("no locale support"); + mbtowc(NULL, NULL, MB_CUR_MAX); - conf_init(&Conf); + conf_init(&Conf); - fallback = u_argv(argv); - Conf.wm_argv = u_argv(argv); - while ((ch = getopt(argc, argv, "c:d:nv")) != -1) { - switch (ch) { - case 'c': - free(Conf.conf_file); - Conf.conf_file = xstrdup(optarg); - break; - case 'd': - display_name = optarg; - break; - case 'n': - nflag = 1; - break; - case 'v': - Conf.debug++; - break; - default: - usage(); - } - } - argc -= optind; - argv += optind; + fallback = u_argv(argv); + Conf.wm_argv = u_argv(argv); + while ((ch = getopt(argc, argv, "c:d:nv")) != -1) { + switch (ch) { + case 'c': + free(Conf.conf_file); + Conf.conf_file = xstrdup(optarg); + break; + case 'd': + display_name = optarg; + break; + case 'n': + nflag = 1; + break; + case 'v': + Conf.debug++; + break; + default: + usage(); + } + } + argc -= optind; + argv += optind; - if (signal(SIGCHLD, sighdlr) == SIG_ERR || - signal(SIGHUP, sighdlr) == SIG_ERR || - signal(SIGINT, sighdlr) == SIG_ERR || - signal(SIGTERM, sighdlr) == SIG_ERR) - err(1, "signal"); + if (signal(SIGCHLD, sighdlr) == SIG_ERR || + signal(SIGHUP, sighdlr) == SIG_ERR || + signal(SIGINT, sighdlr) == SIG_ERR || + signal(SIGTERM, sighdlr) == SIG_ERR) + err(1, "signal"); - if (parse_config(Conf.conf_file, &Conf) == -1) { - warnx("error parsing config file"); - if (nflag) - return 1; - } - if (nflag) - return 0; + if (parse_config(Conf.conf_file, &Conf) == -1) { + warnx("error parsing config file"); + if (nflag) + return 1; + } + if (nflag) + return 0; - xfd = x_init(display_name); - cwm_status = CWM_RUNNING; + xfd = x_init(display_name); + cwm_status = CWM_RUNNING; - if (pledge("stdio rpath proc exec", NULL) == -1) - err(1, "pledge"); + if (pledge("stdio rpath proc exec", NULL) == -1) + err(1, "pledge"); - memset(&pfd, 0, sizeof(pfd)); - pfd[0].fd = xfd; - pfd[0].events = POLLIN; - while (cwm_status == CWM_RUNNING) { - xev_process(); - if (poll(pfd, 1, INFTIM) == -1) { - if (errno != EINTR) - warn("poll"); - } - } - x_teardown(); - if (cwm_status == CWM_EXEC_WM) { - u_exec(Conf.wm_argv); - warnx("'%s' failed to start, starting fallback", Conf.wm_argv); - u_exec(fallback); - } + memset(&pfd, 0, sizeof(pfd)); + pfd[0].fd = xfd; + pfd[0].events = POLLIN; + while (cwm_status == CWM_RUNNING) { + xev_process(); + if (poll(pfd, 1, INFTIM) == -1) { + if (errno != EINTR) + warn("poll"); + } + } + x_teardown(); + if (cwm_status == CWM_EXEC_WM) { + u_exec(Conf.wm_argv); + warnx("'%s' failed to start, starting fallback", Conf.wm_argv); + u_exec(fallback); + } - return 0; + return 0; } static int x_init(const char *dpyname) { - int i; + int i; - if ((X_Dpy = XOpenDisplay(dpyname)) == NULL) - errx(1, "unable to open display \"%s\"", XDisplayName(dpyname)); + if ((X_Dpy = XOpenDisplay(dpyname)) == NULL) + errx(1, "unable to open display \"%s\"", XDisplayName(dpyname)); - XSetErrorHandler(x_wmerrorhandler); - XSelectInput(X_Dpy, DefaultRootWindow(X_Dpy), SubstructureRedirectMask); - XSync(X_Dpy, False); - XSetErrorHandler(x_errorhandler); + XSetErrorHandler(x_wmerrorhandler); + XSelectInput(X_Dpy, DefaultRootWindow(X_Dpy), SubstructureRedirectMask); + XSync(X_Dpy, False); + XSetErrorHandler(x_errorhandler); - Conf.xrandr = XRRQueryExtension(X_Dpy, &Conf.xrandr_event_base, &i); + Conf.xrandr = XRRQueryExtension(X_Dpy, &Conf.xrandr_event_base, &i); - xu_atom_init(); - conf_cursor(&Conf); + xu_atom_init(); + conf_cursor(&Conf); - for (i = 0; i < ScreenCount(X_Dpy); i++) - screen_init(i); + for (i = 0; i < ScreenCount(X_Dpy); i++) + screen_init(i); - return ConnectionNumber(X_Dpy); + return ConnectionNumber(X_Dpy); } static void x_teardown(void) { - struct screen_ctx *sc; - unsigned int i; + struct screen_ctx *sc; + unsigned int i; - conf_clear(&Conf); + conf_clear(&Conf); - TAILQ_FOREACH(sc, &Screenq, entry) { - for (i = 0; i < CWM_COLOR_NITEMS; i++) - XftColorFree(X_Dpy, DefaultVisual(X_Dpy, sc->which), - DefaultColormap(X_Dpy, sc->which), - &sc->xftcolor[i]); - XftFontClose(X_Dpy, sc->xftfont); - XUngrabKey(X_Dpy, AnyKey, AnyModifier, sc->rootwin); - } - XUngrabPointer(X_Dpy, CurrentTime); - XUngrabKeyboard(X_Dpy, CurrentTime); - for (i = 0; i < CF_NITEMS; i++) - XFreeCursor(X_Dpy, Conf.cursor[i]); - XSync(X_Dpy, False); - XSetInputFocus(X_Dpy, PointerRoot, RevertToPointerRoot, CurrentTime); - XCloseDisplay(X_Dpy); + TAILQ_FOREACH(sc, &Screenq, entry) { + for (i = 0; i < CWM_COLOR_NITEMS; i++) + XftColorFree(X_Dpy, DefaultVisual(X_Dpy, sc->which), + DefaultColormap(X_Dpy, sc->which), + &sc->xftcolor[i]); + XftFontClose(X_Dpy, sc->xftfont); + XUngrabKey(X_Dpy, AnyKey, AnyModifier, sc->rootwin); + } + XUngrabPointer(X_Dpy, CurrentTime); + XUngrabKeyboard(X_Dpy, CurrentTime); + for (i = 0; i < CF_NITEMS; i++) + XFreeCursor(X_Dpy, Conf.cursor[i]); + XSync(X_Dpy, False); + XSetInputFocus(X_Dpy, PointerRoot, RevertToPointerRoot, CurrentTime); + XCloseDisplay(X_Dpy); } static int x_wmerrorhandler(Display *dpy, XErrorEvent *e) { - errx(1, "root window unavailable - perhaps another wm is running?"); - return 0; + errx(1, "root window unavailable - perhaps another wm is running?"); + return 0; } static int x_errorhandler(Display *dpy, XErrorEvent *e) { #ifdef DEBUG - char msg[80], number[80], req[80]; + char msg[80], number[80], req[80]; - XGetErrorText(X_Dpy, e->error_code, msg, sizeof(msg)); - (void)snprintf(number, sizeof(number), "%d", e->request_code); - XGetErrorDatabaseText(X_Dpy, "XRequest", number, - "", req, sizeof(req)); + XGetErrorText(X_Dpy, e->error_code, msg, sizeof(msg)); + (void)snprintf(number, sizeof(number), "%d", e->request_code); + XGetErrorDatabaseText(X_Dpy, "XRequest", number, + "", req, sizeof(req)); - warnx("%s(0x%x): %s", req, (unsigned int)e->resourceid, msg); + warnx("%s(0x%x): %s", req, (unsigned int)e->resourceid, msg); #endif - return 0; + return 0; } static void sighdlr(int sig) { - pid_t pid; - int save_errno = errno, status; + pid_t pid; + int save_errno = errno, status; - switch (sig) { - case SIGCHLD: - /* Collect dead children. */ - while ((pid = waitpid(WAIT_ANY, &status, WNOHANG)) > 0 || - (pid < 0 && errno == EINTR)) - ; - break; - case SIGHUP: - cwm_status = CWM_EXEC_WM; - break; - case SIGINT: - case SIGTERM: - cwm_status = CWM_QUIT; - break; - } + switch (sig) { + case SIGCHLD: + /* Collect dead children. */ + while ((pid = waitpid(WAIT_ANY, &status, WNOHANG)) > 0 || + (pid < 0 && errno == EINTR)) + ; + break; + case SIGHUP: + cwm_status = CWM_EXEC_WM; + break; + case SIGINT: + case SIGTERM: + cwm_status = CWM_QUIT; + break; + } - errno = save_errno; + errno = save_errno; } __dead void usage(void) { - extern char *__progname; + extern char *__progname; - (void)fprintf(stderr, "usage: %s [-nv] [-c file] [-d display]\n", - __progname); - exit(1); + (void)fprintf(stderr, "usage: %s [-nv] [-c file] [-d display]\n", + __progname); + exit(1); }