da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/***********************************************************************
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* This software is part of the ast package *
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner* Copyright (c) 1985-2010 AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* and is licensed under the *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Common Public License, Version 1.0 *
7c2fbfb345896881c631598ee3852ce9ce33fb07April Chin* by AT&T Intellectual Property *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* A copy of the License is available at *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Information and Software Systems Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* AT&T Research *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Florham Park NJ *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Glenn Fowler <gsf@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* David Korn <dgk@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin* Phong Vo <kpv@research.att.com> *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin***********************************************************************/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * put name=value in the environment
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * pointer to value returned
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * environ==0 is ok
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * setenviron("N=V") add N=V
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * setenviron("N") delete N
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * setenviron(0) expect more (pre-fork optimization)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * _ always placed at the top
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin static char ok[] = ""; /* delete/optimization ok return*/
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char** v = environ;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char** p = envv;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char* s;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin register char* t;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (p && !v)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin else if (p != v || !v)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (*v++);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * kick 3d initialization
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(p = newof(p, char*, n, 0)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *p++ = *v++;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *p++ = "_=";
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (*p = *v++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!(p = newof(p, char*, n, 0)))
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin for (; s = *p; p++)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (!*t || *t == '=')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin if (*s == '=')
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin while (*v++ = *p++);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin } while (*t++ == *s++);
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin return s + 1;