diff --git a/ChangeLog b/ChangeLog index fe486f8cb4..2b02e1af70 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2011-04-22 Ulrich Drepper + + [BZ #12685] + * libio/fileops.c (_IO_new_file_fopen): Scan up to 7 bytes of the + mode string. + Patch by Eric Blake . + 2011-04-20 H.J. Lu * sunrpc/Makefile (need-export-routines): Add svc_run. diff --git a/NEWS b/NEWS index f8e1685cd1..373d2493eb 100644 --- a/NEWS +++ b/NEWS @@ -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. See the end for copying conditions. @@ -19,7 +19,7 @@ Version 2.14 * The following bugs are resolved with this release: 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 diff --git a/libio/fileops.c b/libio/fileops.c index eba2768cc7..ea730ac95a 100644 --- a/libio/fileops.c +++ b/libio/fileops.c @@ -290,7 +290,7 @@ _IO_new_file_fopen (fp, filename, mode, is32not64) #ifdef _LIBC last_recognized = mode; #endif - for (i = 1; i < 6; ++i) + for (i = 1; i < 7; ++i) { switch (*++mode) { @@ -997,18 +997,18 @@ _IO_new_file_seekoff (fp, offset, dir, mode) /* Adjust for read-ahead (bytes is buffer). */ offset -= fp->_IO_read_end - fp->_IO_read_ptr; if (fp->_offset == _IO_pos_BAD) - { - if (mode != 0) - goto dumb; - else - { - result = _IO_SYSSEEK (fp, 0, dir); - if (result == EOF) - return result; + { + if (mode != 0) + goto dumb; + else + { + result = _IO_SYSSEEK (fp, 0, dir); + if (result == EOF) + return result; - fp->_offset = result; - } - } + fp->_offset = result; + } + } /* Make offset absolute, assuming current pointer is file_ptr(). */ offset += fp->_offset; if (offset < 0) @@ -1270,7 +1270,7 @@ _IO_new_file_write (f, data, n) { f->_flags |= _IO_ERR_SEEN; break; - } + } to_do -= 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); if (do_write) - { + { count = new_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,