Migrate some more away from array_list_t

This commit is contained in:
ridiculousfish 2011-12-28 12:36:47 -08:00
parent 46fa2dd2f0
commit 78322a6321
5 changed files with 48 additions and 64 deletions

12
env.cpp
View file

@ -1678,7 +1678,6 @@ char **env_export_arr( int recalc )
if( has_changed ) if( has_changed )
{ {
array_list_t uni;
hash_table_t vals; hash_table_t vals;
int prev_was_null=1; int prev_was_null=1;
int pos=0; int pos=0;
@ -1690,16 +1689,15 @@ char **env_export_arr( int recalc )
get_exported( top, &vals ); get_exported( top, &vals );
al_init( &uni ); wcstring_list_t uni;
env_universal_get_names( &uni, 1, 0 ); env_universal_get_names2( uni, 1, 0 );
for( i=0; i<al_get_count( &uni ); i++ ) for( i=0; i<uni.size(); i++ )
{ {
wchar_t *key = (wchar_t *)al_get( &uni, i ); const wchar_t *key = uni.at(i).c_str();
wchar_t *val = env_universal_get( key ); const wchar_t *val = env_universal_get( key );
if( wcscmp( val, ENV_NULL) && !hash_get( &vals, key ) ) if( wcscmp( val, ENV_NULL) && !hash_get( &vals, key ) )
hash_put( &vals, key, val ); hash_put( &vals, key, val );
} }
al_destroy( &uni );
export_buffer.used=0; export_buffer.used=0;

View file

@ -236,13 +236,13 @@ class reader_data_t
/** /**
Name of the current application Name of the current application
*/ */
wchar_t *name; wcstring app_name;
/** The prompt command */ /** The prompt command */
wchar_t *prompt; wcstring prompt;
/** The output of the last evaluation of the prompt command */ /** The output of the last evaluation of the prompt command */
string_buffer_t prompt_buff; wcstring prompt_buff;
/** /**
Color is the syntax highlighting for buff. The format is that Color is the syntax highlighting for buff. The format is that
@ -424,7 +424,7 @@ static void reader_repaint()
parser_test( data->buff, data->indent, 0, 0 ); parser_test( data->buff, data->indent, 0, 0 );
s_write( &data->screen, s_write( &data->screen,
(wchar_t *)data->prompt_buff.buff, data->prompt_buff.c_str(),
data->buff, data->buff,
data->color, data->color,
data->indent, data->indent,
@ -606,7 +606,6 @@ int reader_interrupted()
void reader_write_title() void reader_write_title()
{ {
const wchar_t *title; const wchar_t *title;
array_list_t l;
wchar_t *term = env_get( L"TERM" ); wchar_t *term = env_get( L"TERM" );
/* /*
@ -649,26 +648,23 @@ void reader_write_title()
if( wcslen( title ) ==0 ) if( wcslen( title ) ==0 )
return; return;
al_init( &l ); wcstring_list_t lst;
proc_push_interactive(0); proc_push_interactive(0);
if( exec_subshell( title, &l ) != -1 ) if( exec_subshell2( title, lst ) != -1 )
{ {
int i; int i;
if( al_get_count( &l ) > 0 ) if( lst.size() > 0 )
{ {
writestr( L"\x1b]2;" ); writestr( L"\x1b]2;" );
for( i=0; i<al_get_count( &l ); i++ ) for( i=0; i<lst.size(); i++ )
{ {
writestr( (wchar_t *)al_get( &l, i ) ); writestr( lst.at(i).c_str() );
} }
writestr( L"\7" ); writestr( L"\7" );
} }
} }
proc_pop_interactive(); proc_pop_interactive();
al_foreach( &l, &free );
al_destroy( &l );
set_color( FISH_COLOR_RESET, FISH_COLOR_RESET ); set_color( FISH_COLOR_RESET, FISH_COLOR_RESET );
} }
@ -682,11 +678,11 @@ static void exec_prompt()
array_list_t prompt_list; array_list_t prompt_list;
al_init( &prompt_list ); al_init( &prompt_list );
if( data->prompt ) if( data->prompt.size() )
{ {
proc_push_interactive( 0 ); proc_push_interactive( 0 );
if( exec_subshell( data->prompt, &prompt_list ) == -1 ) if( exec_subshell( data->prompt.c_str(), &prompt_list ) == -1 )
{ {
/* If executing the prompt fails, make sure we at least don't print any junk */ /* If executing the prompt fails, make sure we at least don't print any junk */
al_foreach( &prompt_list, &free ); al_foreach( &prompt_list, &free );
@ -698,13 +694,13 @@ static void exec_prompt()
reader_write_title(); reader_write_title();
sb_clear( &data->prompt_buff ); data->prompt_buff.resize(0);
for( i = 0; i < al_get_count( &prompt_list )-1; i++ ) for( i = 0; i < al_get_count( &prompt_list ); i++ )
{ {
sb_append( &data->prompt_buff, (wchar_t *)al_get( &prompt_list, i ), L"\n" ); if (i > 0) data->prompt_buff += L"\n";
data->prompt_buff += (wchar_t *)al_get( &prompt_list, i );
} }
sb_append( &data->prompt_buff, (wchar_t *)al_get( &prompt_list, i ));
al_foreach( &prompt_list, &free ); al_foreach( &prompt_list, &free );
al_destroy( &prompt_list ); al_destroy( &prompt_list );
@ -2276,14 +2272,12 @@ void reader_push( const wchar_t *name )
} }
reader_data_t *n = new(buff) reader_data_t; reader_data_t *n = new(buff) reader_data_t;
n->name = wcsdup( name ); n->app_name = name;
n->next = data; n->next = data;
sb_init( &n->kill_item ); sb_init( &n->kill_item );
data=n; data=n;
sb_init( &data->prompt_buff );
check_size(); check_size();
data->buff[0]=0; data->buff[0]=0;
sb_init( &data->search_buff ); sb_init( &data->search_buff );
@ -2317,16 +2311,12 @@ void reader_pop()
data=data->next; data=data->next;
free(n->name );
free( n->prompt );
free( n->buff ); free( n->buff );
free( n->color ); free( n->color );
free( n->indent ); free( n->indent );
sb_destroy( &n->search_buff ); sb_destroy( &n->search_buff );
sb_destroy( &n->kill_item ); sb_destroy( &n->kill_item );
sb_destroy( &n->prompt_buff );
/* /*
Clean up after history search Clean up after history search
*/ */
@ -2345,15 +2335,14 @@ void reader_pop()
else else
{ {
end_loop = 0; end_loop = 0;
history_set_mode( data->name ); history_set_mode( data->app_name.c_str() );
s_reset( &data->screen, 1 ); s_reset( &data->screen, 1 );
} }
} }
void reader_set_prompt( const wchar_t *new_prompt ) void reader_set_prompt( const wchar_t *new_prompt )
{ {
free( data->prompt ); data->prompt = new_prompt;
data->prompt=wcsdup(new_prompt);
} }
void reader_set_complete_function( void (*f)( const wchar_t *, void reader_set_complete_function( void (*f)( const wchar_t *,

View file

@ -70,7 +70,7 @@ static buffer_t *s_writeb_buffer=0;
specified position of the specified wide character string. All of specified position of the specified wide character string. All of
\c seq must match, but str may be longer than seq. \c seq must match, but str may be longer than seq.
*/ */
static int try_sequence( char *seq, wchar_t *str ) static int try_sequence( const char *seq, const wchar_t *str )
{ {
int i; int i;
@ -106,7 +106,7 @@ static int next_tab_stop( int in )
to detect common escape sequences that may be embeded in a prompt, to detect common escape sequences that may be embeded in a prompt,
such as color codes. such as color codes.
*/ */
static int calc_prompt_width( wchar_t *prompt ) static int calc_prompt_width( const wchar_t *prompt )
{ {
int res = 0; int res = 0;
int j, k; int j, k;
@ -573,7 +573,7 @@ static void s_write_mbs( buffer_t *b, char *s )
Convert a wide string to a multibyte string and append it to the Convert a wide string to a multibyte string and append it to the
buffer. buffer.
*/ */
static void s_write_str( buffer_t *b, wchar_t *s ) static void s_write_str( buffer_t *b, const wchar_t *s )
{ {
int (*writer_old)(char) = output_get_writer(); int (*writer_old)(char) = output_get_writer();
@ -588,7 +588,7 @@ static void s_write_str( buffer_t *b, wchar_t *s )
/** /**
Update the screen to match the desired output. Update the screen to match the desired output.
*/ */
static void s_update( screen_t *scr, wchar_t *prompt ) static void s_update( screen_t *scr, const wchar_t *prompt )
{ {
int i, j, k; int i, j, k;
int prompt_width = calc_prompt_width( prompt ); int prompt_width = calc_prompt_width( prompt );
@ -710,10 +710,10 @@ static int is_dumb()
void s_write( screen_t *s, void s_write( screen_t *s,
wchar_t *prompt, const wchar_t *prompt,
wchar_t *b, const wchar_t *b,
int *c, const int *c,
int *indent, const int *indent,
int cursor ) int cursor )
{ {
int i; int i;

View file

@ -135,10 +135,10 @@ typedef struct
as possible. as possible.
*/ */
void s_write( screen_t *s, void s_write( screen_t *s,
wchar_t *prompt, const wchar_t *prompt,
wchar_t *commandline, const wchar_t *commandline,
int *colors, const int *colors,
int *indent, const int *indent,
int cursor_pos ); int cursor_pos );
/** /**

View file

@ -388,23 +388,21 @@ static wchar_t *complete_get_desc_suffix_internal( const wchar_t *suff_orig )
wchar_t *suff = wcsdup( suff_orig ); wchar_t *suff = wcsdup( suff_orig );
wchar_t *cmd = wcsdupcat( SUFFIX_CMD_STR, suff ); wchar_t *cmd = wcsdupcat( SUFFIX_CMD_STR, suff );
wchar_t *desc = 0;
array_list_t l;
if( !suff || !cmd ) if( !suff || !cmd )
DIE_MEM(); DIE_MEM();
al_init( &l ); wcstring_list_t lst;
wcstring desc;
if( exec_subshell( cmd, &l ) != -1 ) if( exec_subshell2( cmd, lst ) != -1 )
{ {
if( lst.size()>0 )
if( al_get_count( &l )>0 )
{ {
wchar_t *ln = (wchar_t *)al_get(&l, 0 ); const wcstring & ln = lst.at(0);
if( wcscmp( ln, L"unknown" ) != 0 ) if( ln.size() > 0 && ln != L"unknown" )
{ {
desc = wcsdup( ln); desc = ln;
/* /*
I have decided I prefer to have the description I have decided I prefer to have the description
begin in uppercase and the whole universe will just begin in uppercase and the whole universe will just
@ -416,17 +414,16 @@ static wchar_t *complete_get_desc_suffix_internal( const wchar_t *suff_orig )
} }
free(cmd); free(cmd);
al_foreach( &l, &free );
al_destroy( &l );
if( !desc ) if( ! desc.size() )
{ {
desc = wcsdup(COMPLETE_FILE_DESC); desc = COMPLETE_FILE_DESC;
} }
hash_put( suffix_hash, suff, desc ); wchar_t *tmp = wcsdup(desc.c_str());
hash_put( suffix_hash, suff, tmp );
return desc; return tmp;
} }
/** /**