exec.c.patch   [plain text]


--- exec.c.orig	2010-07-06 16:02:22.000000000 -0700
+++ exec.c	2010-07-06 16:31:46.000000000 -0700
@@ -48,7 +48,11 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/exe
 #include "un-namespace.h"
 #include "libc_private.h"
 
-extern char **environ;
+#include <crt_externs.h>
+#define environ (*_NSGetEnviron())
+
+int
+_execvpe(const char *name, char * const argv[], char * const envp[]);
 
 int
 execl(const char *name, const char *arg, ...)
@@ -259,8 +263,9 @@ retry:		(void)_execve(bp, argv, envp);
 	}
 	if (eacces)
 		errno = EACCES;
-	else
+	else if (cur)
 		errno = ENOENT;
+	/* else use existing errno from _execve */
 done:
 	return (-1);
 }
@@ -271,7 +276,7 @@ execvP(const char *name, const char *pat
 	return execvPe(name, path, argv, environ);
 }
 
-int
+__private_extern__ int
 _execvpe(const char *name, char * const argv[], char * const envp[])
 {
 	const char *path;