1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-29 11:41:21 +03:00

Use al possible bytes from fopen mode string.

This commit is contained in:
Eric Blake
2011-04-22 23:40:57 -04:00
committed by Ulrich Drepper
parent 4df46dbda7
commit b722481ac2
3 changed files with 24 additions and 17 deletions

View File

@ -1,3 +1,10 @@
2011-04-22 Ulrich Drepper <drepper@gmail.com>
[BZ #12685]
* libio/fileops.c (_IO_new_file_fopen): Scan up to 7 bytes of the
mode string.
Patch by Eric Blake <eblake@redhat.com>.
2011-04-20 H.J. Lu <hongjiu.lu@intel.com> 2011-04-20 H.J. Lu <hongjiu.lu@intel.com>
* sunrpc/Makefile (need-export-routines): Add svc_run. * sunrpc/Makefile (need-export-routines): Add svc_run.

4
NEWS
View File

@ -1,4 +1,4 @@
GNU C Library NEWS -- history of user-visible changes. 2011-4-17 GNU C Library NEWS -- history of user-visible changes. 2011-4-22
Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc. Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
See the end for copying conditions. See the end for copying conditions.
@ -19,7 +19,7 @@ Version 2.14
* The following bugs are resolved with this release: * The following bugs are resolved with this release:
11724, 12420, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12518, 12583, 11724, 12420, 12445, 12454, 12460, 12469, 12489, 12509, 12510, 12518, 12583,
12587, 12597, 12631, 12650, 12653, 12655 12587, 12597, 12631, 12650, 12653, 12655, 12685
Version 2.13 Version 2.13

View File

@ -290,7 +290,7 @@ _IO_new_file_fopen (fp, filename, mode, is32not64)
#ifdef _LIBC #ifdef _LIBC
last_recognized = mode; last_recognized = mode;
#endif #endif
for (i = 1; i < 6; ++i) for (i = 1; i < 7; ++i)
{ {
switch (*++mode) switch (*++mode)
{ {
@ -997,18 +997,18 @@ _IO_new_file_seekoff (fp, offset, dir, mode)
/* Adjust for read-ahead (bytes is buffer). */ /* Adjust for read-ahead (bytes is buffer). */
offset -= fp->_IO_read_end - fp->_IO_read_ptr; offset -= fp->_IO_read_end - fp->_IO_read_ptr;
if (fp->_offset == _IO_pos_BAD) if (fp->_offset == _IO_pos_BAD)
{ {
if (mode != 0) if (mode != 0)
goto dumb; goto dumb;
else else
{ {
result = _IO_SYSSEEK (fp, 0, dir); result = _IO_SYSSEEK (fp, 0, dir);
if (result == EOF) if (result == EOF)
return result; return result;
fp->_offset = result; fp->_offset = result;
} }
} }
/* Make offset absolute, assuming current pointer is file_ptr(). */ /* Make offset absolute, assuming current pointer is file_ptr(). */
offset += fp->_offset; offset += fp->_offset;
if (offset < 0) if (offset < 0)
@ -1270,7 +1270,7 @@ _IO_new_file_write (f, data, n)
{ {
f->_flags |= _IO_ERR_SEEN; f->_flags |= _IO_ERR_SEEN;
break; break;
} }
to_do -= count; to_do -= count;
data = (void *) ((char *) data + count); data = (void *) ((char *) data + count);
} }
@ -1358,12 +1358,12 @@ _IO_new_file_xsputn (f, data, n)
do_write = to_do - (block_size >= 128 ? to_do % block_size : 0); do_write = to_do - (block_size >= 128 ? to_do % block_size : 0);
if (do_write) if (do_write)
{ {
count = new_do_write (f, s, do_write); count = new_do_write (f, s, do_write);
to_do -= count; to_do -= count;
if (count < do_write) if (count < do_write)
return n - to_do; return n - to_do;
} }
/* Now write out the remainder. Normally, this will fit in the /* Now write out the remainder. Normally, this will fit in the
buffer, but it's somewhat messier for line-buffered files, buffer, but it's somewhat messier for line-buffered files,