1 /* Copyright (C) 1992, 1995 Free Software Foundation, Inc.
2 This file is part of the GNU C Library. */
9 extern char ** environ
;
12 setenv(name
, value
, replace
)
19 __const
size_t namelen
= strlen (name
);
20 __const
size_t vallen
= strlen (value
);
24 for (ep
= environ
; *ep
!= NULL
; ++ep
)
25 if (!memcmp (*ep
, name
, namelen
) && (*ep
)[namelen
] == '=')
32 static char **last_environ
= NULL
;
33 char **new_environ
= (char **) malloc((size
+ 2) * sizeof(char *));
34 if (new_environ
== NULL
)
39 (void) memcpy((void*) new_environ
, (void*) environ
, size
* sizeof(char *));
41 new_environ
[size
] = malloc (namelen
+ 1 + vallen
+ 1);
42 if (new_environ
[size
] == NULL
)
49 memcpy (new_environ
[size
], name
, namelen
);
50 new_environ
[size
][namelen
] = '=';
51 memcpy (&new_environ
[size
][namelen
+ 1], value
, vallen
+ 1);
53 new_environ
[size
+ 1] = NULL
;
55 if (last_environ
!= NULL
)
56 free ((void*) last_environ
);
57 last_environ
= new_environ
;
58 environ
= new_environ
;
62 size_t len
= strlen (*ep
);
63 if (len
< namelen
+ 1 + vallen
)
65 char *new = malloc (namelen
+ 1 + vallen
+ 1);
73 memcpy (*ep
, name
, namelen
);
75 memcpy (&(*ep
)[namelen
+ 1], value
, vallen
+ 1);
88 __const
size_t namelen
= strlen (name
);
90 for (dp
= ep
= environ
; *ep
!= NULL
; ++ep
)
91 if (memcmp (*ep
, name
, namelen
) || (*ep
)[namelen
] != '=')