LIST * var_get( struct module_t * module, OBJECT * symbol ) { LIST * result = L0; #ifdef OPT_AT_FILES /* Some "fixed" variables... */ if ( object_equal( symbol, constant_TMPDIR ) ) { list_free( saved_var ); result = saved_var = list_new( object_new( path_tmpdir()->value ) ); } else if ( object_equal( symbol, constant_TMPNAME ) ) { list_free( saved_var ); result = saved_var = list_new( path_tmpnam() ); } else if ( object_equal( symbol, constant_TMPFILE ) ) { list_free( saved_var ); result = saved_var = list_new( path_tmpfile() ); } else if ( object_equal( symbol, constant_STDOUT ) ) { list_free( saved_var ); result = saved_var = list_new( object_copy( constant_STDOUT ) ); } else if ( object_equal( symbol, constant_STDERR ) ) { list_free( saved_var ); result = saved_var = list_new( object_copy( constant_STDERR ) ); } else #endif { VARIABLE * v; int n; if ( ( n = module_get_fixed_var( module, symbol ) ) != -1 ) { if ( DEBUG_VARGET ) var_dump( symbol, module->fixed_variables[ n ], "get" ); result = module->fixed_variables[ n ]; } else if ( module->variables && ( v = (VARIABLE *)hash_find( module->variables, symbol ) ) ) { if ( DEBUG_VARGET ) var_dump( v->symbol, v->value, "get" ); result = v->value; } } return result; }
const char * path_tmpfile(void) { const char * result = 0; string file_path; string_copy(&file_path,path_tmpdir()); string_push_back(&file_path,PATH_DELIM); string_append(&file_path,path_tmpnam()); result = newstr(file_path.value); string_free(&file_path); return result; }
OBJECT * path_tmpfile(void) { OBJECT * result = 0; OBJECT * tmpnam; string file_path; string_copy(&file_path,path_tmpdir()); string_push_back(&file_path,PATH_DELIM); tmpnam = path_tmpnam(); string_append(&file_path,object_str(tmpnam)); object_free(tmpnam); result = object_new(file_path.value); string_free(&file_path); return result; }
LIST * var_get( OBJECT * symbol ) { LIST * result = 0; #ifdef OPT_AT_FILES /* Some "fixed" variables... */ if ( strcmp( "TMPDIR", object_str( symbol ) ) == 0 ) { list_free( saved_var ); result = saved_var = list_new( L0, object_new( path_tmpdir() ) ); } else if ( strcmp( "TMPNAME", object_str( symbol ) ) == 0 ) { list_free( saved_var ); result = saved_var = list_new( L0, path_tmpnam() ); } else if ( strcmp( "TMPFILE", object_str( symbol ) ) == 0 ) { list_free( saved_var ); result = saved_var = list_new( L0, path_tmpfile() ); } else if ( strcmp( "STDOUT", object_str( symbol ) ) == 0 ) { list_free( saved_var ); result = saved_var = list_new( L0, object_new( "STDOUT" ) ); } else if ( strcmp( "STDERR", object_str( symbol ) ) == 0 ) { list_free( saved_var ); result = saved_var = list_new( L0, object_new( "STDERR" ) ); } else #endif { VARIABLE var; VARIABLE * v = &var; v->symbol = symbol; if ( varhash && hashcheck( varhash, (HASHDATA * *)&v ) ) { if ( DEBUG_VARGET ) var_dump( v->symbol, v->value, "get" ); result = v->value; } } return result; }
LIST * var_get( char *symbol ) { LIST * result = 0; #ifdef OPT_AT_FILES /* Some "fixed" variables... */ if ( strcmp( "TMPDIR", symbol ) == 0 ) { result = list_new( L0, newstr( (char*)path_tmpdir() ) ); } else if ( strcmp( "TMPNAME", symbol ) == 0 ) { result = list_new( L0, newstr( (char*)path_tmpnam() ) ); } else if ( strcmp( "TMPFILE", symbol ) == 0 ) { result = list_new( L0, newstr( (char*)path_tmpfile() ) ); } else if ( strcmp( "STDOUT", symbol ) == 0 ) { result = list_new( L0, newstr( "STDOUT" ) ); } else if ( strcmp( "STDERR", symbol ) == 0 ) { result = list_new( L0, newstr( "STDERR" ) ); } else #endif { VARIABLE var, *v = &var; v->symbol = symbol; if( varhash && hashcheck( varhash, (HASHDATA **)&v ) ) { if( DEBUG_VARGET ) var_dump( v->symbol, v->value, "get" ); result = v->value; } } return result; }
LIST * var_get( struct module_t * module, OBJECT * symbol ) { LIST * result = L0; #ifdef OPT_AT_FILES /* Some "fixed" variables... */ if ( object_equal( symbol, constant_TMPDIR ) ) { list_free( saved_var ); result = saved_var = list_new( object_new( path_tmpdir()->value ) ); } else if ( object_equal( symbol, constant_TMPNAME ) ) { list_free( saved_var ); result = saved_var = list_new( path_tmpnam() ); } else if ( object_equal( symbol, constant_TMPFILE ) ) { list_free( saved_var ); result = saved_var = list_new( path_tmpfile() ); } else if ( object_equal( symbol, constant_STDOUT ) ) { list_free( saved_var ); result = saved_var = list_new( object_copy( constant_STDOUT ) ); } else if ( object_equal( symbol, constant_STDERR ) ) { list_free( saved_var ); result = saved_var = list_new( object_copy( constant_STDERR ) ); } else #endif { VARIABLE * v; int n; if ( ( n = module_get_fixed_var( module, symbol ) ) != -1 ) { if ( DEBUG_VARGET ) var_dump( symbol, module->fixed_variables[ n ], "get" ); result = module->fixed_variables[ n ]; } else if ( module->variables && ( v = (VARIABLE *)hash_find( module->variables, symbol ) ) ) { if ( DEBUG_VARGET ) var_dump( v->symbol, v->value, "get" ); result = v->value; } #ifdef OS_VMS else if ( ( module->name && object_equal( module->name, constant_ENVIRON ) ) || root_module() == module ) { /* On VMS, when a variable from root or ENVIRON module is not found, * explicitly request it from the process. * By design, process variables (and logicals) are not made available * to C main(), and thus will not get loaded in bulk to root/ENVRON. * So we get around it by getting any such variable on first request. */ const char * val = getenv( object_str( symbol ) ); if ( val ) { struct module_t * environ_module = module; char * environ[ 2 ] = { 0 }; /* NULL-terminated */ string buf[ 1 ]; if ( root_module() == module ) { environ_module = bindmodule( constant_ENVIRON ); } string_copy( buf, object_str( symbol ) ); string_append( buf, "=" ); string_append( buf, val ); environ[ 0 ] = buf->value; /* Load variable to global module, with splitting, for backward * compatibility. Then to .ENVIRON, without splitting. */ var_defines( root_module(), environ, 1 ); var_defines( environ_module, environ, 0 ); string_free( buf ); if ( module->variables && ( v = (VARIABLE *)hash_find( module->variables, symbol ) ) ) { if ( DEBUG_VARGET ) var_dump( v->symbol, v->value, "get" ); result = v->value; } } } #endif } return result; }