tbetter exit handling - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 3d867865ef5663f640f7c607fadfd3fb0c0ac625
 (DIR) parent daefa1a92f688399290f231c4c738ef99e7b8ab4
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 18 Jan 2005 18:13:16 +0000
       
       better exit handling
       
       Diffstat:
         M src/libthread/exec.c                |      28 ++++++++++++++++++++++++++++
         M src/libthread/pthread.c             |       7 ++++---
       
       2 files changed, 32 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/src/libthread/exec.c b/src/libthread/exec.c
       t@@ -112,6 +112,34 @@ threadspawn(int fd[3], char *cmd, char *argv[])
        }
        
        int
       +threadspawnl(int fd[3], char *cmd, ...)
       +{
       +        char **argv, *s;
       +        int n, pid;
       +        va_list arg;
       +
       +        va_start(arg, cmd);
       +        for(n=0; va_arg(arg, char*) != nil; n++)
       +                ;
       +        n++;
       +        va_end(arg);
       +
       +        argv = malloc(n*sizeof(argv[0]));
       +        if(argv == nil)
       +                return -1;
       +
       +        va_start(arg, cmd);
       +        for(n=0; (s=va_arg(arg, char*)) != nil; n++)
       +                argv[n] = s;
       +        argv[n] = 0;
       +        va_end(arg);
       +
       +        pid = threadspawn(fd, cmd, argv);
       +        free(argv);
       +        return pid;
       +}
       +
       +int
        _threadexec(Channel *cpid, int fd[3], char *cmd, char *argv[])
        {
                int pid;
 (DIR) diff --git a/src/libthread/pthread.c b/src/libthread/pthread.c
       t@@ -1,5 +1,8 @@
        #include "threadimpl.h"
        
       +#undef exits
       +#undef _exits
       +
        static pthread_mutex_t initmutex = PTHREAD_MUTEX_INITIALIZER;
        
        static void
       t@@ -136,10 +139,8 @@ _pthreadinit(void)
                static struct utsname un;
                pthread_t id;
        
       -        if(uname(&un) < 0){
       +        if(uname(&un) < 0)
                        fprint(2, "warning: uname failed: %r\n");
       -                goto Okay;
       -        }
                if(strcmp(un.sysname, "Linux") == 0){
                        /*
                         * Want to distinguish between the old LinuxThreads pthreads