From 0ef22a5577b1166b0ec8ff2c0cabfd133a5341f6 Mon Sep 17 00:00:00 2001 From: axel Date: Tue, 27 Sep 2005 00:47:03 +1000 Subject: [PATCH] Add support for zero element arrays darcs-hash:20050926144703-ac50b-3ed14d14b02908862d69aec08aab35b6d0188bba.gz --- ChangeLog | 6 +++++ builtin_set.c | 2 +- env.c | 67 +++++++++++++++++++++++++++++++++++++++++++++------ env.h | 6 +++++ 4 files changed, 73 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index 251dfd564..59f59086f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-09-26 Axel Liljencrantz + + * configure.ac, init/fish.in, main.c: Make ~/etc/fish the system configuration file on installations under ~ + + * env.c, builtin_set.c (env_exist, env_get, env_set, builtin_set): Add support for zero element arrays + 2005-09-25 Axel Liljencrantz * parser.c: (parse_job, parser_skip_arguemnts, paresr_Test): No semicolon required after else and begin diff --git a/builtin_set.c b/builtin_set.c index b79ece134..6e702bf45 100644 --- a/builtin_set.c +++ b/builtin_set.c @@ -421,7 +421,7 @@ int builtin_set( wchar_t **argv ) int i; for( i=woptind; ival; + if( wcscmp( res->val, ENV_NULL )==0) + { + return 0; + } + else + return res->val; } if( env->new_scope ) @@ -558,7 +574,46 @@ wchar_t *env_get( const wchar_t *key ) } if( !proc_had_barrier) env_universal_barrier(); - return env_universal_get( key ); + item = env_universal_get( key ); + + if( !item || (wcscmp( item, ENV_NULL )==0)) + { + return 0; + } + else + return item; +} + +int env_exist( const wchar_t *key ) +{ + var_entry_t *res; + env_node_t *env = top; + wchar_t *item; + + if( wcscmp( key, L"history" ) == 0 ) + { + return 1; + } + + while( env != 0 ) + { + res = (var_entry_t *) hash_get( &env->env, + key ); + if( res != 0 ) + { + return 1; + } + + if( env->new_scope ) + env = global_env; + else + env = env->next; + } + if( !proc_had_barrier) + env_universal_barrier(); + item = env_universal_get( key ); + + return item != 0; } static int local_scope_exports( env_node_t *n ) @@ -769,8 +824,6 @@ char **env_export_arr( int recalc) if( recalc && !proc_had_barrier) env_universal_barrier(); -// debug( 1, L"env_export_arr() %d %d", has_changed, env_universal_update ); - if( has_changed || env_universal_update ) { array_list_t uni; @@ -780,7 +833,7 @@ char **env_export_arr( int recalc) int pos=0; int i; -// debug( 1, L"env_export_arr() recalc" ); + debug( 4, L"env_export_arr() recalc" ); hash_init( &vals, &hash_wcs_func, &hash_wcs_cmp ); diff --git a/env.h b/env.h index 36416281c..69dc94bf6 100644 --- a/env.h +++ b/env.h @@ -68,6 +68,12 @@ void env_set( const wchar_t *key, */ wchar_t *env_get( const wchar_t *key ); +/** + Returns 1 if the specified key exists. This can't be reliable done + using env_get, since env_get returns null for 0-element arrays +*/ +int env_exist( const wchar_t *key ); + /** Remove environemnt variable