From 74c84b5231d85f37e33a1b43e3dad82cb082ef39 Mon Sep 17 00:00:00 2001 From: danw Date: Sat, 14 Dec 1996 21:01:16 +0000 Subject: [PATCH] POSIXly better version of previous ^C handling code. (Use sigsetjmp, siglongjmp instead of setjmp, longjmp.) Should work everywhere now. --- clients/mrtest/mrtest.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/clients/mrtest/mrtest.c b/clients/mrtest/mrtest.c index 597784f5..6439d401 100644 --- a/clients/mrtest/mrtest.c +++ b/clients/mrtest/mrtest.c @@ -11,7 +11,7 @@ #ifndef lint static char *rcsid_test_c = "$Header$"; -#endif lint +#endif /* lint */ #include #include @@ -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; } -- 2.45.2