@@ -17,15 +17,22 @@ static int nrRedirects = 0;
1717static char * from[MAX_REDIRECTS];
1818static char * to[MAX_REDIRECTS];
1919
20+static int isInitialized = 0;
21+
2022// FIXME: might run too late.
2123static void init() __attribute__((constructor));
2224
2325static void init()
2426{
27+ if (isInitialized) return;
28+
2529 char * spec = getenv("NIX_REDIRECTS");
2630 if (!spec) return;
2731
28− unsetenv("NIX_REDIRECTS");
32+ // Ensure we only run this code once.
33+ // We do not do `unsetenv("NIX_REDIRECTS")` to ensure that redirects
34+ // also get initialized for subprocesses.
35+ isInitialized = 1;
2936
3037 char * spec2 = malloc(strlen(spec) + 1);
3138 strcpy(spec2, spec);