static void _ecore_exe_event_add_free(void *data, void *ev);
static void _ecore_exe_dead_attach(Ecore_Exe *exe);
-EAPI int ECORE_EXE_EVENT_ADD = 0;
-EAPI int ECORE_EXE_EVENT_DEL = 0;
-EAPI int ECORE_EXE_EVENT_DATA = 0;
-EAPI int ECORE_EXE_EVENT_ERROR = 0;
+EAPI int ECORE_EXE_EVENT_ADD = 0;
+EAPI int ECORE_EXE_EVENT_DEL = 0;
+EAPI int ECORE_EXE_EVENT_DATA = 0;
+EAPI int ECORE_EXE_EVENT_ERROR = 0;
-static Ecore_Exe *exes = NULL;
-static const char *shell = NULL;
+static Ecore_Exe *exes = NULL;
+static const char *shell = NULL;
/* FIXME: This errno checking stuff should be put elsewhere for everybody to use.
* For now it lives here though, just to make testing easier.
static int
_ecore_exe_check_errno(int result, const char *file, int line)
{
- int saved_errno = errno;
+ int saved_errno = errno;
if (result == -1)
{
* @return A process handle to the spawned process.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI Ecore_Exe *
+EAPI Ecore_Exe *
ecore_exe_run(const char *exe_cmd, const void *data)
{
/* I'm just being paranoid again, leaving in the original code in case there is a problem. */
#if 0
- Ecore_Exe *exe;
- pid_t pid;
+ Ecore_Exe *exe;
+ pid_t pid;
if (!exe_cmd)
return NULL;
* @return A process handle to the spawned process.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI Ecore_Exe *
+EAPI Ecore_Exe *
ecore_exe_pipe_run(const char *exe_cmd, Ecore_Exe_Flags flags, const void *data)
{
- Ecore_Exe *exe = NULL;
- int statusPipe[2] = { -1, -1 };
- int errorPipe[2] = { -1, -1 };
- int readPipe[2] = { -1, -1 };
- int writePipe[2] = { -1, -1 };
- int n = 0;
- int ok = 1;
- int result;
+ Ecore_Exe *exe = NULL;
+ int statusPipe[2] = { -1, -1 };
+ int errorPipe[2] = { -1, -1 };
+ int readPipe[2] = { -1, -1 };
+ int writePipe[2] = { -1, -1 };
+ int n = 0;
+ int ok = 1;
+ int result;
if (!exe_cmd) return NULL;
exe = calloc(1, sizeof(Ecore_Exe));
}
if (ok)
{
- pid_t pid = 0;
- volatile int vfork_exec_errno = 0;
+ pid_t pid = 0;
+ volatile int vfork_exec_errno = 0;
/* FIXME: I should double check this. After a quick look around, this is already done, but via a more modern method. */
/* signal(SIGPIPE, SIG_IGN); We only want EPIPE on errors */
* wrong */
for (;;)
{
- char buf;
+ char buf;
E_NO_ERRNO(result, read(statusPipe[0], &buf, 1), ok);
if (result == 0)
EAPI int
ecore_exe_send(Ecore_Exe * exe, const void *data, int size)
{
- void *buf;
+ void *buf;
buf = realloc(exe->write_data_buf, exe->write_data_size + size);
if (buf == NULL) return 0;
* @ingroup Ecore_Exe_Basic_Group
*/
EAPI void
-ecore_exe_close_stdin(Ecore_Exe * exe)
+ecore_exe_close_stdin(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Basic_Group
*/
EAPI void
-ecore_exe_auto_limits_set(Ecore_Exe * exe, int start_bytes, int end_bytes,
+ecore_exe_auto_limits_set(Ecore_Exe *exe, int start_bytes, int end_bytes,
int start_lines, int end_lines)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
* @ingroup Ecore_Exe_Basic_Group
*/
EAPI Ecore_Exe_Event_Data *
-ecore_exe_event_data_get(Ecore_Exe * exe, Ecore_Exe_Flags flags)
+ecore_exe_event_data_get(Ecore_Exe *exe, Ecore_Exe_Flags flags)
{
Ecore_Exe_Event_Data *e = NULL;
- int is_buffered = 0;
- unsigned char *inbuf;
- int inbuf_num;
+ int is_buffered = 0;
+ unsigned char *inbuf;
+ int inbuf_num;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
if (is_buffered)
{ /* Deal with line buffering. */
- int max = 0;
- int count = 0;
- int i;
- int last = 0;
- char *c;
+ int max = 0;
+ int count = 0;
+ int i;
+ int last = 0;
+ char *c;
c = (char *)inbuf;
for (i = 0; i < inbuf_num; i++) /* Find the lines. */
* @ingroup Ecore_Exe_Basic_Group
*/
EAPI void
-ecore_exe_tag_set(Ecore_Exe * exe, const char *tag)
+ecore_exe_tag_set(Ecore_Exe *exe, const char *tag)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @return The string attached to @p exe.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI char *
-ecore_exe_tag_get(Ecore_Exe * exe)
+EAPI char *
+ecore_exe_tag_get(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* called.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI void *
-ecore_exe_free(Ecore_Exe * exe)
+EAPI void *
+ecore_exe_free(Ecore_Exe *exe)
{
- void *data;
- int ok = 0;
- int result;
+ void *data;
+ int ok = 0;
+ int result;
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Basic_Group
*/
EAPI void
-ecore_exe_event_data_free(Ecore_Exe_Event_Data * e)
+ecore_exe_event_data_free(Ecore_Exe_Event_Data *e)
{
IF_FREE(e->lines);
IF_FREE(e->data);
* @return The process ID on success. @c -1 otherwise.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI pid_t
-ecore_exe_pid_get(Ecore_Exe * exe)
+EAPI pid_t
+ecore_exe_pid_get(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @return The command on success. NULL otherwise.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI char *
-ecore_exe_cmd_get(Ecore_Exe * exe)
+EAPI char *
+ecore_exe_cmd_get(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @return The data pointer attached to @p exe.
* @ingroup Ecore_Exe_Basic_Group
*/
-EAPI void *
-ecore_exe_data_get(Ecore_Exe * exe)
+EAPI void *
+ecore_exe_data_get(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_pause(Ecore_Exe * exe)
+ecore_exe_pause(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_continue(Ecore_Exe * exe)
+ecore_exe_continue(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_interrupt(Ecore_Exe * exe)
+ecore_exe_interrupt(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_quit(Ecore_Exe * exe)
+ecore_exe_quit(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_terminate(Ecore_Exe * exe)
+ecore_exe_terminate(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_kill(Ecore_Exe * exe)
+ecore_exe_kill(Ecore_Exe *exe)
{
struct _ecore_exe_dead_exe *dead;
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_signal(Ecore_Exe * exe, int num)
+ecore_exe_signal(Ecore_Exe *exe, int num)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
* @ingroup Ecore_Exe_Signal_Group
*/
EAPI void
-ecore_exe_hup(Ecore_Exe * exe)
+ecore_exe_hup(Ecore_Exe *exe)
{
if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
{
kill(exe->pid, SIGHUP);
}
-static Ecore_Exe *
+static Ecore_Exe *
_ecore_exe_is_it_alive(pid_t pid)
{
- Ecore_Exe *exe = NULL;
+ Ecore_Exe *exe = NULL;
/* FIXME: There is no nice, safe, OS independant way to tell if a
* particular PID is still alive. I have written code to do so
dead = data;
if (dead)
{
- Ecore_Exe *exe = NULL;
+ Ecore_Exe *exe = NULL;
if ((exe = _ecore_exe_is_it_alive(dead->pid)) != NULL)
{
dead = data;
if (dead)
{
- Ecore_Exe *exe = NULL;
+ Ecore_Exe *exe = NULL;
if ((exe = _ecore_exe_is_it_alive(dead->pid)) != NULL)
{
ecore_exe_free(exes);
}
-Ecore_Exe *
+Ecore_Exe *
_ecore_exe_find(pid_t pid)
{
Ecore_Exe *exe;
+
EINA_INLIST_FOREACH(exes, exe)
{
if (exe->pid == pid)
static inline void
_ecore_exe_exec_it(const char *exe_cmd, Ecore_Exe_Flags flags)
{
- char use_sh = 1;
- char *buf = NULL;
- char **args = NULL;
- int save_errno = 0;
+ char use_sh = 1;
+ char *buf = NULL;
+ char **args = NULL;
+ int save_errno = 0;
/* So what is this doing?
*
*/
if (!strpbrk(exe_cmd, "|&;<>()$`\\\"'*?#"))
{
- char *token;
- char pre_command = 1;
- int num_tokens = 0;
+ char *token;
+ char pre_command = 1;
+ int num_tokens = 0;
if (!(buf = strdup(exe_cmd)))
return;
IF_FREE(buf);
if ((!token) && (num_tokens))
{
- int i = 0;
+ int i = 0;
if (!(buf = strdup(exe_cmd)))
return;
}
static int
-_ecore_exe_data_generic_handler(void *data, Ecore_Fd_Handler * fd_handler,
+_ecore_exe_data_generic_handler(void *data, Ecore_Fd_Handler *fd_handler,
Ecore_Exe_Flags flags)
{
- Ecore_Exe *exe;
- int child_fd;
- int is_buffered = 0;
- int event_type;
+ Ecore_Exe *exe;
+ int child_fd;
+ int is_buffered = 0;
+ int event_type;
exe = data;
if ((fd_handler)
&& (ecore_main_fd_handler_active_get(fd_handler, ECORE_FD_READ)))
{
- unsigned char *inbuf;
- int inbuf_num;
+ unsigned char *inbuf;
+ int inbuf_num;
/* Get any left over data from last time. */
if (flags & ECORE_EXE_PIPE_READ)
for (;;)
{
- int num, lost_exe;
- char buf[READBUFSIZ];
+ int num, lost_exe;
+ char buf[READBUFSIZ];
lost_exe = 0;
errno = 0;
}
static int
-_ecore_exe_data_error_handler(void *data, Ecore_Fd_Handler * fd_handler)
+_ecore_exe_data_error_handler(void *data, Ecore_Fd_Handler *fd_handler)
{
return _ecore_exe_data_generic_handler(data, fd_handler,
ECORE_EXE_PIPE_ERROR);
}
static int
-_ecore_exe_data_read_handler(void *data, Ecore_Fd_Handler * fd_handler)
+_ecore_exe_data_read_handler(void *data, Ecore_Fd_Handler *fd_handler)
{
return _ecore_exe_data_generic_handler(data, fd_handler,
ECORE_EXE_PIPE_READ);
}
static int
-_ecore_exe_data_write_handler(void *data, Ecore_Fd_Handler * fd_handler __UNUSED__)
+_ecore_exe_data_write_handler(void *data, Ecore_Fd_Handler *fd_handler __UNUSED__)
{
- Ecore_Exe *exe;
+ Ecore_Exe *exe;
exe = data;
if ((exe->write_fd_handler)
if ((exe->close_stdin == 1)
&& (exe->write_data_size == exe->write_data_offset))
{
- int ok = 0;
- int result;
+ int ok = 0;
+ int result;
printf("Closing stdin for %s\n", exe->cmd);
/* if (exe->child_fd_write != -1) E_NO_ERRNO(result, fsync(exe->child_fd_write), ok); This a) doesn't work, and b) isn't needed. */
}
static void
-_ecore_exe_flush(Ecore_Exe * exe)
+_ecore_exe_flush(Ecore_Exe *exe)
{
- int count;
+ int count;
/* check whether we need to write anything at all. */
if ((exe->child_fd_write == -1) || (!exe->write_data_buf))