Ecore exe: Fix compilation on windows.

Hopefully. I don't have a winodws box to test it on. Go Jenkins go.
This commit is contained in:
Tom Hacohen 2014-08-26 15:15:50 +01:00
parent 1bf49ea8e7
commit 40aa38c164
2 changed files with 119 additions and 164 deletions

View File

@ -990,6 +990,9 @@ ecore_exe_free(Ecore_Exe *obj)
exes = eina_list_remove(exes, obj); exes = eina_list_remove(exes, obj);
IF_FREE(exe->tag); IF_FREE(exe->tag);
eo_del(exe);
return data; return data;
} }

View File

@ -44,11 +44,8 @@ static Ecore_Exe *exes = NULL;
static int run_pri = NORMAL_PRIORITY_CLASS; static int run_pri = NORMAL_PRIORITY_CLASS;
struct _Ecore_Exe struct _Ecore_Exe_Data
{ {
EINA_INLIST;
ECORE_MAGIC;
char *cmd; char *cmd;
char *tag; char *tag;
@ -93,6 +90,7 @@ struct _Ecore_Exe
Eina_Bool is_suspended : 1; Eina_Bool is_suspended : 1;
}; };
typedef struct _Ecore_Exe_Data Ecore_Exe_Data;
static void static void
_ecore_exe_event_add_free(void *data EINA_UNUSED, _ecore_exe_event_add_free(void *data EINA_UNUSED,
@ -128,14 +126,13 @@ _ecore_exe_close_cb(void *data,
Ecore_Win32_Handler *wh EINA_UNUSED) Ecore_Win32_Handler *wh EINA_UNUSED)
{ {
Ecore_Exe_Event_Del *e; Ecore_Exe_Event_Del *e;
Ecore_Exe *exe; Ecore_Exe *obj = data;
Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
DWORD exit_code = 0; DWORD exit_code = 0;
e = calloc(1, sizeof(Ecore_Exe_Event_Del)); e = calloc(1, sizeof(Ecore_Exe_Event_Del));
if (!e) return 0; if (!e) return 0;
exe = (Ecore_Exe *)data;
/* FIXME : manage the STILL_ACTIVE returned error */ /* FIXME : manage the STILL_ACTIVE returned error */
if (!GetExitCodeProcess(exe->process, &exit_code)) if (!GetExitCodeProcess(exe->process, &exit_code))
{ {
@ -149,7 +146,7 @@ _ecore_exe_close_cb(void *data,
e->exit_code = exit_code; e->exit_code = exit_code;
e->exited = 1; e->exited = 1;
e->pid = exe->process_id; e->pid = exe->process_id;
e->exe = exe; e->exe = obj;
ecore_event_add(ECORE_EXE_EVENT_DEL, e, ecore_event_add(ECORE_EXE_EVENT_DEL, e,
_ecore_exe_event_del_free, NULL); _ecore_exe_event_del_free, NULL);
@ -163,15 +160,14 @@ static unsigned int __stdcall
_ecore_exe_pipe_read_thread_cb(void *data) _ecore_exe_pipe_read_thread_cb(void *data)
{ {
char buf[64]; char buf[64];
Ecore_Exe *exe; Ecore_Exe *obj = data;
Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
Ecore_Exe_Event_Data *event_data; Ecore_Exe_Event_Data *event_data;
char *current_buf = NULL; char *current_buf = NULL;
DWORD size; DWORD size;
DWORD current_size = 0; DWORD current_size = 0;
BOOL res; BOOL res;
exe = (Ecore_Exe *)data;
while (!exe->close_threads) while (!exe->close_threads)
{ {
if (!PeekNamedPipe(exe->pipe_read.child_pipe, if (!PeekNamedPipe(exe->pipe_read.child_pipe,
@ -200,12 +196,13 @@ _ecore_exe_pipe_read_thread_cb(void *data)
exe->pipe_read.data_buf = current_buf; exe->pipe_read.data_buf = current_buf;
exe->pipe_read.data_size = current_size; exe->pipe_read.data_size = current_size;
event_data = ecore_exe_event_data_get(exe, ECORE_EXE_PIPE_READ); event_data = ecore_exe_event_data_get(obj, ECORE_EXE_PIPE_READ);
if (event_data) if (event_data)
{ {
ecore_event_add(ECORE_EXE_EVENT_DATA, event_data, ecore_event_add(ECORE_EXE_EVENT_DATA, event_data,
_ecore_exe_event_exe_data_free, _ecore_exe_event_exe_data_free,
NULL); NULL);
eo_do(obj, eo_event_callback_call(ECORE_EXE_EVENT_DATA_GET, event_data));
} }
current_buf = NULL; current_buf = NULL;
@ -221,15 +218,14 @@ static unsigned int __stdcall
_ecore_exe_pipe_error_thread_cb(void *data) _ecore_exe_pipe_error_thread_cb(void *data)
{ {
char buf[64]; char buf[64];
Ecore_Exe *exe; Ecore_Exe *obj = data;
Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
Ecore_Exe_Event_Data *event_data; Ecore_Exe_Event_Data *event_data;
char *current_buf = NULL; char *current_buf = NULL;
DWORD size; DWORD size;
DWORD current_size = 0; DWORD current_size = 0;
BOOL res; BOOL res;
exe = (Ecore_Exe *)data;
while (!exe->close_threads) while (!exe->close_threads)
{ {
if (!PeekNamedPipe(exe->pipe_error.child_pipe, if (!PeekNamedPipe(exe->pipe_error.child_pipe,
@ -258,12 +254,13 @@ _ecore_exe_pipe_error_thread_cb(void *data)
exe->pipe_error.data_buf = current_buf; exe->pipe_error.data_buf = current_buf;
exe->pipe_error.data_size = current_size; exe->pipe_error.data_size = current_size;
event_data = ecore_exe_event_data_get(exe, ECORE_EXE_PIPE_ERROR); event_data = ecore_exe_event_data_get(obj, ECORE_EXE_PIPE_ERROR);
if (event_data) if (event_data)
{ {
ecore_event_add(ECORE_EXE_EVENT_ERROR, event_data, ecore_event_add(ECORE_EXE_EVENT_ERROR, event_data,
_ecore_exe_event_exe_data_free, _ecore_exe_event_exe_data_free,
NULL); NULL);
eo_do(obj, eo_event_callback_call(ECORE_EXE_EVENT_DATA_ERROR, event_data));
} }
current_buf = NULL; current_buf = NULL;
@ -276,8 +273,9 @@ _ecore_exe_pipe_error_thread_cb(void *data)
} }
static void static void
_ecore_exe_threads_terminate(Ecore_Exe *exe) _ecore_exe_threads_terminate(Ecore_Exe *obj)
{ {
Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
HANDLE threads[2] = { NULL, NULL }; HANDLE threads[2] = { NULL, NULL };
int i = 0; int i = 0;
@ -320,10 +318,10 @@ static BOOL CALLBACK
_ecore_exe_enum_windows_procedure(HWND window, _ecore_exe_enum_windows_procedure(HWND window,
LPARAM data) LPARAM data)
{ {
Ecore_Exe *exe; Ecore_Exe *exe = data;
Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
DWORD thread_id; DWORD thread_id;
exe = (Ecore_Exe *)data;
thread_id = GetWindowThreadProcessId(window, NULL); thread_id = GetWindowThreadProcessId(window, NULL);
if (thread_id == exe->thread_id) if (thread_id == exe->thread_id)
@ -486,7 +484,7 @@ ecore_exe_pipe_run(const char *exe_cmd,
SECURITY_ATTRIBUTES sa; SECURITY_ATTRIBUTES sa;
STARTUPINFO si; STARTUPINFO si;
PROCESS_INFORMATION pi; PROCESS_INFORMATION pi;
Ecore_Exe *exe; Ecore_Exe *obj;
Ecore_Exe_Event_Add *e; Ecore_Exe_Event_Add *e;
Eina_Bool use_sh = EINA_FALSE; Eina_Bool use_sh = EINA_FALSE;
const char *shell = NULL; const char *shell = NULL;
@ -498,8 +496,9 @@ ecore_exe_pipe_run(const char *exe_cmd,
if (!exe_cmd || !*exe_cmd) if (!exe_cmd || !*exe_cmd)
return NULL; return NULL;
exe = calloc(1, sizeof(Ecore_Exe)); obj = eo_add(MY_CLASS, NULL, ecore_obj_exe_command_set(exe_cmd, flags));
if (!exe) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
if (!obj)
return NULL; return NULL;
if ((flags & ECORE_EXE_PIPE_AUTO) && (!(flags & ECORE_EXE_PIPE_ERROR)) if ((flags & ECORE_EXE_PIPE_AUTO) && (!(flags & ECORE_EXE_PIPE_ERROR))
@ -609,7 +608,6 @@ ecore_exe_pipe_run(const char *exe_cmd,
/* if (WaitForInputIdle(pi.hProcess, INFINITE) == WAIT_FAILED) */ /* if (WaitForInputIdle(pi.hProcess, INFINITE) == WAIT_FAILED) */
/* goto close_pipe_write; */ /* goto close_pipe_write; */
ECORE_MAGIC_SET(exe, ECORE_MAGIC_EXE);
exe->process = pi.hProcess; exe->process = pi.hProcess;
exe->process_thread = pi.hThread; exe->process_thread = pi.hThread;
exe->process_id = pi.dwProcessId; exe->process_id = pi.dwProcessId;
@ -617,7 +615,7 @@ ecore_exe_pipe_run(const char *exe_cmd,
exe->data = (void *)data; exe->data = (void *)data;
exe->h_close = ecore_main_win32_handler_add(exe->process, exe->h_close = ecore_main_win32_handler_add(exe->process,
_ecore_exe_close_cb, exe); _ecore_exe_close_cb, obj);
if (!exe->h_close) if (!exe->h_close)
goto close_process; goto close_process;
@ -628,17 +626,17 @@ ecore_exe_pipe_run(const char *exe_cmd,
} }
exes = (Ecore_Exe *)eina_inlist_append(EINA_INLIST_GET(exes), exes = (Ecore_Exe *)eina_inlist_append(EINA_INLIST_GET(exes),
EINA_INLIST_GET(exe)); EINA_INLIST_GET(obj));
e = (Ecore_Exe_Event_Add *)calloc(1, sizeof(Ecore_Exe_Event_Add)); e = (Ecore_Exe_Event_Add *)calloc(1, sizeof(Ecore_Exe_Event_Add));
if (!e) goto delete_h_close; if (!e) goto delete_h_close;
e->exe = exe; e->exe = obj;
ecore_event_add(ECORE_EXE_EVENT_ADD, e, ecore_event_add(ECORE_EXE_EVENT_ADD, e,
_ecore_exe_event_add_free, NULL); _ecore_exe_event_add_free, NULL);
return exe; return obj;
delete_h_close: delete_h_close:
ecore_main_win32_handler_del(exe->h_close); ecore_main_win32_handler_del(exe->h_close);
@ -651,13 +649,13 @@ delete_h_close:
if (exe->pipe_write.child_pipe_x) if (exe->pipe_write.child_pipe_x)
CloseHandle(exe->pipe_write.child_pipe_x); CloseHandle(exe->pipe_write.child_pipe_x);
close_pipe_error: close_pipe_error:
_ecore_exe_threads_terminate(exe); _ecore_exe_threads_terminate(obj);
if (exe->pipe_error.child_pipe) if (exe->pipe_error.child_pipe)
CloseHandle(exe->pipe_error.child_pipe); CloseHandle(exe->pipe_error.child_pipe);
if (exe->pipe_error.child_pipe_x) if (exe->pipe_error.child_pipe_x)
CloseHandle(exe->pipe_error.child_pipe_x); CloseHandle(exe->pipe_error.child_pipe_x);
close_pipe_read: close_pipe_read:
_ecore_exe_threads_terminate(exe); _ecore_exe_threads_terminate(obj);
if (exe->pipe_read.child_pipe) if (exe->pipe_read.child_pipe)
CloseHandle(exe->pipe_read.child_pipe); CloseHandle(exe->pipe_read.child_pipe);
if (exe->pipe_read.child_pipe_x) if (exe->pipe_read.child_pipe_x)
@ -665,27 +663,24 @@ delete_h_close:
free_exe_cmd: free_exe_cmd:
free(exe->cmd); free(exe->cmd);
free_exe: free_exe:
free(exe); eo_del(obj);
return NULL; return NULL;
} }
EAPI void EAPI void
ecore_exe_callback_pre_free_set(Ecore_Exe *exe, ecore_exe_callback_pre_free_set(Ecore_Exe *obj,
Ecore_Exe_Cb func) Ecore_Exe_Cb func)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) if (!exe)
{ return;
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE,
"ecore_exe_callback_pre_free_set");
return;
}
exe->pre_free_cb = func; exe->pre_free_cb = func;
} }
EAPI Eina_Bool EAPI Eina_Bool
ecore_exe_send(Ecore_Exe *exe, ecore_exe_send(Ecore_Exe *obj,
const void *data, const void *data,
int size) int size)
{ {
@ -693,17 +688,14 @@ ecore_exe_send(Ecore_Exe *exe,
DWORD num_exe; DWORD num_exe;
BOOL res; BOOL res;
EINA_MAIN_LOOP_CHECK_RETURN_VAL(EINA_FALSE); Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) if (!exe)
{ return EINA_FALSE;
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_send");
return EINA_FALSE;
}
if (exe->close_stdin) if (exe->close_stdin)
{ {
ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p", ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p",
exe, size, data); obj, size, data);
return EINA_FALSE; return EINA_FALSE;
} }
@ -719,7 +711,7 @@ ecore_exe_send(Ecore_Exe *exe,
if (!res || num_exe == 0) if (!res || num_exe == 0)
{ {
ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p", ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p",
exe, size, data); obj, size, data);
return EINA_FALSE; return EINA_FALSE;
} }
@ -727,14 +719,13 @@ ecore_exe_send(Ecore_Exe *exe,
} }
EAPI void EAPI void
ecore_exe_close_stdin(Ecore_Exe *exe) ecore_exe_close_stdin(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_close_stdin"); return;
return;
}
exe->close_stdin = 1; exe->close_stdin = 1;
} }
@ -749,20 +740,16 @@ ecore_exe_auto_limits_set(Ecore_Exe *exe EINA_UNUSED,
} }
EAPI Ecore_Exe_Event_Data * EAPI Ecore_Exe_Event_Data *
ecore_exe_event_data_get(Ecore_Exe *exe, ecore_exe_event_data_get(Ecore_Exe *obj,
Ecore_Exe_Flags flags) Ecore_Exe_Flags flags)
{ {
Ecore_Exe_Event_Data *e = NULL; Ecore_Exe_Event_Data *e = NULL;
unsigned char *inbuf; unsigned char *inbuf;
DWORD inbuf_num; DWORD inbuf_num;
Eina_Bool is_buffered = EINA_FALSE; Eina_Bool is_buffered = EINA_FALSE;
Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); if (!exe)
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_event_data_get");
return NULL; return NULL;
}
/* Sort out what sort of event we are. */ /* Sort out what sort of event we are. */
if (flags & ECORE_EXE_PIPE_READ) if (flags & ECORE_EXE_PIPE_READ)
@ -797,7 +784,7 @@ ecore_exe_event_data_get(Ecore_Exe *exe,
e = calloc(1, sizeof(Ecore_Exe_Event_Data)); e = calloc(1, sizeof(Ecore_Exe_Event_Data));
if (e) if (e)
{ {
e->exe = exe; e->exe = obj;
e->data = inbuf; e->data = inbuf;
e->size = inbuf_num; e->size = inbuf_num;
@ -876,17 +863,14 @@ ecore_exe_event_data_free(Ecore_Exe_Event_Data *e)
} }
EAPI void * EAPI void *
ecore_exe_free(Ecore_Exe *exe) ecore_exe_free(Ecore_Exe *obj)
{ {
void *data; void *data;
if (!exe) return NULL; if (!exe) return NULL;
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) if (!exe)
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_free");
return NULL; return NULL;
}
data = exe->data; data = exe->data;
@ -914,34 +898,31 @@ ecore_exe_free(Ecore_Exe *exe)
exes = (Ecore_Exe *)eina_inlist_remove(EINA_INLIST_GET(exes), EINA_INLIST_GET(exe)); exes = (Ecore_Exe *)eina_inlist_remove(EINA_INLIST_GET(exes), EINA_INLIST_GET(exe));
IF_FREE(exe->tag); IF_FREE(exe->tag);
ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE); eo_del(exe);
free(exe);
return data; return data;
} }
EAPI pid_t EAPI pid_t
ecore_exe_pid_get(const Ecore_Exe *exe) ecore_exe_pid_get(const Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); EINA_MAIN_LOOP_CHECK_RETURN_VAL(0);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pid_get"); return -1;
return -1;
}
return exe->process_id; return exe->process_id;
} }
EAPI void EAPI void
ecore_exe_tag_set(Ecore_Exe *exe, ecore_exe_tag_set(Ecore_Exe *obj,
const char *tag) const char *tag)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_tag_set");
return; return;
}
IF_FREE(exe->tag); IF_FREE(exe->tag);
if (tag) if (tag)
exe->tag = strdup(tag); exe->tag = strdup(tag);
@ -950,79 +931,71 @@ ecore_exe_tag_set(Ecore_Exe *exe,
} }
EAPI const char * EAPI const char *
ecore_exe_tag_get(const Ecore_Exe *exe) ecore_exe_tag_get(const Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) if (!exe)
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_tag_get");
return NULL; return NULL;
}
return exe->tag; return exe->tag;
} }
EAPI const char * EAPI const char *
ecore_exe_cmd_get(const Ecore_Exe *exe) ecore_exe_cmd_get(const Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_cmd_get");
return NULL; return NULL;
}
return exe->cmd; return exe->cmd;
} }
EAPI void * EAPI void *
ecore_exe_data_get(const Ecore_Exe *exe) ecore_exe_data_get(const Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_data_get"); return NULL;
return NULL;
}
return exe->data; return exe->data;
} }
EAPI void * EAPI void *
ecore_exe_data_set(Ecore_Exe *exe, ecore_exe_data_set(Ecore_Exe *obj,
void *data) void *data)
{ {
void *ret; void *ret;
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, __func__);
return NULL; return NULL;
}
ret = exe->data; ret = exe->data;
exe->data = data; exe->data = data;
return ret; return ret;
} }
EAPI Ecore_Exe_Flags EAPI Ecore_Exe_Flags
ecore_exe_flags_get(const Ecore_Exe *exe) ecore_exe_flags_get(const Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN_VAL(0); EINA_MAIN_LOOP_CHECK_RETURN_VAL(0);
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_data_get"); return 0;
return 0;
}
return exe->flags; return exe->flags;
} }
EAPI void EAPI void
ecore_exe_pause(Ecore_Exe *exe) ecore_exe_pause(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pause"); return;
return;
}
if (exe->is_suspended) if (exe->is_suspended)
return; return;
@ -1032,14 +1005,12 @@ ecore_exe_pause(Ecore_Exe *exe)
} }
EAPI void EAPI void
ecore_exe_continue(Ecore_Exe *exe) ecore_exe_continue(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_continue"); return;
return;
}
if (!exe->is_suspended) if (!exe->is_suspended)
return; return;
@ -1049,99 +1020,80 @@ ecore_exe_continue(Ecore_Exe *exe)
} }
EAPI void EAPI void
ecore_exe_interrupt(Ecore_Exe *exe) ecore_exe_interrupt(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_interrupt"); return;
return;
}
CloseHandle(exe->process_thread); CloseHandle(exe->process_thread);
exe->process_thread = NULL; exe->process_thread = NULL;
CloseHandle(exe->process); CloseHandle(exe->process);
exe->process = NULL; exe->process = NULL;
exe->sig = ECORE_EXE_WIN32_SIGINT; exe->sig = ECORE_EXE_WIN32_SIGINT;
while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)exe)) ; while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)obj)) ;
} }
EAPI void EAPI void
ecore_exe_quit(Ecore_Exe *exe) ecore_exe_quit(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_quit"); return;
return;
}
CloseHandle(exe->process_thread); CloseHandle(exe->process_thread);
exe->process_thread = NULL; exe->process_thread = NULL;
CloseHandle(exe->process); CloseHandle(exe->process);
exe->process = NULL; exe->process = NULL;
exe->sig = ECORE_EXE_WIN32_SIGQUIT; exe->sig = ECORE_EXE_WIN32_SIGQUIT;
while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)exe)) ; while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)obj)) ;
} }
EAPI void EAPI void
ecore_exe_terminate(Ecore_Exe *exe) ecore_exe_terminate(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_terminate"); return;
return;
}
/* CloseHandle(exe->thread); */ /* CloseHandle(exe->thread); */
CloseHandle(exe->process); CloseHandle(exe->process);
exe->process = NULL; exe->process = NULL;
exe->sig = ECORE_EXE_WIN32_SIGTERM; exe->sig = ECORE_EXE_WIN32_SIGTERM;
while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)exe)) ; while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)obj)) ;
} }
EAPI void EAPI void
ecore_exe_kill(Ecore_Exe *exe) ecore_exe_kill(Ecore_Exe *obj)
{ {
EINA_MAIN_LOOP_CHECK_RETURN; EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS);
{ if (!exe)
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_kill"); return;
return;
}
CloseHandle(exe->process_thread); CloseHandle(exe->process_thread);
exe->process_thread = NULL; exe->process_thread = NULL;
CloseHandle(exe->process); CloseHandle(exe->process);
exe->process = NULL; exe->process = NULL;
exe->sig = ECORE_EXE_WIN32_SIGKILL; exe->sig = ECORE_EXE_WIN32_SIGKILL;
while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)exe)) ; while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)obj)) ;
} }
EAPI void EAPI void
ecore_exe_signal(Ecore_Exe *exe, ecore_exe_signal(Ecore_Exe *exe EINA_UNUSED,
int num EINA_UNUSED) int num EINA_UNUSED)
{ {
EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_signal");
return;
}
/* does nothing */ /* does nothing */
} }
EAPI void EAPI void
ecore_exe_hup(Ecore_Exe *exe) ecore_exe_hup(Ecore_Exe *exe EINA_UNUSED)
{ {
EINA_MAIN_LOOP_CHECK_RETURN;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_hup");
return;
}
/* does nothing */ /* does nothing */
} }
#include "ecore_exe.eo.c"