Skip to content

Commit

Permalink
kconfig: echo stdin to stdout if either is redirected
Browse files Browse the repository at this point in the history
If stdio is not tty, conf_askvalue() puts additional new line to
prevent prompts from being concatenated into a single line.  This
care is missing in conf_choice(), so a 'choice' prompt and the next
prompt are shown in the same line.

Move the code into xfgets() to cater to all cases.  To improve this
more, let's echo stdin to stdout.  This clarifies what keys were
input from stdio and the stdout looks like as if it were from tty.

I removed the isatty(2) check since stderr is unrelated here.

Signed-off-by: Masahiro Yamada <[email protected]>
Reviewed-by: Ulf Magnusson <[email protected]>
  • Loading branch information
masahir0y committed Feb 8, 2018
1 parent d2a0464 commit f3ff6fb
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions scripts/kconfig/conf.c
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,9 @@ static void xfgets(char *str, int size, FILE *in)
{
if (!fgets(str, size, in))
fprintf(stderr, "\nError in reading or end of file.\n");

if (!tty_stdio)
printf("%s", str);
}

static int conf_askvalue(struct symbol *sym, const char *def)
Expand Down Expand Up @@ -106,8 +109,6 @@ static int conf_askvalue(struct symbol *sym, const char *def)
case oldaskconfig:
fflush(stdout);
xfgets(line, sizeof(line), stdin);
if (!tty_stdio)
printf("\n");
return 1;
default:
break;
Expand Down Expand Up @@ -490,7 +491,7 @@ int main(int ac, char **av)
bindtextdomain(PACKAGE, LOCALEDIR);
textdomain(PACKAGE);

tty_stdio = isatty(0) && isatty(1) && isatty(2);
tty_stdio = isatty(0) && isatty(1);

while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
if (opt == 's') {
Expand Down

0 comments on commit f3ff6fb

Please sign in to comment.