diff options
author | Andrey A. Chernov <ache@FreeBSD.org> | 2014-07-26 08:41:03 +0000 |
---|---|---|
committer | Andrey A. Chernov <ache@FreeBSD.org> | 2014-07-26 08:41:03 +0000 |
commit | 7922e2bb776f56b49fd070d3422b41ae1135b95f (patch) | |
tree | c43056fe81e5fbc7c4bee9d3d6334089e7ee26c9 | |
parent | 3cc381b09ff888e95df17a573aeba48cd2c2b4bc (diff) |
Notes
-rw-r--r-- | lib/libc/stdio/freopen.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/libc/stdio/freopen.c b/lib/libc/stdio/freopen.c index 28b54f8b0bbec..4dcd50fbb13da 100644 --- a/lib/libc/stdio/freopen.c +++ b/lib/libc/stdio/freopen.c @@ -151,6 +151,14 @@ freopen(const char * __restrict file, const char * __restrict mode, /* Get a new descriptor to refer to the new file. */ f = _open(file, oflags, DEFFILEMODE); + /* If out of fd's close the old one and try again. */ + if (f < 0 && isopen && wantfd > STDERR_FILENO && + (errno == ENFILE || errno == EMFILE)) { + (void) (*fp->_close)(fp->_cookie); + isopen = 0; + wantfd = -1; + f = _open(file, oflags, DEFFILEMODE); + } sverrno = errno; finish: |