mirror of
				https://codeberg.org/dwl/dwl.git
				synced 2025-10-30 19:44:17 +00:00 
			
		
		
		
	new functions ecalloc() and die()
die() replaces EBARF and BARF and allow us to add `-pedantic` to CFLAGS
This commit is contained in:
		
							parent
							
								
									cb4265ac8c
								
							
						
					
					
						commit
						aab397c30b
					
				
							
								
								
									
										4
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								Makefile
									
									
									
									
									
								
							| @ -59,6 +59,6 @@ idle-protocol.o: idle-protocol.h | |||||||
| config.h: | config.def.h | config.h: | config.def.h | ||||||
| 	cp config.def.h $@ | 	cp config.def.h $@ | ||||||
| 
 | 
 | ||||||
| dwl.o: config.mk config.h client.h xdg-shell-protocol.h wlr-layer-shell-unstable-v1-protocol.h idle-protocol.h | dwl.o: config.mk config.h client.h xdg-shell-protocol.h wlr-layer-shell-unstable-v1-protocol.h idle-protocol.h util.h | ||||||
| 
 | 
 | ||||||
| dwl: xdg-shell-protocol.o wlr-layer-shell-unstable-v1-protocol.o idle-protocol.o | dwl: xdg-shell-protocol.o wlr-layer-shell-unstable-v1-protocol.o idle-protocol.o util.o | ||||||
|  | |||||||
| @ -3,7 +3,7 @@ PREFIX = /usr/local | |||||||
| MANDIR = $(PREFIX)/share/man | MANDIR = $(PREFIX)/share/man | ||||||
| 
 | 
 | ||||||
| # Default compile flags (overridable by environment)
 | # Default compile flags (overridable by environment)
 | ||||||
| CFLAGS ?= -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-sign-compare -Wno-unused-function -Wno-unused-variable -Wno-unused-result -Wdeclaration-after-statement | CFLAGS ?= -g -Wall -Wextra -Werror -Wno-unused-parameter -Wno-sign-compare -Wno-unused-function -Wno-unused-variable -Wno-unused-result -Wdeclaration-after-statement -pedantic | ||||||
| 
 | 
 | ||||||
| # Uncomment to build XWayland support
 | # Uncomment to build XWayland support
 | ||||||
| #CFLAGS += -DXWAYLAND
 | #CFLAGS += -DXWAYLAND
 | ||||||
|  | |||||||
							
								
								
									
										46
									
								
								dwl.c
									
									
									
									
									
								
							
							
						
						
									
										46
									
								
								dwl.c
									
									
									
									
									
								
							| @ -54,9 +54,9 @@ | |||||||
| #include <wlr/xwayland.h> | #include <wlr/xwayland.h> | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | #include "util.h" | ||||||
|  | 
 | ||||||
| /* macros */ | /* macros */ | ||||||
| #define BARF(fmt, ...)		do { fprintf(stderr, fmt "\n", ##__VA_ARGS__); exit(EXIT_FAILURE); } while (0) |  | ||||||
| #define EBARF(fmt, ...)		BARF(fmt ": %s", ##__VA_ARGS__, strerror(errno)) |  | ||||||
| #define MAX(A, B)               ((A) > (B) ? (A) : (B)) | #define MAX(A, B)               ((A) > (B) ? (A) : (B)) | ||||||
| #define MIN(A, B)               ((A) < (B) ? (A) : (B)) | #define MIN(A, B)               ((A) < (B) ? (A) : (B)) | ||||||
| #define CLEANMASK(mask)         (mask & ~WLR_MODIFIER_CAPS) | #define CLEANMASK(mask)         (mask & ~WLR_MODIFIER_CAPS) | ||||||
| @ -790,9 +790,7 @@ createkeyboard(struct wlr_input_device *device) | |||||||
| { | { | ||||||
| 	struct xkb_context *context; | 	struct xkb_context *context; | ||||||
| 	struct xkb_keymap *keymap; | 	struct xkb_keymap *keymap; | ||||||
| 	Keyboard *kb = device->data = calloc(1, sizeof(*kb)); | 	Keyboard *kb = device->data = ecalloc(1, sizeof(*kb)); | ||||||
| 	if (!kb) |  | ||||||
| 		EBARF("createkeyboard: calloc"); |  | ||||||
| 	kb->device = device; | 	kb->device = device; | ||||||
| 
 | 
 | ||||||
| 	/* Prepare an XKB keymap and assign it to the keyboard. */ | 	/* Prepare an XKB keymap and assign it to the keyboard. */ | ||||||
| @ -823,9 +821,7 @@ createmon(struct wl_listener *listener, void *data) | |||||||
| 	 * monitor) becomes available. */ | 	 * monitor) becomes available. */ | ||||||
| 	struct wlr_output *wlr_output = data; | 	struct wlr_output *wlr_output = data; | ||||||
| 	const MonitorRule *r; | 	const MonitorRule *r; | ||||||
| 	Monitor *m = wlr_output->data = calloc(1, sizeof(*m)); | 	Monitor *m = wlr_output->data = ecalloc(1, sizeof(*m)); | ||||||
| 	if (!m) |  | ||||||
| 		EBARF("createmon: calloc"); |  | ||||||
| 	m->wlr_output = wlr_output; | 	m->wlr_output = wlr_output; | ||||||
| 
 | 
 | ||||||
| 	wlr_output_init_render(wlr_output, alloc, drw); | 	wlr_output_init_render(wlr_output, alloc, drw); | ||||||
| @ -910,9 +906,7 @@ createnotify(struct wl_listener *listener, void *data) | |||||||
| 		return; | 		return; | ||||||
| 
 | 
 | ||||||
| 	/* Allocate a Client for this surface */ | 	/* Allocate a Client for this surface */ | ||||||
| 	c = xdg_surface->data = calloc(1, sizeof(*c)); | 	c = xdg_surface->data = ecalloc(1, sizeof(*c)); | ||||||
| 	if (!c) |  | ||||||
| 		EBARF("createnotify: calloc"); |  | ||||||
| 	c->surface.xdg = xdg_surface; | 	c->surface.xdg = xdg_surface; | ||||||
| 	c->bw = borderpx; | 	c->bw = borderpx; | ||||||
| 
 | 
 | ||||||
| @ -938,9 +932,7 @@ createlayersurface(struct wl_listener *listener, void *data) | |||||||
| 		wlr_layer_surface->output = selmon->wlr_output; | 		wlr_layer_surface->output = selmon->wlr_output; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	layersurface = calloc(1, sizeof(LayerSurface)); | 	layersurface = ecalloc(1, sizeof(LayerSurface)); | ||||||
| 	if (!layersurface) |  | ||||||
| 		EBARF("layersurface: calloc"); |  | ||||||
| 	layersurface->type = LayerShell; | 	layersurface->type = LayerShell; | ||||||
| 	LISTEN(&wlr_layer_surface->surface->events.commit, | 	LISTEN(&wlr_layer_surface->surface->events.commit, | ||||||
| 		&layersurface->surface_commit, commitlayersurfacenotify); | 		&layersurface->surface_commit, commitlayersurfacenotify); | ||||||
| @ -1744,7 +1736,7 @@ run(char *startup_cmd) | |||||||
| 	/* Add a Unix socket to the Wayland display. */ | 	/* Add a Unix socket to the Wayland display. */ | ||||||
| 	const char *socket = wl_display_add_socket_auto(dpy); | 	const char *socket = wl_display_add_socket_auto(dpy); | ||||||
| 	if (!socket) | 	if (!socket) | ||||||
| 		BARF("startup: display_add_socket_auto"); | 		die("startup: display_add_socket_auto"); | ||||||
| 	setenv("WAYLAND_DISPLAY", socket, 1); | 	setenv("WAYLAND_DISPLAY", socket, 1); | ||||||
| 
 | 
 | ||||||
| 	/* Now that the socket exists, run the startup command */ | 	/* Now that the socket exists, run the startup command */ | ||||||
| @ -1753,13 +1745,13 @@ run(char *startup_cmd) | |||||||
| 		pipe(piperw); | 		pipe(piperw); | ||||||
| 		startup_pid = fork(); | 		startup_pid = fork(); | ||||||
| 		if (startup_pid < 0) | 		if (startup_pid < 0) | ||||||
| 			EBARF("startup: fork"); | 			die("startup: fork:"); | ||||||
| 		if (startup_pid == 0) { | 		if (startup_pid == 0) { | ||||||
| 			dup2(piperw[0], STDIN_FILENO); | 			dup2(piperw[0], STDIN_FILENO); | ||||||
| 			close(piperw[0]); | 			close(piperw[0]); | ||||||
| 			close(piperw[1]); | 			close(piperw[1]); | ||||||
| 			execl("/bin/sh", "/bin/sh", "-c", startup_cmd, NULL); | 			execl("/bin/sh", "/bin/sh", "-c", startup_cmd, NULL); | ||||||
| 			EBARF("startup: execl"); | 			die("startup: execl:"); | ||||||
| 		} | 		} | ||||||
| 		dup2(piperw[1], STDOUT_FILENO); | 		dup2(piperw[1], STDOUT_FILENO); | ||||||
| 		close(piperw[1]); | 		close(piperw[1]); | ||||||
| @ -1772,7 +1764,7 @@ run(char *startup_cmd) | |||||||
| 	/* Start the backend. This will enumerate outputs and inputs, become the DRM
 | 	/* Start the backend. This will enumerate outputs and inputs, become the DRM
 | ||||||
| 	 * master, etc */ | 	 * master, etc */ | ||||||
| 	if (!wlr_backend_start(backend)) | 	if (!wlr_backend_start(backend)) | ||||||
| 		BARF("startup: backend_start"); | 		die("startup: backend_start"); | ||||||
| 
 | 
 | ||||||
| 	/* Now that outputs are initialized, choose initial selmon based on
 | 	/* Now that outputs are initialized, choose initial selmon based on
 | ||||||
| 	 * cursor position, and set default cursor image */ | 	 * cursor position, and set default cursor image */ | ||||||
| @ -1928,7 +1920,7 @@ setup(void) | |||||||
| 	 * if the backend does not support hardware cursors (some older GPUs | 	 * if the backend does not support hardware cursors (some older GPUs | ||||||
| 	 * don't). */ | 	 * don't). */ | ||||||
| 	if (!(backend = wlr_backend_autocreate(dpy))) | 	if (!(backend = wlr_backend_autocreate(dpy))) | ||||||
| 		BARF("couldn't create backend"); | 		die("couldn't create backend"); | ||||||
| 
 | 
 | ||||||
| 	/* Initialize the scene graph used to lay out windows */ | 	/* Initialize the scene graph used to lay out windows */ | ||||||
| 	scene = wlr_scene_create(); | 	scene = wlr_scene_create(); | ||||||
| @ -1942,12 +1934,12 @@ setup(void) | |||||||
| 
 | 
 | ||||||
| 	/* Create a renderer with the default implementation */ | 	/* Create a renderer with the default implementation */ | ||||||
| 	if (!(drw = wlr_renderer_autocreate(backend))) | 	if (!(drw = wlr_renderer_autocreate(backend))) | ||||||
| 		BARF("couldn't create renderer"); | 		die("couldn't create renderer"); | ||||||
| 	wlr_renderer_init_wl_display(drw, dpy); | 	wlr_renderer_init_wl_display(drw, dpy); | ||||||
| 
 | 
 | ||||||
| 	/* Create a default allocator */ | 	/* Create a default allocator */ | ||||||
| 	if (!(alloc = wlr_allocator_autocreate(backend, drw))) | 	if (!(alloc = wlr_allocator_autocreate(backend, drw))) | ||||||
| 		BARF("couldn't create allocator"); | 		die("couldn't create allocator"); | ||||||
| 
 | 
 | ||||||
| 	/* This creates some hands-off wlroots interfaces. The compositor is
 | 	/* This creates some hands-off wlroots interfaces. The compositor is
 | ||||||
| 	 * necessary for clients to allocate surfaces and the data device manager | 	 * necessary for clients to allocate surfaces and the data device manager | ||||||
| @ -2088,7 +2080,7 @@ sigchld(int unused) | |||||||
| 	 * setting our own disposition for SIGCHLD. | 	 * setting our own disposition for SIGCHLD. | ||||||
| 	 */ | 	 */ | ||||||
| 	if (signal(SIGCHLD, sigchld) == SIG_ERR) | 	if (signal(SIGCHLD, sigchld) == SIG_ERR) | ||||||
| 		EBARF("can't install SIGCHLD handler"); | 		die("can't install SIGCHLD handler:"); | ||||||
| 	while (0 < waitpid(-1, NULL, WNOHANG)) | 	while (0 < waitpid(-1, NULL, WNOHANG)) | ||||||
| 		; | 		; | ||||||
| } | } | ||||||
| @ -2100,7 +2092,7 @@ spawn(const Arg *arg) | |||||||
| 		dup2(STDERR_FILENO, STDOUT_FILENO); | 		dup2(STDERR_FILENO, STDOUT_FILENO); | ||||||
| 		setsid(); | 		setsid(); | ||||||
| 		execvp(((char **)arg->v)[0], (char **)arg->v); | 		execvp(((char **)arg->v)[0], (char **)arg->v); | ||||||
| 		EBARF("dwl: execvp %s failed", ((char **)arg->v)[0]); | 		die("dwl: execvp %s failed:", ((char **)arg->v)[0]); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -2435,9 +2427,7 @@ createnotifyx11(struct wl_listener *listener, void *data) | |||||||
| 			setfullscreen(c, 0); | 			setfullscreen(c, 0); | ||||||
| 
 | 
 | ||||||
| 	/* Allocate a Client for this surface */ | 	/* Allocate a Client for this surface */ | ||||||
| 	c = xwayland_surface->data = calloc(1, sizeof(*c)); | 	c = xwayland_surface->data = ecalloc(1, sizeof(*c)); | ||||||
| 	if (!c) |  | ||||||
| 		EBARF("createnotifyx11: calloc"); |  | ||||||
| 	c->surface.xwayland = xwayland_surface; | 	c->surface.xwayland = xwayland_surface; | ||||||
| 	c->type = xwayland_surface->override_redirect ? X11Unmanaged : X11Managed; | 	c->type = xwayland_surface->override_redirect ? X11Unmanaged : X11Managed; | ||||||
| 	c->bw = borderpx; | 	c->bw = borderpx; | ||||||
| @ -2517,12 +2507,12 @@ main(int argc, char *argv[]) | |||||||
| 
 | 
 | ||||||
| 	/* Wayland requires XDG_RUNTIME_DIR for creating its communications socket */ | 	/* Wayland requires XDG_RUNTIME_DIR for creating its communications socket */ | ||||||
| 	if (!getenv("XDG_RUNTIME_DIR")) | 	if (!getenv("XDG_RUNTIME_DIR")) | ||||||
| 		BARF("XDG_RUNTIME_DIR must be set"); | 		die("XDG_RUNTIME_DIR must be set"); | ||||||
| 	setup(); | 	setup(); | ||||||
| 	run(startup_cmd); | 	run(startup_cmd); | ||||||
| 	cleanup(); | 	cleanup(); | ||||||
| 	return EXIT_SUCCESS; | 	return EXIT_SUCCESS; | ||||||
| 
 | 
 | ||||||
| usage: | usage: | ||||||
| 	BARF("Usage: %s [-s startup command]", argv[0]); | 	die("Usage: %s [-s startup command]", argv[0]); | ||||||
| } | } | ||||||
|  | |||||||
							
								
								
									
										35
									
								
								util.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								util.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,35 @@ | |||||||
|  | /* See LICENSE.dwm file for copyright and license details. */ | ||||||
|  | #include <stdarg.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | 
 | ||||||
|  | #include "util.h" | ||||||
|  | 
 | ||||||
|  | void * | ||||||
|  | ecalloc(size_t nmemb, size_t size) | ||||||
|  | { | ||||||
|  | 	void *p; | ||||||
|  | 
 | ||||||
|  | 	if (!(p = calloc(nmemb, size))) | ||||||
|  | 		die("calloc:"); | ||||||
|  | 	return p; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | void | ||||||
|  | die(const char *fmt, ...) { | ||||||
|  | 	va_list ap; | ||||||
|  | 
 | ||||||
|  | 	va_start(ap, fmt); | ||||||
|  | 	vfprintf(stderr, fmt, ap); | ||||||
|  | 	va_end(ap); | ||||||
|  | 
 | ||||||
|  | 	if (fmt[0] && fmt[strlen(fmt)-1] == ':') { | ||||||
|  | 		fputc(' ', stderr); | ||||||
|  | 		perror(NULL); | ||||||
|  | 	} else { | ||||||
|  | 		fputc('\n', stderr); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	exit(1); | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Leonardo Hernández Hernández
						Leonardo Hernández Hernández