]> Trent Huber's Code - thus.git/commitdiff
Don't override env vars in subshells
authorTrent Huber <trentmhuber@gmail.com>
Sat, 13 Sep 2025 03:57:39 +0000 (23:57 -0400)
committerTrent Huber <trentmhuber@gmail.com>
Sat, 13 Sep 2025 03:57:39 +0000 (23:57 -0400)
src/utils.c

index c4c8cff6108b3d9d6072376029d026b85d4131cf..1cdf06850146de81b0e06c7518a7d708f242a42d 100644 (file)
@@ -52,31 +52,35 @@ void init(void) {
    size_t l;
    long shlvl;
 
-   if (!(home = getenv("HOME"))) fatal("Unable to find home directory");
-   strcpy(buffer, home);
-   l = strlen(buffer);
-   buffer[l + 1] = '\0';
-   buffer[l] = '/';
-   if (setenv("HOME", buffer, 1) == -1 || !(home = getenv("HOME")))
-       fatal("Unable to append trailing slash to $HOME$");
-
-   if (!getcwd(buffer, PATH_MAX)) fatal("Unable to find current directory");
-   l = strlen(buffer);
-   buffer[l + 1] = '\0';
-   buffer[l] = '/';
-   if (setenv("PWD", buffer, 1) == -1)
-       fatal("Unable to append trailing slash to $PWD$");
-
-   if (setenv("PATH", "/usr/local/bin/:/usr/local/sbin/"
-                      ":/usr/bin/:/usr/sbin/:/bin/:/sbin/", 1) == -1)
-       fatal("Unable to initialize $PATH$");
-
    if (!(shlvlstr = getenv("SHLVL"))) shlvlstr = "0";
    if ((shlvl = strtol(shlvlstr, NULL, 10)) < 0) shlvl = 0;
-   sprintf(buffer, "%ld", shlvl + 1);
+   sprintf(buffer, "%ld", ++shlvl);
    if (setenv("SHLVL", buffer, 1) == -1)
        note("Unable to update $SHLVL$ environment variable");
 
+   if (!(home = getenv("HOME"))) fatal("Unable to find home directory");
+   if (shlvl == 1) {
+       l = strlen(home);
+       if (home[l - 1] != '/') {
+           strcpy(buffer, home);
+           buffer[l] = '/';
+           buffer[l + 1] = '\0';
+           if (setenv("HOME", buffer, 1) == -1 || !(home = getenv("HOME")))
+               fatal("Unable to append trailing slash to $HOME$");
+       }
+
+       if (!getcwd(buffer, PATH_MAX)) fatal("Unable to find current directory");
+       l = strlen(buffer);
+       buffer[l] = '/';
+       buffer[l + 1] = '\0';
+       if (setenv("PWD", buffer, 1) == -1)
+           fatal("Unable to append trailing slash to $PWD$");
+
+       if (setenv("PATH", "/usr/local/bin/:/usr/local/sbin/"
+                          ":/usr/bin/:/usr/sbin/:/bin/:/sbin/", 1) == -1)
+           fatal("Unable to initialize $PATH$");
+   }
+
    initfg();
    initbg();
    inithistory();