about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2009-12-09 08:30:38 -0800
committerUlrich Drepper <drepper@redhat.com>2009-12-09 08:30:38 -0800
commit4940d71bef654affc617dcd9eb48b424646a1045 (patch)
tree7df83e6054fdb9898a8c1fa0b37b48c3432f2728
parentee1a7fabb4e0abd3e73e828ce326dcb5fd38b874 (diff)
downloadglibc-4940d71bef654affc617dcd9eb48b424646a1045.tar.gz
glibc-4940d71bef654affc617dcd9eb48b424646a1045.tar.xz
glibc-4940d71bef654affc617dcd9eb48b424646a1045.zip
Add more warnings to exec functions.
-rw-r--r--ChangeLog9
-rw-r--r--posix/unistd.h16
2 files changed, 16 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 59e4b19241..799448f6d0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,11 @@
-2009-12-08  Ulrich Drepper  <drepper@redhat.com>
+2009-11-05  Bruno Haible  <bruno@clisp.org>
+
+	[BZ #11056]
+	* posix/unistd.h (execve, fexecve, execv, execvp, execvpe): Mark the
+	argv argument as non-NULL.
+	(execle, execl, execlp): Mark the first ARG argument as non-NULL.
+
+-2009-12-08  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/unix/sysv/linux/bits/socket.h: Define mmsghdr and declare
 	recvmmsg.
diff --git a/posix/unistd.h b/posix/unistd.h
index d9ecb5e788..b46a885afa 100644
--- a/posix/unistd.h
+++ b/posix/unistd.h
@@ -544,47 +544,47 @@ extern char **environ;
 /* Replace the current process, executing PATH with arguments ARGV and
    environment ENVP.  ARGV and ENVP are terminated by NULL pointers.  */
 extern int execve (__const char *__path, char *__const __argv[],
-		   char *__const __envp[]) __THROW __nonnull ((1));
+		   char *__const __envp[]) __THROW __nonnull ((1, 2));
 
 #ifdef __USE_XOPEN2K8
 /* Execute the file FD refers to, overlaying the running program image.
    ARGV and ENVP are passed to the new program, as for `execve'.  */
 extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[])
-     __THROW;
+     __THROW __nonnull ((2));
 #endif
 
 
 /* Execute PATH with arguments ARGV and environment from `environ'.  */
 extern int execv (__const char *__path, char *__const __argv[])
-     __THROW __nonnull ((1));
+     __THROW __nonnull ((1, 2));
 
 /* Execute PATH with all arguments after PATH until a NULL pointer,
    and the argument after that for environment.  */
 extern int execle (__const char *__path, __const char *__arg, ...)
-     __THROW __nonnull ((1));
+     __THROW __nonnull ((1, 2));
 
 /* Execute PATH with all arguments after PATH until
    a NULL pointer and environment from `environ'.  */
 extern int execl (__const char *__path, __const char *__arg, ...)
-     __THROW __nonnull ((1));
+     __THROW __nonnull ((1, 2));
 
 /* Execute FILE, searching in the `PATH' environment variable if it contains
    no slashes, with arguments ARGV and environment from `environ'.  */
 extern int execvp (__const char *__file, char *__const __argv[])
-     __THROW __nonnull ((1));
+     __THROW __nonnull ((1, 2));
 
 /* Execute FILE, searching in the `PATH' environment variable if
    it contains no slashes, with all arguments after FILE until a
    NULL pointer and environment from `environ'.  */
 extern int execlp (__const char *__file, __const char *__arg, ...)
-     __THROW __nonnull ((1));
+     __THROW __nonnull ((1, 2));
 
 #ifdef __USE_GNU
 /* Execute FILE, searching in the `PATH' environment variable if it contains
    no slashes, with arguments ARGV and environment from `environ'.  */
 extern int execvpe (__const char *__file, char *__const __argv[],
 		    char *__const __envp[])
-     __THROW __nonnull ((1));
+     __THROW __nonnull ((1, 2));
 #endif