]> ruderich.org/simon Gitweb - coloredstderr/coloredstderr.git/blobdiff - tests/example_exec.c
update copyright year
[coloredstderr/coloredstderr.git] / tests / example_exec.c
index 2d22ce029fbcd56a267ca1a9d976d23dbfe5ae7e..e13010b8ee17bb6601cbcd31e97c3abcd5ce02c7 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Test execve() and exec*() functions.
  *
- * Copyright (C) 2013  Simon Ruderich
+ * Copyright (C) 2013-2015  Simon Ruderich
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -27,6 +27,7 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "example.h"
 #include "../src/compiler.h"
 
 
@@ -58,6 +59,9 @@ static int find_magic_run_number(char *argv0, int *number) {
     return 1;
 }
 
+static int cmp(void const *a, void const *b) {
+    return strcmp(*(char * const *)a, *(char * const *)b);
+}
 static void dump(char *argv[]) {
     size_t i;
 
@@ -65,14 +69,23 @@ static void dump(char *argv[]) {
     while (*argv) {
         printf("argv[%zu] = |%s|\n", i++, *argv++);
     }
+
+    /* Order of environment variables is not defined, sort them for consistent
+     * test results. */
     i = 0;
     char **env = environ;
+    while (*env++) {
+        i++;
+    }
+    qsort(environ, i, sizeof(*env), cmp);
+
+    i = 0;
+    env = environ;
     while (*env) {
         /* Skip LD_PRELOAD which contains system dependent values. */
         if (strncmp(*env, "LD_PRELOAD=", 11)) {
-            printf("environ[%zu] = |%s|\n", i, *env);
+            printf("environ[%zu] = |%s|\n", i++, *env);
         }
-        i++;
         env++;
     }
     printf("\n");
@@ -123,7 +136,7 @@ int main(int argc unused, char **argv) {
         printf("\nCHECKING COLORING.\n\n");
         fflush(stdout);
 
-        dup2(2, 3);
+        xdup2(2, 3);
 
         char *args[] = { argv0, NULL };
         char *envp[] = { ldpreload, NULL };
@@ -131,24 +144,24 @@ int main(int argc unused, char **argv) {
         execve(argv[0], args, envp);
         return EXIT_FAILURE;
     } else if (!skip--) {
-        dup2(2, 4);
+        xdup2(2, 4);
 
         execl(argv[0], argv0, NULL);
         return EXIT_FAILURE;
     } else if (!skip--) {
-        dup2(2, 5);
+        xdup2(2, 5);
 
         execlp(argv[0], argv0, NULL);
         return EXIT_FAILURE;
     } else if (!skip--) {
-        dup2(2, 6);
+        xdup2(2, 6);
 
         char *envp[] = { ldpreload, NULL };
 
         execle(argv[0], argv0, NULL, envp);
         return EXIT_FAILURE;
     } else if (!skip--) {
-        dup2(2, 7);
+        xdup2(2, 7);
 
         /* Test closing a few descriptors. */
         close(5);
@@ -159,7 +172,7 @@ int main(int argc unused, char **argv) {
         execv(argv[0], args);
         return EXIT_FAILURE;
     } else if (!skip--) {
-        dup2(2, 8);
+        xdup2(2, 8);
 
         /* And a few more. */
         close(7);
@@ -177,7 +190,7 @@ int main(int argc unused, char **argv) {
         close(3);
         close(8);
 
-        dup2(2, 5);
+        xdup2(2, 5);
 
         char *args[] = { argv0, NULL };
         char *envp[] = { ldpreload, "COLORED_STDERR_FDS=5,", NULL };
@@ -188,7 +201,7 @@ int main(int argc unused, char **argv) {
         char *args[] = { argv0, NULL };
         char *envp[] = { ldpreload, NULL };
 
-        dup2(5, 6);
+        xdup2(5, 6);
         close(5);
 
         execve(argv[0], args, envp);
@@ -320,14 +333,14 @@ int main(int argc unused, char **argv) {
     /* 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("environ[0] = |COLORED_STDERR_PRIVATE_FDS=2,|");
+        puts("environ[1] = |TEST=54|");
         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("environ[0] = |COLORED_STDERR_PRIVATE_FDS=2,|");
+        puts("environ[1] = |TEST=55|");
         puts("");
 #endif
     }