commit e63025d09486aea0f644578b5e05a093c130b7d2 from: Russ Cox date: Thu Apr 17 20:03:49 2008 UTC 9pfuse: accept - for stdin, try to hang up cleanly commit - 14125803572e1fa6efb2badf4a41e2e59e81a76d commit + e63025d09486aea0f644578b5e05a093c130b7d2 blob - aaec3ef02b5bc0aec87898357e5ab89ef376ff97 blob + f5038e163228b82b77d8508879fc5770f9a51c01 --- src/cmd/9pfuse/a.h +++ src/cmd/9pfuse/a.h @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include blob - 50c835bb64bd53d243d165c2f94e46361f90d985 blob + fa27cb9ca53dbd71610d6bc2c54a67a16ad69573 --- src/cmd/9pfuse/main.c +++ src/cmd/9pfuse/main.c @@ -39,7 +39,6 @@ # endif #endif - int debug; char *argv0; char *aname = ""; @@ -77,6 +76,7 @@ usage(void) } void fusereader(void*); +void watchfd(void*); void threadmain(int argc, char **argv) @@ -139,8 +139,12 @@ init9p(char *addr, char *spec) { int fd; - if((fd = dial(netmkaddr(addr, "tcp", "564"), nil, nil, nil)) < 0) - sysfatal("dial %s: %r", addr); + if(strcmp(addr, "-") == 0) + fd = 0; + else + if((fd = dial(netmkaddr(addr, "tcp", "564"), nil, nil, nil)) < 0) + sysfatal("dial %s: %r", addr); + proccreate(watchfd, (void*)(uintptr)fd, STACK); if((fsys = fsmount(fd, spec)) == nil) sysfatal("fsmount: %r"); fsysroot = fsroot(fsys); @@ -1208,4 +1212,16 @@ estrdup(char *p) return pp; } +void +watchfd(void *v) +{ + int fd = (int)(uintptr)v; + /* wait for exception (file closed) */ + fd_set set; + FD_ZERO(&set); + FD_SET(fd, &set); + if(select(fd+1, NULL, NULL, &set, NULL) >= 0) + threadexitsall(nil); + return; +}