diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-09-08 19:55:47 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-09-08 19:55:47 -0700 |
commit | f21088bdc23d0195b3396b96c3b4d3b1a2d4b255 (patch) | |
tree | 3a0f5ae257533526ca80df5f62a4faeeacab0e1b | |
parent | 3b617e4f5bd4bd248794aab260cb7e76dca5727e (diff) | |
download | txr-f21088bdc23d0195b3396b96c3b4d3b1a2d4b255.tar.gz txr-f21088bdc23d0195b3396b96c3b4d3b1a2d4b255.tar.bz2 txr-f21088bdc23d0195b3396b96c3b4d3b1a2d4b255.zip |
linenoise: stdin fd closed bug in !isatty case.
* linenoise/linenoise.c (linenoise): Of course, we must up
ls->ifd and fdopen the dup, because fdopen closes
the descriptor.
-rw-r--r-- | linenoise/linenoise.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/linenoise/linenoise.c b/linenoise/linenoise.c index cdb21087..bc27e0c5 100644 --- a/linenoise/linenoise.c +++ b/linenoise/linenoise.c @@ -945,10 +945,13 @@ char *linenoise(lino_t *ls, const char *prompt) int count; if (!isatty(ls->ifd)) { - FILE *fi = fdopen(ls->ifd, "r"); + int fd = dup(ls->ifd); + FILE *fi = (fd > 0) ? fdopen(fd, "r") : 0; if (!fi) { ls->error = lino_error; + if (fd > 0) + close(fd); return 0; } |