From cb7caf2afcd0ccb82b73a0de678b353e44e12a83 Mon Sep 17 00:00:00 2001 From: axel Date: Tue, 16 Jan 2007 03:51:44 +1000 Subject: [PATCH] Minor edits - add a few input checks, remove a few commented pieces of debug code, add a few brackets, etc. darcs-hash:20070115175144-ac50b-2045f2132156645222e6dde57487aa299a5316e2.gz --- output.c | 10 ++++ output.h | 1 - parse_util.c | 125 +++++++++++++++++++++++++++++++++++++++-------- reader.c | 6 ++- util.c | 133 ++++++++++++++++----------------------------------- 5 files changed, 160 insertions(+), 115 deletions(-) diff --git a/output.c b/output.c index 94b2445cb..59cedb809 100644 --- a/output.c +++ b/output.c @@ -153,6 +153,16 @@ void set_color( int c, int c2 ) int is_bold = 0; int is_underline = 0; + /* + Test if we have at least basic support for setting fonts, colors + and related bits - otherwise just give up... + */ + if( !exit_attribute_mode ) + { + return; + } + + is_bold |= (c&FISH_COLOR_BOLD)!=0; is_bold |= (c2&FISH_COLOR_BOLD)!=0; diff --git a/output.h b/output.h index adc994d2d..a94727113 100644 --- a/output.h +++ b/output.h @@ -126,5 +126,4 @@ void output_set_writer( int (*writer)(char) ); int (*output_get_writer())(char) ; - #endif diff --git a/parse_util.c b/parse_util.c index 6ac410e76..9d792b8f1 100644 --- a/parse_util.c +++ b/parse_util.c @@ -97,7 +97,6 @@ int parse_util_lineno( const wchar_t *str, int len ) static int res2 = 1; CHECK( str, 0 ); - if( str != prev_str || i>len ) { @@ -129,7 +128,9 @@ int parse_util_lineno( const wchar_t *str, int len ) for( ; str[i] && i= cursor) ) { begin++; + if( a ) + { *a = begin; + } + if( b ) + { *b = end; + } + break; } @@ -291,14 +313,21 @@ static void job_or_process_extent( const wchar_t *buff, CHECK( buff, ); if( a ) + { *a=0; + } + if( b ) + { *b = 0; + } parse_util_cmdsubst_extent( buff, cursor_pos, &begin, &end ); if( !end || !begin ) + { return; - + } + pos = cursor_pos - (begin - buff); if( a ) @@ -327,9 +356,13 @@ static void job_or_process_extent( const wchar_t *buff, switch( tok_last_type( &tok ) ) { case TOK_PIPE: + { if( !process ) + { break; - + } + } + case TOK_END: case TOK_BACKGROUND: { @@ -338,15 +371,19 @@ static void job_or_process_extent( const wchar_t *buff, { finished=1; if( b ) + { *b = (wchar_t *)buff + tok_begin; + } } else { if( a ) + { *a = (wchar_t *)buff + tok_begin+1; + } } - break; - + + break; } } } @@ -398,7 +435,9 @@ void parse_util_token_extent( const wchar_t *buff, parse_util_cmdsubst_extent( buff, cursor_pos, &begin, &end ); if( !end || !begin ) + { return; + } pos = cursor_pos - (begin - buff); @@ -430,7 +469,9 @@ void parse_util_token_extent( const wchar_t *buff, Calculate end of token */ if( tok_last_type( &tok ) == TOK_STRING ) + { tok_end +=wcslen(tok_last(&tok)); + } /* Cursor was before beginning of this token, means that the @@ -472,14 +513,25 @@ void parse_util_token_extent( const wchar_t *buff, tok_destroy( &tok ); if( tok_begin ) + { *tok_begin = a; - if( tok_end ) - *tok_end = b; - if( prev_begin ) - *prev_begin = pa; - if( prev_end ) - *prev_end = pb; + } + if( tok_end ) + { + *tok_end = b; + } + + if( prev_begin ) + { + *prev_begin = pa; + } + + if( prev_end ) + { + *prev_end = pb; + } + assert( pa >= buff ); assert( pa <= (buff+wcslen(buff) ) ); assert( pb >= pa ); @@ -560,7 +612,9 @@ void parse_util_load_reset( const wchar_t *path_var_name, void *key, *data; hash_remove( all_loaded, path_var_name, &key, &data ); if( key ) + { clear_loaded_entry( key, data, (void *)on_load ); + } } } @@ -600,6 +654,16 @@ int parse_util_unload( const wchar_t *cmd, return !!val; } +/** + + Unload all autoloaded items that have expired, that where loaded in + the specified path. + + \param path_var_name The variable containing the path to autoload in + \param skip unloading the the specified file + \param on_load the callback function to call for every unloaded file + +*/ static void parse_util_autounload( const wchar_t *path_var_name, const wchar_t *skip, void (*on_load)(const wchar_t *cmd) ) @@ -637,8 +701,10 @@ static void parse_util_autounload( const wchar_t *path_var_name, } if( !tm[0] ) + { continue; - + } + if( hash_get( &loaded->is_loading, item ) ) { continue; @@ -690,7 +756,6 @@ int parse_util_load( const wchar_t *cmd, // debug( 0, L"Autoload %ls in %ls", cmd, path_var_name ); parse_util_autounload( path_var_name, cmd, on_load ); - path_var = env_get( path_var_name ); /* @@ -698,7 +763,6 @@ int parse_util_load( const wchar_t *cmd, */ if( !path_var ) { -// debug( 0, L"Path null" ); return 0; } @@ -846,9 +910,13 @@ static int parse_util_load_internal( const wchar_t *cmd, } if( !path ) + { path = sb_halloc( global_context ); + } else + { sb_clear( path ); + } /* Iterate over path searching for suitable completion files @@ -873,7 +941,9 @@ static int parse_util_load_internal( const wchar_t *cmd, { tm = malloc(sizeof(time_t)*2); if( !tm ) + { DIE_MEM(); + } } tm[0] = buf.st_mtime; @@ -883,8 +953,10 @@ static int parse_util_load_internal( const wchar_t *cmd, tm ); if( on_load ) + { on_load(cmd ); - + } + /* Source the completion file for the specified completion */ @@ -920,7 +992,9 @@ static int parse_util_load_internal( const wchar_t *cmd, { tm = malloc(sizeof(time_t)*2); if( !tm ) + { DIE_MEM(); + } tm[0] = 0; tm[1] = time(0); @@ -941,7 +1015,9 @@ void parse_util_set_argv( wchar_t **argv ) for( arg=argv; *arg; arg++ ) { if( arg != argv ) + { sb_append( &sb, ARRAY_SEP_STR ); + } sb_append( &sb, *arg ); } @@ -964,13 +1040,16 @@ wchar_t *parse_util_unescape_wildcards( const wchar_t *str ) unescaped = wcsdup(str); if( !unescaped ) + { DIE_MEM(); + } for( in=out=unescaped; *in; in++ ) { switch( *in ) { case L'\\': + { if( *(in+1) ) { in++; @@ -978,20 +1057,26 @@ wchar_t *parse_util_unescape_wildcards( const wchar_t *str ) } *(out++)=*in; break; - + } + case L'*': + { *(out++)=ANY_STRING; break; - + } + case L'?': + { *(out++)=ANY_CHAR; break; - + } + default: + { *(out++)=*in; break; - } - + } + } } return unescaped; } diff --git a/reader.c b/reader.c index 523b31825..1732d643a 100644 --- a/reader.c +++ b/reader.c @@ -115,6 +115,8 @@ commence. */ #define DEFAULT_PROMPT L"whoami; echo @; hostname|cut -d . -f 1; echo \" \"; pwd; printf '> ';" +#define PROMPT_FUNCTION_NAME L"fish_prompt" + /** The default title for the reader. This is used by reader_readline. */ @@ -1910,8 +1912,8 @@ static int read_i() { wchar_t *tmp; - if( function_exists( L"fish_prompt" ) ) - reader_set_prompt( L"fish_prompt" ); + if( function_exists( PROMPT_FUNCTION_NAME ) ) + reader_set_prompt( PROMPT_FUNCTION_NAME ); else reader_set_prompt( DEFAULT_PROMPT ); diff --git a/util.c b/util.c index e709ce4d1..3e7b1e921 100644 --- a/util.c +++ b/util.c @@ -115,25 +115,6 @@ void q_destroy( dyn_queue_t *q ) free( q->start ); } -/* - static q_print( dyn_queue_t *q ) - { - int i; - int size = (q->stop-q->start); - - printf( "Storlek: %d\n", size ); - for( i=0; i< size; i++ ) - { - printf( " %c%c %d: %d\n", - &q->start[i]==q->get_pos?'g':' ', - &q->start[i]==q->put_pos?'p':' ', - i, - q->start[i] ); - } - } - -*/ - /** Reallocate the queue_t */ @@ -577,8 +558,11 @@ int hash_wcs_func( void *data ) */ for( i=0; icompare = compare; } -/** - Check that the priority queue is in a valid state -*/ -/* - static void pq_check( priority_queue_t *q, int i ) - { - int l,r; - if( q->count <= i ) - return; - - l=i*2+1; - r=i*2+2; - - - if( (q->count > l) && (q->compare(q->arr[i], q->arr[l]) < 0) ) - { - printf( "ERROR: Place %d less than %d\n", i, l ); - } - if( (q->count > r) && (q->compare(q->arr[i], q->arr[r]) < 0) ) - { - printf( "ERROR: Place %d less than %d\n", i, r ); - } - pq_check( q, l ); - pq_check( q, r ); - } -*/ int pq_put( priority_queue_t *q, void *e ) @@ -934,9 +892,6 @@ static int al_set_generic( array_list_t *l, int pos, anything_t v ) l->pos = pos; if( al_push_generic( l, v ) ) { -/* fwprintf( stderr, L"Clearing from index %d to index %d\n", - old_pos, pos ); -*/ memset( &l->arr[old_pos], 0, sizeof(anything_t) * (pos - old_pos) ); @@ -996,6 +951,7 @@ func_ptr_t al_get_func( array_list_t *l, int pos ) void al_truncate( array_list_t *l, int new_sz ) { + CHECK( l, ); l->pos = new_sz; } @@ -1072,18 +1028,24 @@ func_ptr_t al_peek_func( array_list_t *l ) int al_empty( array_list_t *l ) { + CHECK( l, 1 ); return l->pos == 0; } int al_get_count( array_list_t *l ) { + CHECK( l, 0 ); return l->pos; } void al_foreach( array_list_t *l, void (*func)( void * )) { int i; + + CHECK( l, ); + CHECK( func, ); + for( i=0; ipos; i++ ) func( l->arr[i].ptr_val ); } @@ -1091,12 +1053,19 @@ void al_foreach( array_list_t *l, void (*func)( void * )) void al_foreach2( array_list_t *l, void (*func)( void *, void *), void *aux) { int i; + + CHECK( l, ); + CHECK( func, ); + for( i=0; ipos; i++ ) func( l->arr[i].ptr_val, aux ); } int wcsfilecmp( const wchar_t *a, const wchar_t *b ) { + CHECK( a, 0 ); + CHECK( b, 0 ); + if( *a==0 ) { if( *b==0) @@ -1168,6 +1137,8 @@ void sb_init( string_buffer_t * b) { wchar_t c=0; + CHECK( b, ); + if( !b ) { return; @@ -1195,17 +1166,8 @@ string_buffer_t *sb_new() void sb_append( string_buffer_t *b, const wchar_t * s) { -// fwprintf( stderr, L"Append string \'%ls\'\n", s ); - - if( !s ) - { - return; - } - - if( !b ) - { - return; - } + CHECK( b, ); + CHECK( s, ); b_append( b, s, sizeof(wchar_t)*(wcslen(s)+1) ); b->used -= sizeof(wchar_t); @@ -1215,15 +1177,8 @@ void sb_append_substring( string_buffer_t *b, const wchar_t *s, size_t l ) { wchar_t tmp=0; - if( !s ) - { - return; - } - - if( !b ) - { - return; - } + CHECK( b, ); + CHECK( s, ); b_append( b, s, sizeof(wchar_t)*l ); b_append( b, &tmp, sizeof(wchar_t) ); @@ -1235,10 +1190,7 @@ void sb_append_char( string_buffer_t *b, wchar_t c ) { wchar_t tmp=0; - if( !b ) - { - return; - } + CHECK( b, ); b_append( b, &c, sizeof(wchar_t) ); b_append( b, &tmp, sizeof(wchar_t) ); @@ -1250,11 +1202,8 @@ void sb_append2( string_buffer_t *b, ... ) va_list va; wchar_t *arg; - if( !b ) - { - return; - } - + CHECK( b, ); + va_start( va, b ); while( (arg=va_arg(va, wchar_t *) )!= 0 ) { @@ -1268,11 +1217,9 @@ int sb_printf( string_buffer_t *buffer, const wchar_t *format, ... ) va_list va; int res; - if( !buffer ) - { - return -1; - } - + CHECK( buffer, -1 ); + CHECK( format, -1 ); + va_start( va, format ); res = sb_vprintf( buffer, format, va ); va_end( va ); @@ -1284,10 +1231,8 @@ int sb_vprintf( string_buffer_t *buffer, const wchar_t *format, va_list va_orig { int res; - if( !buffer ) - { - return -1; - } + CHECK( buffer, -1 ); + CHECK( format, -1 ); if( !buffer->length ) { @@ -1352,17 +1297,17 @@ int sb_vprintf( string_buffer_t *buffer, const wchar_t *format, va_list va_orig void sb_destroy( string_buffer_t * b ) { - if( !b ) - { - return; - } - + CHECK( b, ); + free( b->buff ); } void sb_clear( string_buffer_t * b ) { wchar_t c=0; + + CHECK( b, ); + b->used=0; b_append( b, &c, sizeof( wchar_t)); b->used -= sizeof(wchar_t); @@ -1371,6 +1316,7 @@ void sb_clear( string_buffer_t * b ) void b_init( buffer_t *b) { + CHECK( b, ); memset( b,0,sizeof(buffer_t)); } @@ -1378,6 +1324,7 @@ void b_init( buffer_t *b) void b_destroy( buffer_t *b ) { + CHECK( b, ); free( b->buff ); } @@ -1387,6 +1334,8 @@ int b_append( buffer_t *b, const void *d, ssize_t len ) if( len<=0 ) return 0; + CHECK( b, -1 ); + if( !b ) { return 0;