diff options
author | Siteshwar Vashisht <siteshwar@gmail.com> | 2012-06-18 22:50:40 +0530 |
---|---|---|
committer | Siteshwar Vashisht <siteshwar@gmail.com> | 2012-06-18 22:52:33 +0530 |
commit | 93dc7d4cc10776278398f497127df1f49ab0483c (patch) | |
tree | 877feb09e2e4e3891a25152750fa0fa4a2f4fc99 /env.cpp | |
parent | 1bead8adf7e3139e0b4644a6215751fac60daddf (diff) |
Add support for querying variables with scope options as requested in issue #132
Diffstat (limited to 'env.cpp')
-rw-r--r-- | env.cpp | 61 |
1 files changed, 42 insertions, 19 deletions
@@ -1147,36 +1147,46 @@ int env_exist( const wchar_t *key, int mode ) { if( is_read_only(key) || is_electric(key) ) { + //Such variables are never exported + if (mode & ENV_EXPORT) + { + return 0; + } + else if (mode & ENV_UNEXPORT) + { + return 1; + } return 1; } } - if( ! (mode & ENV_UNIVERSAL) ) + if( !(mode & ENV_UNIVERSAL) ) { env = (mode & ENV_GLOBAL)?global_env:top; while( env != 0 ) { var_table_t::iterator result = env->env.find( key ); + if ( result != env->env.end() ) { res = result->second; - } - else - { - res = 0; - } - if( res != 0 ) - { - return 1; - } - - if( mode & ENV_LOCAL ) - { - break; + if (mode & ENV_EXPORT) + { + return res->exportv == 1; + } + else if (mode & ENV_UNEXPORT) + { + return res->exportv == 0; + } + + return 1; } - + + if ( mode & ENV_LOCAL ) + break; + if( env->new_scope ) { env = global_env; @@ -1187,8 +1197,8 @@ int env_exist( const wchar_t *key, int mode ) } } } - - if( ! (mode & ENV_LOCAL) && ! (mode & ENV_GLOBAL) ) + + if( !(mode & ENV_LOCAL) && !(mode & ENV_GLOBAL) ) { if( ! get_proc_had_barrier()) { @@ -1197,10 +1207,23 @@ int env_exist( const wchar_t *key, int mode ) } item = env_universal_get( key ); - + + if (item != NULL) + { + if (mode & ENV_EXPORT) + { + return env_universal_get_export(key) == 1; + } + else if (mode & ENV_UNEXPORT) + { + return env_universal_get_export(key) == 0; + } + + return 1; + } } - return item != 0; + return 0; } /** |