X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=src%2Fcoloredstderr.c;h=0d76b5aee7dd0799c40e1ccf82b313e3f4002221;hb=e5a94fa847f4d880eb42f53bd93131ccf9fabe03;hp=b7e71e17871d6f7c7411c4c922d48cfcb2530680;hpb=37cb5686de05f8989dc1080ebc70b319fbc65cdd;p=coloredstderr%2Fcoloredstderr.git diff --git a/src/coloredstderr.c b/src/coloredstderr.c index b7e71e1..0d76b5a 100644 --- a/src/coloredstderr.c +++ b/src/coloredstderr.c @@ -25,6 +25,12 @@ /* Must be loaded before the following headers. */ #include "ldpreload.h" +/* Disable assert()s if not compiled with --enable-debug. */ +#ifndef DEBUG +# define NDEBUG +#endif + +#include #include #include #include @@ -78,6 +84,8 @@ static int force_write_to_non_tty; * additional call. */ static int isatty_noinline(int fd) noinline; static int isatty_noinline(int fd) { + assert(fd >= 0); + int saved_errno = errno; int result = isatty(fd); errno = saved_errno; @@ -91,6 +99,8 @@ static void dup_fd(int oldfd, int newfd) { debug("%3d -> %3d\t\t\t[%d]\n", oldfd, newfd, getpid()); #endif + assert(oldfd >= 0 && newfd >= 0); + if (unlikely(!initialized)) { init_from_environment(); } @@ -113,6 +123,8 @@ static void close_fd(int fd) { debug("%3d -> .\t\t\t[%d]\n", fd, getpid()); #endif + assert(fd >= 0); + if (unlikely(!initialized)) { init_from_environment(); } @@ -519,23 +531,24 @@ int execve(char const *filename, char * const argv[], char * const env[]) { int execl(char const *path, char const *arg, ...) { EXECL_COPY_VARARGS(args); - update_environment(); + /* execv() updates the environment. */ return execv(path, args); } - int execlp(char const *file, char const *arg, ...) { EXECL_COPY_VARARGS(args); - update_environment(); + /* execvp() updates the environment. */ return execvp(file, args); } - int execle(char const *path, char const *arg, ... /*, char * const envp[] */) { + char * const *envp; + EXECL_COPY_VARARGS_START(args); /* Get envp[] located after arguments. */ - char * const *envp = va_arg(ap, char * const *); + envp = va_arg(ap, char * const *); EXECL_COPY_VARARGS_END(args); + /* execve() updates the environment. */ return execve(path, args, envp); } @@ -561,6 +574,7 @@ int execvpe(char const *file, char * const argv[], char * const envp[]) { /* Fake the environment so we can reuse execvp(). */ environ = (char **)envp; + /* execvp() updates the environment. */ return execvp(file, argv); } #endif