Cleanup event_get_desc

This commit is contained in:
ridiculousfish 2012-02-08 16:20:48 -08:00
parent 1bbe901bcd
commit b3d0561c09
3 changed files with 16 additions and 31 deletions

View File

@ -25,8 +25,6 @@
#include "event.h" #include "event.h"
#include "signal.h" #include "signal.h"
#include "halloc_util.h"
/** /**
Number of signals that can be queued before an overflow occurs Number of signals that can be queued before an overflow occurs
*/ */
@ -181,48 +179,35 @@ static int event_is_blocked( event_t *e )
return event_block_list_blocks_type(parser.global_event_blocks, e->type); return event_block_list_blocks_type(parser.global_event_blocks, e->type);
} }
const wchar_t *event_get_desc( event_t *e ) wcstring event_get_desc( event_t *e )
{ {
/*
String buffer used for formating event descriptions in event_get_desc()
*/
static string_buffer_t *get_desc_buff=0;
CHECK( e, 0 ); CHECK( e, 0 );
if( !get_desc_buff ) wcstring result;
{
get_desc_buff=sb_halloc( global_context );
}
else
{
sb_clear( get_desc_buff );
}
switch( e->type ) switch( e->type )
{ {
case EVENT_SIGNAL: case EVENT_SIGNAL:
sb_printf( get_desc_buff, _(L"signal handler for %ls (%ls)"), sig2wcs(e->param1.signal ), signal_get_desc( e->param1.signal ) ); result = format_string(_(L"signal handler for %ls (%ls)"), sig2wcs(e->param1.signal ), signal_get_desc( e->param1.signal ));
break; break;
case EVENT_VARIABLE: case EVENT_VARIABLE:
sb_printf( get_desc_buff, _(L"handler for variable '%ls'"), e->param1.variable ); result = format_string(_(L"handler for variable '%ls'"), e->param1.variable );
break; break;
case EVENT_EXIT: case EVENT_EXIT:
if( e->param1.pid > 0 ) if( e->param1.pid > 0 )
{ {
sb_printf( get_desc_buff, _(L"exit handler for process %d"), e->param1.pid ); result = format_string(_(L"exit handler for process %d"), e->param1.pid );
} }
else else
{ {
job_t *j = job_get_from_pid( -e->param1.pid ); job_t *j = job_get_from_pid( -e->param1.pid );
if( j ) if( j )
sb_printf( get_desc_buff, _(L"exit handler for job %d, '%ls'"), j->job_id, j->command_cstr() ); result = format_string(_(L"exit handler for job %d, '%ls'"), j->job_id, j->command_cstr() );
else else
sb_printf( get_desc_buff, _(L"exit handler for job with process group %d"), -e->param1.pid ); result = format_string(_(L"exit handler for job with process group %d"), -e->param1.pid );
} }
break; break;
@ -231,24 +216,24 @@ const wchar_t *event_get_desc( event_t *e )
{ {
job_t *j = job_get( e->param1.job_id ); job_t *j = job_get( e->param1.job_id );
if( j ) if( j )
sb_printf( get_desc_buff, _(L"exit handler for job %d, '%ls'"), j->job_id, j->command_cstr() ); result = format_string(_(L"exit handler for job %d, '%ls'"), j->job_id, j->command_cstr() );
else else
sb_printf( get_desc_buff, _(L"exit handler for job with job id %d"), j->job_id ); result = format_string(_(L"exit handler for job with job id %d"), j->job_id );
break; break;
} }
case EVENT_GENERIC: case EVENT_GENERIC:
sb_printf( get_desc_buff, _(L"handler for generic event '%ls'"), e->param1.param ); result = format_string(_(L"handler for generic event '%ls'"), e->param1.param );
break; break;
default: default:
sb_printf( get_desc_buff, _(L"Unknown event type") ); result = format_string(_(L"Unknown event type") );
break; break;
} }
return (const wchar_t *)get_desc_buff->buff; return result;
} }

View File

@ -157,10 +157,9 @@ void event_destroy();
void event_free( event_t *e ); void event_free( event_t *e );
/** /**
Returns a string describing the specified event. The string should Returns a string describing the specified event.
not be freed.
*/ */
const wchar_t *event_get_desc( event_t *e ); wcstring event_get_desc( event_t *e );
/** /**
Fire a generic event with the specified name Fire a generic event with the specified name

View File

@ -881,7 +881,8 @@ void parser_t::stack_trace( block_t *b, string_buffer_t *buff)
/* /*
This is an event handler This is an event handler
*/ */
sb_printf( buff, _(L"in event handler: %ls\n"), event_get_desc( b->state1<event_t *>() )); wcstring description = event_get_desc( b->state1<event_t *>() );
sb_printf( buff, _(L"in event handler: %ls\n"), description.c_str());
sb_printf( buff, sb_printf( buff,
L"\n" ); L"\n" );