From: Alasdair Kergon Date: Wed, 23 Nov 2011 01:34:38 +0000 (+0000) Subject: Move y/n prompts to stderr and repeat if response has both 'n' and 'y'. X-Git-Tag: v2_02_91~241 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=c122e5e7a3d5b8d58dc72663b0037c3b5d17431d;p=lvm2.git 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'.) --- 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();