diff options
author | Rob Landley <rob@landley.net> | 2012-03-20 11:10:54 -0500 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2012-03-20 11:10:54 -0500 |
commit | f78c63a7035ceabb0dcb907cb5764b18da495f82 (patch) | |
tree | 9a216750279035c47b34d6087935957cd73f7bae | |
parent | cf6bcb27fb3dc6d196adce31d774229ea5d56dec (diff) | |
download | toybox-f78c63a7035ceabb0dcb907cb5764b18da495f82.tar.gz |
Using /dev/tty for yesno() is wrong because yes 'n' | cp -ial needs to work.
-rw-r--r-- | lib/lib.c | 12 |
1 files changed, 7 insertions, 5 deletions
@@ -794,20 +794,22 @@ void terminal_size(unsigned *x, unsigned *y) // This should use a raw tty, fixit later. int yesno(char *prompt, int def) { - FILE *fp = fopen("/dev/tty", "rw"); + FILE *fps[] = {stdin, stdout, stderr}; + int i; char buf; - if (!fp) return 1; + for (i=0; i<3; i++) if (isatty(i)) break; + if (i == 3) return 1; - fprintf(fp, "%s (%c/%c):", prompt, def ? 'Y' : 'y', def ? 'n' : 'N'); - while (fread(&buf, 1, 1, fp)) { + fprintf(fps[i], "%s (%c/%c):", prompt, def ? 'Y' : 'y', def ? 'n' : 'N'); + fflush(fps[i]); + while (fread(&buf, 1, 1, fps[i])) { if (tolower(buf) == 'y') def = 1; if (tolower(buf) == 'n') def = 0; else if (!isspace(buf)) continue; break; } - fclose(fp); return def; } |