* added compilers lcc and bcc (linux86)
[mascara-docs.git] / compilers / linux86-0.16.17 / libc / misc / putenv.c
blob09a68d6beebf467ea0594f52a79959aecc286387
1 /* Copyright (C) 1995,1996 Robert de Bath <rdebath@cix.compulink.co.uk>
2 * This file is part of the Linux-8086 C library and is distributed
3 * under the GNU Library General Public License.
4 */
5 #include <string.h>
6 #include <stdlib.h>
7 #include <malloc.h>
9 extern char ** environ;
10 #define ADD_NUM 4
12 int
13 putenv(var)
14 char * var;
16 static char ** mall_env = 0;
17 static int extras = 0;
18 char **p, **d;
19 char * r;
20 int len;
22 r = strchr(var, '=');
23 if( r == 0 ) len = strlen(var);
24 else len = r-var;
26 for(p=environ; *p; p++)
28 if( memcmp(var, *p, len) == 0 && (*p)[len] == '=' )
30 while( p[0] = p[1] ) p++;
31 extras++;
32 break;
35 if( r == 0 ) return 0;
36 if( extras <= 0 ) /* Need more space */
38 d = malloc((p-environ+1+ADD_NUM)*sizeof(char*));
39 if( d == 0 ) return -1;
41 memcpy((void*) d, (void*) environ, (p-environ+1)*sizeof(char*));
42 p = d + (p-environ);
43 extras=ADD_NUM;
45 if( mall_env ) free(mall_env);
46 environ = d;
47 mall_env = d;
49 *p++ = var;
50 *p = '\0';
51 extras--;
53 return 0;