summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;
}