MFC: r269116

In the "Too many open files" edge cases don't try to preserve old
number for non-std* descriptors, but close old file and retry.

Obtained from:  inspired by Apple's change from pfg@
This commit is contained in:
ache 2014-08-06 10:38:06 +00:00
parent 2d3901a5e0
commit da0a5df9dc

View File

@ -150,6 +150,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: