From: Zbigniew Jędrzejewski-Szmek Date: Tue, 16 Jul 2019 16:35:34 +0000 (+0200) Subject: firstboot: fix hang waiting for second Enter on input X-Git-Tag: v243-rc1~96^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=ee41670ffbecb000db873f839a7381495bbe2bc6;p=thirdparty%2Fsystemd.git firstboot: fix hang waiting for second Enter on input The comment explains the reason: we'd wait for the second \n and then ungetc() it. Then the buffered \n would cause a problem when the next prompt was issued, so in effect it wasn't possible to answer the second question. --- diff --git a/src/basic/fileio.c b/src/basic/fileio.c index bd4c964bec5..623e43e4cae 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -776,7 +776,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(FILE*, funlockfile); int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret) { size_t n = 0, allocated = 0, count = 0; _cleanup_free_ char *buffer = NULL; - int r; + int r, tty = -1; assert(f); @@ -850,6 +850,17 @@ int read_line_full(FILE *f, size_t limit, ReadLineFlags flags, char **ret) { count++; + if (eol != EOL_NONE) { + /* If we are on a tty, we can't wait for more input. But we expect only + * \n as the single EOL marker, so there is no need to wait. We check + * this condition last to avoid isatty() check if not necessary. */ + + if (tty < 0) + tty = isatty(fileno(f)); + if (tty > 0) + break; + } + if (eol != EOL_NONE) { previous_eol |= eol; continue;