mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-08 17:42:12 +03:00
Fix freopen handling of ,ccs= (bug 23675)
As reported in bug 23675 and shown up in the recently added tests of different cases of freopen (relevant part of the test currently conditioned under #if 0 to avoid a failure resulting from this bug), freopen wrongly forces the stream to unoriented even when a mode with ,ccs= is specified, though such a mode is supposed to result in a wide-oriented stream. Move the clearing of _mode to before the actual reopening occurs, so that the main fopen implementation can leave a wide-oriented stream in the ,ccs= case. Tested for x86_64.
This commit is contained in:
@@ -66,6 +66,7 @@ freopen (const char *filename, const char *mode, FILE *fp)
|
||||
fp->_flags2 &= ~(_IO_FLAGS2_MMAP
|
||||
| _IO_FLAGS2_NOTCANCEL
|
||||
| _IO_FLAGS2_CLOEXEC);
|
||||
fp->_mode = 0;
|
||||
result = _IO_old_file_fopen (fp, gfilename, mode);
|
||||
}
|
||||
else
|
||||
@@ -78,6 +79,7 @@ freopen (const char *filename, const char *mode, FILE *fp)
|
||||
fp->_flags2 &= ~(_IO_FLAGS2_MMAP
|
||||
| _IO_FLAGS2_NOTCANCEL
|
||||
| _IO_FLAGS2_CLOEXEC);
|
||||
fp->_mode = 0;
|
||||
result = _IO_file_fopen (fp, gfilename, mode, 1);
|
||||
if (result != NULL)
|
||||
result = __fopen_maybe_mmap (result);
|
||||
@@ -85,9 +87,6 @@ freopen (const char *filename, const char *mode, FILE *fp)
|
||||
fp->_flags2 &= ~_IO_FLAGS2_NOCLOSE;
|
||||
if (result != NULL)
|
||||
{
|
||||
/* unbound stream orientation */
|
||||
result->_mode = 0;
|
||||
|
||||
if (fd != -1 && _IO_fileno (result) != fd)
|
||||
{
|
||||
/* At this point we have both file descriptors already allocated,
|
||||
|
Reference in New Issue
Block a user