diff options
author | Eric Blake <eblake@redhat.com> | 2011-04-22 23:40:57 -0400 |
---|---|---|
committer | Ulrich Drepper <drepper@gmail.com> | 2011-04-22 23:40:57 -0400 |
commit | b722481ac27a296c5e4c4ef5ebb85f48a9efac95 (patch) | |
tree | c086af7cbc0a533501172d6ec4eddbbc80a00cc8 | |
parent | 4df46dbda7787fd9f718c4d98a8416fcfa2f2c56 (diff) | |
download | glibc-b722481ac27a296c5e4c4ef5ebb85f48a9efac95.zip glibc-b722481ac27a296c5e4c4ef5ebb85f48a9efac95.tar.gz glibc-b722481ac27a296c5e4c4ef5ebb85f48a9efac95.tar.bz2 |
Use al possible bytes from fopen mode string.
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | libio/fileops.c | 32 |
3 files changed, 25 insertions, 18 deletions
@@ -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> * sunrpc/Makefile (need-export-routines): Add svc_run. @@ -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 eba2768..ea730ac 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; - - fp->_offset = result; - } - } + { + if (mode != 0) + goto dumb; + else + { + result = _IO_SYSSEEK (fp, 0, dir); + if (result == EOF) + return 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, |