]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - gui.c
aft.c: Fix a possible memory leak.
[paraslash.git] / gui.c
diff --git a/gui.c b/gui.c
index a2d3e6cd5b63c5d867d793939dbae219196b6bab..40d521bcf81ceb546a9675b5729c182109a07cf6 100644 (file)
--- a/gui.c
+++ b/gui.c
@@ -6,19 +6,23 @@
 
 /** \file gui.c ncurses-based interface for paraslash */
 
+#include <signal.h>
+#include <sys/types.h>
+#include <dirent.h>
 #include "gui.cmdline.h"
 #include "para.h"
 #include "gui.h"
 #include <curses.h>
 #include "ringbuffer.h"
-#include "string.h"
+#include "gui_common.h"
 #include "fd.h"
 #include "error.h"
+#include "list.h"
+#include "sched.h"
 #include "signal.h"
 
 /** define the array of error lists needed by para_gui */
 INIT_GUI_ERRLISTS;
-extern const char *status_item_list[NUM_STAT_ITEMS];
 static char *stat_content[NUM_STAT_ITEMS];
 
 #define STANDARD_STATUS_BAR "para_gui " PACKAGE_VERSION " (hit ? for help)"
@@ -447,11 +451,12 @@ __printf_2_3 static void outputf(int color, const char* fmt,...)
        wrefresh(bot.win);
 }
 
-static void add_output_line(char *line)
+static int add_output_line(char *line, __a_unused void *data)
 {
        if (!curses_active)
-               return;
+               return 1;
        rb_add_entry(COLOR_OUTPUT, para_strdup(line));
+       return 1;
 }
 
 void para_log(int ll, const char *fmt,...)
@@ -484,7 +489,7 @@ static void setup_signal_handling(void)
        para_install_sighandler(SIGCHLD);
        para_install_sighandler(SIGWINCH);
        para_install_sighandler(SIGUSR1);
-       signal(SIGPIPE, SIG_IGN);
+//     signal(SIGPIPE, SIG_IGN);
        signal(SIGHUP, SIG_IGN);
 }
 
@@ -720,10 +725,11 @@ static void init_curses(void)
 
 static void check_sigchld(void)
 {
+       int ret;
        pid_t pid;
 reap_next_child:
-       pid = para_reap_child();
-       if (pid <= 0)
+       ret = para_reap_child(&pid);
+       if (ret <= 0)
                return;
        if (pid == cmd_pid) {
                cmd_pid = 0;
@@ -735,19 +741,19 @@ reap_next_child:
 /*
  * print status line if line starts with known command.
  */
-static void check_stat_line(char *line)
+static int check_stat_line(char *line, __a_unused void *data)
 {
        int i;
 
 //     PARA_INFO_LOG("%s: checking: %s\n", __func__, line);
        i = stat_line_valid(line);
        if (i >= 0) {
-               line += strlen(status_item_list[i]) + 1;
+               line += strlen(status_item_list[i]) + 2;
                free(stat_content[i]);
                stat_content[i] = para_strdup(line);
                print_stat_item(i);
        }
-       return;
+       return 1;
 }
 
 /*
@@ -911,8 +917,8 @@ repeat:
                        close(audiod_pipe);
                        audiod_pipe = -1;
                        clear_all_items();
-                       free(stat_content[SI_STATUS_BAR]);
-                       stat_content[SI_STATUS_BAR] =
+                       free(stat_content[SI_BASENAME]);
+                       stat_content[SI_BASENAME] =
                                para_strdup("audiod not running!?");
                        print_all_items();
                }
@@ -922,7 +928,8 @@ check_return:
                if (cp_numread <= 0 && !cbo) /* command complete */
                        return 0;
                if (cbo)
-                       cbo = for_each_line(command_buf, cbo, &add_output_line);
+                       cbo = for_each_line(command_buf, cbo,
+                               &add_output_line, NULL);
                if (cp_numread <= 0)
                        cbo = 0;
                wrefresh(bot.win);