aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-03-26 01:21:10 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2012-03-26 01:21:10 -0700
commit0bc644abf06d1cf903ed7bf59302894f80d18971 (patch)
treeda229cd4505d34800af22e10c8f61d380d6a88b3 /reader.cpp
parent31b7d076b7bff8d7bb81e6a1fff58755b7baa10b (diff)
Fix lots of bugs related to the static analyzer
Improved how screen.cpp interacts with output_set_writer()
Diffstat (limited to 'reader.cpp')
-rw-r--r--reader.cpp37
1 files changed, 11 insertions, 26 deletions
diff --git a/reader.cpp b/reader.cpp
index 00379547..bde0bcb1 100644
--- a/reader.cpp
+++ b/reader.cpp
@@ -545,17 +545,7 @@ void reader_data_t::command_line_changed() {
}
-/**
- Sort an array_list_t containing compltion_t structs.
- */
-static void sort_completion_list( std::vector<completion_t> &comp ) {
- sort(comp.begin(), comp.end());
-}
-
-/**
- Remove any duplicate completions in the list. This relies on the
- list first beeing sorted.
-*/
+/** Remove any duplicate completions in the list. This relies on the list first beeing sorted. */
static void remove_duplicates(std::vector<completion_t> &l) {
l.erase(std::unique( l.begin(), l.end()), l.end());
@@ -947,6 +937,8 @@ static void get_param( const wchar_t *cmd,
*/
static void completion_insert( const wchar_t *val, int flags )
{
+ assert(data != NULL);
+
wchar_t *replaced;
wchar_t quote;
@@ -959,7 +951,7 @@ static void completion_insert( const wchar_t *val, int flags )
if( do_replace )
{
- int tok_start, tok_len, move_cursor;
+ int move_cursor;
const wchar_t *begin, *end;
wchar_t *escaped;
@@ -967,9 +959,6 @@ static void completion_insert( const wchar_t *val, int flags )
parse_util_token_extent( buff, data->buff_pos, &begin, 0, 0, 0 );
end = buff + data->buff_pos;
- tok_start = begin - buff;
- tok_len = end-begin;
-
wcstring sb(buff, begin - buff);
if( do_escape )
@@ -1888,6 +1877,10 @@ static void reset_token_history()
*/
static void handle_token_history( int forward, int reset )
{
+ /* Paranoia */
+ if (! data)
+ return;
+
const wchar_t *str=0;
int current_pos;
tokenizer tok;
@@ -2723,8 +2716,6 @@ const wchar_t *reader_readline()
while( !finished && !data->end_loop)
{
- int regular_char = 0;
-
/*
Sometimes strange input sequences seem to generate a zero
byte. I believe these simply mean a character was pressed
@@ -2865,7 +2856,6 @@ const wchar_t *reader_readline()
const wchar_t *begin, *end;
const wchar_t *token_begin, *token_end;
const wchar_t *buff = data->command_line.c_str();
- wchar_t *buffcpy;
int len;
int cursor_steps;
@@ -2883,20 +2873,15 @@ const wchar_t *reader_readline()
reader_repaint();
len = data->buff_pos - (begin-buff);
- buffcpy = wcsndup( begin, len );
+ const wcstring buffcpy = wcstring(begin, len);
-// comp = al_halloc( 0 );
data->complete_func( buffcpy, comp, COMPLETE_DEFAULT, NULL);
- sort_completion_list( comp );
+ sort(comp.begin(), comp.end());
remove_duplicates( comp );
-
- free( buffcpy );
comp_empty = handle_completions( comp );
comp.clear();
-// halloc_free( comp );
-// comp = 0;
}
break;
@@ -3319,7 +3304,7 @@ const wchar_t *reader_readline()
if( (!wchar_private(c)) && (( (c>31) || (c==L'\n'))&& (c != 127)) )
{
- regular_char = 1;
+ /* Regular character */
insert_char( c );
}
else