Convert to the use of siglongjmp()
[mmh] / sbr / getans.c
index 3229eb5..682a3b1 100644 (file)
@@ -9,16 +9,16 @@
 
 #include <h/mh.h>
 #include <h/signals.h>
-#include <setjmp.h>
+#include <h/m_setjmp.h>
 #include <signal.h>
 
 static char ansbuf[BUFSIZ];
-static jmp_buf sigenv;
+static sigjmp_buf sigenv;
 
 /*
  * static prototypes
  */
-static RETSIGTYPE intrser (int);
+static void intrser (int);
 
 
 char **
@@ -28,10 +28,11 @@ getans (char *prompt, struct swit *ansp)
     SIGNAL_HANDLER istat = NULL;
     char *cp, **cpp;
 
-    if (!(setjmp (sigenv))) {
+    if (!(sigsetjmp(sigenv, 1))) {
        istat = SIGNAL (SIGINT, intrser);
     } else {
        SIGNAL (SIGINT, istat);
+       printf("returning NULL\n");
        return NULL;
     }
 
@@ -40,8 +41,10 @@ getans (char *prompt, struct swit *ansp)
        fflush (stdout);
        cp = ansbuf;
        while ((i = getchar ()) != '\n') {
-           if (i == EOF)
-               longjmp (sigenv, 1);
+           if (i == EOF) {
+               printf("Got EOF\n");
+               siglongjmp (sigenv, 1);
+           }
            if (cp < &ansbuf[sizeof ansbuf - 1])
                *cp++ = i;
        }
@@ -67,11 +70,13 @@ getans (char *prompt, struct swit *ansp)
 }
 
 
-static RETSIGTYPE
+static void
 intrser (int i)
 {
+    NMH_UNUSED (i);
+
     /*
      * should this be siglongjmp?
      */
-    longjmp (sigenv, 1);
+    siglongjmp (sigenv, 1);
 }