From d2c766a1377dc9d8d01bfbc35c7e7843627e3a44 Mon Sep 17 00:00:00 2001
From: Frederic Culot <calcurse@culot.org>
Date: Sun, 19 Jul 2009 16:51:35 +0000
Subject: New way of handling signals.

---
 src/calcurse.c | 14 ++++++--------
 src/sigs.c     | 55 +++++++++++++++++++++++++++----------------------------
 src/sigs.h     |  7 +++++--
 3 files changed, 38 insertions(+), 38 deletions(-)

(limited to 'src')

diff --git a/src/calcurse.c b/src/calcurse.c
index 8673c48..0352e5d 100755
--- a/src/calcurse.c
+++ b/src/calcurse.c
@@ -1,4 +1,4 @@
-/*	$calcurse: calcurse.c,v 1.83 2009/07/12 20:37:41 culot Exp $	*/
+/*	$calcurse: calcurse.c,v 1.84 2009/07/19 16:51:36 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -37,7 +37,6 @@
  */
 
 #include <stdlib.h>
-#include <signal.h>
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -73,7 +72,6 @@ main (int argc, char **argv)
   int sav_hilt_app = 0;
   int sav_hilt_tod = 0;
   int cut_item = 0;
-  struct sigaction sigact;
   unsigned do_storage = 0;
   unsigned do_update = 1;
   unsigned day_changed = 0;
@@ -107,11 +105,11 @@ main (int argc, char **argv)
     }
   
   /* Begin of interactive mode with ncurses interface. */
-  sigs_init (&sigact);		/* signal handling init */
-  initscr ();			/* start the curses mode */
-  cbreak ();			/* control chars generate a signal */
-  noecho ();			/* controls echoing of typed chars */
-  curs_set (0);			/* make cursor invisible */
+  sigs_init ();                 /* signal handling init */
+  initscr ();                   /* start the curses mode */
+  cbreak ();                    /* control chars generate a signal */
+  noecho ();                    /* controls echoing of typed chars */
+  curs_set (0);                 /* make cursor invisible */
   calendar_set_current_date ();
   notify_init_vars ();
   wins_get_config ();
diff --git a/src/sigs.c b/src/sigs.c
index 8eaeb2a..6f341e7 100755
--- a/src/sigs.c
+++ b/src/sigs.c
@@ -1,4 +1,4 @@
-/*	$calcurse: sigs.c,v 1.8 2009/07/05 20:33:23 culot Exp $	*/
+/*	$calcurse: sigs.c,v 1.9 2009/07/19 16:51:36 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -38,10 +38,12 @@
 
 #include <sys/types.h>
 #include <sys/wait.h>
-#include <signal.h>
+#include <errno.h>
+#include <string.h>
 
 #include "i18n.h"
 #include "utils.h"
+#include "sigs.h"
 
 /* 
  * General signal handling routine.
@@ -50,7 +52,7 @@
  * Also catch CTRL-C (SIGINT), and SIGWINCH to resize screen automatically.
  */
 static void
-signal_handler (int sig)
+generic_hdlr (int sig)
 {
   switch (sig)
     {
@@ -65,34 +67,31 @@ signal_handler (int sig)
     }
 }
 
-/* Signal handling init. */
-void
-sigs_init (struct sigaction *sa)
+unsigned
+sigs_set_hdlr (int sig, void (*handler)(int))
 {
-  sa->sa_handler = signal_handler;
-  sa->sa_flags = 0;
-  sigemptyset (&sa->sa_mask);
-  if (sigaction (SIGCHLD, sa, NULL) != 0)
-    {
-      ERROR_MSG (_("Error handling SIGCHLD signal"));
-      exit_calcurse (1);
-    }
+  struct sigaction sa;
 
-  sa->sa_handler = signal_handler;
-  sa->sa_flags = 0;
-  sigemptyset (&sa->sa_mask);
-  if (sigaction (SIGWINCH, sa, NULL) != 0)
+  memset (&sa, 0, sizeof sa);
+  sigemptyset (&sa.sa_mask);
+  sa.sa_handler = handler;
+  sa.sa_flags = 0;
+  if (sigaction (sig, &sa, (struct sigaction *)0) == -1)
     {
-      ERROR_MSG (_("Error handling SIGWINCH signal"));      
-      exit_calcurse (1);
+      ERROR_MSG (_("Error setting signal #%d : %s\n"),
+                 sig, strerror (errno));
+      return 0;
     }
 
-  sa->sa_handler = SIG_IGN;
-  sa->sa_flags = 0;
-  sigemptyset (&(sa->sa_mask));
-  if (sigaction (SIGINT, sa, NULL) != 0)
-    {
-      ERROR_MSG (_("Error handling SIGINT signal"));      
-      exit_calcurse (1);
-    }
+  return 1;
+}
+
+/* Signal handling init. */
+void
+sigs_init ()
+{
+  if (!sigs_set_hdlr (SIGCHLD, generic_hdlr)
+      || !sigs_set_hdlr (SIGWINCH, generic_hdlr)
+      || !sigs_set_hdlr (SIGINT, SIG_IGN))
+    exit_calcurse (1);
 }
diff --git a/src/sigs.h b/src/sigs.h
index cff612a..5f1a6d2 100755
--- a/src/sigs.h
+++ b/src/sigs.h
@@ -1,4 +1,4 @@
-/*	$calcurse: sigs.h,v 1.4 2009/07/05 20:33:23 culot Exp $	*/
+/*	$calcurse: sigs.h,v 1.5 2009/07/19 16:51:36 culot Exp $	*/
 
 /*
  * Calcurse - text-based organizer
@@ -39,6 +39,9 @@
 #ifndef CALCURSE_SIGS_H
 #define CALCURSE_SIGS_H
 
-void sigs_init (struct sigaction *);
+#include <signal.h>
+
+void      sigs_init (void);
+unsigned  sigs_set_hdlr (int, void (*)(int));
 
 #endif /* CALCURSE_SIGS_H */
-- 
cgit v1.2.3-70-g09d2