alternaitev environment pasing using putenv (solaris)
authorClaus Gittinger <cg@exept.de>
Wed, 10 Jun 1998 20:21:15 +0200
changeset 3547 68930ab54ee5
parent 3546 00984e13534a
child 3548 62457338ae4c
alternaitev environment pasing using putenv (solaris)
UnixOS.st
UnixOperatingSystem.st
--- a/UnixOS.st	Wed Jun 10 19:59:37 1998 +0200
+++ b/UnixOS.st	Wed Jun 10 20:21:15 1998 +0200
@@ -3081,7 +3081,6 @@
                     }
 
                     if ((envPairs != nil) && __isArray(envPairs)) {
-#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
                         for (i=0; (i+1)<__arraySize(envPairs); i+=2) {
                             OBJ t;
                             char *var, *val;
@@ -3092,14 +3091,30 @@
                                 t = __ArrayInstPtr(envPairs)->a_element[i+1];
                                 if (__isString(t) || __isSymbol(t)) {
                                     val = __stringVal(t);
+                                } else {
+                                    val = NULL;
+                                }
+#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
+                                if (val != NULL) {
                                     setenv(var, val, 1);
                                 } else {
                                     unsetenv(var);
                                 }
-                                
+#else /* use putenv */
+                            if (val != NULL) {
+                                e = (char *)malloc(strlen(var) + 1 + strlen(val) + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                                strcat(e, val);
+                            } else {
+                                e = (char *)malloc(strlen(var) + 1 + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                            }   
+                            putenv(e);
+#endif /* HAS_SETENV && HAS_UNSETENV */
                             }
                         }
-#endif /* HAS_SETENV && HAS_UNSETENV */
                     }
 
                     if (newPgrp == true) {
@@ -3130,10 +3145,9 @@
                  * no subprocess (i.e. transfer to another program)
                  */
                 if ((envPairs != nil) && __isArray(envPairs)) {
-#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
                     for (i=0; (i+1)<__arraySize(envPairs); i+=2) {
                         OBJ t;
-                        char *var, *val;
+                        char *var, *val, *e;
 
                         t = __ArrayInstPtr(envPairs)->a_element[i];
                         if (__isString(t) || __isSymbol(t)) {
@@ -3141,14 +3155,30 @@
                             t = __ArrayInstPtr(envPairs)->a_element[i+1];
                             if (__isString(t) || __isSymbol(t)) {
                                 val = __stringVal(t);
+                            } else {
+                                val = NULL;
+                            }
+#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
+                            if (val != NULL) {
                                 setenv(var, val, 1);
                             } else {
                                 unsetenv(var);
                             }
-
+#else /* use putenv */
+                            if (val != NULL) {
+                                e = (char *)malloc(strlen(var) + 1 + strlen(val) + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                                strcat(e, val);
+                            } else {
+                                e = (char *)malloc(strlen(var) + 1 + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                            }   
+                            putenv(e);
+#endif /* HAS_SETENV && HAS_UNSETENV */
                         }
                     }
-#endif /* HAS_SETENV && HAS_UNSETENV */
                 }
 
                 execv(__stringVal(aCommandPath), argv);
@@ -8387,6 +8417,6 @@
 !UnixOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/Attic/UnixOS.st,v 1.14 1998-06-10 17:07:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/Attic/UnixOS.st,v 1.15 1998-06-10 18:21:15 cg Exp $'
 ! !
 UnixOperatingSystem initialize!
--- a/UnixOperatingSystem.st	Wed Jun 10 19:59:37 1998 +0200
+++ b/UnixOperatingSystem.st	Wed Jun 10 20:21:15 1998 +0200
@@ -3081,7 +3081,6 @@
                     }
 
                     if ((envPairs != nil) && __isArray(envPairs)) {
-#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
                         for (i=0; (i+1)<__arraySize(envPairs); i+=2) {
                             OBJ t;
                             char *var, *val;
@@ -3092,14 +3091,30 @@
                                 t = __ArrayInstPtr(envPairs)->a_element[i+1];
                                 if (__isString(t) || __isSymbol(t)) {
                                     val = __stringVal(t);
+                                } else {
+                                    val = NULL;
+                                }
+#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
+                                if (val != NULL) {
                                     setenv(var, val, 1);
                                 } else {
                                     unsetenv(var);
                                 }
-                                
+#else /* use putenv */
+                            if (val != NULL) {
+                                e = (char *)malloc(strlen(var) + 1 + strlen(val) + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                                strcat(e, val);
+                            } else {
+                                e = (char *)malloc(strlen(var) + 1 + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                            }   
+                            putenv(e);
+#endif /* HAS_SETENV && HAS_UNSETENV */
                             }
                         }
-#endif /* HAS_SETENV && HAS_UNSETENV */
                     }
 
                     if (newPgrp == true) {
@@ -3130,10 +3145,9 @@
                  * no subprocess (i.e. transfer to another program)
                  */
                 if ((envPairs != nil) && __isArray(envPairs)) {
-#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
                     for (i=0; (i+1)<__arraySize(envPairs); i+=2) {
                         OBJ t;
-                        char *var, *val;
+                        char *var, *val, *e;
 
                         t = __ArrayInstPtr(envPairs)->a_element[i];
                         if (__isString(t) || __isSymbol(t)) {
@@ -3141,14 +3155,30 @@
                             t = __ArrayInstPtr(envPairs)->a_element[i+1];
                             if (__isString(t) || __isSymbol(t)) {
                                 val = __stringVal(t);
+                            } else {
+                                val = NULL;
+                            }
+#if defined(HAS_SETENV) && defined(HAS_UNSETENV)
+                            if (val != NULL) {
                                 setenv(var, val, 1);
                             } else {
                                 unsetenv(var);
                             }
-
+#else /* use putenv */
+                            if (val != NULL) {
+                                e = (char *)malloc(strlen(var) + 1 + strlen(val) + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                                strcat(e, val);
+                            } else {
+                                e = (char *)malloc(strlen(var) + 1 + 1);
+                                strcpy(e, var);
+                                strcat(e, "=";
+                            }   
+                            putenv(e);
+#endif /* HAS_SETENV && HAS_UNSETENV */
                         }
                     }
-#endif /* HAS_SETENV && HAS_UNSETENV */
                 }
 
                 execv(__stringVal(aCommandPath), argv);
@@ -8387,6 +8417,6 @@
 !UnixOperatingSystem class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.14 1998-06-10 17:07:37 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic/UnixOperatingSystem.st,v 1.15 1998-06-10 18:21:15 cg Exp $'
 ! !
 UnixOperatingSystem initialize!