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; Window *w;
Rune rb[256]; Rune rb[256];
int nb, nr; int nr;
Runestr rs; Runestr rs;
w = coladd(c, nil, nil, -1); 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)); rs = cleanrname(runestr(rb, nr));
winsetname(w, rs.r, rs.nr); winsetname(w, rs.r, rs.nr);
textload(&w->body, 0, s, 1); textload(&w->body, 0, s, 1);

View file

@ -696,6 +696,7 @@ openfile(Text *t, Expand *e, int newwindow)
Window *w, *ow; Window *w, *ow;
int eval, i, n; int eval, i, n;
Rune *rp; Rune *rp;
Runestr rs;
uint dummy; uint dummy;
r.q0 = 0; r.q0 = 0;
@ -704,8 +705,29 @@ openfile(Text *t, Expand *e, int newwindow)
w = t->w; w = t->w;
if(w == nil) if(w == nil)
return nil; return nil;
}else }else{
w = lookfile(e->name, e->nname); 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(w){
if(newwindow==TRUE && !w->isdir) if(newwindow==TRUE && !w->isdir)
w = coladd(w->col, nil, w, -1); w = coladd(w->col, nil, w, -1);