summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-09-08 19:55:47 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-09-08 19:55:47 -0700
commitf21088bdc23d0195b3396b96c3b4d3b1a2d4b255 (patch)
tree3a0f5ae257533526ca80df5f62a4faeeacab0e1b
parent3b617e4f5bd4bd248794aab260cb7e76dca5727e (diff)
downloadtxr-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.c5
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;
}