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;
|
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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue