diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2012-02-08 19:02:25 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2012-02-08 19:02:25 -0800 |
commit | b6bc4381fb84caabb3631b654c8bb1f578657b7b (patch) | |
tree | ef5bcc660000a9dbdbdcb75ab627a0b056b499aa /event.cpp | |
parent | b3d0561c09c090a00544a24f1fcafb975a9d6915 (diff) |
Get event_t off of halloc (!)
Diffstat (limited to 'event.cpp')
-rw-r--r-- | event.cpp | 110 |
1 files changed, 47 insertions, 63 deletions
@@ -88,9 +88,9 @@ static event_list_t blocked; static int event_match( event_t *classv, event_t *instance ) { - if( classv->function_name && instance->function_name ) + if( ! classv->function_name.empty() && ! instance->function_name.empty() ) { - if( wcscmp( classv->function_name, instance->function_name ) != 0 ) + if( classv->function_name == instance->function_name ) return 0; } @@ -110,8 +110,7 @@ static int event_match( event_t *classv, event_t *instance ) return classv->param1.signal == instance->param1.signal; case EVENT_VARIABLE: - return wcscmp( instance->param1.variable, - classv->param1.variable )==0; + return instance->str_param1 == classv->str_param1; case EVENT_EXIT: if( classv->param1.pid == EVENT_ANY_PID ) @@ -122,8 +121,7 @@ static int event_match( event_t *classv, event_t *instance ) return classv->param1.job_id == instance->param1.job_id; case EVENT_GENERIC: - return wcscmp( instance->param1.param, - classv->param1.param )==0; + return instance->str_param1 == classv->str_param1; } @@ -140,23 +138,10 @@ static int event_match( event_t *classv, event_t *instance ) */ static event_t *event_copy( event_t *event, int copy_arguments ) { - event_t *e = (event_t *)malloc( sizeof( event_t ) ); - - if( !e ) - DIE_MEM(); - - memcpy( e, event, sizeof(event_t)); - - if( e->function_name ) - e->function_name = wcsdup( e->function_name ); - - if( e->type == EVENT_VARIABLE ) - e->param1.variable = wcsdup( e->param1.variable ); - else if( e->type == EVENT_GENERIC ) - e->param1.param = wcsdup( e->param1.param ); + event_t *e = new event_t(*event); - e->arguments = new wcstring_list_t; - if( copy_arguments && event->arguments ) + e->arguments.reset(new wcstring_list_t); + if( copy_arguments && event->arguments.get() != NULL ) { *(e->arguments) = *(event->arguments); } @@ -193,7 +178,7 @@ wcstring event_get_desc( event_t *e ) break; case EVENT_VARIABLE: - result = format_string(_(L"handler for variable '%ls'"), e->param1.variable ); + result = format_string(_(L"handler for variable '%ls'"), e->str_param1.c_str() ); break; case EVENT_EXIT: @@ -224,7 +209,7 @@ wcstring event_get_desc( event_t *e ) } case EVENT_GENERIC: - result = format_string(_(L"handler for generic event '%ls'"), e->param1.param ); + result = format_string(_(L"handler for generic event '%ls'"), e->str_param1.c_str() ); break; default: @@ -257,7 +242,6 @@ void event_remove( event_t *criterion ) { size_t i; event_list_t new_list; - event_t e; CHECK( criterion, ); @@ -287,10 +271,7 @@ void event_remove( event_t *criterion ) */ if( n->type == EVENT_SIGNAL ) { - e.type = EVENT_SIGNAL; - e.param1.signal = n->param1.signal; - e.function_name = 0; - + event_t e = event_t::signal_event(n->param1.signal); if( event_get( &e, 0 ) == 1 ) { signal_handle( e.param1.signal, 0 ); @@ -410,7 +391,7 @@ static void event_fire_internal( event_t *event ) */ wcstring buffer = criterion->function_name; - if (event->arguments) + if (event->arguments.get()) { for( j=0; j< event->arguments->size(); j++ ) { @@ -482,8 +463,6 @@ static void event_fire_delayed() while( sig_list[active_list].count > 0 ) { signal_list_t *lst; - event_t e; - e.arguments = new wcstring_list_t(1); //one element /* Switch signal lists @@ -495,9 +474,8 @@ static void event_fire_delayed() /* Set up */ - e.type=EVENT_SIGNAL; - e.function_name=0; - + event_t e = event_t::signal_event(0); + e.arguments.reset(new wcstring_list_t(1)); //one element lst = &sig_list[1-active_list]; if( lst->overflow ) @@ -522,7 +500,7 @@ static void event_fire_delayed() } } - delete e.arguments; + e.arguments.reset(NULL); } } @@ -586,39 +564,20 @@ void event_destroy() void event_free( event_t *e ) { CHECK( e, ); - - /* - When apropriate, we clear the argument vector - */ - if (e->arguments) delete e->arguments; - e->arguments = NULL; - - free( (void *)e->function_name ); - if( e->type == EVENT_VARIABLE ) - { - free( (void *)e->param1.variable ); - } - else if( e->type == EVENT_GENERIC ) - { - free( (void *)e->param1.param ); - } - free( e ); + delete e; } void event_fire_generic_internal(const wchar_t *name, ...) { - event_t ev; va_list va; wchar_t *arg; CHECK( name, ); - - ev.type = EVENT_GENERIC; - ev.param1.param = name; - ev.function_name=0; - - ev.arguments = new wcstring_list_t; + + event_t ev(EVENT_GENERIC); + ev.str_param1 = name; + ev.arguments.reset(new wcstring_list_t); va_start( va, name ); while( (arg=va_arg(va, wchar_t *) )!= 0 ) { @@ -627,9 +586,34 @@ void event_fire_generic_internal(const wchar_t *name, ...) va_end( va ); event_fire( &ev ); - delete ev.arguments; - ev.arguments = NULL; + ev.arguments.reset(NULL); } - +event_t event_t::signal_event(int sig) { + event_t event(EVENT_SIGNAL); + event.param1.signal = sig; + return event; +} +event_t event_t::variable_event(const wcstring &str) { + event_t event(EVENT_VARIABLE); + event.str_param1 = str; + return event; +} + +event_t event_t::generic_event(const wcstring &str) { + event_t event(EVENT_GENERIC); + event.str_param1 = str; + return event; +} + +event_t::event_t(const event_t &x) : + type(x.type), + param1(x.param1), + str_param1(x.str_param1), + function_name(x.function_name) +{ + const wcstring_list_t *ptr = x.arguments.get(); + if (ptr) + arguments.reset(new wcstring_list_t(*ptr)); +} |