From 9d01e221783e7706fd1d3dadfc8a7f678004929c Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 30 Jan 2005 16:34:12 +0000 Subject: add errors file --- src/cmd/acme/util.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'src/cmd/acme/util.c') diff --git a/src/cmd/acme/util.c b/src/cmd/acme/util.c index f9387df5..c224cce5 100644 --- a/src/cmd/acme/util.c +++ b/src/cmd/acme/util.c @@ -129,6 +129,49 @@ errorwin(Mntdir *md, int owner) return w; } +/* + * Incoming window should be locked. + * It will be unlocked and returned window + * will be locked in its place. + */ +Window* +errorwinforwin(Window *w) +{ + int i, n, nincl, owner; + Rune **incl; + Runestr dir; + Text *t; + + t = &w->body; + dir = dirname(t, nil, 0); + if(dir.nr==1 && dir.r[0]=='.'){ /* sigh */ + free(dir.r); + dir.r = nil; + dir.nr = 0; + } + incl = nil; + nincl = w->nincl; + if(nincl > 0){ + incl = emalloc(nincl*sizeof(Rune*)); + for(i=0; iincl[i]); + incl[i] = runemalloc(n+1); + runemove(incl[i], w->incl[i], n); + } + } + owner = w->owner; + winunlock(w); + for(;;){ + w = errorwin1(dir.r, dir.nr, incl, nincl); + winlock(w, owner); + if(w->col != nil) + break; + /* window deleted too fast */ + winunlock(w); + } + return w; +} + typedef struct Warning Warning; struct Warning{ -- cgit v1.2.3