commit 39964614b742c4ec98a326762d98470cb987a45b from: Tor Andersson via: Christoph Lohmann <20h@r-36.net> date: Wed Mar 9 21:01:25 2016 UTC st: Fix off-by-one error when calculating character width. 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> commit - 0e48a1995eee1c2babc58523ef0be296e4b1c3e8 commit + 39964614b742c4ec98a326762d98470cb987a45b blob - f2b309562c3111455e024c03ff89de8e8d333616 blob + 839136ddf906c5cf674fb039f6f534ae8893d8d8 --- st.c +++ 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; }