X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui_common.c;h=87676986719c326340d1612ec85763349d2225be;hp=2c499126e11ce3fcca637acc13259c909f199e05;hb=0a2aa419ef9fcdb667ebcbe1a425802578aa153d;hpb=2ed89c59f0efcd0a2763f47c7d3455663241e623 diff --git a/gui_common.c b/gui_common.c index 2c499126..87676986 100644 --- a/gui_common.c +++ b/gui_common.c @@ -1,4 +1,5 @@ #include "para.h" +#include "fd.h" extern const char *status_item_list[NUM_STAT_ITEMS]; @@ -7,14 +8,21 @@ int para_open_audiod_pipe(char *cmd) { int fds[3] = {0, 1, 0}; pid_t pid; - return para_exec_cmdline_pid(&pid, cmd, fds) > 0? - fds[1] : -1; + int ret = para_exec_cmdline_pid(&pid, cmd, fds); + if (ret < 0) + return ret; + ret = mark_fd_nonblock(fds[1]); + if (ret > 0) + return fds[1]; + close(fds[1]); + return ret; } int read_audiod_pipe(int fd, void (*line_handler)(char *) ) { - static char buf[STRINGSIZE + 1]; - static ssize_t loaded, bufsize = sizeof(buf); + static char buf[STRINGSIZE]; + const ssize_t bufsize = sizeof(buf) - 1; + static ssize_t loaded; ssize_t ret; if (loaded >= bufsize) @@ -23,7 +31,7 @@ int read_audiod_pipe(int fd, void (*line_handler)(char *) ) if (ret > 0) { loaded += ret; buf[loaded] = '\0'; - loaded = for_each_line(buf, loaded, line_handler, 0); + loaded = for_each_line(buf, loaded, line_handler); } return ret; }