mirror of
				https://github.com/labwc/labwc.git
				synced 2025-11-03 09:01:51 -05:00 
			
		
		
		
	common: Add additional memory utilities (xzalloc() etc.)
This commit is contained in:
		
							parent
							
								
									b89f7bfc0d
								
							
						
					
					
						commit
						cb40cdc36c
					
				
					 35 changed files with 193 additions and 167 deletions
				
			
		| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
#include <stdlib.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
#include <wlr/util/log.h>
 | 
			
		||||
#include "common/mem.h"
 | 
			
		||||
#include "config/keybind.h"
 | 
			
		||||
#include "config/rcxml.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -27,7 +28,7 @@ parse_modifier(const char *symname)
 | 
			
		|||
struct keybind *
 | 
			
		||||
keybind_create(const char *keybind)
 | 
			
		||||
{
 | 
			
		||||
	struct keybind *k = calloc(1, sizeof(struct keybind));
 | 
			
		||||
	struct keybind *k = xzalloc(sizeof(struct keybind));
 | 
			
		||||
	xkb_keysym_t keysyms[MAX_KEYSYMS];
 | 
			
		||||
	gchar **symnames = g_strsplit(keybind, "-", -1);
 | 
			
		||||
	for (int i = 0; symnames[i]; i++) {
 | 
			
		||||
| 
						 | 
				
			
			@ -60,7 +61,7 @@ keybind_create(const char *keybind)
 | 
			
		|||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	wl_list_insert(rc.keybinds.prev, &k->link);
 | 
			
		||||
	k->keysyms = malloc(k->keysyms_len * sizeof(xkb_keysym_t));
 | 
			
		||||
	k->keysyms = xmalloc(k->keysyms_len * sizeof(xkb_keysym_t));
 | 
			
		||||
	memcpy(k->keysyms, keysyms, k->keysyms_len * sizeof(xkb_keysym_t));
 | 
			
		||||
	wl_list_init(&k->actions);
 | 
			
		||||
	return k;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,8 +2,10 @@
 | 
			
		|||
#include <string.h>
 | 
			
		||||
#include <strings.h>
 | 
			
		||||
 | 
			
		||||
#include "common/mem.h"
 | 
			
		||||
#include "config/libinput.h"
 | 
			
		||||
#include "config/rcxml.h"
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
libinput_category_init(struct libinput_category *l)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -36,10 +38,7 @@ get_device_type(const char *s)
 | 
			
		|||
struct libinput_category *
 | 
			
		||||
libinput_category_create(void)
 | 
			
		||||
{
 | 
			
		||||
	struct libinput_category *l = calloc(1, sizeof(struct libinput_category));
 | 
			
		||||
	if (!l) {
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	struct libinput_category *l = xzalloc(sizeof(struct libinput_category));
 | 
			
		||||
	libinput_category_init(l);
 | 
			
		||||
	wl_list_insert(&rc.libinput_categories, &l->link);
 | 
			
		||||
	return l;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,7 @@
 | 
			
		|||
#include <strings.h>
 | 
			
		||||
#include <unistd.h>
 | 
			
		||||
#include <wlr/util/log.h>
 | 
			
		||||
#include "common/mem.h"
 | 
			
		||||
#include "config/mousebind.h"
 | 
			
		||||
#include "config/rcxml.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +109,7 @@ mousebind_create(const char *context)
 | 
			
		|||
		wlr_log(WLR_ERROR, "mousebind context not specified");
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	struct mousebind *m = calloc(1, sizeof(struct mousebind));
 | 
			
		||||
	struct mousebind *m = xzalloc(sizeof(struct mousebind));
 | 
			
		||||
	m->context = context_from_str(context);
 | 
			
		||||
	if (m->context != LAB_SSD_NONE) {
 | 
			
		||||
		wl_list_insert(rc.mousebinds.prev, &m->link);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,9 +14,9 @@
 | 
			
		|||
#include <wayland-server-core.h>
 | 
			
		||||
#include <wlr/util/log.h>
 | 
			
		||||
#include "action.h"
 | 
			
		||||
#include "common/mem.h"
 | 
			
		||||
#include "common/nodename.h"
 | 
			
		||||
#include "common/string-helpers.h"
 | 
			
		||||
#include "common/zfree.h"
 | 
			
		||||
#include "config/keybind.h"
 | 
			
		||||
#include "config/libinput.h"
 | 
			
		||||
#include "config/mousebind.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +194,7 @@ fill_libinput_category(char *nodename, char *content)
 | 
			
		|||
				|| !strcmp(content, "default")) {
 | 
			
		||||
			current_libinput_category->type = get_device_type(content);
 | 
			
		||||
		} else {
 | 
			
		||||
			current_libinput_category->name = strdup(content);
 | 
			
		||||
			current_libinput_category->name = xstrdup(content);
 | 
			
		||||
		}
 | 
			
		||||
	} else if (!strcasecmp(nodename, "naturalScroll")) {
 | 
			
		||||
		current_libinput_category->natural_scroll =
 | 
			
		||||
| 
						 | 
				
			
			@ -241,7 +241,7 @@ set_font_attr(struct font *font, const char *nodename, const char *content)
 | 
			
		|||
{
 | 
			
		||||
	if (!strcmp(nodename, "name")) {
 | 
			
		||||
		zfree(font->name);
 | 
			
		||||
		font->name = strdup(content);
 | 
			
		||||
		font->name = xstrdup(content);
 | 
			
		||||
	} else if (!strcmp(nodename, "size")) {
 | 
			
		||||
		font->size = atoi(content);
 | 
			
		||||
	} else if (!strcmp(nodename, "slant")) {
 | 
			
		||||
| 
						 | 
				
			
			@ -361,7 +361,7 @@ entry(xmlNode *node, char *nodename, char *content)
 | 
			
		|||
	} else if (!strcasecmp(nodename, "adaptiveSync.core")) {
 | 
			
		||||
		rc.adaptive_sync = get_bool(content);
 | 
			
		||||
	} else if (!strcmp(nodename, "name.theme")) {
 | 
			
		||||
		rc.theme_name = strdup(content);
 | 
			
		||||
		rc.theme_name = xstrdup(content);
 | 
			
		||||
	} else if (!strcmp(nodename, "cornerradius.theme")) {
 | 
			
		||||
		rc.corner_radius = atoi(content);
 | 
			
		||||
	} else if (!strcmp(nodename, "name.font.theme")) {
 | 
			
		||||
| 
						 | 
				
			
			@ -401,8 +401,8 @@ entry(xmlNode *node, char *nodename, char *content)
 | 
			
		|||
	} else if (!strcasecmp(nodename, "cycleViewOutlines.core")) {
 | 
			
		||||
		rc.cycle_preview_outlines = get_bool(content);
 | 
			
		||||
	} else if (!strcasecmp(nodename, "name.names.desktops")) {
 | 
			
		||||
		struct workspace *workspace = calloc(1, sizeof(struct workspace));
 | 
			
		||||
		workspace->name = strdup(content);
 | 
			
		||||
		struct workspace *workspace = xzalloc(sizeof(struct workspace));
 | 
			
		||||
		workspace->name = xstrdup(content);
 | 
			
		||||
		wl_list_insert(rc.workspace_config.workspaces.prev, &workspace->link);
 | 
			
		||||
	} else if (!strcasecmp(nodename, "popupTime.desktops")) {
 | 
			
		||||
		rc.workspace_config.popuptime = atoi(content);
 | 
			
		||||
| 
						 | 
				
			
			@ -671,13 +671,13 @@ post_processing(void)
 | 
			
		|||
	merge_mouse_bindings();
 | 
			
		||||
 | 
			
		||||
	if (!rc.font_activewindow.name) {
 | 
			
		||||
		rc.font_activewindow.name = strdup("sans");
 | 
			
		||||
		rc.font_activewindow.name = xstrdup("sans");
 | 
			
		||||
	}
 | 
			
		||||
	if (!rc.font_menuitem.name) {
 | 
			
		||||
		rc.font_menuitem.name = strdup("sans");
 | 
			
		||||
		rc.font_menuitem.name = xstrdup("sans");
 | 
			
		||||
	}
 | 
			
		||||
	if (!rc.font_osd.name) {
 | 
			
		||||
		rc.font_osd.name = strdup("sans");
 | 
			
		||||
		rc.font_osd.name = xstrdup("sans");
 | 
			
		||||
	}
 | 
			
		||||
	if (!wl_list_length(&rc.libinput_categories)) {
 | 
			
		||||
		/* So we still allow tap to click by default */
 | 
			
		||||
| 
						 | 
				
			
			@ -685,8 +685,8 @@ post_processing(void)
 | 
			
		|||
		l->type = DEFAULT_DEVICE;
 | 
			
		||||
	}
 | 
			
		||||
	if (!wl_list_length(&rc.workspace_config.workspaces)) {
 | 
			
		||||
		struct workspace *workspace = calloc(1, sizeof(struct workspace));
 | 
			
		||||
		workspace->name = strdup("Default");
 | 
			
		||||
		struct workspace *workspace = xzalloc(sizeof(struct workspace));
 | 
			
		||||
		workspace->name = xstrdup("Default");
 | 
			
		||||
		wl_list_insert(rc.workspace_config.workspaces.prev, &workspace->link);
 | 
			
		||||
	}
 | 
			
		||||
	if (rc.workspace_config.popuptime == INT_MIN) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
#include <sys/stat.h>
 | 
			
		||||
#include <wlr/util/log.h>
 | 
			
		||||
#include "common/buf.h"
 | 
			
		||||
#include "common/mem.h"
 | 
			
		||||
#include "common/spawn.h"
 | 
			
		||||
#include "common/string-helpers.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -78,10 +79,7 @@ build_path(const char *dir, const char *filename)
 | 
			
		|||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	int len = strlen(dir) + strlen(filename) + 2;
 | 
			
		||||
	char *buffer = calloc(1, len);
 | 
			
		||||
	if (!buffer) {
 | 
			
		||||
		return NULL;
 | 
			
		||||
	}
 | 
			
		||||
	char *buffer = xzalloc(len);
 | 
			
		||||
	strcat(buffer, dir);
 | 
			
		||||
	strcat(buffer, "/");
 | 
			
		||||
	strcat(buffer, filename);
 | 
			
		||||
| 
						 | 
				
			
			@ -103,25 +101,17 @@ update_activation_env(const char *env_keys)
 | 
			
		|||
	const char *dbus = "dbus-update-activation-environment ";
 | 
			
		||||
	const char *systemd = "systemctl --user import-environment ";
 | 
			
		||||
 | 
			
		||||
	cmd = calloc(1, strlen(dbus) + strlen(env_keys) + 1);
 | 
			
		||||
	if (!cmd) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "Failed to allocate memory for dbus env update");
 | 
			
		||||
	} else {
 | 
			
		||||
		strcat(cmd, dbus);
 | 
			
		||||
		strcat(cmd, env_keys);
 | 
			
		||||
		spawn_async_no_shell(cmd);
 | 
			
		||||
		free(cmd);
 | 
			
		||||
	}
 | 
			
		||||
	cmd = xzalloc(strlen(dbus) + strlen(env_keys) + 1);
 | 
			
		||||
	strcat(cmd, dbus);
 | 
			
		||||
	strcat(cmd, env_keys);
 | 
			
		||||
	spawn_async_no_shell(cmd);
 | 
			
		||||
	free(cmd);
 | 
			
		||||
 | 
			
		||||
	cmd = calloc(1, strlen(systemd) + strlen(env_keys) + 1);
 | 
			
		||||
	if (!cmd) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "Failed to allocate memory for systemd env update");
 | 
			
		||||
	} else {
 | 
			
		||||
		strcat(cmd, systemd);
 | 
			
		||||
		strcat(cmd, env_keys);
 | 
			
		||||
		spawn_async_no_shell(cmd);
 | 
			
		||||
		free(cmd);
 | 
			
		||||
	}
 | 
			
		||||
	cmd = xzalloc(strlen(systemd) + strlen(env_keys) + 1);
 | 
			
		||||
	strcat(cmd, systemd);
 | 
			
		||||
	strcat(cmd, env_keys);
 | 
			
		||||
	spawn_async_no_shell(cmd);
 | 
			
		||||
	free(cmd);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void
 | 
			
		||||
| 
						 | 
				
			
			@ -158,11 +148,7 @@ session_autostart_init(const char *dir)
 | 
			
		|||
	}
 | 
			
		||||
	wlr_log(WLR_INFO, "run autostart file %s", autostart);
 | 
			
		||||
	int len = strlen(autostart) + 4;
 | 
			
		||||
	char *cmd = calloc(1, len);
 | 
			
		||||
	if (!cmd) {
 | 
			
		||||
		wlr_log(WLR_ERROR, "Failed to allocate memory for autostart command");
 | 
			
		||||
		goto out;
 | 
			
		||||
	}
 | 
			
		||||
	char *cmd = xzalloc(len);
 | 
			
		||||
	strcat(cmd, "sh ");
 | 
			
		||||
	strcat(cmd, autostart);
 | 
			
		||||
	spawn_async_no_shell(cmd);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue