diff options
| -rw-r--r-- | sys/include/9p.h | 2 | ||||
| -rw-r--r-- | sys/man/2/9p | 10 | ||||
| -rw-r--r-- | sys/src/lib9p/post.c | 99 | ||||
| -rw-r--r-- | sys/src/lib9p/srv.c | 56 |
4 files changed, 57 insertions, 110 deletions
diff --git a/sys/include/9p.h b/sys/include/9p.h index 53b16ca4a..1a6dfd657 100644 --- a/sys/include/9p.h +++ b/sys/include/9p.h @@ -246,8 +246,6 @@ void postsharesrv(Srv*, char*, char*, char*); void _postsharesrv(Srv*, char*, char*, char*); void listensrv(Srv*, char*); void _listensrv(Srv*, char*); -int postfd(char*, int); -int sharefd(char*, char*, int); int chatty9p; void respond(Req*, char*); void responderror(Req*); diff --git a/sys/man/2/9p b/sys/man/2/9p index 49979828c..79b0a7275 100644 --- a/sys/man/2/9p +++ b/sys/man/2/9p @@ -1,12 +1,12 @@ .TH 9P 2 .SH NAME Srv, +chatty9p, dirread9p, emalloc9p, erealloc9p, estrdup9p, listensrv, -postfd, postmountsrv, postsharesrv, readbuf, @@ -72,7 +72,6 @@ void threadpostmountsrv(Srv *s, char *name, char *mtpt, int flag) void threadpostsharesrv(Srv *s, char *name, char *mtpt, char *desc) void listensrv(Srv *s, char *addr) void threadlistensrv(Srv *s, char *addr) -int postfd(char *srvname, int fd) void respond(Req *r, char *error) void responderror(Req*) void readstr(Req *r, char *src) @@ -185,12 +184,9 @@ initialized as the other end. .IP If .B name -is non-nil, call -.BI postfd( s -> srvfd , -.IB name ) -to post +is non-nil, post the file descriptor .IB s -> srvfd -as +under the name .BI /srv/ name . .IP Fork a child process via diff --git a/sys/src/lib9p/post.c b/sys/src/lib9p/post.c index 65a98e1f6..ba4265494 100644 --- a/sys/src/lib9p/post.c +++ b/sys/src/lib9p/post.c @@ -5,21 +5,37 @@ #include <9p.h> #include <auth.h> -static void postproc(void*); +static void +postproc(void *v) +{ + Srv *s; -void -_postmountsrv(Srv *s, char *name, char *mtpt, int flag) + s = v; + rendezvous(0, 0); + close(s->srvfd); + srv(s); +} + +static void +postsrv(Srv *s, char *name) { + char buf[80]; int fd[2]; + int cfd; if(pipe(fd) < 0) sysfatal("pipe: %r"); s->infd = s->outfd = fd[1]; s->srvfd = fd[0]; - if(name) - if(postfd(name, s->srvfd) < 0) - sysfatal("postfd %s: %r", name); + if(name != nil){ + snprint(buf, sizeof buf, "/srv/%s", name); + if((cfd = create(buf, OWRITE|ORCLOSE|OCEXEC, 0600)) < 0) + sysfatal("create %s: %r", buf); + if(fprint(cfd, "%d", s->srvfd) < 0) + sysfatal("write %s: %r", buf); + } else + cfd = -1; if(_forker == nil) sysfatal("no forker"); @@ -32,53 +48,46 @@ _postmountsrv(Srv *s, char *name, char *mtpt, int flag) if(s->infd != s->outfd) close(s->outfd); - if(mtpt){ - if(amount(s->srvfd, mtpt, flag, "") == -1) - sysfatal("mount %s: %r", mtpt); - }else - close(s->srvfd); + if(cfd >= 0) + close(cfd); } void -_postsharesrv(Srv *s, char *name, char *mtpt, char *desc) +_postmountsrv(Srv *s, char *name, char *mtpt, int flag) { - int fd[2]; - - if(pipe(fd) < 0) - sysfatal("pipe: %r"); - s->infd = s->outfd = fd[1]; - s->srvfd = fd[0]; + postsrv(s, name); - if(name) - if(postfd(name, s->srvfd) < 0) - sysfatal("postfd %s: %r", name); - - if(_forker == nil) - sysfatal("no forker"); - _forker(postproc, s, RFNAMEG|RFNOTEG); - - rfork(RFFDG); - rendezvous(0, 0); - - close(s->infd); - if(s->infd != s->outfd) - close(s->outfd); - - if(mtpt){ - if(sharefd(mtpt, desc, s->srvfd) < 0) - sysfatal("sharefd %s: %r", mtpt); - }else + if(mtpt != nil){ + if(amount(s->srvfd, mtpt, flag, "") == -1) + sysfatal("mount %s: %r", mtpt); + /* mount closed s->srvfd */ + } else close(s->srvfd); } - -static void -postproc(void *v) +void +_postsharesrv(Srv *s, char *name, char *mtpt, char *desc) { - Srv *s; - - s = v; - rendezvous(0, 0); + char buf[80]; + int cfd; + + if(mtpt != nil && desc != nil){ + snprint(buf, sizeof buf, "#σc/%s", mtpt); + if((cfd = create(buf, OREAD, DMDIR|0700)) >= 0) + close(cfd); + + snprint(buf, sizeof buf, "#σc/%s/%s", mtpt, desc); + if((cfd = create(buf, OWRITE|ORCLOSE|OCEXEC, 0600)) < 0) + sysfatal("create %s: %r", buf); + } else + cfd = -1; + + postsrv(s, name); + + if(cfd >= 0){ + if(fprint(cfd, "%d\n", s->srvfd) < 0) + sysfatal("write %s: %r", buf); + close(cfd); + } close(s->srvfd); - srv(s); } diff --git a/sys/src/lib9p/srv.c b/sys/src/lib9p/srv.c index 25276d2ad..a764f9c78 100644 --- a/sys/src/lib9p/srv.c +++ b/sys/src/lib9p/srv.c @@ -918,59 +918,3 @@ responderror(Req *r) rerrstr(errbuf, sizeof errbuf); respond(r, errbuf); } - -int -postfd(char *name, int pfd) -{ - int fd; - char buf[80]; - - snprint(buf, sizeof buf, "/srv/%s", name); - if(chatty9p) - fprint(2, "postfd %s\n", buf); - fd = create(buf, OWRITE|ORCLOSE|OCEXEC, 0600); - if(fd < 0){ - if(chatty9p) - fprint(2, "create fails: %r\n"); - return -1; - } - if(fprint(fd, "%d", pfd) < 0){ - if(chatty9p) - fprint(2, "write fails: %r\n"); - close(fd); - return -1; - } - if(chatty9p) - fprint(2, "postfd successful\n"); - return 0; -} - -int -sharefd(char *name, char *desc, int pfd) -{ - int fd; - char buf[80]; - - snprint(buf, sizeof buf, "#σc/%s", name); - if((fd = create(buf, OREAD, 0700|DMDIR)) >= 0) - close(fd); - snprint(buf, sizeof buf, "#σc/%s/%s", name, desc); - if(chatty9p) - fprint(2, "sharefd %s\n", buf); - fd = create(buf, OWRITE, 0600); - if(fd < 0){ - if(chatty9p) - fprint(2, "create fails: %r\n"); - return -1; - } - if(fprint(fd, "%d\n", pfd) < 0){ - if(chatty9p) - fprint(2, "write fails: %r\n"); - close(fd); - return -1; - } - close(fd); - if(chatty9p) - fprint(2, "sharefd successful\n"); - return 0; -} |
