X-Git-Url: https://ruderich.org/simon/gitweb/?a=blobdiff_plain;f=tests%2Fexample_exec.c;h=2d22ce029fbcd56a267ca1a9d976d23dbfe5ae7e;hb=0d7f3068981f2b08e583cec21d9069e97c73addd;hp=3a185673e7f06931e583847f89d1d95041054005;hpb=7ea72c40db03659a9d468f000d59ff133aadf47e;p=coloredstderr%2Fcoloredstderr.git diff --git a/tests/example_exec.c b/tests/example_exec.c index 3a18567..2d22ce0 100644 --- a/tests/example_exec.c +++ b/tests/example_exec.c @@ -17,11 +17,18 @@ * along with this program. If not, see . */ +#include + +/* For execvpe(). */ +#define _GNU_SOURCE + #include #include #include #include +#include "../src/compiler.h" + #define MAGIC "@RUN_" #define MAGIC_LENGTH (strlen(MAGIC)) @@ -75,7 +82,7 @@ static void dump(char *argv[]) { } -int main(int argc, char **argv) { +int main(int argc unused, char **argv) { char argv0[strlen(argv[0]) + MAGIC_LENGTH + 3 + 1]; char *old_ldpreload = getenv("LD_PRELOAD"); @@ -162,9 +169,38 @@ int main(int argc, char **argv) { execvp(argv[0], args); return EXIT_FAILURE; - } else { + + /* Test handling of COLORED_STDERR_FDS. */ + + } else if (!skip--) { + /* And the rest. */ close(3); close(8); + + dup2(2, 5); + + char *args[] = { argv0, NULL }; + char *envp[] = { ldpreload, "COLORED_STDERR_FDS=5,", NULL }; + + execve(argv[0], args, envp); + return EXIT_FAILURE; + } else if (!skip--) { + char *args[] = { argv0, NULL }; + char *envp[] = { ldpreload, NULL }; + + dup2(5, 6); + close(5); + + execve(argv[0], args, envp); + return EXIT_FAILURE; + } else if (!skip--) { + close(6); + + char *args[] = { argv0, NULL }; + setenv("COLORED_STDERR_FDS", "2,", 1); + + execv(argv[0], args); + return EXIT_FAILURE; } @@ -265,6 +301,35 @@ int main(int argc, char **argv) { execvp(argv[0], args); return EXIT_FAILURE; + +#ifdef HAVE_EXECVPE + /* execvpe(3), but not testing the p(ath) part */ + } else if (!skip--) { + char *args[] = { argv0, NULL }; + char *envp[] = { "TEST=54", ldpreload, NULL }; + + execvpe(argv[0], args, envp); + return EXIT_FAILURE; + } else if (!skip--) { + char *args[] = { argv0, "foo", "bar", NULL }; + char *envp[] = { "TEST=55", ldpreload, NULL }; + + execvpe(argv[0], args, envp); + return EXIT_FAILURE; +#else + /* Fake output to let the test pass. */ + } else if (!skip--) { + puts("argv[0] = |./example_exec|"); + puts("environ[0] = |TEST=54|"); + puts("environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,|"); + puts(""); + puts("argv[0] = |./example_exec|"); + puts("argv[1] = |foo|"); + puts("argv[2] = |bar|"); + puts("environ[0] = |TEST=55|"); + puts("environ[2] = |COLORED_STDERR_PRIVATE_FDS=2,|"); + puts(""); +#endif } printf("Done.\n");