# 2.11BSD#431 - /usr/src/lib/libc/gen/setenv.c

##### Functions

    setenv            X
    unsetenv          X

       1: /*
       2:  * Copyright (c) 1987 Regents of the University of California.
       3:  * All rights reserved.  The Berkeley software License Agreement
       4:  * specifies the terms and conditions for redistribution.
       5:  */
       6:
       7: #if defined(LIBC_SCCS) && !defined(lint)
       8: static char sccsid[] = "@(#)setenv.c	1.3 (Berkeley) 6/16/87";
       9: #endif LIBC_SCCS and not lint
      10:
      11: #include <sys/types.h>
      12: #include <stdio.h>
      13:
      14: /*
      15:  * setenv(name,value,rewrite)
      16:  *	Set the value of the environmental variable "name" to be
      17:  *	"value".  If rewrite is set, replace any current value.
      18:  */
      19: setenv(name,value,rewrite)
      20:     register char   *name,
      21:             *value;
      22:     int rewrite;
      23: {
      24:     extern char **environ;
      25:     static int  alloced;        /* if allocated space before */
      26:     register char   *C;
      27:     int l_value,
      28:         offset;
      29:     char    *malloc(), *realloc(), *_findenv();
      30:
      31:     if (*value == '=')          /* no `=' in value */
      32:         ++value;
      33:     l_value = strlen(value);
      34:     if ((C = _findenv(name,&offset))) { /* find if already exists */
      35:         if (!rewrite)
      36:             return(0);
      37:         if (strlen(C) >= l_value) { /* old larger; copy over */
      38:             while (*C++ = *value++);
      39:             return(0);
      40:         }
      41:     }
      42:     else {                  /* create new slot */
      43:         register int    cnt;
      44:         register char   **P;
      45:
      46:         for (P = environ,cnt = 0;*P;++P,++cnt);
      47:         if (alloced) {          /* just increase size */
      48:             environ = (char **)realloc((char *)environ,
      49:                 (u_int)(sizeof(char *) * (cnt + 2)));
      50:             if (!environ)
      51:                 return(-1);
      52:         }
      53:         else {              /* get new space */
      54:             alloced = 1;        /* copy old entries into it */
      55:             P = (char **)malloc((u_int)(sizeof(char *) *
      56:                 (cnt + 2)));
      57:             if (!P)
      58:                 return(-1);
      59:             bcopy(environ,P,cnt * sizeof(char *));
      60:             environ = P;
      61:         }
      62:         environ[cnt + 1] = NULL;
      63:         offset = cnt;
      64:     }
      65:     for (C = name;*C && *C != '=';++C); /* no `=' in name */
      66:     if (!(environ[offset] =         /* name + `=' + value */
      67:         malloc((u_int)((int)(C - name) + l_value + 2))))
      68:         return(-1);
      69:     for (C = environ[offset];(*C = *name++) && *C != '=';++C);
      70:     for (*C++ = '=';*C++ = *value++;);
      71:     return(0);
      72: }
      73:
      74: /*
      75:  * unsetenv(name) --
      76:  *	Delete environmental variable "name".
      77:  */
      78: void
      79: unsetenv(name)
      80:     char    *name;
      81: {
      82:     extern  char    **environ;
      83:     register char   **P;
      84:     int offset;
      85:
      86:     while (_findenv(name,&offset))      /* if set multiple times */
      87:         for (P = &environ[offset];;++P)
      88:             if (!(*P = *(P + 1)))
      89:                 break;
      90: }

#### Defined functions

setenv defined in line 19; used 10 times

- in /usr/include/stdlib.h line 90
- in /usr/src/bin/login/login.c line 398-404(5)
- in /usr/src/bin/tcsh/sh.func.c line 1147
- in /usr/src/bin/tcsh/tc.os.c line 176
- in /usr/src/usr.sbin/cron/cron.c line 66
- in /usr/src/usr.sbin/inetd/inetd.c line 302

unsetenv defined in line 78; used 5 times

- in /usr/include/stdlib.h line 108
- in /usr/src/bin/chpass/util.c line 68
- in /usr/src/ucb/tset/tset.c line 639
- in /usr/src/usr.sbin/sendmail.MX/src/main.c line 134
- in /usr/src/usr.sbin/sendmail/src/main.c line 133

#### Defined variables

sccsid defined in line 8; never used

Last modified: 1987-07-20 Generated: 2016-12-26 | Generated by src2html V0.67 page hit count: 606 |