changes from plan 9
diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c index 14d17e2..ee8bf15 100644 --- a/src/cmd/acme/acme.c +++ b/src/cmd/acme/acme.c
@@ -113,6 +113,9 @@ exits("usage"); }ARGEND + fontnames[0] = estrdup(fontnames[0]); + fontnames[1] = estrdup(fontnames[1]); + quotefmtinstall(); cputype = getenv("cputype"); objtype = getenv("objtype"); @@ -218,9 +221,7 @@ #define WPERCOL 8 disk = diskinit(); - if(loadfile) - rowload(&row, loadfile, TRUE); - else{ + if(!loadfile || !rowload(&row, loadfile, TRUE)){ rowinit(&row, screen->clipr); if(ncol < 0){ if(argc == 0) @@ -859,7 +860,7 @@ } r = emalloc(sizeof(Reffont)); r->f = f; - fontcache = realloc(fontcache, (nfontcache+1)*sizeof(Reffont*)); + fontcache = erealloc(fontcache, (nfontcache+1)*sizeof(Reffont*)); fontcache[nfontcache++] = r; } Found: @@ -868,8 +869,10 @@ if(reffonts[fix]) rfclose(reffonts[fix]); reffonts[fix] = r; - free(fontnames[fix]); - fontnames[fix] = name; + if(fontnames[fix] != name){ + free(fontnames[fix]); + fontnames[fix] = estrdup(name); + } } if(setfont){ reffont.f = r->f;
diff --git a/src/cmd/acme/dat.h b/src/cmd/acme/dat.h index 48a57dd..476bbfd 100644 --- a/src/cmd/acme/dat.h +++ b/src/cmd/acme/dat.h
@@ -329,7 +329,7 @@ void rowdragcol(Row*, Column*, int but); int rowclean(Row*); void rowdump(Row*, char*); -void rowload(Row*, char*, int); +int rowload(Row*, char*, int); void rowloadfonts(char*); struct Timer
diff --git a/src/cmd/acme/edit.c b/src/cmd/acme/edit.c index c41985b..ccc7f58 100644 --- a/src/cmd/acme/edit.c +++ b/src/cmd/acme/edit.c
@@ -445,6 +445,7 @@ goto Return; }while(s->r[begline]!='.' || s->r[begline+1]!='\n'); s->r[s->n-2] = '\0'; + s->n -= 2; }else{ okdelim(delim = getch()); getrhs(s, delim, 'a');
diff --git a/src/cmd/acme/rows.c b/src/cmd/acme/rows.c index 9fa5424..15e0289 100644 --- a/src/cmd/acme/rows.c +++ b/src/cmd/acme/rows.c
@@ -476,14 +476,16 @@ if(l == nil) goto Return; l[Blinelen(b)-1] = 0; - if(*l && strcmp(l, fontnames[i])!=0) + if(*l && strcmp(l, fontnames[i])!=0){ + free(fontnames[i]); fontnames[i] = estrdup(l); + } } Return: Bterm(b); } -void +int rowload(Row *row, char *file, int initing) { int i, j, line, percent, y, nr, nfontr, n, ns, ndumped, dumpid, x, fd; @@ -526,7 +528,7 @@ goto Rescue2; l[Blinelen(b)-1] = 0; if(*l && strcmp(l, fontnames[i])!=0) - rfget(i, TRUE, i==0 && initing, estrdup(l)); + rfget(i, TRUE, i==0 && initing, l); } if(initing && row->ncol==0) rowinit(row, screen->clipr); @@ -697,11 +699,11 @@ winsettag(w); }else if(dumpid==0 && r[ns+1]!='+' && r[ns+1]!='-') get(&w->body, nil, nil, FALSE, XXX, nil, 0); - free(r); if(fontr){ fontx(&w->body, nil, nil, 0, 0, fontr, nfontr); free(fontr); } + free(r); if(q0>w->body.file->b.nc || q1>w->body.file->b.nc || q0>q1) q0 = q1 = 0; textshow(&w->body, q0, q1, 1); @@ -709,14 +711,15 @@ } Bterm(b); -Rescue1: fbuffree(buf); - return; + return TRUE; Rescue2: warning(nil, "bad load file %s:%d\n", file, line); Bterm(b); - goto Rescue1; +Rescue1: + fbuffree(buf); + return FALSE; } void
diff --git a/src/cmd/acme/text.c b/src/cmd/acme/text.c index 8aac0ac..5f087f5 100644 --- a/src/cmd/acme/text.c +++ b/src/cmd/acme/text.c
@@ -45,7 +45,7 @@ frinit(&t->fr, r, f, b, t->fr.cols); rr = t->fr.r; - rr.min.x -= Scrollwid; /* back fill to scroll bar */ + rr.min.x -= Scrollwid+Scrollgap; /* back fill to scroll bar */ draw(t->fr.b, rr, t->fr.cols[BACK], nil, ZP); /* use no wider than 3-space tabs in a directory */ maxt = maxtab; @@ -193,6 +193,10 @@ if(t->ncache!=0 || t->file->b.nc || t->w==nil || t!=&t->w->body || (t->w->isdir && t->file->nname==0)) error("text.load"); + if(t->w->isdir && t->file.nname==0){ + warning(nil, "empty directory name"); + return 0; + } fd = open(file, OREAD); if(fd < 0){ warning(nil, "can't open %s: %r\n", file); @@ -645,7 +649,10 @@ switch(r){ case Kleft: if(t->q0 > 0){ - wincommit(t->w, t); + if(t->w) + wincommit(t->w, t); + else + textcommit(t->w, TRUE); textshow(t, t->q0-1, t->q0-1, TRUE); } return;
diff --git a/src/cmd/acme/util.c b/src/cmd/acme/util.c index 4fa3fec..f9387df 100644 --- a/src/cmd/acme/util.c +++ b/src/cmd/acme/util.c
@@ -83,7 +83,7 @@ static Rune Lpluserrors[] = { '+', 'E', 'r', 'r', 'o', 'r', 's', 0 }; r = runemalloc(ndir+8); - if(n = ndir){ /* assign = */ + if((n = ndir) != 0){ runemove(r, dir, ndir); r[n++] = L'/'; }