commit 96025b1ec8916c986fb691db79ae96d4f690c8f1 from: Xiao-Yong Jin via: David du Colombier <0intro@gmail.com> date: Tue Mar 27 13:16:10 2018 UTC mc: fix crash in acme with hidpi display commit - 75ea8515a5cd26817b4eb5de99eeb6934def9328 commit + 96025b1ec8916c986fb691db79ae96d4f690c8f1 blob - c24d67b31ca893754be47a5d2cdfb83950fcfef8 blob + ea36e28df73527887bfc57ebf240ab5d8a95b967 --- src/cmd/draw/mc.c +++ src/cmd/draw/mc.c @@ -268,8 +268,8 @@ void getwidth(void) { CFsys *fs; - char buf[500], *p, *q, *f[10]; - int fd, n, nf; + char buf[500], *p, *q, *f[10], *fname; + int fd, n, nf, scale; struct winsize ws; Font *f1; @@ -285,15 +285,19 @@ getwidth(void) buf[n] = 0; if((nf=tokenize(buf, f, nelem(f))) < 7) return; - tabwid = 0; - if(nf >= 8 && (tabwid = atoi(f[7])) == 0) + // hidpi font in stringwidth(3) will call scalesubfont, + // which aborts in bytesperline, due to unknow depth, + // without initdraw. We scale by ourselves. + scale = parsefontscale(f[6], &fname); + tabwid = 0; + if(nf >= 8 && (tabwid = atoi(f[7])/scale) == 0) return; - if((font = openfont(nil, f[6])) == nil) + if((font = openfont(nil, fname)) == nil) return; mintab = stringwidth(font, "0"); if(tabwid == 0) tabwid = mintab*4; - linewidth = atoi(f[5]); + linewidth = atoi(f[5]) / scale; tabflag = 1; return; }