4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
22 * Copyright 1994 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
31 extern char **environ
;
33 static short setenv_made_new_vector
= 0;
35 char *setenv(char *name
, char *value
)
39 if ((p
= getenv(name
)) == NULL
) { /* Allocate new vector */
40 for (q
= environ
; *q
!= NULL
; q
++, length
++);
41 q
= (char **)malloc((unsigned)(sizeof(char *)*(length
+2)));
42 memcpy(((char *)q
)+sizeof(char *), (char *)environ
, sizeof(char *)*(length
+1));
43 if (setenv_made_new_vector
++)
44 free((char *)environ
);
47 else { /* Find old slot */
49 for (q
= environ
; *q
!= NULL
; q
++)
50 if (!strncmp(*q
, name
, length
))
53 if (!p
|| (length
+vl
+1 > strlen(p
)))
54 *q
= p
= (char *) malloc((unsigned)(length
+vl
+2));
57 (void)strcpy(p
, name
); p
+= length
;
59 (void)strcpy(p
, value
);