forked from enlightenment/efl
Ecore exe: refactor and fix compilation on windows.
This is the first step towards splitting it nicely. This fixes compilation on windows (or so it seems from my testing) and takes out all the platform specific code (posix included) out of the main source file.
This commit is contained in:
parent
5551567847
commit
686acd88f7
|
@ -97,6 +97,7 @@ lib/ecore/ecore_exe_private.h \
|
|||
lib/ecore/ecore_private.h
|
||||
|
||||
if HAVE_WIN32
|
||||
lib_ecore_libecore_la_SOURCES += lib/ecore/ecore_exe_win32.c
|
||||
else
|
||||
EXTRA_DIST += lib/ecore/ecore_exe_ps3.c
|
||||
#if ECORE_HAVE_PS3
|
||||
|
@ -105,7 +106,7 @@ EXTRA_DIST += lib/ecore/ecore_exe_ps3.c
|
|||
#if ECORE_HAVE_EXOTIC
|
||||
#libecore_la_SOURCES +=
|
||||
#else
|
||||
lib_ecore_libecore_la_SOURCES += lib/ecore/ecore_signal.c
|
||||
lib_ecore_libecore_la_SOURCES += lib/ecore/ecore_signal.c lib/ecore/ecore_exe_posix.c
|
||||
#endif
|
||||
#endif
|
||||
endif
|
||||
|
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -1,3 +1,11 @@
|
|||
typedef enum
|
||||
{
|
||||
ECORE_EXE_WIN32_SIGINT,
|
||||
ECORE_EXE_WIN32_SIGQUIT,
|
||||
ECORE_EXE_WIN32_SIGTERM,
|
||||
ECORE_EXE_WIN32_SIGKILL
|
||||
} Ecore_Exe_Win32_Signal;
|
||||
|
||||
/* FIXME: Getting respawn to work
|
||||
*
|
||||
* There is no way that we can do anything about the internal state info of
|
||||
|
@ -101,9 +109,7 @@ struct _Ecore_Exe_Data
|
|||
|
||||
Eina_Bool close_threads : 1;
|
||||
Eina_Bool is_suspended : 1;
|
||||
#endif
|
||||
// FIXME: For now just waste memory on windows.
|
||||
// #else
|
||||
#else
|
||||
Ecore_Fd_Handler *write_fd_handler; /* the fd_handler to handle write to child - if this was used, or NULL if not */
|
||||
Ecore_Fd_Handler *read_fd_handler; /* the fd_handler to handle read from child - if this was used, or NULL if not */
|
||||
Ecore_Fd_Handler *error_fd_handler; /* the fd_handler to handle errors from child - if this was used, or NULL if not */
|
||||
|
@ -127,7 +133,7 @@ struct _Ecore_Exe_Data
|
|||
|
||||
Ecore_Timer *doomsday_clock; /* The Timer of Death. Muahahahaha. */
|
||||
void *doomsday_clock_dead; /* data for the doomsday clock */
|
||||
//#endif
|
||||
#endif
|
||||
|
||||
Ecore_Exe_Cb pre_free_cb;
|
||||
Eina_Bool close_stdin : 1;
|
||||
|
@ -135,18 +141,32 @@ struct _Ecore_Exe_Data
|
|||
|
||||
typedef struct _Ecore_Exe_Data Ecore_Exe_Data;
|
||||
|
||||
EAPI extern int ECORE_EXE_EVENT_ADD;
|
||||
EAPI extern int ECORE_EXE_EVENT_DEL;
|
||||
EAPI extern int ECORE_EXE_EVENT_DATA;
|
||||
EAPI extern int ECORE_EXE_EVENT_ERROR;
|
||||
extern Eina_List *_ecore_exe_exes;
|
||||
|
||||
#ifdef _WIN32
|
||||
void _win32_ecore_exe_run_priority_set(int pri);
|
||||
int _win32_ecore_exe_run_priority_get(void);
|
||||
Eo *_win32_ecore_exe_eo_base_finalize(Eo *obj, Ecore_Exe_Data *exe);
|
||||
Eina_Bool _win32_ecore_exe_send(Ecore_Exe *obj, Ecore_Exe_Data *exe, const void *data, int size);
|
||||
Ecore_Exe_Event_Data *ecore_exe_event_data_get(Ecore_Exe *obj, Ecore_Exe_Data *exe, Ecore_Exe_Flags flags);
|
||||
void _win32_ecore_exe_eo_base_destructor(Eo *obj, Ecore_Exe_Data *exe);
|
||||
void _win32_ecore_exe_pause(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _win32_ecore_exe_continue(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _win32_ecore_exe_interrupt(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _win32_ecore_exe_quit(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _win32_ecore_exe_terminate(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _win32_ecore_exe_kill(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
#endif
|
||||
Ecore_Exe *_ecore_exe_find(pid_t pid);
|
||||
void *_ecore_exe_event_del_new(void);
|
||||
void _ecore_exe_event_del_free(void *data EINA_UNUSED, void *ev);
|
||||
void _ecore_exe_event_exe_data_free(void *data EINA_UNUSED, void *ev);
|
||||
Ecore_Exe_Event_Add * _ecore_exe_event_add_new(void);
|
||||
void _ecore_exe_event_add_free(void *data EINA_UNUSED, void *ev);
|
||||
|
||||
void _impl_ecore_exe_run_priority_set(int pri);
|
||||
int _impl_ecore_exe_run_priority_get(void);
|
||||
void _impl_ecore_exe_auto_limits_set(Ecore_Exe *obj, Ecore_Exe_Data *exe, int start_bytes, int end_bytes, int start_lines, int end_lines);
|
||||
Eo *_impl_ecore_exe_eo_base_finalize(Eo *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_efl_control_suspend_set(Eo *obj EINA_UNUSED, Ecore_Exe_Data *exe, Eina_Bool suspend);
|
||||
Eina_Bool _impl_ecore_exe_send(Ecore_Exe *obj, Ecore_Exe_Data *exe, const void *data, int size);
|
||||
Ecore_Exe_Event_Data *_impl_ecore_exe_event_data_get(Ecore_Exe *obj, Ecore_Exe_Data *exe, Ecore_Exe_Flags flags);
|
||||
void _impl_ecore_exe_eo_base_destructor(Eo *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_pause(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_continue(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_interrupt(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_quit(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_terminate(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_kill(Ecore_Exe *obj, Ecore_Exe_Data *exe);
|
||||
void _impl_ecore_exe_signal(Ecore_Exe *obj, Ecore_Exe_Data *exe, int num);
|
||||
void _impl_ecore_exe_hup(Ecore_Exe *obj EINA_UNUSED, Ecore_Exe_Data *exe);
|
||||
|
|
|
@ -34,13 +34,7 @@
|
|||
|
||||
#define ECORE_EXE_WIN32_TIMEOUT 3000
|
||||
|
||||
typedef enum
|
||||
{
|
||||
ECORE_EXE_WIN32_SIGINT,
|
||||
ECORE_EXE_WIN32_SIGQUIT,
|
||||
ECORE_EXE_WIN32_SIGTERM,
|
||||
ECORE_EXE_WIN32_SIGKILL
|
||||
} Ecore_Exe_Win32_Signal;
|
||||
static int run_pri = ECORE_EXE_PRIORITY_INHERIT;
|
||||
|
||||
static Eina_Bool
|
||||
_ecore_exe_close_cb(void *data,
|
||||
|
@ -303,7 +297,7 @@ _ecore_exe_enum_windows_procedure(HWND window,
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_run_priority_set(int pri)
|
||||
_impl_ecore_exe_run_priority_set(int pri)
|
||||
{
|
||||
switch (pri)
|
||||
{
|
||||
|
@ -337,7 +331,7 @@ _win32_ecore_exe_run_priority_set(int pri)
|
|||
}
|
||||
|
||||
int
|
||||
_win32_ecore_exe_run_priority_get(void)
|
||||
_impl_ecore_exe_run_priority_get(void)
|
||||
{
|
||||
switch (run_pri)
|
||||
{
|
||||
|
@ -366,7 +360,7 @@ _win32_ecore_exe_run_priority_get(void)
|
|||
}
|
||||
|
||||
Eo *
|
||||
_win32_ecore_exe_eo_base_finalize(Eo *obj, Ecore_Exe_Data *exe);
|
||||
_impl_ecore_exe_eo_base_finalize(Eo *obj, Ecore_Exe_Data *exe)
|
||||
{
|
||||
char exe_cmd_buf[PATH_MAX];
|
||||
SECURITY_ATTRIBUTES sa;
|
||||
|
@ -378,8 +372,8 @@ _win32_ecore_exe_eo_base_finalize(Eo *obj, Ecore_Exe_Data *exe);
|
|||
|
||||
EINA_MAIN_LOOP_CHECK_RETURN_VAL(NULL);
|
||||
|
||||
DBG("Creating process %s", exe_cmd);
|
||||
const char *exe_cmd = exe->cmd;
|
||||
DBG("Creating process %s", exe_cmd);
|
||||
Ecore_Exe_Flags flags = exe->flags;
|
||||
|
||||
if ((flags & ECORE_EXE_PIPE_AUTO) && (!(flags & ECORE_EXE_PIPE_ERROR))
|
||||
|
@ -503,7 +497,7 @@ _win32_ecore_exe_eo_base_finalize(Eo *obj, Ecore_Exe_Data *exe);
|
|||
goto delete_h_close;
|
||||
}
|
||||
|
||||
exes = eina_list_append(exes, obj);
|
||||
_ecore_exe_exes = eina_list_append(_ecore_exe_exes, obj);
|
||||
|
||||
e = (Ecore_Exe_Event_Add *)calloc(1, sizeof(Ecore_Exe_Event_Add));
|
||||
if (!e) goto delete_h_close;
|
||||
|
@ -546,7 +540,7 @@ delete_h_close:
|
|||
}
|
||||
|
||||
Eina_Bool
|
||||
_win32_ecore_exe_send(Ecore_Exe *obj,
|
||||
_impl_ecore_exe_send(Ecore_Exe *obj,
|
||||
Ecore_Exe_Data *exe,
|
||||
const void *data,
|
||||
int size)
|
||||
|
@ -575,7 +569,7 @@ _win32_ecore_exe_send(Ecore_Exe *obj,
|
|||
}
|
||||
|
||||
Ecore_Exe_Event_Data *
|
||||
_win32_ecore_exe_event_data_get(Ecore_Exe *obj,
|
||||
_impl_ecore_exe_event_data_get(Ecore_Exe *obj,
|
||||
Ecore_Exe_Data *exe,
|
||||
Ecore_Exe_Flags flags)
|
||||
{
|
||||
|
@ -687,7 +681,7 @@ _win32_ecore_exe_event_data_get(Ecore_Exe *obj,
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_eo_base_destructor(Eo *obj, Ecore_Exe_Data *exe)
|
||||
_impl_ecore_exe_eo_base_destructor(Eo *obj, Ecore_Exe_Data *exe)
|
||||
{
|
||||
void *data;
|
||||
|
||||
|
@ -714,12 +708,12 @@ _win32_ecore_exe_eo_base_destructor(Eo *obj, Ecore_Exe_Data *exe)
|
|||
CloseHandle(exe->pipe_read.child_pipe_x);
|
||||
free(exe->cmd);
|
||||
|
||||
exes = eina_list_remove(exes, obj);
|
||||
_ecore_exe_exes = eina_list_remove(_ecore_exe_exes, obj);
|
||||
IF_FREE(exe->tag);
|
||||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_pause(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
||||
_impl_ecore_exe_pause(Ecore_Exe *obj EINA_UNUSED, Ecore_Exe_Data *exe)
|
||||
{
|
||||
if (exe->is_suspended)
|
||||
return;
|
||||
|
@ -729,7 +723,7 @@ _win32_ecore_exe_pause(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_continue(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
||||
_impl_ecore_exe_continue(Ecore_Exe *obj EINA_UNUSED, Ecore_Exe_Data *exe)
|
||||
{
|
||||
if (!exe->is_suspended)
|
||||
return;
|
||||
|
@ -739,13 +733,8 @@ _win32_ecore_exe_continue(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_interrupt(Ecore_Exe *obj)
|
||||
_impl_ecore_exe_interrupt(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
||||
{
|
||||
EINA_MAIN_LOOP_CHECK_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);
|
||||
|
@ -755,13 +744,8 @@ _win32_ecore_exe_interrupt(Ecore_Exe *obj)
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_quit(Ecore_Exe *obj)
|
||||
_impl_ecore_exe_quit(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
||||
{
|
||||
EINA_MAIN_LOOP_CHECK_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);
|
||||
|
@ -771,14 +755,8 @@ _win32_ecore_exe_quit(Ecore_Exe *obj)
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_terminate(Ecore_Exe *obj)
|
||||
_impl_ecore_exe_terminate(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
||||
{
|
||||
EINA_MAIN_LOOP_CHECK_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;
|
||||
|
@ -787,13 +765,8 @@ _win32_ecore_exe_terminate(Ecore_Exe *obj)
|
|||
}
|
||||
|
||||
void
|
||||
_win32_ecore_exe_kill(Ecore_Exe *obj)
|
||||
_impl_ecore_exe_kill(Ecore_Exe *obj, Ecore_Exe_Data *exe)
|
||||
{
|
||||
EINA_MAIN_LOOP_CHECK_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);
|
||||
|
@ -801,3 +774,29 @@ _win32_ecore_exe_kill(Ecore_Exe *obj)
|
|||
exe->sig = ECORE_EXE_WIN32_SIGKILL;
|
||||
while (EnumWindows(_ecore_exe_enum_windows_procedure, (LPARAM)obj)) ;
|
||||
}
|
||||
|
||||
void
|
||||
_impl_ecore_exe_auto_limits_set(Ecore_Exe *obj EINA_UNUSED,
|
||||
Ecore_Exe_Data *exe EINA_UNUSED,
|
||||
int start_bytes EINA_UNUSED,
|
||||
int end_bytes EINA_UNUSED,
|
||||
int start_lines EINA_UNUSED,
|
||||
int end_lines EINA_UNUSED)
|
||||
{
|
||||
ERR("Not implemented on windows!");
|
||||
}
|
||||
|
||||
void
|
||||
_impl_ecore_exe_signal(Ecore_Exe *obj EINA_UNUSED,
|
||||
Ecore_Exe_Data *exe EINA_UNUSED,
|
||||
int num EINA_UNUSED)
|
||||
{
|
||||
ERR("Not implemented on windows!");
|
||||
}
|
||||
|
||||
void
|
||||
_impl_ecore_exe_hup(Ecore_Exe *obj EINA_UNUSED,
|
||||
Ecore_Exe_Data *exe EINA_UNUSED)
|
||||
{
|
||||
ERR("Not implemented on windows!");
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue