History

kconfig: echo stdin to stdout if either is redirected

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.

Masahiro Yamada committed 8 years ago

Commit f3ff6fb1 parent d2a04641 file · +4 −3Browse files

Unified · Split

scripts/kconfig/conf.c+4−3
@@ -76,6 +76,9 @@ static void xfgets(char *str, int size, FILE *in) · 75 unmodified lines
7676 {
7777 if (!fgets(str, size, in))
7878 fprintf(stderr, "\nError in reading or end of file.\n");
79+
80+ if (!tty_stdio)
81+ printf("%s", str);
7982 }
8083
8184 static int conf_askvalue(struct symbol *sym, const char *def)
@@ -106,8 +109,6 @@ static int conf_askvalue(struct symbol *sym, const char *def) · 24 unmodified lines
106109 case oldaskconfig:
107110 fflush(stdout);
108111 xfgets(line, sizeof(line), stdin);
109− if (!tty_stdio)
110− printf("\n");
111112 return 1;
112113 default:
113114 break;
@@ -490,7 +491,7 @@ int main(int ac, char **av) · 376 unmodified lines
490491 bindtextdomain(PACKAGE, LOCALEDIR);
491492 textdomain(PACKAGE);
492493
493− tty_stdio = isatty(0) && isatty(1) && isatty(2);
494+ tty_stdio = isatty(0) && isatty(1);
494495
495496 while ((opt = getopt_long(ac, av, "s", long_opts, NULL)) != -1) {
496497 if (opt == 's') {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t