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@
MFC after:      2 weeks
This commit is contained in:
Andrey A. Chernov 2014-07-26 08:41:03 +00:00
parent 3cc381b09f
commit 7922e2bb77

View File

@ -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: