aboutsummaryrefslogtreecommitdiffhomepage
path: root/wildcard.c
diff options
context:
space:
mode:
authorGravatar axel <axel@liljencrantz.se>2007-02-24 18:11:31 +1000
committerGravatar axel <axel@liljencrantz.se>2007-02-24 18:11:31 +1000
commit73a67c2a4327497aa51f9a95f58f012f807fa882 (patch)
tree96e140b958f9c42a30228614a2c1970888c0570f /wildcard.c
parent6859e012d9c6c2743f8cd300466c0f861e14025c (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.c50
1 files changed, 22 insertions, 28 deletions
diff --git a/wildcard.c b/wildcard.c
index 874b2870..50ca55b6 100644
--- a/wildcard.c
+++ b/wildcard.c
@@ -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 );