From b40353c91e0a895a442ba43f04909036a3b13ce7 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Sun, 13 Nov 2011 13:23:17 +0100 Subject: [PATCH] skill: use rpmatch() to yes/no question The patch also removes fixed size of input, which can be problematic. I do not know how long the string `yes' might be in all of the worlds languages. Signed-off-by: Sami Kerola --- configure.ac | 2 ++ skill.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/configure.ac b/configure.ac index b130cea8..1582d0c5 100644 --- a/configure.ac +++ b/configure.ac @@ -73,6 +73,7 @@ AC_FUNC_REALLOC AC_FUNC_STRTOD AC_CHECK_FUNCS([\ alarm \ + getline \ getpagesize \ gettimeofday \ iswprint \ @@ -83,6 +84,7 @@ AC_CHECK_FUNCS([\ nl_langinfo \ putenv \ regcomp \ + rpmatch \ select \ setlocale \ strcasecmp \ diff --git a/skill.c b/skill.c index 8e11cde5..2d798272 100644 --- a/skill.c +++ b/skill.c @@ -82,15 +82,17 @@ static void hurt_proc(int tty, int uid, int pid, const char *restrict const cmd, char dn_buf[1000]; dev_to_tty(dn_buf, 999, tty, pid, ABBREV_DEV); if (run_time->interactive) { - char buf[8]; + char *buf; + size_t len = 0; fprintf(stderr, "%-8s %-8s %5d %-16.16s ? ", (char *)dn_buf, user_from_uid(uid), pid, cmd); - if (!fgets(buf, 7, stdin)) { - printf("\n"); - exit(EXIT_FAILURE); - } - if (*buf != 'y' && *buf != 'Y') + fflush (stdout); + getline(&buf, &len, stdin); + if (rpmatch(buf) < 1) { + free(buf); return; + } + free(buf); } /* do the actual work */ errno = 0;