dmenu

dynamic menu
git clone git://git.suckless.org/dmenu
Log | Files | Refs | README | LICENSE

commit e2e7fcb2198d40e2a50591932ee2b2a8f9969a5f
parent 1f2226df1380f178240bb81dddcad6c5ff2e9d62
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Tue, 20 Oct 2015 22:55:39 +0200

drw: simplify drw_font_xcreate and prevent a potential unneeded allocation

Diffstat:
Mdrw.c | 41+++++++++++++++++++----------------------
1 file changed, 19 insertions(+), 22 deletions(-)

diff --git a/drw.c b/drw.c @@ -108,12 +108,8 @@ static Fnt * drw_font_xcreate(Drw *drw, const char *fontname, FcPattern *fontpattern) { Fnt *font; - - if (!(fontname || fontpattern)) - die("No font specified.\n"); - - if (!(font = calloc(1, sizeof(Fnt)))) - return NULL; + XftFont *xfont = NULL; + FcPattern *pattern = NULL; if (fontname) { /* Using the pattern found at font->xfont->pattern does not yield same @@ -122,28 +118,29 @@ drw_font_xcreate(Drw *drw, const char *fontname, FcPattern *fontpattern) * behaviour whereas the former just results in * missing-character-rectangles being drawn, at least with some fonts. */ - if (!(font->xfont = XftFontOpenName(drw->dpy, drw->screen, fontname)) || - !(font->pattern = FcNameParse((FcChar8 *) fontname))) { - if (font->xfont) { - XftFontClose(drw->dpy, font->xfont); - font->xfont = NULL; - } + if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fontname))) { + fprintf(stderr, "error, cannot load font: '%s'\n", fontname); + return NULL; + } + if (!(pattern = FcNameParse((FcChar8 *) fontname))) { fprintf(stderr, "error, cannot load font: '%s'\n", fontname); + XftFontClose(drw->dpy, xfont); + return NULL; } } else if (fontpattern) { - if (!(font->xfont = XftFontOpenPattern(drw->dpy, fontpattern))) + if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern))) { fprintf(stderr, "error, cannot load font pattern.\n"); - else - font->pattern = NULL; - } - - if (!font->xfont) { - free(font); - return NULL; + return NULL; + } + } else { + die("no font specified.\n"); } - font->ascent = font->xfont->ascent; - font->descent = font->xfont->descent; + font = ecalloc(1, sizeof(Fnt)); + font->xfont = xfont; + font->pattern = pattern; + font->ascent = xfont->ascent; + font->descent = xfont->descent; font->h = font->ascent + font->descent; font->dpy = drw->dpy;