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:
parent
2d3901a5e0
commit
da0a5df9dc
@ -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:
|
||||
|
Loading…
x
Reference in New Issue
Block a user