aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Blake <eblake@redhat.com>2011-04-22 23:40:57 -0400
committerUlrich Drepper <drepper@gmail.com>2011-04-22 23:40:57 -0400
commitb722481ac27a296c5e4c4ef5ebb85f48a9efac95 (patch)
treec086af7cbc0a533501172d6ec4eddbbc80a00cc8
parent4df46dbda7787fd9f718c4d98a8416fcfa2f2c56 (diff)
downloadglibc-b722481ac27a296c5e4c4ef5ebb85f48a9efac95.zip
glibc-b722481ac27a296c5e4c4ef5ebb85f48a9efac95.tar.gz
glibc-b722481ac27a296c5e4c4ef5ebb85f48a9efac95.tar.bz2
Use al possible bytes from fopen mode string.
-rw-r--r--ChangeLog7
-rw-r--r--NEWS4
-rw-r--r--libio/fileops.c32
3 files changed, 25 insertions, 18 deletions
diff --git a/ChangeLog b/ChangeLog
index fe486f8..2b02e1a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
diff --git a/NEWS b/NEWS
index f8e1685..373d249 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 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,