diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-06-30 00:46:52 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2016-06-30 00:46:52 +0200 |
commit | 828ec57d652618e1d9cecb8fb6cc588afc063dca (patch) | |
tree | 76720c72de4a127f75463fd9a73bec8668f4e081 /acme/bin/source/win/fs.c | |
parent | 65977417e7cc5919f7c9787f97a528e8c24d2423 (diff) | |
download | plan9front-828ec57d652618e1d9cecb8fb6cc588afc063dca.tar.xz |
acme/win: implement /dev/wdir file in win to change directory tagline, remove awd
Diffstat (limited to 'acme/bin/source/win/fs.c')
-rw-r--r-- | acme/bin/source/win/fs.c | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/acme/bin/source/win/fs.c b/acme/bin/source/win/fs.c index 8f1ed7997..9f2efe06e 100644 --- a/acme/bin/source/win/fs.c +++ b/acme/bin/source/win/fs.c @@ -8,7 +8,7 @@ Channel *fschan; Channel *writechan; -static File *devcons, *devnew; +static File *devcons, *devnew, *devwdir; static void fsread(Req *r) @@ -25,7 +25,12 @@ fsread(Req *r) return; } - assert(r->fid->file == devcons); + if(r->fid->file == devwdir){ + readstr(r, wdir); + respond(r, nil); + return; + } + e.type = 'r'; e.r = r; send(fschan, &e); @@ -72,6 +77,23 @@ fswrite(Req *r) return; } + if(r->fid->file == devwdir){ + s = emalloc(r->ifcall.count+1); + memmove(s, r->ifcall.data, r->ifcall.count); + s[r->ifcall.count] = 0; + if(s[0] == '#' || s[0] == '/'){ + free(wdir); + wdir = s; + } else { + wdir = eappend(wdir, "/", s); + free(s); + } + cleanname(wdir); + winsetdir(win, wdir, wname); + respond(r, nil); + return; + } + if(r->fid->file != devcons){ respond(r, "bug in fswrite"); return; @@ -161,5 +183,8 @@ mountcons(void) devnew = createfile(fs.tree->root, "wnew", "win", 0666, nil); if(devnew == nil) sysfatal("creating /dev/wnew: %r"); + devwdir = createfile(fs.tree->root, "wdir", "win", 0666, nil); + if(devwdir == nil) + sysfatal("creating /dev/wdir: %r"); threadpostmountsrv(&fs, nil, "/dev", MBEFORE); } |