correct variadic prototypes for execl* family
authorRich Felker <dalias@aerifal.cx>
Wed, 27 Apr 2011 20:06:33 +0000 (16:06 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 27 Apr 2011 20:06:33 +0000 (16:06 -0400)
the old versions worked, but conflicted with programs which declared
their own prototypes and generated warnings with some versions of gcc.

include/unistd.h
src/process/execl.c
src/process/execle.c
src/process/execlp.c

index 05180de..a64d99b 100644 (file)
@@ -81,10 +81,10 @@ int pause(void);
 pid_t fork(void);
 int execve(const char *, char *const [], char *const []);
 int execv(const char *, char *const []);
 pid_t fork(void);
 int execve(const char *, char *const [], char *const []);
 int execv(const char *, char *const []);
-int execle(const char *, ...);
-int execl(const char *, ...);
+int execle(const char *, const char *, ...);
+int execl(const char *, const char *, ...);
 int execvp(const char *, char *const []);
 int execvp(const char *, char *const []);
-int execlp(const char *, ...);
+int execlp(const char *, const char *, ...);
 int fexecve(int, char *const [], char *const []);
 void _exit(int);
 
 int fexecve(int, char *const [], char *const []);
 void _exit(int);
 
index 4c6eaa9..327d78b 100644 (file)
@@ -1,18 +1,19 @@
 #include <unistd.h>
 #include <stdarg.h>
 
 #include <unistd.h>
 #include <stdarg.h>
 
-int execl(const char *path, ...)
+int execl(const char *path, const char *argv0, ...)
 {
        int argc;
        va_list ap;
 {
        int argc;
        va_list ap;
-       va_start(ap, path);
-       for (argc=0; va_arg(ap, const char *); argc++);
+       va_start(ap, argv0);
+       for (argc=1; va_arg(ap, const char *); argc++);
        va_end(ap);
        {
                int i;
                char *argv[argc+1];
        va_end(ap);
        {
                int i;
                char *argv[argc+1];
-               va_start(ap, path);
-               for (i=0; i<argc; i++)
+               va_start(ap, argv0);
+               argv[0] = (char *)argv0;
+               for (i=1; i<argc; i++)
                        argv[i] = va_arg(ap, char *);
                argv[i] = NULL;
                return execv(path, argv);
                        argv[i] = va_arg(ap, char *);
                argv[i] = NULL;
                return execv(path, argv);
index 37f629d..6490836 100644 (file)
@@ -1,19 +1,20 @@
 #include <unistd.h>
 #include <stdarg.h>
 
 #include <unistd.h>
 #include <stdarg.h>
 
-int execle(const char *path, ...)
+int execle(const char *path, const char *argv0, ...)
 {
        int argc;
        va_list ap;
 {
        int argc;
        va_list ap;
-       va_start(ap, path);
-       for (argc=0; va_arg(ap, const char *); argc++);
+       va_start(ap, argv0);
+       for (argc=1; va_arg(ap, const char *); argc++);
        va_end(ap);
        {
                int i;
                char *argv[argc+1];
                char **envp;
        va_end(ap);
        {
                int i;
                char *argv[argc+1];
                char **envp;
-               va_start(ap, path);
-               for (i=0; i<argc; i++)
+               va_start(ap, argv0);
+               argv[0] = (char *)argv0;
+               for (i=1; i<argc; i++)
                        argv[i] = va_arg(ap, char *);
                argv[i] = NULL;
                envp = va_arg(ap, char **);
                        argv[i] = va_arg(ap, char *);
                argv[i] = NULL;
                envp = va_arg(ap, char **);
index 33fb0f7..c7b3f51 100644 (file)
@@ -1,18 +1,19 @@
 #include <unistd.h>
 #include <stdarg.h>
 
 #include <unistd.h>
 #include <stdarg.h>
 
-int execlp(const char *file, ...)
+int execlp(const char *file, const char *argv0, ...)
 {
        int argc;
        va_list ap;
 {
        int argc;
        va_list ap;
-       va_start(ap, file);
-       for (argc=0; va_arg(ap, const char *); argc++);
+       va_start(ap, argv0);
+       for (argc=1; va_arg(ap, const char *); argc++);
        va_end(ap);
        {
                int i;
                char *argv[argc+1];
        va_end(ap);
        {
                int i;
                char *argv[argc+1];
-               va_start(ap, file);
-               for (i=0; i<argc; i++)
+               va_start(ap, argv0);
+               argv[0] = (char *)argv0;
+               for (i=1; i<argc; i++)
                        argv[i] = va_arg(ap, char *);
                argv[i] = NULL;
                return execvp(file, argv);
                        argv[i] = va_arg(ap, char *);
                argv[i] = NULL;
                return execvp(file, argv);