tasn pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=40aa38c16487cb193905ca6f482711bd384e3aca
commit 40aa38c16487cb193905ca6f482711bd384e3aca Author: Tom Hacohen <t...@stosb.com> Date: Tue Aug 26 15:15:50 2014 +0100 Ecore exe: Fix compilation on windows. Hopefully. I don't have a winodws box to test it on. Go Jenkins go. --- src/lib/ecore/ecore_exe.c | 3 + src/lib/ecore/ecore_exe_win32.c | 280 +++++++++++++++++----------------------- 2 files changed, 119 insertions(+), 164 deletions(-) diff --git a/src/lib/ecore/ecore_exe.c b/src/lib/ecore/ecore_exe.c index 28dd36f..6ff6dba 100644 --- a/src/lib/ecore/ecore_exe.c +++ b/src/lib/ecore/ecore_exe.c @@ -990,6 +990,9 @@ ecore_exe_free(Ecore_Exe *obj) exes = eina_list_remove(exes, obj); IF_FREE(exe->tag); + + eo_del(exe); + return data; } diff --git a/src/lib/ecore/ecore_exe_win32.c b/src/lib/ecore/ecore_exe_win32.c index 9be2bbf..fcda3e7 100644 --- a/src/lib/ecore/ecore_exe_win32.c +++ b/src/lib/ecore/ecore_exe_win32.c @@ -44,11 +44,8 @@ static Ecore_Exe *exes = NULL; static int run_pri = NORMAL_PRIORITY_CLASS; -struct _Ecore_Exe +struct _Ecore_Exe_Data { - EINA_INLIST; - ECORE_MAGIC; - char *cmd; char *tag; @@ -93,6 +90,7 @@ struct _Ecore_Exe Eina_Bool is_suspended : 1; }; +typedef struct _Ecore_Exe_Data Ecore_Exe_Data; static void _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_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; e = calloc(1, sizeof(Ecore_Exe_Event_Del)); if (!e) return 0; - exe = (Ecore_Exe *)data; - /* FIXME : manage the STILL_ACTIVE returned error */ if (!GetExitCodeProcess(exe->process, &exit_code)) { @@ -149,7 +146,7 @@ _ecore_exe_close_cb(void *data, e->exit_code = exit_code; e->exited = 1; e->pid = exe->process_id; - e->exe = exe; + e->exe = obj; ecore_event_add(ECORE_EXE_EVENT_DEL, e, _ecore_exe_event_del_free, NULL); @@ -163,15 +160,14 @@ static unsigned int __stdcall _ecore_exe_pipe_read_thread_cb(void *data) { 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; char *current_buf = NULL; DWORD size; DWORD current_size = 0; BOOL res; - exe = (Ecore_Exe *)data; - while (!exe->close_threads) { 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_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) { ecore_event_add(ECORE_EXE_EVENT_DATA, event_data, _ecore_exe_event_exe_data_free, NULL); + eo_do(obj, eo_event_callback_call(ECORE_EXE_EVENT_DATA_GET, event_data)); } current_buf = NULL; @@ -221,15 +218,14 @@ static unsigned int __stdcall _ecore_exe_pipe_error_thread_cb(void *data) { 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; char *current_buf = NULL; DWORD size; DWORD current_size = 0; BOOL res; - exe = (Ecore_Exe *)data; - while (!exe->close_threads) { 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_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) { ecore_event_add(ECORE_EXE_EVENT_ERROR, event_data, _ecore_exe_event_exe_data_free, NULL); + eo_do(obj, eo_event_callback_call(ECORE_EXE_EVENT_DATA_ERROR, event_data)); } current_buf = NULL; @@ -276,8 +273,9 @@ _ecore_exe_pipe_error_thread_cb(void *data) } 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 }; int i = 0; @@ -320,10 +318,10 @@ static BOOL CALLBACK _ecore_exe_enum_windows_procedure(HWND window, LPARAM data) { - Ecore_Exe *exe; + Ecore_Exe *exe = data; + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); DWORD thread_id; - exe = (Ecore_Exe *)data; thread_id = GetWindowThreadProcessId(window, NULL); if (thread_id == exe->thread_id) @@ -486,7 +484,7 @@ ecore_exe_pipe_run(const char *exe_cmd, SECURITY_ATTRIBUTES sa; STARTUPINFO si; PROCESS_INFORMATION pi; - Ecore_Exe *exe; + Ecore_Exe *obj; Ecore_Exe_Event_Add *e; Eina_Bool use_sh = EINA_FALSE; const char *shell = NULL; @@ -498,8 +496,9 @@ ecore_exe_pipe_run(const char *exe_cmd, if (!exe_cmd || !*exe_cmd) return NULL; - exe = calloc(1, sizeof(Ecore_Exe)); - if (!exe) + obj = eo_add(MY_CLASS, NULL, ecore_obj_exe_command_set(exe_cmd, flags)); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!obj) return NULL; 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) */ /* goto close_pipe_write; */ - ECORE_MAGIC_SET(exe, ECORE_MAGIC_EXE); exe->process = pi.hProcess; exe->process_thread = pi.hThread; exe->process_id = pi.dwProcessId; @@ -617,7 +615,7 @@ ecore_exe_pipe_run(const char *exe_cmd, exe->data = (void *)data; exe->h_close = ecore_main_win32_handler_add(exe->process, - _ecore_exe_close_cb, exe); + _ecore_exe_close_cb, obj); if (!exe->h_close) 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), - EINA_INLIST_GET(exe)); + EINA_INLIST_GET(obj)); e = (Ecore_Exe_Event_Add *)calloc(1, sizeof(Ecore_Exe_Event_Add)); if (!e) goto delete_h_close; - e->exe = exe; + e->exe = obj; ecore_event_add(ECORE_EXE_EVENT_ADD, e, _ecore_exe_event_add_free, NULL); - return exe; + return obj; delete_h_close: ecore_main_win32_handler_del(exe->h_close); @@ -651,13 +649,13 @@ delete_h_close: if (exe->pipe_write.child_pipe_x) CloseHandle(exe->pipe_write.child_pipe_x); close_pipe_error: - _ecore_exe_threads_terminate(exe); + _ecore_exe_threads_terminate(obj); if (exe->pipe_error.child_pipe) CloseHandle(exe->pipe_error.child_pipe); if (exe->pipe_error.child_pipe_x) CloseHandle(exe->pipe_error.child_pipe_x); close_pipe_read: - _ecore_exe_threads_terminate(exe); + _ecore_exe_threads_terminate(obj); if (exe->pipe_read.child_pipe) CloseHandle(exe->pipe_read.child_pipe); if (exe->pipe_read.child_pipe_x) @@ -665,27 +663,24 @@ delete_h_close: free_exe_cmd: free(exe->cmd); free_exe: - free(exe); + eo_del(obj); return NULL; } EAPI void -ecore_exe_callback_pre_free_set(Ecore_Exe *exe, +ecore_exe_callback_pre_free_set(Ecore_Exe *obj, Ecore_Exe_Cb func) { - EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, - "ecore_exe_callback_pre_free_set"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; + exe->pre_free_cb = func; } EAPI Eina_Bool -ecore_exe_send(Ecore_Exe *exe, +ecore_exe_send(Ecore_Exe *obj, const void *data, int size) { @@ -693,17 +688,14 @@ ecore_exe_send(Ecore_Exe *exe, DWORD num_exe; BOOL res; - EINA_MAIN_LOOP_CHECK_RETURN_VAL(EINA_FALSE); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_send"); - return EINA_FALSE; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return EINA_FALSE; if (exe->close_stdin) { ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p", - exe, size, data); + obj, size, data); return EINA_FALSE; } @@ -719,7 +711,7 @@ ecore_exe_send(Ecore_Exe *exe, if (!res || num_exe == 0) { ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p", - exe, size, data); + obj, size, data); return EINA_FALSE; } @@ -727,14 +719,13 @@ ecore_exe_send(Ecore_Exe *exe, } EAPI void -ecore_exe_close_stdin(Ecore_Exe *exe) +ecore_exe_close_stdin(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_close_stdin"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; + exe->close_stdin = 1; } @@ -749,20 +740,16 @@ ecore_exe_auto_limits_set(Ecore_Exe *exe EINA_UNUSED, } 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_Event_Data *e = NULL; unsigned char *inbuf; DWORD inbuf_num; Eina_Bool is_buffered = EINA_FALSE; - - EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_event_data_get"); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) return NULL; - } /* Sort out what sort of event we are. */ 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)); if (e) { - e->exe = exe; + e->exe = obj; e->data = inbuf; e->size = inbuf_num; @@ -876,17 +863,14 @@ ecore_exe_event_data_free(Ecore_Exe_Event_Data *e) } EAPI void * -ecore_exe_free(Ecore_Exe *exe) +ecore_exe_free(Ecore_Exe *obj) { void *data; if (!exe) return NULL; - EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_free"); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) return NULL; - } 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)); IF_FREE(exe->tag); - ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE); - free(exe); + eo_del(exe); return data; } 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); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pid_get"); - return -1; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return -1; + return exe->process_id; } EAPI void -ecore_exe_tag_set(Ecore_Exe *exe, +ecore_exe_tag_set(Ecore_Exe *obj, const char *tag) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_tag_set"); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) return; - } + IF_FREE(exe->tag); if (tag) exe->tag = strdup(tag); @@ -950,79 +931,71 @@ ecore_exe_tag_set(Ecore_Exe *exe, } 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); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_tag_get"); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) return NULL; - } + return exe->tag; } 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); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_cmd_get"); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) return NULL; - } + return exe->cmd; } 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); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_data_get"); - return NULL; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return NULL; + return exe->data; } EAPI void * -ecore_exe_data_set(Ecore_Exe *exe, +ecore_exe_data_set(Ecore_Exe *obj, void *data) { void *ret; EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, __func__); + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) return NULL; - } + ret = exe->data; exe->data = data; return ret; } 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); - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_data_get"); - return 0; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return 0; + return exe->flags; } EAPI void -ecore_exe_pause(Ecore_Exe *exe) +ecore_exe_pause(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_pause"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; if (exe->is_suspended) return; @@ -1032,14 +1005,12 @@ ecore_exe_pause(Ecore_Exe *exe) } EAPI void -ecore_exe_continue(Ecore_Exe *exe) +ecore_exe_continue(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_continue"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; if (!exe->is_suspended) return; @@ -1049,99 +1020,80 @@ ecore_exe_continue(Ecore_Exe *exe) } EAPI void -ecore_exe_interrupt(Ecore_Exe *exe) +ecore_exe_interrupt(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_interrupt"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; CloseHandle(exe->process_thread); exe->process_thread = NULL; CloseHandle(exe->process); exe->process = NULL; 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 -ecore_exe_quit(Ecore_Exe *exe) +ecore_exe_quit(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_quit"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; CloseHandle(exe->process_thread); exe->process_thread = NULL; CloseHandle(exe->process); exe->process = NULL; 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 -ecore_exe_terminate(Ecore_Exe *exe) +ecore_exe_terminate(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_terminate"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; + /* CloseHandle(exe->thread); */ CloseHandle(exe->process); exe->process = NULL; 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 -ecore_exe_kill(Ecore_Exe *exe) +ecore_exe_kill(Ecore_Exe *obj) { EINA_MAIN_LOOP_CHECK_RETURN; - if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE)) - { - ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE, "ecore_exe_kill"); - return; - } + Ecore_Exe_Data *exe = eo_data_scope_get(obj, ECORE_EXE_CLASS); + if (!exe) + return; CloseHandle(exe->process_thread); exe->process_thread = NULL; CloseHandle(exe->process); exe->process = NULL; 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 -ecore_exe_signal(Ecore_Exe *exe, +ecore_exe_signal(Ecore_Exe *exe 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 */ } 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 */ } + +#include "ecore_exe.eo.c" --