Commit Diff


commit - daefa1a92f688399290f231c4c738ef99e7b8ab4
commit + 3d867865ef5663f640f7c607fadfd3fb0c0ac625
blob - 43242cf0e83d1db26bcfaf2943a7f0182beba292
blob + bfd4f71860f36a13894351aca8a4e1f0ef4cd471
--- src/libthread/exec.c
+++ 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;
blob - 31cc12e1ecaea60f5adfa0ae51cffd628b4bdcf5
blob + 7404817d9a526ea8a40fb7538624966403430a4a
--- src/libthread/pthread.c
+++ 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