from the ANSI standard
[unix-history] / usr / src / lib / libc / stdlib / getenv.c
CommitLineData
535b4307
KB
1/*
2 * Copyright (c) 1987 Regents of the University of California.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms are permitted
9e31603f
KB
6 * provided that the above copyright notice and this paragraph are
7 * duplicated in all such forms and that any documentation,
8 * advertising materials, and other materials related to such
9 * distribution and use acknowledge that the software was developed
10 * by the University of California, Berkeley. The name of the
11 * University may not be used to endorse or promote products derived
12 * from this software without specific prior written permission.
13 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
14 * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
15 * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
535b4307
KB
16 */
17
2ce81398 18#if defined(LIBC_SCCS) && !defined(lint)
6a46fa84 19static char sccsid[] = "@(#)getenv.c 5.6 (Berkeley) %G%";
535b4307 20#endif /* LIBC_SCCS and not lint */
b8f253e8 21
6a46fa84
KB
22#include <stdlib.h>
23#include <stddef.h>
834cc75f 24
24f434cb 25/*
535b4307 26 * getenv --
834cc75f 27 * Returns ptr to value associated with name, if any, else NULL.
24f434cb 28 */
24f434cb
BJ
29char *
30getenv(name)
834cc75f 31 char *name;
24f434cb 32{
535b4307
KB
33 int offset;
34 char *_findenv();
24f434cb 35
535b4307 36 return(_findenv(name, &offset));
24f434cb
BJ
37}
38
39/*
535b4307 40 * _findenv --
834cc75f
KB
41 * Returns pointer to value associated with name, if any, else NULL.
42 * Sets offset to be the offset of the name/value combination in the
43 * environmental array, for use by setenv(3) and unsetenv(3).
44 * Explicitly removes '=' in argument name.
45 *
46 * This routine *should* be a static; don't use it.
24f434cb 47 */
834cc75f 48char *
535b4307 49_findenv(name, offset)
834cc75f 50 register char *name;
535b4307 51 int *offset;
24f434cb 52{
535b4307
KB
53 extern char **environ;
54 register int len;
55 register char **P, *C;
24f434cb 56
535b4307
KB
57 for (C = name, len = 0; *C && *C != '='; ++C, ++len);
58 for (P = environ; *P; ++P)
59 if (!strncmp(*P, name, len))
834cc75f
KB
60 if (*(C = *P + len) == '=') {
61 *offset = P - environ;
62 return(++C);
63 }
24f434cb
BJ
64 return(NULL);
65}