Update PATH master
authorRobert Pengelly <robertapengelly@hotmail.com>
Thu, 18 Sep 2025 10:51:16 +0000 (11:51 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Thu, 18 Sep 2025 10:51:16 +0000 (11:51 +0100)
variable.c

index 9460e984fdd339b7ff002cf022e1167760b934b9..a1fb77f6bdd6dd92e540bf6fdd5fbef72af381af 100644 (file)
@@ -1,12 +1,20 @@
 /******************************************************************************
  * @file            variable.c
  *****************************************************************************/
+#if     defined (__GNUC__)
+# ifndef    _POSIX_C_SOURCE
+#  define       _POSIX_C_SOURCE         200112L                                 /* for setenv() */
+# endif
+#endif
+
 #include    <ctype.h>
 #include    <stdlib.h>
 #include    <string.h>
 
 #if     defined (unix) || defined (__unix) || defined (__unix__) || defined (__APPLE__)
-# define        __USE_POSIX
+# ifndef    __USE_POSIX
+#  define       __USE_POSIX
+# endif
 #elif   defined (_WIN32)
 # define        strcasecmp              _stricmp
 #endif
@@ -794,7 +802,7 @@ char *variable_expand_line (const char *filename, unsigned long line_no, char *l
                 
                 } else {
                 
-                    if (state->env_override) {
+                    if (state->env_override || strcmp (content, "PATH") == 0) {
                     
                         if ((alloc_replacement = getenv (content))) {
                         
@@ -1081,6 +1089,32 @@ void parse_var_line (const char *filename, unsigned long line_no, char *line, en
     
     }
     
+    if (strcmp (var_name, "PATH") == 0) {
+    
+#if     defined (_WIN32)
+
+        char *temp = xmalloc (strlen (new_value) + 6);
+        int i;
+        
+        sprintf (temp, "PATH=%s", new_value);
+        
+        for (i = 5; temp[i] != '\0'; i++) {
+        
+            if (temp[i] == ':' && temp[i + 1] != '\\') {
+                temp[i] = ';';
+            }
+        
+        }
+        
+        _putenv (temp);
+        free (temp);
+
+#else
+        setenv ("PATH", new_value, 1);
+#endif    
+    
+    }
+    
     if ((var = variable_change (var_name, new_value, origin))) {
         var->flavor = flavor;
     }