[hackers] st: Fix off-by-one error when calculating character width.

From: Tor Andersson <tor_AT_ccxvii.net>
Date: Wed, 9 Mar 2016 17:11:57 +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.
---
 st.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/st.c b/st.c
index 58cdb76..366e1f0 100644
--- a/st.c
+++ b/st.c
_AT_@ -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);
_AT_@ -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;
 }
--
2.1.4
Received on Wed Mar 09 2016 - 17:11:57 CET

This archive was generated by hypermail 2.3.0 : Wed Mar 09 2016 - 17:12:12 CET