diff options
author | 2007-02-24 18:11:31 +1000 | |
---|---|---|
committer | 2007-02-24 18:11:31 +1000 | |
commit | 73a67c2a4327497aa51f9a95f58f012f807fa882 (patch) | |
tree | 96e140b958f9c42a30228614a2c1970888c0570f /wildcard.c | |
parent | 6859e012d9c6c2743f8cd300466c0f861e14025c (diff) |
Fifth phase of using a real struct for passing around completions - make expand.c and wildcard.c use the struct internally. This makes all completion code use the new struct.
darcs-hash:20070224081131-ac50b-aba4ff255c6dc1ce9ad375d6cd1acde919c7cbd6.gz
Diffstat (limited to 'wildcard.c')
-rw-r--r-- | wildcard.c | 50 |
1 files changed, 22 insertions, 28 deletions
@@ -177,7 +177,9 @@ static int wildcard_complete_internal( const wchar_t *orig, if( *wc == 0 && ( ( *str != L'.') || (!is_first)) ) { - wchar_t *new; + wchar_t *out_completion = 0; + const wchar_t *out_desc = desc; + if( !out ) { return 1; @@ -190,14 +192,13 @@ static int wildcard_complete_internal( const wchar_t *orig, */ wchar_t *sep; - new = wcsdup( str ); - sep = wcschr(new, PROG_COMPLETE_SEP ); - *sep = COMPLETE_SEP; + out_completion = wcsdup( str ); + sep = wcschr(out_completion, PROG_COMPLETE_SEP ); + *sep = 0; + out_desc = sep + 1; } else { - const wchar_t *this_desc = desc; - if( desc_func ) { /* @@ -207,30 +208,25 @@ static int wildcard_complete_internal( const wchar_t *orig, */ const wchar_t *func_desc = desc_func( orig ); if( func_desc ) - this_desc = func_desc; + out_desc = func_desc; } /* Append description to item, if a description exists */ - if( this_desc && wcslen(this_desc) ) - { - /* - Check if the description already contains a separator character, if not, prepend it - */ - if( wcschr( this_desc, COMPLETE_SEP ) ) - new = wcsdupcat2( str, this_desc, (void *)0 ); - else - new = wcsdupcat2( str, COMPLETE_SEP_STR, this_desc, (void *)0 ); - } - else - new = wcsdup( str ); + out_completion = wcsdup( str ); } - if( new ) + if( out_completion ) { - al_push( out, new ); + completion_allocate( out, + out_completion, + out_desc, + 0 ); } + + free ( out_completion ); + return 1; } @@ -336,11 +332,6 @@ static void get_desc( wchar_t *fn, string_buffer_t *sb, int is_cmd ) desc = complete_get_desc( fn ); - if( wcschr( desc, COMPLETE_SEP )==0 ) - { - sb_append( sb, COMPLETE_SEP_STR ); - } - if( sz >= 0 && S_ISDIR(buf.st_mode) ) { sb_append( sb, desc ); @@ -527,8 +518,11 @@ int wildcard_expand( const wchar_t *wc, get_desc( long_name, &sb_desc, flags & EXECUTABLES_ONLY ); - al_push( out, - wcsdupcat(name, (wchar_t *)sb_desc.buff) ); + completion_allocate( out, + name, + (wchar_t *)sb_desc.buff, + 0 ); + } free( long_name ); |