/* * 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 #include 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 */