X-Git-Url: https://git.distorted.org.uk/~mdw/xtoys/blobdiff_plain/e34817d8072466a4d124821c76f2b13a13a33f6d..6672918df48a912fee1070b89d97e5e371cb8c6d:/xcatch.c diff --git a/xcatch.c b/xcatch.c index fd0e0d6..8d45876 100644 --- a/xcatch.c +++ b/xcatch.c @@ -1,6 +1,6 @@ /* -*-c-*- * - * $Id: xcatch.c,v 1.7 1999/05/21 22:09:19 mdw Exp $ + * $Id: xcatch.c,v 1.9 2002/01/13 14:43:27 mdw Exp $ * * Catch input and trap it in an X window * @@ -29,6 +29,12 @@ /*----- Revision history --------------------------------------------------* * * $Log: xcatch.c,v $ + * Revision 1.9 2002/01/13 14:43:27 mdw + * Kill some spurious warnings. Track @msg@ interface change. + * + * Revision 1.8 1999/06/19 23:42:55 mdw + * Improve signal handling. Fix options parsing to POSIX order only. + * * Revision 1.7 1999/05/21 22:09:19 mdw * Take advantage of new dynamic string macros. * @@ -82,10 +88,8 @@ static unsigned int flags; -enum { - f_closed = 1, - f_bogus = 2 -}; +#define f_closed 1u +#define f_bogus 2u static GtkWidget *textbox = 0; static GdkFont *font; @@ -111,8 +115,8 @@ static void ready(gpointer data, gint fd, GdkInputCondition c) { char buf[1024]; int doscroll = 1; - GtkText *t; - GtkAdjustment *va; + GtkText *t = 0; + GtkAdjustment *va = 0; /* --- If not ready to read then go away --- */ @@ -147,7 +151,7 @@ static void ready(gpointer data, gint fd, GdkInputCondition c) if (r < 0) { if (errno == EWOULDBLOCK) break; - msg(":~OK", "error reading data: %s", strerror(errno)); + msg(QUIS, ":~OK", "error reading data: %s", strerror(errno)); exit(EXIT_FAILURE); } @@ -174,12 +178,13 @@ static void ready(gpointer data, gint fd, GdkInputCondition c) GtkWidget *w; win = gtk_dialog_new(); + gtk_window_set_policy(GTK_WINDOW(win), 1, 1, 0); gtk_signal_connect(GTK_OBJECT(win), "destroy", GTK_SIGNAL_FUNC(killwin), 0); tbl = gtk_table_new(2, 2, 0); gtk_container_border_width(GTK_CONTAINER(tbl), 8); - gtk_box_pack_start(GTK_BOX(GTK_DIALOG(win)->vbox), tbl, 1, 1, 0); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(win)->vbox), tbl, 1, 1, 1); gtk_widget_show(tbl); textbox = gtk_text_new(0, 0); @@ -234,6 +239,7 @@ static void reap(int sig) { pid_t k; int s; + int e = errno; for (;;) { k = waitpid(-1, &s, WNOHANG); @@ -246,6 +252,7 @@ static void reap(int sig) status = 127; } } + errno = e; } /* --- Main program --- */ @@ -277,7 +284,7 @@ int main(int argc, char *argv[]) { "font", OPTF_ARGREQ, 0, 'F' }, { 0, 0, 0, 0 } }; - int i = mdwopt(argc, argv, "huvf:F:", opt, 0, 0, 0); + int i = mdwopt(argc, argv, "+huvf:F:", opt, 0, 0, 0); if (i < 0) break; @@ -342,7 +349,10 @@ int main(int argc, char *argv[]) sa.sa_handler = reap; sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; + sa.sa_flags = SA_NOCLDSTOP; +#ifdef SA_RESTART + sa.sa_flags |= SA_RESTART; +#endif sigaction(SIGCHLD, &sa, 0); /* --- Start a child program --- */