No more unrooted paths.

This commit is contained in:
rsc 2006-06-16 15:55:24 +00:00
parent 6884e49f0c
commit 9361131304
2 changed files with 29 additions and 3 deletions

View file

@ -276,11 +276,15 @@ readfile(Column *c, char *s)
{
Window *w;
Rune rb[256];
int nb, nr;
int nr;
Runestr rs;
w = coladd(c, nil, nil, -1);
cvttorunes(s, strlen(s), rb, &nb, &nr, nil);
if(s[0] != '/')
runesnprint(rb, sizeof rb, "%s/%s", wdir, s);
else
runesnprint(rb, sizeof rb, "%s", s);
nr = runestrlen(rb);
rs = cleanrname(runestr(rb, nr));
winsetname(w, rs.r, rs.nr);
textload(&w->body, 0, s, 1);

View file

@ -696,6 +696,7 @@ openfile(Text *t, Expand *e, int newwindow)
Window *w, *ow;
int eval, i, n;
Rune *rp;
Runestr rs;
uint dummy;
r.q0 = 0;
@ -704,8 +705,29 @@ openfile(Text *t, Expand *e, int newwindow)
w = t->w;
if(w == nil)
return nil;
}else
}else{
w = lookfile(e->name, e->nname);
if(w == nil && e->name[0] != '/'){
/*
* Unrooted path in new window.
* This can happen if we type a pwd-relative path
* in the topmost tag or the column tags.
* Most of the time plumber takes care of these,
* but plumber might not be running or might not
* be configured to accept plumbed directories.
* Make the name a full path, just like we would if
* opening via the plumber.
*/
n = utflen(wdir)+1+e->nname+1;
rp = runemalloc(n);
runesnprint(rp, n, "%s/%.*S", wdir, e->nname, e->name);
rs = cleanrname(runestr(rp, n-1));
free(e->name);
e->name = rs.r;
e->nname = rs.nr;
w = lookfile(e->name, e->nname);
}
}
if(w){
if(newwindow==TRUE && !w->isdir)
w = coladd(w->col, nil, w, -1);