1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-08-07 06:43:00 +03:00

Fix a few problems in fopen and freopen

fopen should set the FD_CLOEXEC flag if requested evenif the kernel does
not support an aotmic operation.

freopen should reuse the file descriptor for the stream.  This is
especially important for calls to change the standard streams (stin,
stdout, stderr).
This commit is contained in:
Ulrich Drepper
2011-05-15 15:28:46 -04:00
parent bd25564e1e
commit 94b7cc3711
9 changed files with 143 additions and 39 deletions

View File

@@ -155,7 +155,8 @@ _IO_old_file_close_it (fp)
INTUSE(_IO_unsave_markers) (fp);
close_status = _IO_SYSCLOSE (fp);
close_status = ((fp->_flags2 & _IO_FLAGS2_NOCLOSE) == 0
? _IO_SYSCLOSE (fp) : 0);
/* Free buffer. */
INTUSE(_IO_setb) (fp, NULL, NULL, 0);
@@ -676,7 +677,7 @@ _IO_old_file_write (f, data, n)
{
f->_flags |= _IO_ERR_SEEN;
break;
}
}
to_do -= count;
data = (void *) ((char *) data + count);
}
@@ -763,12 +764,12 @@ _IO_old_file_xsputn (f, data, n)
do_write = to_do - (block_size >= 128 ? to_do % block_size : 0);
if (do_write)
{
{
count = old_do_write (f, s, do_write);
to_do -= count;
if (count < do_write)
return n - to_do;
}
}
/* Now write out the remainder. Normally, this will fit in the
buffer, but it's somewhat messier for line-buffered files,