]> andersk Git - openssh.git/commitdiff
- (dtucker) [openbsd-compat/setenv.c] Sync changes from OpenBSD setenv.c
authordtucker <dtucker>
Wed, 9 Nov 2005 23:38:45 +0000 (23:38 +0000)
committerdtucker <dtucker>
Wed, 9 Nov 2005 23:38:45 +0000 (23:38 +0000)
   revs 1.7 - 1.9.

ChangeLog
openbsd-compat/setenv.c

index d1a0589b7cf66cc21752818cc97d9a2cf36705af..468ae72a736907cdaacf978fd91774eb1146a5cd 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,9 +1,11 @@
 20051110
- - (dtucker) [openbsd-compat/getenv.c] Merge changes for __findenv from
+ - (dtucker) [openbsd-compat/setenv.c] Merge changes for __findenv from
    OpenBSD getenv.c revs 1.4 - 1.8 (ANSIfication of arguments, removal of
    "register").
- - (dtucker) [openbsd-compat/getenv.c] Make __findenv static, remove
+ - (dtucker) [openbsd-compat/setenv.c] Make __findenv static, remove
    unnecessary prototype.
+ - (dtucker) [openbsd-compat/setenv.c] Sync changes from OpenBSD setenv.c
+   revs 1.7 - 1.9.
 
 20051105
  - (djm) OpenBSD CVS Sync
index 7894c485a0d29ed721e877cba64435aeec8b45d8..93a6811520c37743bf04d342b509259bf766d482 100644 (file)
@@ -1,5 +1,6 @@
 /* OPENBSD ORIGINAL: lib/libc/stdlib/setenv.c */
 
+/*     $OpenBSD: setenv.c,v 1.9 2005/08/08 08:05:37 espie Exp $ */
 /*
  * Copyright (c) 1987 Regents of the University of California.
  * All rights reserved.
 #include "includes.h"
 #if !defined(HAVE_SETENV) || !defined(HAVE_UNSETENV)
 
-#if defined(LIBC_SCCS) && !defined(lint)
-static char *rcsid = "$OpenBSD: setenv.c,v 1.6 2003/06/02 20:18:38 millert Exp $";
-#endif /* LIBC_SCCS and not lint */
-
 #include <stdlib.h>
 #include <string.h>
 
-/* OpenSSH Portable: __findenv is from getenv.c rev 1.8, made static */
+extern char **environ;
 
+/* OpenSSH Portable: __findenv is from getenv.c rev 1.8, made static */
 /*
  * __findenv --
  *     Returns pointer to value associated with name, if any, else NULL.
@@ -80,14 +78,10 @@ __findenv(const char *name, int *offset)
  *     "value".  If rewrite is set, replace any current value.
  */
 int
-setenv(name, value, rewrite)
-       register const char *name;
-       register const char *value;
-       int rewrite;
+setenv(const char *name, const char *value, int rewrite)
 {
-       extern char **environ;
-       static int alloced;                     /* if allocated space before */
-       register char *C;
+       static char **lastenv;                  /* last value of environ */
+       char *C;
        int l_value, offset;
 
        if (*value == '=')                      /* no `=' in value */
@@ -102,30 +96,23 @@ setenv(name, value, rewrite)
                        return (0);
                }
        } else {                                        /* create new slot */
-               register int    cnt;
-               register char   **P;
+               size_t cnt;
+               char **P;
 
-               for (P = environ, cnt = 0; *P; ++P, ++cnt);
-               if (alloced) {                  /* just increase size */
-                       P = (char **)realloc((void *)environ,
-                           (size_t)(sizeof(char *) * (cnt + 2)));
-                       if (!P)
-                               return (-1);
-                       environ = P;
-               }
-               else {                          /* get new space */
-                       alloced = 1;            /* copy old entries into it */
-                       P = (char **)malloc((size_t)(sizeof(char *) *
-                           (cnt + 2)));
-                       if (!P)
-                               return (-1);
-                       memmove(P, environ, cnt * sizeof(char *));
-                       environ = P;
-               }
-               environ[cnt + 1] = NULL;
+               for (P = environ; *P != NULL; P++)
+                       ;
+               cnt = P - environ;
+               P = (char **)realloc(lastenv, sizeof(char *) * (cnt + 2));
+               if (!P)
+                       return (-1);
+               if (lastenv != environ)
+                       memcpy(P, environ, cnt * sizeof(char *));
+               lastenv = environ = P;
                offset = cnt;
+               environ[cnt + 1] = NULL;
        }
-       for (C = (char *)name; *C && *C != '='; ++C);   /* no `=' in name */
+       for (C = (char *)name; *C && *C != '='; ++C)
+               ;                               /* no `=' in name */
        if (!(environ[offset] =                 /* name + `=' + value */
            malloc((size_t)((int)(C - name) + l_value + 2))))
                return (-1);
@@ -143,15 +130,12 @@ setenv(name, value, rewrite)
  *     Delete environmental variable "name".
  */
 void
-unsetenv(name)
-       const char      *name;
+unsetenv(const char *name)
 {
-       extern char **environ;
-       register char **P;
+       char **P;
        int offset;
-       char *__findenv();
 
-       while (__findenv(name, &offset))                /* if set multiple times */
+       while (__findenv(name, &offset))        /* if set multiple times */
                for (P = &environ[offset];; ++P)
                        if (!(*P = *(P + 1)))
                                break;
This page took 0.072014 seconds and 5 git commands to generate.