_WCRTLINK CHAR_TYPE *__F_NAME(getenv,_wgetenv)( const CHAR_TYPE *name ) { #ifdef __NETWARE__ name = name; #else CHAR_TYPE **envp; CHAR_TYPE *p; #ifdef __WIDECHAR__ if( _RWD_wenviron == NULL ) { __create_wide_environment(); } #endif /*** Find the environment string ***/ __ptr_check( name, 0 ); envp = __F_NAME(_RWD_environ,_RWD_wenviron); if( (envp != NULL) && (name != NULL) ) { for( ; p = *envp; ++envp ) { const CHAR_TYPE *s = name; while( !_TCSTERM( p ) ) { if( _TCSTERM( s ) ) { if( _TCSNEXTC( p ) == STRING( '=' ) ) return( _TCSINC( p ) ); break; } #if defined(__UNIX__) if( _TCSCMP( p, s ) ) #else if( _TCSICMP( p, s ) ) #endif break; p = _TCSINC( p ); /* skip over character */ s = _TCSINC( s ); /* skip over character */ } } } #endif return( NULL ); /* not found */ }
int __F_NAME(__putenv,__wputenv)( const CHAR_TYPE *env_string ) { #ifdef __NETWARE__ env_string = env_string; return( -1 ); #else int index = -1; const CHAR_TYPE *p; int delete_var; if( env_string == NULL || _TCSTERM( env_string ) ) return( index ); // handle NAME=STRING for( p = _TCSINC( env_string ); !_TCSTERM( p ); p = _TCSINC( p ) ) { // (used under NT) if( _TCSNEXTC( p ) == STRING( '=' ) ) { break; } } if( _TCSTERM( p ) ) return( index ); /* <name> with no '=' is illegal */ delete_var = ( _TCSTERM( _TCSINC( p ) ) ); index = __F_NAME(__findenv,__wfindenv)( env_string, delete_var ); if( delete_var ) return( 0 ); if( index == -1 ) { return( index ); } if( index > 0 ) { ((const CHAR_TYPE **)__F_NAME(_RWD_environ,_RWD_wenviron))[index - 1] = env_string; #ifndef __WIDECHAR__ _RWD_env_mask[index - 1] = 0; /* indicate not alloc'd */ #endif } return( 0 ); #endif }