From f0509623ce214615bab4f0d5a6e087c7e7934d2f Mon Sep 17 00:00:00 2001 From: Alasdair Kergon Date: Wed, 23 Nov 2011 01:34:38 +0000 Subject: [PATCH] Move y/n prompts to stderr and repeat if response has both 'n' and 'y'. (Note that in a future release we might make this stricter and insist on exactly 'y' or 'n'.) --- WHATS_NEW | 1 + lib/display/display.c | 16 +++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index 1551ebcbb..d0540fb90 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,6 @@ Version 2.02.89 - ================================== + Move y/n prompts to stderr and repeat if response has both 'n' and 'y'. Replace the unit testing framework with CUnit (--enable-testing). Fix dmeventd snapshot monitoring when multiple extensions were involved. Don't ignore configure --mandir and --infodir. diff --git a/lib/display/display.c b/lib/display/display.c index 6e61dc827..298abc950 100644 --- a/lib/display/display.c +++ b/lib/display/display.c @@ -850,9 +850,10 @@ char yes_no_prompt(const char *prompt, ...) do { if (c == '\n' || !c) { va_start(ap, prompt); - vprintf(prompt, ap); + vfprintf(stderr, prompt, ap); va_end(ap); - fflush(stdout); + fflush(stderr); + ret = 0; } if ((c = getchar()) == EOF) { @@ -861,9 +862,14 @@ char yes_no_prompt(const char *prompt, ...) } c = tolower(c); - if ((c == 'y') || (c == 'n')) - ret = c; - } while (!ret || c != '\n'); + if ((c == 'y') || (c == 'n')) { + /* If both 'y' and 'n' given, begin again. */ + if (ret && c != ret) + ret = -1; + else + ret = c; + } + } while (ret < 1 || c != '\n'); sigint_restore();