aboutsummaryrefslogtreecommitdiffhomepage
path: root/expand.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-01-30 11:15:06 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-01-30 11:15:06 -0800
commit3ad7de0fcb9ec08f09af3c86d1f094a534c399af (patch)
tree083fb94344578d33ae20d70d06d052a4a3f71515 /expand.cpp
parent48408b0a0bf16dcb8cfca7bffc1502677e094a93 (diff)
Fix some leaks and clean up expand_pid to use wcstring
Diffstat (limited to 'expand.cpp')
-rw-r--r--expand.cpp31
1 files changed, 11 insertions, 20 deletions
diff --git a/expand.cpp b/expand.cpp
index e3113347..8f400b57 100644
--- a/expand.cpp
+++ b/expand.cpp
@@ -656,21 +656,20 @@ static int find_process( const wchar_t *proc,
/**
Process id expansion
*/
-static int expand_pid( wchar_t *in,
+static int expand_pid( const wcstring &instr,
int flags,
std::vector<completion_t> &out )
{
-
- CHECK( in, 0 );
-// CHECK( out, 0 );
-
- if( *in != PROCESS_EXPAND )
+
+ if( instr.empty() || instr.at(0) != PROCESS_EXPAND )
{
completion_t data_to_push;
- data_to_push.completion = in;
+ data_to_push.completion = instr;
out.push_back( data_to_push );
return 1;
}
+
+ const wchar_t * const in = instr.c_str();
if( flags & ACCEPT_INCOMPLETE )
{
@@ -693,8 +692,7 @@ static int expand_pid( wchar_t *in,
{
if( wcscmp( (in+1), SELF_STR )==0 )
{
- wchar_t *str= (wchar_t *)malloc( sizeof(wchar_t)*32);
- free(in);
+ wchar_t str[32];
swprintf( str, 32, L"%d", getpid() );
completion_t data_to_push;
@@ -711,7 +709,6 @@ static int expand_pid( wchar_t *in,
if( proc_last_bg_pid > 0 )
{
str = (wchar_t *)malloc( sizeof(wchar_t)*32);
- free(in);
swprintf( str, 32, L"%d", proc_last_bg_pid );
completion_t data_to_push;
data_to_push.completion = str;
@@ -729,21 +726,15 @@ static int expand_pid( wchar_t *in,
if( prev == out.size() )
{
- if( flags & ACCEPT_INCOMPLETE )
- free( in );
- else
+ if( ! (flags & ACCEPT_INCOMPLETE) )
{
- free(in);
return 0;
}
}
- else
- {
- free( in );
- }
return 1;
}
+
/*
static int expand_pid2( const wcstring &in, int flags, std::vector<completion_t> &outputs )
{
@@ -2174,7 +2165,7 @@ int expand_string2( const wcstring &input, std::vector<completion_t> &output, in
interested in other completions, so we
short-circut and return
*/
- expand_pid( wcsdup(next.c_str()), flags, output );
+ expand_pid( next, flags, output );
return EXPAND_OK;
}
else
@@ -2186,7 +2177,7 @@ int expand_string2( const wcstring &input, std::vector<completion_t> &output, in
}
else
{
- if( !expand_pid( wcsdup(next.c_str()), flags, *out ) )
+ if( !expand_pid( next, flags, *out ) )
{
return EXPAND_ERROR;
}