diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-03-07 20:27:20 +0100 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-03-07 20:27:20 +0100 |
commit | feb6d6f0a32e5dac88d1ef46bbc4396ec44ce40b (patch) | |
tree | 2321d2b0f5dddccfe332f8fa4816fd4075c2d1bd /sys/src/cmd/dossrv | |
parent | 225c359beab9e2f17c66e65647b9e0a94f942620 (diff) |
dossrv, 9660srv, hjfs: stop *READING* standard *OUTPUT* with -s flag
with the -s flag, we should read 9P messages from
standard *INPUT* (fd 0) and write responses to
standard *OUTPUT* (fd 1).
before these servers where reading from fd 1,
assuming they where both the same files.
Diffstat (limited to 'sys/src/cmd/dossrv')
-rw-r--r-- | sys/src/cmd/dossrv/fns.h | 2 | ||||
-rw-r--r-- | sys/src/cmd/dossrv/xfssrv.c | 37 |
2 files changed, 13 insertions, 26 deletions
diff --git a/sys/src/cmd/dossrv/fns.h b/sys/src/cmd/dossrv/fns.h index 42a76f06f..092149e2e 100644 --- a/sys/src/cmd/dossrv/fns.h +++ b/sys/src/cmd/dossrv/fns.h @@ -26,7 +26,7 @@ char *getnamesect(char*, char*, uchar*, int*, int*, int); long getstart(Xfs *xf, Dosdir *d); Xfs *getxfs(char*, char*); long gtime(Dosdir *d); -void io(int srvfd); +void io(void); int iscontig(Xfs *xf, Dosdir *d); int isroot(vlong addr); int makecontig(Xfile*, int); diff --git a/sys/src/cmd/dossrv/xfssrv.c b/sys/src/cmd/dossrv/xfssrv.c index 7bceb74fc..a173f8008 100644 --- a/sys/src/cmd/dossrv/xfssrv.c +++ b/sys/src/cmd/dossrv/xfssrv.c @@ -18,7 +18,6 @@ char repdata[Maxfdata]; uchar statbuf[STATMAX]; int errno; char errbuf[ERRMAX]; -void rmservice(void); char srvfile[64]; char *deffile; int doabort; @@ -87,14 +86,9 @@ main(int argc, char **argv) else usage(); - if(stdio){ - pipefd[0] = 0; - pipefd[1] = 1; - }else{ - close(0); - close(1); - open("/dev/null", OREAD); - open("/dev/null", OWRITE); + iotrack_init(); + + if(!stdio){ if(pipe(pipefd) < 0) panic("pipe"); srvfd = create(srvfile, OWRITE|ORCLOSE, 0600); @@ -102,40 +96,39 @@ main(int argc, char **argv) panic(srvfile); fprint(srvfd, "%d", pipefd[0]); close(pipefd[0]); - atexit(rmservice); fprint(2, "%s: serving %s\n", argv0, srvfile); + + dup(pipefd[1], 0); + dup(pipefd[1], 1); } - srvfd = pipefd[1]; switch(rfork(RFNOWAIT|RFNOTEG|RFFDG|RFPROC|RFNAMEG)){ case -1: panic("fork"); default: - _exits(0); + _exits(nil); case 0: break; } - iotrack_init(); - if(!chatty){ close(2); open("#c/cons", OWRITE); } - io(srvfd); - exits(0); + io(); + exits(nil); } void -io(int srvfd) +io(void) { int n, pid; pid = getpid(); fmtinstall('F', fcallfmt); - while((n = read9pmsg(srvfd, mdata, sizeof mdata)) != 0){ + while((n = read9pmsg(0, mdata, sizeof mdata)) != 0){ if(n < 0) panic("mount read"); if(convM2S(mdata, n, req) != n) @@ -162,18 +155,12 @@ io(int srvfd) n = convS2M(rep, mdata, sizeof mdata); if(n == 0) panic("convS2M error on write"); - if(write(srvfd, mdata, n) != n) + if(write(1, mdata, n) != n) panic("mount write"); } chat("server shut down\n"); } -void -rmservice(void) -{ - remove(srvfile); -} - char * xerrstr(int e) { |