From e5ed4b7f043218efc95a5ebdd26b9fa2b24a80fb Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Tue, 2 Sep 2014 12:56:54 +0100 Subject: [PATCH] Ecore exe: Fix ecore_exe_send (on posix). --- src/lib/ecore/ecore_exe_posix.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/lib/ecore/ecore_exe_posix.c b/src/lib/ecore/ecore_exe_posix.c index e199ceceba..3938ecf505 100644 --- a/src/lib/ecore/ecore_exe_posix.c +++ b/src/lib/ecore/ecore_exe_posix.c @@ -530,14 +530,26 @@ _impl_ecore_exe_send(Ecore_Exe *obj, const void *data, int size) { - if (exe->close_stdin) - { - ERR("Ecore_Exe %p stdin is closed! Cannot send %d bytes from %p", - exe, size, data); - return EINA_FALSE; - } + void *buf; - return _impl_ecore_exe_send(obj, exe, data, size); + if (exe->child_fd_write == -1) + { + ERR("Ecore_Exe %p created without ECORE_EXE_PIPE_WRITE! " + "Cannot send %d bytes from %p", exe, size, data); + return EINA_FALSE; + } + + buf = realloc(exe->write_data_buf, exe->write_data_size + size); + if (!buf) return EINA_FALSE; + + exe->write_data_buf = buf; + memcpy((char *)exe->write_data_buf + exe->write_data_size, data, size); + exe->write_data_size += size; + + if (exe->write_fd_handler) + ecore_main_fd_handler_active_set(exe->write_fd_handler, ECORE_FD_WRITE); + + return EINA_TRUE; } void