tmc: fix crash in acme with hidpi display - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit 96025b1ec8916c986fb691db79ae96d4f690c8f1
parent 75ea8515a5cd26817b4eb5de99eeb6934def9328
Author: Xiao-Yong Jin 
Date:   Thu, 22 Mar 2018 23:16:53 -0500

mc: fix crash in acme with hidpi display

Diffstat:
  M src/cmd/draw/mc.c                   |      14 +++++++++-----

1 file changed, 9 insertions(+), 5 deletions(-)
---
diff --git a/src/cmd/draw/mc.c b/src/cmd/draw/mc.c
t@@ -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;
 
t@@ -285,15 +285,19 @@ getwidth(void)
                 buf[n] = 0;
                 if((nf=tokenize(buf, f, nelem(f))) < 7)
                         return;
+                // 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])) == 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;
         }