From 2fcd434e3cb7def10b002c6ef1845634369bf7bb Mon Sep 17 00:00:00 2001 From: Al Poole Date: Sat, 9 Sep 2017 11:19:51 +0100 Subject: [PATCH] edi_exe: Don't use global variables. Globals are unnecessary here. --- src/lib/edi_exe.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/lib/edi_exe.c b/src/lib/edi_exe.c index 0fa16eb..89d347b 100644 --- a/src/lib/edi_exe.c +++ b/src/lib/edi_exe.c @@ -10,12 +10,10 @@ #include "Edi.h" #include "edi_private.h" -static Ecore_Event_Handler *_edi_exe_handler = NULL; -static Ecore_Event_Handler *_edi_exe_notify_handler = NULL; - typedef struct _Edi_Exe_Args { void ((*func)(int, void *)); void *data; + Ecore_Event_Handler *handler; } Edi_Exe_Args; static Eina_Bool @@ -31,12 +29,12 @@ _edi_exe_notify_data_cb(void *data, int type EINA_UNUSED, void *event EINA_UNUSE args->func(*status, args->data); - ecore_event_handler_del(_edi_exe_notify_handler); - _edi_exe_notify_handler = NULL; + ecore_event_handler_del(args->handler); + args->handler = NULL; free(args); - return EINA_FALSE; + return ECORE_CALLBACK_DONE; } EAPI Eina_Bool @@ -44,16 +42,13 @@ edi_exe_notify_handle(const char *name, void ((*func)(int, void *)), void *data) { Edi_Exe_Args *args; - if (_edi_exe_notify_handler) return EINA_FALSE; - /* These are UNIX domain sockets, no need to clean up */ ecore_con_server_add(ECORE_CON_LOCAL_USER, name, 0, NULL); args = malloc(sizeof(Edi_Exe_Args)); args->func = func; args->data = data; - - _edi_exe_notify_handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _edi_exe_notify_data_cb, args); + args->handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _edi_exe_notify_data_cb, args); return EINA_TRUE; } @@ -62,21 +57,24 @@ static Eina_Bool _edi_exe_event_done_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event) { Ecore_Exe_Event_Del *ev; + const char *name; Ecore_Con_Server *srv; - const char *name = data; + Edi_Exe_Args *args = data; ev = event; if (!ev->exe) return ECORE_CALLBACK_RENEW; + name = args->data; /* These are UNIX domain sockets, no need to clean up */ srv = ecore_con_server_connect(ECORE_CON_LOCAL_USER, name, 0, NULL); ecore_con_server_send(srv, &ev->exit_code, sizeof(int *)); ecore_con_server_flush(srv); - ecore_event_handler_del(_edi_exe_handler); - _edi_exe_handler = NULL; + ecore_event_handler_del(args->handler); + + free(args); return ECORE_CALLBACK_DONE; } @@ -84,14 +82,16 @@ _edi_exe_event_done_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event EAPI void edi_exe_notify(const char *name, const char *command) { - if (_edi_exe_handler) return; + Edi_Exe_Args *args; ecore_exe_pipe_run(command, ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR | ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, NULL); - _edi_exe_handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_exe_event_done_cb, name); + args = malloc(sizeof(Edi_Exe_Args)); + args->data = (char *)name; + args->handler = ecore_event_handler_add(ECORE_EXE_EVENT_DEL, _edi_exe_event_done_cb, args); } EAPI int