summaryrefslogtreecommitdiff
path: root/acme/bin/source/win/fs.c
diff options
context:
space:
mode:
Diffstat (limited to 'acme/bin/source/win/fs.c')
-rw-r--r--acme/bin/source/win/fs.c29
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);
}