aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2005-01-18 18:13:16 +0000
committerrsc <devnull@localhost>2005-01-18 18:13:16 +0000
commit3d867865ef5663f640f7c607fadfd3fb0c0ac625 (patch)
tree5e7aec90cd21b3691befc6ec93f436e4ac259704 /src
parentdaefa1a92f688399290f231c4c738ef99e7b8ab4 (diff)
downloadplan9port-3d867865ef5663f640f7c607fadfd3fb0c0ac625.tar.gz
plan9port-3d867865ef5663f640f7c607fadfd3fb0c0ac625.tar.bz2
plan9port-3d867865ef5663f640f7c607fadfd3fb0c0ac625.zip
better exit handling
Diffstat (limited to 'src')
-rw-r--r--src/libthread/exec.c28
-rw-r--r--src/libthread/pthread.c7
2 files changed, 32 insertions, 3 deletions
diff --git a/src/libthread/exec.c b/src/libthread/exec.c
index 43242cf0..bfd4f718 100644
--- a/src/libthread/exec.c
+++ b/src/libthread/exec.c
@@ -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;
diff --git a/src/libthread/pthread.c b/src/libthread/pthread.c
index 31cc12e1..7404817d 100644
--- a/src/libthread/pthread.c
+++ b/src/libthread/pthread.c
@@ -1,5 +1,8 @@
#include "threadimpl.h"
+#undef exits
+#undef _exits
+
static pthread_mutex_t initmutex = PTHREAD_MUTEX_INITIALIZER;
static void
@@ -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