]> git.armaanb.net Git - st.git/commitdiff
st: Fix off-by-one error when calculating character width.
authorTor Andersson <tor@ccxvii.net>
Wed, 9 Mar 2016 16:11:57 +0000 (17:11 +0100)
committerChristoph Lohmann <20h@r-36.net>
Wed, 9 Mar 2016 21:01:25 +0000 (22:01 +0100)
LEN(str) is one larger than strlen(str) because it also counts the zero
terminator. The original code would include the .notdef glyph (since it'll
try to encode character 0, which gets encoded to the .notdef glyph) when
measuring the average dimensions of printable ascii characters.

This causes problems with fonts like GNU Unifont where the .notdef glyph is
not the same width as the usual half-width characters.

Signed-off-by: Christoph Lohmann <20h@r-36.net>
st.c

diff --git a/st.c b/st.c
index f2b309562c3111455e024c03ff89de8e8d333616..839136ddf906c5cf674fb039f6f534ae8893d8d8 100644 (file)
--- a/st.c
+++ b/st.c
@@ -3291,7 +3291,7 @@ xloadfont(Font *f, FcPattern *pattern)
 
        XftTextExtentsUtf8(xw.dpy, f->match,
                (const FcChar8 *) ascii_printable,
-               LEN(ascii_printable), &extents);
+               strlen(ascii_printable), &extents);
 
        f->set = NULL;
        f->pattern = FcPatternDuplicate(pattern);
@@ -3302,7 +3302,7 @@ xloadfont(Font *f, FcPattern *pattern)
        f->rbearing = f->match->max_advance_width;
 
        f->height = f->ascent + f->descent;
-       f->width = DIVCEIL(extents.xOff, LEN(ascii_printable));
+       f->width = DIVCEIL(extents.xOff, strlen(ascii_printable));
 
        return 0;
 }