]>
git.saurik.com Git - apple/libc.git/blob - stdlib/getenv.c
   2  * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. 
   4  * @APPLE_LICENSE_HEADER_START@ 
   6  * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved. 
   8  * This file contains Original Code and/or Modifications of Original Code 
   9  * as defined in and that are subject to the Apple Public Source License 
  10  * Version 2.0 (the 'License'). You may not use this file except in 
  11  * compliance with the License. Please obtain a copy of the License at 
  12  * http://www.opensource.apple.com/apsl/ and read it before using this 
  15  * The Original Code and all software distributed under the License are 
  16  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  17  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  18  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
  19  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  20  * Please see the License for the specific language governing rights and 
  21  * limitations under the License. 
  23  * @APPLE_LICENSE_HEADER_END@ 
  26  * Copyright (c) 1987, 1993 
  27  *      The Regents of the University of California.  All rights reserved. 
  29  * Redistribution and use in source and binary forms, with or without 
  30  * modification, are permitted provided that the following conditions 
  32  * 1. Redistributions of source code must retain the above copyright 
  33  *    notice, this list of conditions and the following disclaimer. 
  34  * 2. Redistributions in binary form must reproduce the above copyright 
  35  *    notice, this list of conditions and the following disclaimer in the 
  36  *    documentation and/or other materials provided with the distribution. 
  37  * 3. All advertising materials mentioning features or use of this software 
  38  *    must display the following acknowledgement: 
  39  *      This product includes software developed by the University of 
  40  *      California, Berkeley and its contributors. 
  41  * 4. Neither the name of the University nor the names of its contributors 
  42  *    may be used to endorse or promote products derived from this software 
  43  *    without specific prior written permission. 
  45  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 
  46  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
  47  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
  48  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 
  49  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
  50  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
  51  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
  52  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
  53  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
  54  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
  63 #include <crt_externs.h> 
  65 char *__findenv 
__P((const char *, int *)); 
  69  *      Returns ptr to value associated with name, if any, else NULL. 
  77         return (__findenv(name
, &offset
)); 
  82  *      Returns pointer to value associated with name, if any, else NULL. 
  83  *      Sets offset to be the offset of the name/value combination in the 
  84  *      environmental array, for use by setenv(3) and unsetenv(3). 
  85  *      Explicitly removes '=' in argument name. 
  87  *      This routine *should* be a static; don't use it. 
  90 __findenv(name
, offset
) 
  91         register const char *name
; 
  95         register const char *np
; 
  96         register char **p
, *c
; 
  98         char **environ 
= *_NSGetEnviron(); 
 100         if (name 
== NULL 
|| environ 
== NULL
) 
 102         for (np 
= name
; *np 
&& *np 
!= '='; ++np
) 
 105         for (p 
= environ
; (c 
= *p
) != NULL
; ++p
) 
 106                 if (strncmp(c
, name
, len
) == 0 && c
[len
] == '=') { 
 107                         *offset 
= p 
- environ
; 
 108                         return (c 
+ len 
+ 1);