commit 6d7fdb243ca2611e31648d57c8b3ac4101407cfa from: rsc date: Mon Dec 27 01:16:26 2004 UTC changes from plan 9 commit - 334cb1e91ceb2d667c1cfd0b71aa9801bef089ec commit + 6d7fdb243ca2611e31648d57c8b3ac4101407cfa blob - 14d17e2ca60c44ee9bde653be3893169e8ede329 blob + ee8bf1506fc176bf70bf8646f2dd2386c136b280 --- src/cmd/acme/acme.c +++ src/cmd/acme/acme.c @@ -113,6 +113,9 @@ threadmain(int argc, char *argv[]) exits("usage"); }ARGEND + fontnames[0] = estrdup(fontnames[0]); + fontnames[1] = estrdup(fontnames[1]); + quotefmtinstall(); cputype = getenv("cputype"); objtype = getenv("objtype"); @@ -218,9 +221,7 @@ threadmain(int argc, char *argv[]) #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 @@ rfget(int fix, int save, int setfont, char *name) } 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 @@ rfget(int fix, int save, int setfont, char *name) 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 @@ -329,7 +329,7 @@ Text* rowtype(Row*, Rune, Point); 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 @@ -445,6 +445,7 @@ collecttext(void) 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 @@ -476,14 +476,16 @@ rowloadfonts(char *file) 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 @@ rowload(Row *row, char *file, int initing) 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 @@ rowload(Row *row, char *file, int initing) 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 @@ rowload(Row *row, char *file, int initing) } 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 @@ -45,7 +45,7 @@ textredraw(Text *t, Rectangle r, Font *f, Image *b, in 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 @@ textload(Text *t, uint q0, char *file, int setqid) 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 @@ texttype(Text *t, Rune r) 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 @@ -83,7 +83,7 @@ errorwin1(Rune *dir, int ndir, Rune **incl, int nincl) 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'/'; }