aboutsummaryrefslogtreecommitdiffhomepage
path: root/env.cpp
diff options
context:
space:
mode:
authorGravatar Siteshwar Vashisht <siteshwar@gmail.com>2012-06-18 22:50:40 +0530
committerGravatar Siteshwar Vashisht <siteshwar@gmail.com>2012-06-18 22:52:33 +0530
commit93dc7d4cc10776278398f497127df1f49ab0483c (patch)
tree877feb09e2e4e3891a25152750fa0fa4a2f4fc99 /env.cpp
parent1bead8adf7e3139e0b4644a6215751fac60daddf (diff)
Add support for querying variables with scope options as requested in issue #132
Diffstat (limited to 'env.cpp')
-rw-r--r--env.cpp61
1 files changed, 42 insertions, 19 deletions
diff --git a/env.cpp b/env.cpp
index 6e6a8d74..ef53906a 100644
--- a/env.cpp
+++ b/env.cpp
@@ -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;
}
/**