diff options
author | cinap_lenrek <cinap_lenrek@localhost> | 2011-06-16 17:33:26 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@localhost> | 2011-06-16 17:33:26 +0200 |
commit | 7cd1b102ee03d676b050319eaaefe73309b9b01c (patch) | |
tree | 325686092892be6bd2370643e69fb08b3729e665 /sys/src/cmd/cwfs/proc.c | |
parent | fcf30f314b4c4157b536647a09a214576711ad16 (diff) |
remove mconf cruft
Diffstat (limited to 'sys/src/cmd/cwfs/proc.c')
-rw-r--r-- | sys/src/cmd/cwfs/proc.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sys/src/cmd/cwfs/proc.c b/sys/src/cmd/cwfs/proc.c new file mode 100644 index 000000000..22ac02e60 --- /dev/null +++ b/sys/src/cmd/cwfs/proc.c @@ -0,0 +1,41 @@ +#include "all.h" +#include "io.h" + +/* + * based on libthread's threadsetname, but drags in less library code. + * actually just sets the arguments displayed. + */ +void +procsetname(char *fmt, ...) +{ + int fd; + char *cmdname; + char buf[128]; + va_list arg; + + va_start(arg, fmt); + cmdname = vsmprint(fmt, arg); + va_end(arg); + if (cmdname == nil) + return; + snprint(buf, sizeof buf, "#p/%d/args", getpid()); + if((fd = open(buf, OWRITE)) >= 0){ + write(fd, cmdname, strlen(cmdname)+1); + close(fd); + } + free(cmdname); +} + +void +newproc(void (*f)(void *), void *arg, char *text) +{ + int kid = rfork(RFPROC|RFMEM|RFNOWAIT); + + if (kid < 0) + sysfatal("can't fork: %r"); + if (kid == 0) { + procsetname("%s", text); + (*f)(arg); + exits("child returned"); + } +} |