scc

simple c99 compiler
git clone git://git.simple-cc.org/scc
Log | Files | Refs | Submodules | README | LICENSE

commit ec59ea3508bd670fa1743b75d390451cedfb7c1f
parent 070569b2fee195711c81d5013e12d637d5593772
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date:   Tue,  8 Nov 2022 21:30:45 +0100

libc/posix: Fix _environ and _execve definition

_environ cannot be a const double pointer but a pointer to a const
pointer. It was working before because the prototype of _execve was
also wrong and a cast was added in getenv() to adapt the type.

Diffstat:
Minclude/bits/darwin/sys.h | 4+++-
Minclude/bits/dragonfly/sys.h | 4+++-
Minclude/bits/linux/sys.h | 4+++-
Minclude/bits/netbsd/sys.h | 4+++-
Minclude/bits/openbsd/sys.h | 4+++-
Msrc/libc/arch/posix/getenv.c | 8++++----
Msrc/libc/arch/posix/system.c | 2--
7 files changed, 19 insertions(+), 11 deletions(-)

diff --git a/include/bits/darwin/sys.h b/include/bits/darwin/sys.h @@ -23,10 +23,12 @@ typedef int pid_t; struct sigaction; struct rusage; -extern int _execve(const char *, const char *[], const char *[]); +extern int _execve(const char *, const char *[], char *const []); extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); extern pid_t _wait4(pid_t, int *, int, struct rusage *); extern pid_t _waitpid(pid_t, int *, int); + +extern char **_environ; diff --git a/include/bits/dragonfly/sys.h b/include/bits/dragonfly/sys.h @@ -23,10 +23,12 @@ typedef int pid_t; struct sigaction; struct rusage; -extern int _execve(const char *, const char *[], const char *[]); +extern int _execve(const char *, const char *[], char *const []); extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); extern pid_t _wait4(pid_t, int *, int, struct rusage *); extern pid_t _waitpid(pid_t, int *, int); + +extern char **_environ; diff --git a/include/bits/linux/sys.h b/include/bits/linux/sys.h @@ -23,10 +23,12 @@ typedef int pid_t; struct sigaction; struct rusage; -extern int _execve(const char *, const char *[], const char *[]); +extern int _execve(const char *, const char *[], char *const []); extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); extern pid_t _wait4(pid_t, int *, int, struct rusage *); extern pid_t _waitpid(pid_t, int *, int); + +extern char **_environ; diff --git a/include/bits/netbsd/sys.h b/include/bits/netbsd/sys.h @@ -23,10 +23,12 @@ typedef int pid_t; struct sigaction; struct rusage; -extern int _execve(const char *, const char *[], const char *[]); +extern int _execve(const char *, const char *[], char *const []); extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); extern pid_t _wait4(pid_t, int *, int, struct rusage *); extern pid_t _waitpid(pid_t, int *, int); + +extern char **_environ; diff --git a/include/bits/openbsd/sys.h b/include/bits/openbsd/sys.h @@ -23,10 +23,12 @@ typedef int pid_t; struct sigaction; struct rusage; -extern int _execve(const char *, const char *[], const char *[]); +extern int _execve(const char *, const char *[], char *const []); extern int _fork(void); extern pid_t _getpid(void); extern int _kill(pid_t, int); extern int _sigaction(int, struct sigaction *, struct sigaction *); extern pid_t _wait4(pid_t, int *, int, struct rusage *); extern pid_t _waitpid(pid_t, int *, int); + +extern char **_environ; diff --git a/src/libc/arch/posix/getenv.c b/src/libc/arch/posix/getenv.c @@ -1,19 +1,19 @@ +#include <sys.h> + #include <stdlib.h> #include <string.h> #undef getenv -extern const char **_environ; - char * getenv(const char *name) { - const char **p, *s; + char **p, *s; size_t len = strlen(name); for (p = _environ; s = *p; ++p) { if (!strncmp(name, s, len) && s[len] == '=') - return (char *) s + len + 1; + return s + len + 1; } return NULL; } diff --git a/src/libc/arch/posix/system.c b/src/libc/arch/posix/system.c @@ -9,8 +9,6 @@ #undef system -extern const char **_environ; - int system(const char *cmd) {