summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2015-03-28 23:12:47 +0000
committerokan <okan>2015-03-28 23:12:47 +0000
commita4a414b68bf8a59255ee68959863f4c5fdee85d9 (patch)
treec612ebec85e5022479b6888b1ada2c5ad17c8eac
parent0bbe0ad98c7b8ed5d081747ee3bdb2dbf7a1b848 (diff)
downloadcwm-a4a414b68bf8a59255ee68959863f4c5fdee85d9.tar.gz
cwm-a4a414b68bf8a59255ee68959863f4c5fdee85d9.tar.xz
cwm-a4a414b68bf8a59255ee68959863f4c5fdee85d9.zip
Introduce a xreallocarray and convert a few xcalloc instances that do
not require zero'ing.
-rw-r--r--calmwm.h1
-rw-r--r--group.c2
-rw-r--r--xmalloc.c12
-rw-r--r--xutil.c8
4 files changed, 18 insertions, 5 deletions
diff --git a/calmwm.h b/calmwm.h
index 1d1cbe5..fd4b554 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -559,6 +559,7 @@ void			 u_spawn(char *);
 
 void			*xcalloc(size_t, size_t);
 void			*xmalloc(size_t);
+void			*xreallocarray(void *, size_t, size_t);
 char			*xstrdup(const char *);
 int			 xasprintf(char **, const char *, ...)
 			    __attribute__((__format__ (printf, 2, 3)))
diff --git a/group.c b/group.c
index 834c2f7..7ab65f9 100644
--- a/group.c
+++ b/group.c
@@ -91,7 +91,7 @@ group_restack(struct group_ctx *gc)
 		if (cc->stackingorder > highstack)
 			highstack = cc->stackingorder;
 	}
-	winlist = xcalloc((highstack + 1), sizeof(*winlist));
+	winlist = xreallocarray(NULL, (highstack + 1), sizeof(*winlist));
 
 	/* Invert the stacking order for XRestackWindows(). */
 	TAILQ_FOREACH(cc, &gc->clientq, group_entry) {
diff --git a/xmalloc.c b/xmalloc.c
index 2db79ab..9cf824a 100644
--- a/xmalloc.c
+++ b/xmalloc.c
@@ -61,6 +61,18 @@ xcalloc(size_t no, size_t siz)
 	return(p);
 }
 
+void *
+xreallocarray(void *ptr, size_t nmemb, size_t size)
+{
+	void	*p;
+
+	p = reallocarray(ptr, nmemb, size);
+	if (p == NULL)
+		errx(1, "xreallocarray: out of memory (new_size %zu bytes)",
+		    nmemb * size);
+	return(p);
+}
+
 char *
 xstrdup(const char *str)
 {
diff --git a/xutil.c b/xutil.c
index 85276ba..c6248c4 100644
--- a/xutil.c
+++ b/xutil.c
@@ -220,7 +220,7 @@ xu_ewmh_net_client_list(struct screen_ctx *sc)
 	if (i == 0)
 		return;
 
-	winlist = xcalloc(i, sizeof(*winlist));
+	winlist = xreallocarray(NULL, i, sizeof(*winlist));
 	TAILQ_FOREACH(cc, &sc->clientq, entry)
 		winlist[j++] = cc->win;
 	XChangeProperty(X_Dpy, sc->rootwin, ewmh[_NET_CLIENT_LIST],
@@ -320,7 +320,7 @@ xu_ewmh_net_desktop_names(struct screen_ctx *sc)
 
 	TAILQ_FOREACH(gc, &sc->groupq, entry)
 		len += strlen(gc->name) + 1;
-	q = p = xcalloc(len, sizeof(*p));
+	q = p = xreallocarray(NULL, len, sizeof(*p));
 
 	tlen = len;
 	TAILQ_FOREACH(gc, &sc->groupq, entry) {
@@ -357,7 +357,7 @@ xu_ewmh_get_net_wm_state(struct client_ctx *cc, int *n)
 	    (unsigned char **)&p)) <= 0)
 		return(NULL);
 
-	state = xcalloc(*n, sizeof(Atom));
+	state = xreallocarray(NULL, *n, sizeof(Atom));
 	(void)memcpy(state, p, *n * sizeof(Atom));
 	XFree((char *)p);
 
@@ -444,7 +444,7 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
 	int	 n, i, j;
 
 	oatoms = xu_ewmh_get_net_wm_state(cc, &n);
-	atoms = xcalloc((n + _NET_WM_STATES_NITEMS), sizeof(Atom));
+	atoms = xreallocarray(NULL, (n + _NET_WM_STATES_NITEMS), sizeof(Atom));
 	for (i = j = 0; i < n; i++) {
 		if (oatoms[i] != ewmh[_NET_WM_STATE_STICKY] &&
 		    oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ] &&