diff options
| author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-19 08:57:40 +0200 |
|---|---|---|
| committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-08-19 08:57:40 +0200 |
| commit | 62f5a7e2b785fd2832234aec76933ef0c14f5e27 (patch) | |
| tree | d4bc5ed40fc15d9916a11ee519f7a418113127e7 | |
| parent | 7bb4a790d6b8413e2c454dfe102b5267338af216 (diff) | |
| download | plan9front-62f5a7e2b785fd2832234aec76933ef0c14f5e27.tar.xz | |
vncs: cleanup and error handling
| -rw-r--r-- | sys/src/cmd/vnc/vncs.c | 46 |
1 files changed, 28 insertions, 18 deletions
diff --git a/sys/src/cmd/vnc/vncs.c b/sys/src/cmd/vnc/vncs.c index 2b3f7b0ac..9e983dcc0 100644 --- a/sys/src/cmd/vnc/vncs.c +++ b/sys/src/cmd/vnc/vncs.c @@ -192,39 +192,49 @@ main(int argc, char **argv) unmount(nil, "/dev"); bind("#c", "/dev", MREPL); - /* run the command */ - switch(cmdpid = rfork(RFPROC|RFFDG|RFNOTEG)){ + /* mount exporter */ + if(mounter("/dev", MBEFORE, fd, exnum) < 0) + sysfatal("mounter: %r"); + close(fd); + + /* start and mount kbdfs */ + switch(cmdpid = rfork(RFPROC|RFMEM|RFFDG|RFREND)){ case -1: sysfatal("rfork: %r"); break; case 0: - if(mounter("/dev", MBEFORE, fd, exnum) < 0) - sysfatal("mounter: %r"); close(exportfd); close(1); - close(2); open("/dev/cons", OWRITE); + close(2); open("/dev/cons", OWRITE); - if(rfork(RFPROC|RFMEM|RFFDG) == 0){ - exec(kbdfs[0], kbdfs); - _exits("kbdfs"); - } - waitpid(); - rfork(RFNAMEG); - rendezvous(&cmdpid, 0); - rfork(RFREND); + exec(kbdfs[0], kbdfs); + _exits("kbdfs"); + } + if(waitpid() != cmdpid) + sysfatal("%s: %r", kbdfs[0]); + if((kbdin = open("/dev/kbdin", OWRITE)) < 0) + sysfatal("open /dev/kbdin: %r"); + + /* run the command */ + switch(cmdpid = rfork(RFPROC|RFMEM|RFFDG|RFNAMEG|RFREND|RFNOTEG)){ + case -1: + sysfatal("rfork: %r"); + break; + case 0: + close(exportfd); + close(kbdin); close(0); open("/dev/cons", OREAD); + close(1); + open("/dev/cons", OWRITE); + close(2); + open("/dev/cons", OWRITE); exec(argv[0], argv); fprint(2, "exec %s: %r\n", argv[0]); _exits(nil); - default: - close(fd); - break; } - rendezvous(&cmdpid, 0); - kbdin = open("/dev/kbdin", OWRITE); unmount(nil, "/dev"); bind("#c", "/dev", MREPL); |
