X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcutil%2Fsilcutil.c;fp=lib%2Fsilcutil%2Fsilcutil.c;h=0cb176e7739ba60576e78c86edd08030a0e33f63;hp=5d656b78881324c70aa4d0a4c50e234e4d365ad0;hb=103986117eb70b715d462b4d520a1f0912b8f90f;hpb=ca4ecaceb517b395f7ca7f74c9333a18e5d39f40 diff --git a/lib/silcutil/silcutil.c b/lib/silcutil/silcutil.c index 5d656b78..0cb176e7 100644 --- a/lib/silcutil/silcutil.c +++ b/lib/silcutil/silcutil.c @@ -557,13 +557,18 @@ char *silc_get_input(const char *prompt, SilcBool echo_off) printf("%s", prompt); fflush(stdout); + read_again1: if ((read(fd, input, sizeof(input))) < 0) { + if (errno == EAGAIN || errno == EINTR) + goto read_again1; fprintf(stderr, "silc: %s\n", strerror(errno)); + signal(SIGINT, SIG_DFL); tcsetattr(fd, TCSANOW, &to_old); return NULL; } if (strlen(input) <= 1) { + signal(SIGINT, SIG_DFL); tcsetattr(fd, TCSANOW, &to_old); return NULL; } @@ -591,11 +596,19 @@ char *silc_get_input(const char *prompt, SilcBool echo_off) printf("%s", prompt); fflush(stdout); + signal(SIGINT, SIG_IGN); + + read_again2: if ((read(fd, input, sizeof(input))) < 0) { + if (errno == EAGAIN || errno == EINTR) + goto read_again2; fprintf(stderr, "silc: %s\n", strerror(errno)); + signal(SIGINT, SIG_DFL); return NULL; } + signal(SIGINT, SIG_DFL); + if (strlen(input) <= 1) return NULL;