From: Michael Tremer Date: Wed, 7 Jul 2021 09:45:34 +0000 (+0000) Subject: ui: Refactor confirmation using getline() X-Git-Tag: 0.9.28~1092 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13cd20973ce7e658b3eab9907da1881ced1d525c;p=pakfire.git ui: Refactor confirmation using getline() Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/ui.c b/src/libpakfire/ui.c index 4f3331e1c..02db59989 100644 --- a/src/libpakfire/ui.c +++ b/src/libpakfire/ui.c @@ -36,24 +36,35 @@ int pakfire_ui_confirm(Pakfire pakfire, const char* message, const char* questio if (pakfire_has_flag(pakfire, PAKFIRE_FLAGS_NON_INTERACTIVE)) return 0; + char* line = NULL; + size_t length = 0; + int r = 1; + while (1) { // Print question printf("%s ", question); // Wait for user to enter something - char p = getchar(); + ssize_t bytes_read = getline(&line, &length, stdin); + if (bytes_read < 0) + goto END; - switch (p) { + // Must have one character and newline + if (!line || strlen(line) != 2) + continue; + + switch (*line) { // Positive response case 'Y': case 'y': - return 0; + r = 0; + goto END; // Negative response - case EOF: case 'N': case 'n': - return 1; + r = 1; + goto END; // Unknown input, repeat default: @@ -61,7 +72,11 @@ int pakfire_ui_confirm(Pakfire pakfire, const char* message, const char* questio } } - return 1; +END: + if (line) + free(line); + + return r; } static int pakfire_ui_enter_number(Pakfire pakfire, const char* question,