/*
* XREnvironImpl.c
* created, February 9, 1989 8:31:34 pm PST
* bj, October 27, 1989 5:36:45 pm PDT
* eduardo, November 20, 1989 11:43:03 am PST
* Willie-Sue Orr, January 19, 1993 12:15:06 pm PST
*/
#include <stdio.h>
#include <sys/types.h>
extern char **environ;
extern char *GC←malloc();
extern char *GC←realloc();
/* extern */ char **XR←environ;
extern char *XR←findenv(name, offset) register char *name; int *offset; {
/*
* Returns pointer to value associated with name, if any, else NULL.
* Sets offset to be the offset of the name/value combination in the environmental array,
* for use by setenv(3) and unsetenv(3).
* Explicitly removes '=' in argument name.
* - result is pointer into string in env, treat as readonly!
*/
register int len;
register char **p, *c;
for ( c = name, len = 0; *c && *c != '='; ++c, ++len );
for ( p = XR←environ; *p; ++p )
if ( ! strncmp(*p, name, len) )
if ( *(c = *p + len) == '=' ) { *offset = p - XR←environ; return(++c); }
return(NULL);
}
extern char *XR←getenv(name) char *name; {
/*
* Returns ptr to value associated with name, if any, else NULL
* - result is pointer into string in env, treat as readonly!
* - GC←malloc & copy would protect us from clients!
*/
int offset;
return(XR←findenv(name, &offset));
}
extern void XR←install←XREnvironImpl() { /* PRE-start trap */
}
extern void XR←run←XREnvironImpl() { /* start trap */
/* little ditty to get it "out of the global frame" for threads*/
XR←environ = environ;
}
/* eof */