URI: 
       tmc: fix crash in acme with hidpi display - plan9port - [fork] Plan 9 from user space
  HTML git clone git://src.adamsgaard.dk/plan9port
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 96025b1ec8916c986fb691db79ae96d4f690c8f1
   DIR parent 75ea8515a5cd26817b4eb5de99eeb6934def9328
  HTML Author: Xiao-Yong Jin <xjin@anl.gov>
       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(-)
       ---
   DIR 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;
                }