edi_exe: Don't use global variables.

Globals are unnecessary here.
This commit is contained in:
Al Poole 2017-09-09 11:19:51 +01:00
parent 84a515ce87
commit 2fcd434e3c
1 changed files with 15 additions and 15 deletions

View File

@ -10,12 +10,10 @@
#include "Edi.h" #include "Edi.h"
#include "edi_private.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 { typedef struct _Edi_Exe_Args {
void ((*func)(int, void *)); void ((*func)(int, void *));
void *data; void *data;
Ecore_Event_Handler *handler;
} Edi_Exe_Args; } Edi_Exe_Args;
static Eina_Bool 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); args->func(*status, args->data);
ecore_event_handler_del(_edi_exe_notify_handler); ecore_event_handler_del(args->handler);
_edi_exe_notify_handler = NULL; args->handler = NULL;
free(args); free(args);
return EINA_FALSE; return ECORE_CALLBACK_DONE;
} }
EAPI Eina_Bool EAPI Eina_Bool
@ -44,16 +42,13 @@ edi_exe_notify_handle(const char *name, void ((*func)(int, void *)), void *data)
{ {
Edi_Exe_Args *args; Edi_Exe_Args *args;
if (_edi_exe_notify_handler) return EINA_FALSE;
/* These are UNIX domain sockets, no need to clean up */ /* These are UNIX domain sockets, no need to clean up */
ecore_con_server_add(ECORE_CON_LOCAL_USER, name, 0, NULL); ecore_con_server_add(ECORE_CON_LOCAL_USER, name, 0, NULL);
args = malloc(sizeof(Edi_Exe_Args)); args = malloc(sizeof(Edi_Exe_Args));
args->func = func; args->func = func;
args->data = data; args->data = data;
args->handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _edi_exe_notify_data_cb, args);
_edi_exe_notify_handler = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb) _edi_exe_notify_data_cb, args);
return EINA_TRUE; 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) _edi_exe_event_done_cb(void *data EINA_UNUSED, int type EINA_UNUSED, void *event)
{ {
Ecore_Exe_Event_Del *ev; Ecore_Exe_Event_Del *ev;
const char *name;
Ecore_Con_Server *srv; Ecore_Con_Server *srv;
const char *name = data; Edi_Exe_Args *args = data;
ev = event; ev = event;
if (!ev->exe) return ECORE_CALLBACK_RENEW; if (!ev->exe) return ECORE_CALLBACK_RENEW;
name = args->data;
/* These are UNIX domain sockets, no need to clean up */ /* These are UNIX domain sockets, no need to clean up */
srv = ecore_con_server_connect(ECORE_CON_LOCAL_USER, name, 0, NULL); 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_send(srv, &ev->exit_code, sizeof(int *));
ecore_con_server_flush(srv); ecore_con_server_flush(srv);
ecore_event_handler_del(_edi_exe_handler); ecore_event_handler_del(args->handler);
_edi_exe_handler = NULL;
free(args);
return ECORE_CALLBACK_DONE; 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 EAPI void
edi_exe_notify(const char *name, const char *command) 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_run(command,
ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ | ECORE_EXE_PIPE_READ_LINE_BUFFERED | ECORE_EXE_PIPE_READ |
ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR | ECORE_EXE_PIPE_ERROR_LINE_BUFFERED | ECORE_EXE_PIPE_ERROR |
ECORE_EXE_PIPE_WRITE | ECORE_EXE_USE_SH, NULL); 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 EAPI int