summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBert Münnich <ber.t@posteo.de>2020-01-16 11:13:41 +0100
committerBert Münnich <ber.t@posteo.de>2020-01-16 12:36:04 +0100
commitd9e60cb4c0cf7433b9c163c083899565aab88c4d (patch)
treec5b729be16c4e1d93d3de2ff6ef71b9e2e110592
parent55777ba9f4a92a27205c2db0003359422c0797a1 (diff)
downloadnsxiv-d9e60cb4c0cf7433b9c163c083899565aab88c4d.tar.zst
Fix memory leak in win_res()
Fixes issue #372.
-rw-r--r--window.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/window.c b/window.c
index 72ffb6a..6f9a390 100644
--- a/window.c
+++ b/window.c
@@ -71,18 +71,14 @@ void win_alloc_color(const win_env_t *e, const char *name, XftColor *col)
}
}
-const char* win_res(Display *dpy, const char *name, const char *def)
+const char* win_res(XrmDatabase db, const char *name, const char *def)
{
char *type;
XrmValue ret;
- XrmDatabase db;
- char *res_man;
-
- XrmInitialize();
- if ((res_man = XResourceManagerString(dpy)) != NULL &&
- (db = XrmGetStringDatabase(res_man)) != NULL &&
- XrmGetResource(db, name, name, &type, &ret) && STREQ(type, "String"))
+ if (db != None &&
+ XrmGetResource(db, name, name, &type, &ret) &&
+ STREQ(type, "String"))
{
return ret.addr;
} else {
@@ -97,6 +93,8 @@ void win_init(win_t *win)
{
win_env_t *e;
const char *bg, *fg, *f;
+ char *res_man;
+ XrmDatabase db;
memset(win, 0, sizeof(win_t));
@@ -114,11 +112,15 @@ void win_init(win_t *win)
if (setlocale(LC_CTYPE, "") == NULL || XSupportsLocale() == 0)
error(0, 0, "No locale support");
- f = win_res(e->dpy, RES_CLASS ".font", "monospace-8");
+ XrmInitialize();
+ res_man = XResourceManagerString(e->dpy);
+ db = res_man != NULL ? XrmGetStringDatabase(res_man) : None;
+
+ f = win_res(db, RES_CLASS ".font", "monospace-8");
win_init_font(e, f);
- bg = win_res(e->dpy, RES_CLASS ".background", "white");
- fg = win_res(e->dpy, RES_CLASS ".foreground", "black");
+ bg = win_res(db, RES_CLASS ".background", "white");
+ fg = win_res(db, RES_CLASS ".foreground", "black");
win_alloc_color(e, bg, &win->bg);
win_alloc_color(e, fg, &win->fg);