X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=gui.c;h=fa1538b0d63f3db2ca8be6497aa0ce797d3a89a1;hp=31987c46570197411624958ea03a6c9ddac25a85;hb=60ef885705932a682097ad2b9f2379282d814e79;hpb=f8591e80c0dcc02c7193a2a7d2961e361cbdebc7 diff --git a/gui.c b/gui.c index 31987c46..fa1538b0 100644 --- a/gui.c +++ b/gui.c @@ -54,7 +54,7 @@ static int cmd_died, curses_active; static pid_t cmd_pid; static int command_pipe = -1; -static int audiod_pipe = -1; +static int stat_pipe = -1; static struct gui_args_info conf; enum {GETCH_MODE, COMMAND_MODE, EXTERNAL_MODE}; @@ -191,20 +191,6 @@ static struct gui_command command_list[] = { } }; -static int para_open_audiod_pipe(char *cmd) -{ - int fds[3] = {0, 1, 0}; - pid_t pid; - int ret = para_exec_cmdline_pid(&pid, cmd, fds); - if (ret < 0) - return ret; - ret = mark_fd_nonblocking(fds[1]); - if (ret > 0) - return fds[1]; - close(fds[1]); - return ret; -} - static int find_cmd_byname(char *name) { int i; @@ -708,14 +694,14 @@ print: return 1; } -static int read_audiod_pipe(fd_set *rfds) +static int read_stat_pipe(fd_set *rfds) { static char *buf; static int bufsize, loaded; int ret, ret2; size_t sz; - if (audiod_pipe < 0) + if (stat_pipe < 0) return 0; if (loaded >= bufsize) { if (bufsize > 1000 * 1000) { @@ -726,7 +712,7 @@ static int read_audiod_pipe(fd_set *rfds) buf = para_realloc(buf, bufsize); } assert(loaded < bufsize); - ret = read_nonblock(audiod_pipe, buf + loaded, bufsize - loaded, + ret = read_nonblock(stat_pipe, buf + loaded, bufsize - loaded, rfds, &sz); loaded += sz; ret2 = for_each_stat_item(buf, loaded, update_item); @@ -907,15 +893,24 @@ static void handle_signal(int sig) } } -static int open_audiod_pipe(void) +static int open_stat_pipe(void) { static int init = 1; + int ret, fds[3] = {0, 1, 0}; + pid_t pid; if (init) init = 0; else sleep(1); - return para_open_audiod_pipe(conf.stat_cmd_arg); + ret = para_exec_cmdline_pid(&pid, conf.stat_cmd_arg, fds); + if (ret < 0) + return ret; + ret = mark_fd_nonblocking(fds[1]); + if (ret >= 0) + return fds[1]; + close(fds[1]); + return ret; } /* @@ -946,11 +941,10 @@ repeat: // ret = refresh_status(); FD_ZERO(&rfds); max_fileno = 0; - /* audiod pipe */ - if (audiod_pipe < 0) - audiod_pipe = open_audiod_pipe(); - if (audiod_pipe >= 0) - para_fd_set(audiod_pipe, &rfds, &max_fileno); + if (stat_pipe < 0) + stat_pipe = open_stat_pipe(); + if (stat_pipe >= 0) + para_fd_set(stat_pipe, &rfds, &max_fileno); /* signal pipe */ para_fd_set(signal_pipe, &rfds, &max_fileno); /* command pipe only for COMMAND_MODE */ @@ -981,11 +975,11 @@ repeat: return 0; } } - ret = read_audiod_pipe(&rfds); + ret = read_stat_pipe(&rfds); if (ret < 0) { - PARA_NOTICE_LOG("closing audiod pipe: %s\n", para_strerror(-ret)); - close(audiod_pipe); - audiod_pipe = -1; + PARA_NOTICE_LOG("closing stat pipe: %s\n", para_strerror(-ret)); + close(stat_pipe); + stat_pipe = -1; clear_all_items(); free(stat_content[SI_BASENAME]); stat_content[SI_BASENAME] =