17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*
237c478bd9Sstevel@tonic-gate  * Copyright (c) 1996, by Sun Microsystems, Inc.
247c478bd9Sstevel@tonic-gate  * All rights reserved.
257c478bd9Sstevel@tonic-gate  */
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate /*
287c478bd9Sstevel@tonic-gate  * MKS interface extension.
297c478bd9Sstevel@tonic-gate  * A version of getenv() that doesn't overwrite it's return value
307c478bd9Sstevel@tonic-gate  * on each call.
317c478bd9Sstevel@tonic-gate  *
327c478bd9Sstevel@tonic-gate  * Copyright 1995 by Mortice Kern Systems Inc.  All rights reserved.
337c478bd9Sstevel@tonic-gate  *
347c478bd9Sstevel@tonic-gate  */
357c478bd9Sstevel@tonic-gate 
367c478bd9Sstevel@tonic-gate #ifdef M_RCSID
377c478bd9Sstevel@tonic-gate #ifndef lint
387c478bd9Sstevel@tonic-gate static char const rcsID[] = "$Header: /rd/src/libc/mks/rcs/m_getenv.c 1.2 1995/07/11 16:53:01 ross Exp $";
397c478bd9Sstevel@tonic-gate #endif /*lint*/
407c478bd9Sstevel@tonic-gate #endif /*M_RCSID*/
417c478bd9Sstevel@tonic-gate 
427c478bd9Sstevel@tonic-gate #include <mks.h>
437c478bd9Sstevel@tonic-gate #include <stdlib.h>
447c478bd9Sstevel@tonic-gate #include <string.h>
457c478bd9Sstevel@tonic-gate 
467c478bd9Sstevel@tonic-gate #ifdef M_NON_STATIC_GETENV
477c478bd9Sstevel@tonic-gate 
487c478bd9Sstevel@tonic-gate #undef __m_getenv
497c478bd9Sstevel@tonic-gate 
507c478bd9Sstevel@tonic-gate /*f
517c478bd9Sstevel@tonic-gate  *  Assume getenv() works the way we expect it to on PC systems.
527c478bd9Sstevel@tonic-gate  */
537c478bd9Sstevel@tonic-gate char *
__m_getenv(char const * name)547c478bd9Sstevel@tonic-gate __m_getenv(char const *name) {
557c478bd9Sstevel@tonic-gate 	return getenv(name);
567c478bd9Sstevel@tonic-gate }
577c478bd9Sstevel@tonic-gate 
587c478bd9Sstevel@tonic-gate #else /* M_NON_STATIC_GETENV */
597c478bd9Sstevel@tonic-gate 
607c478bd9Sstevel@tonic-gate extern char **environ;
617c478bd9Sstevel@tonic-gate 
627c478bd9Sstevel@tonic-gate /*f
637c478bd9Sstevel@tonic-gate  *  A version of getenv safe to use in library functions.  According to
647c478bd9Sstevel@tonic-gate  *  ANSI C and XPG 4 no library function shall behave as if it called
657c478bd9Sstevel@tonic-gate  *  getenv.  This is a problem on systems that have getenv functions
667c478bd9Sstevel@tonic-gate  *  that overwrite their return value on each call.
677c478bd9Sstevel@tonic-gate  */
687c478bd9Sstevel@tonic-gate 
697c478bd9Sstevel@tonic-gate char *
__m_getenv(char const * name)707c478bd9Sstevel@tonic-gate __m_getenv(char const *name) {
717c478bd9Sstevel@tonic-gate 	if (m_setenv() != NULL) {
727c478bd9Sstevel@tonic-gate 		int len = strlen(name);
737c478bd9Sstevel@tonic-gate 		char **envp = environ;
747c478bd9Sstevel@tonic-gate 		char *s = *envp++;
757c478bd9Sstevel@tonic-gate 
767c478bd9Sstevel@tonic-gate 		while(s != NULL) {
777c478bd9Sstevel@tonic-gate 			if (strncmp(name, s, len) == 0 && s[len] == '=') {
787c478bd9Sstevel@tonic-gate 				return s + len + 1;
797c478bd9Sstevel@tonic-gate 			}
807c478bd9Sstevel@tonic-gate 			s = *envp++;
817c478bd9Sstevel@tonic-gate 		}
827c478bd9Sstevel@tonic-gate 	}
837c478bd9Sstevel@tonic-gate 	return NULL;
847c478bd9Sstevel@tonic-gate }
85*1da57d55SToomas Soome 
867c478bd9Sstevel@tonic-gate #endif /* M_NON_STATIC_GETENV */
87