commit - 334cb1e91ceb2d667c1cfd0b71aa9801bef089ec
commit + 6d7fdb243ca2611e31648d57c8b3ac4101407cfa
blob - 14d17e2ca60c44ee9bde653be3893169e8ede329
blob + ee8bf1506fc176bf70bf8646f2dd2386c136b280
--- src/cmd/acme/acme.c
+++ src/cmd/acme/acme.c
exits("usage");
}ARGEND
+ fontnames[0] = estrdup(fontnames[0]);
+ fontnames[1] = estrdup(fontnames[1]);
+
quotefmtinstall();
cputype = getenv("cputype");
objtype = getenv("objtype");
#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)
}
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:
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;
blob - 48a57dd2ccb543b92a6eff51e3c6091694361a02
blob + 476bbfd1a3b5f533cabdc1aba49894e780ce7c60
--- src/cmd/acme/dat.h
+++ src/cmd/acme/dat.h
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
blob - c41985bb306b2784965bd7be6992aa17ccd0ae0d
blob + ccc7f58599c80fc3251a6e03891b8731294890d8
--- src/cmd/acme/edit.c
+++ src/cmd/acme/edit.c
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');
blob - 9fa5424821df3c0938d6a5411d42382f0f6f2fde
blob + 15e02894b5ff8d52031458be45ee6e7fa516c381
--- src/cmd/acme/rows.c
+++ src/cmd/acme/rows.c
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;
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);
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);
}
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
blob - 8aac0ac0002d096132d53907008648dedfdff4e5
blob + 5f087f5d347772ee8d0302955c4c5ec03eb54bf2
--- src/cmd/acme/text.c
+++ src/cmd/acme/text.c
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;
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);
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;
blob - 4fa3fec003e518ee5b500fe8684b5e7d5e05a2ff
blob + f9387df5e29dc1e7eb896347b95f67fc7e262e98
--- src/cmd/acme/util.c
+++ src/cmd/acme/util.c
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'/';
}