No more unrooted paths.
This commit is contained in:
parent
6884e49f0c
commit
9361131304
2 changed files with 29 additions and 3 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue