Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

RE: PATCH: environment handling rewrite



> 
> I would have preferred that putenv/getenv not have been defined as
> functions using those names, but rather that there was a new function
> named zputenv and that the body of the new getenv had been left in
> zgetenv; that is, put #ifdefs inside the bodies of zputenv/zgetenv.
> It's probably not a real issue because the #ifdef'd putenv/getenv are
> declared static, but in general it's best to avoid redeclaring symbols
> that some other library might also decide to redeclare.
> 
> Also, minor nit-pick, but I dislike the coding style of putting a space
> between a function's name and the opening paren of the parameter list.
> I won't repeat "hate" three times, but it's not consistent with the rest
> of the zsh style.
> 

O.K.

-andrej

Index: Src/params.c
===================================================================
RCS file: /cvsroot/zsh/zsh/Src/params.c,v
retrieving revision 1.24
diff -u -r1.24 params.c
--- Src/params.c        2000/07/28 09:10:37     1.24
+++ Src/params.c        2000/08/03 12:49:36
@@ -509,7 +509,7 @@
      * memory, so we can do mallocs and frees on it.               */
     envsize = sizeof(char *)*(1 + arrlen(environ));
     new_environ = (char **) zalloc(envsize);
-    memcpy (new_environ, environ, envsize);
+    memcpy(new_environ, environ, envsize);
     environ = new_environ;
 #endif
 
@@ -2849,18 +2849,20 @@
        pm->env = addenv(s, u, pm->flags);
 }
 
-#ifndef HAVE_PUTENV
 
 static int
-putenv(char *str)
+zputenv(char *str)
 {
+#ifdef HAVE_PUTENV
+    return putenv(str);
+#else
     char **ep;
     int num_env;
 
 
     /* First check if there is already an environment *
      * variable matching string `name'.               */
-    if (findenv (str, &num_env)) {
+    if (findenv(str, &num_env)) {
        environ[num_env] = str;
     } else {
     /* Else we have to make room and add it */
@@ -2873,35 +2875,19 @@
        *(ep + 1) = NULL;
     }
     return 0;
-}
 #endif
-
-#ifndef HAVE_GETENV
-
-static char *
-getenv(char *name)
-{
-    char **ep, *s, *t;
- 
-    for (ep = environ; *ep; ep++) {
-       for (s = *ep, t = name; *s && *s == *t; s++, t++);
-       if (*s == '=' && !*t)
-           return s + 1;
-    }
-    return NULL;
 }
-#endif
 
 /**/
 static int
-findenv (char *name, int *pos)
+findenv(char *name, int *pos)
 {
     char **ep, *eq;
     int  nlen;
 
 
-    eq = strchr (name, '=');
-    nlen = eq ? eq - name : strlen (name);
+    eq = strchr(name, '=');
+    nlen = eq ? eq - name : strlen(name);
     for (ep = environ; *ep; ep++) 
        if (!strncmp (*ep, name, nlen) && *((*ep)+nlen) == '=') {
            if (pos)
@@ -2919,7 +2905,18 @@
 mod_export char *
 zgetenv(char *name)
 {
+#ifdef HAVE_GETENV
     return getenv(name);
+#else
+    char **ep, *s, *t;
+ 
+    for (ep = environ; *ep; ep++) {
+       for (s = *ep, t = name; *s && *s == *t; s++, t++);
+       if (*s == '=' && !*t)
+           return s + 1;
+    }
+    return NULL;
+#endif
 }
 
 /**/
@@ -2945,14 +2942,14 @@
     /* First check if there is already an environment *
      * variable matching string `name'. If not, and   *
      * we are not requested to add new, return        */
-    if (findenv (name, &pos))
+    if (findenv(name, &pos))
        oldenv = environ[pos];
     else if (!add)
        return NULL;
 
-    newenv = mkenvstr (name, value, flags);
-    if (putenv (newenv)) {
-       zsfree (newenv);
+    newenv = mkenvstr(name, value, flags);
+    if (zputenv(newenv)) {
+       zsfree(newenv);
        return NULL;
     }
     /*
@@ -2961,12 +2958,12 @@
      * silently reuse exisiting environment string. This tries to
      * check for both cases
      */
-    if (findenv (name, &pos)) {
+    if (findenv(name, &pos)) {
        env = environ[pos];
        if (env != oldenv)
-           zsfree (oldenv);
+           zsfree(oldenv);
        if (env != newenv)
-           zsfree (newenv);
+           zsfree(newenv);
        return env;
     }
 
@@ -2980,7 +2977,7 @@
 replenv(char *name, char *value, int flags)
 {
 
-    return addenv_internal (name, value, flags, 0);
+    return addenv_internal(name, value, flags, 0);
 }
 
 /* Given strings *name = "foo", *value = "bar", *
@@ -3013,7 +3010,7 @@
 char *
 addenv(char *name, char *value, int flags)
 {
-    return addenv_internal (name, value, flags, 1);
+    return addenv_internal(name, value, flags, 1);
 }
 
 /* Delete a pointer from the list of pointers to environment *
 



Messages sorted by: Reverse Date, Date, Thread, Author