]> andersk Git - moira.git/commitdiff
POSIXly better version of previous ^C handling code. (Use sigsetjmp,
authordanw <danw>
Sat, 14 Dec 1996 21:01:16 +0000 (21:01 +0000)
committerdanw <danw>
Sat, 14 Dec 1996 21:01:16 +0000 (21:01 +0000)
siglongjmp instead of setjmp, longjmp.) Should work everywhere now.

clients/mrtest/mrtest.c

index 597784f53949013fab135e196045fee444dc94da..6439d4011bfd7e4424e7a4f8136210609e5acad4 100644 (file)
@@ -11,7 +11,7 @@
 
 #ifndef lint
 static char *rcsid_test_c = "$Header$";
-#endif lint
+#endif /* lint */
 
 #include <mit-copyright.h>
 #include <stdio.h>
@@ -34,11 +34,15 @@ extern int errno;
 extern int sending_version_no;
 int count, quit=0;
 char *whoami;
+#ifdef POSIX
+sigjmp_buf jb;
+#else
 jmp_buf jb;
+#endif
 
 #define MAXARGS 20
 
-void discard_input(int, int, struct sigcontext *);
+void discard_input(void);
 char *mr_gets(char *, char *, size_t);
 
 main(argc, argv)
@@ -61,10 +65,11 @@ main(argc, argv)
        action.sa_flags = 0;
        sigemptyset(&action.sa_mask);
        sigaction(SIGINT, &action, NULL);
+       sigsetjmp(jb, 1);
 #else
        signal(SIGINT, discard_input);
-#endif
        setjmp(jb);
+#endif
 
        while(!quit) {
                if(!mr_gets("moira:  ",cmdbuf,BUFSIZ)) break;
@@ -74,10 +79,14 @@ main(argc, argv)
        exit(0);
 }
 
-void discard_input(int sig, int code, struct sigcontext *scp)
+void discard_input(void)
 {
   putc('\n', stdout);
+#ifdef POSIX
+  siglongjmp(jb, 1);
+#else
   longjmp(jb, 1);
+#endif
 }
 
 char *mr_gets(char *prompt, char *buf, size_t len)
@@ -90,9 +99,9 @@ char *mr_gets(char *prompt, char *buf, size_t len)
     if (!in) return NULL;
     if (*in) {
       add_history(in);
-      strncpy(buf, in, len-1);
-      buf[len]=0;
     }
+    strncpy(buf, in, len-1);
+    buf[len]=0;
     
     return buf;
   }
This page took 0.082897 seconds and 5 git commands to generate.