aft.c: Fix com_add().
[paraslash.git] / gui_common.c
index 2c499126e11ce3fcca637acc13259c909f199e05..6ca226e6e0d468e953f3e1aac6cab52364f94ffb 100644 (file)
@@ -1,20 +1,28 @@
 #include "para.h"
+#include "string.h"
+#include "fd.h"
 
 extern const char *status_item_list[NUM_STAT_ITEMS];
 
-
 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 *) )
+int read_audiod_pipe(int fd, line_handler_t *line_handler)
 {
-       static char buf[STRINGSIZE + 1];
-       static ssize_t loaded, bufsize = sizeof(buf);
+       static char buf[4096];
+       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, NULL);
        }
        return ret;
 }