diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | NEWS | 4 | ||||
-rw-r--r-- | libio/genops.c | 18 | ||||
-rw-r--r-- | stdio-common/vfscanf.c | 10 |
4 files changed, 22 insertions, 16 deletions
@@ -1,3 +1,9 @@ +2011-09-09 Ulrich Drepper <drepper@gmail.com> + + [BZ #12847] + * libio/genops.c (INTDEF): For string streams the _lock pointer can + be NULL. Don't lock in this case. + 2011-09-09 Roland McGrath <roland@hack.frob.com> * elf/elf.h (ELFOSABI_GNU): New macro. @@ -9,8 +9,8 @@ Version 2.15 * The following bugs are resolved with this release: - 9696, 12403, 12868, 12852, 12874, 12885, 12907, 12922, 12935, 13007, - 13021, 13068, 13092, 13114, 13118, 13123, 13134, 13150 + 9696, 12403, 12847, 12868, 12852, 12874, 12885, 12907, 12922, 12935, + 13007, 13021, 13068, 13092, 13114, 13118, 13123, 13134, 13150 * New program pldd to list loaded object of a process Implemented by Ulrich Drepper. diff --git a/libio/genops.c b/libio/genops.c index 481fbc52b0..5d21c42404 100644 --- a/libio/genops.c +++ b/libio/genops.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1993,1995,1997-2002, 2003, 2004, 2006, 2007 +/* Copyright (C) 1993,1995,1997-2002, 2003, 2004, 2006, 2007, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -471,7 +471,7 @@ _IO_default_xsputn (f, data, n) f->_IO_write_ptr += count; #endif s += count; - } + } else if (count) { char *p = f->_IO_write_ptr; @@ -479,9 +479,9 @@ _IO_default_xsputn (f, data, n) for (i = count; --i >= 0; ) *p++ = *s++; f->_IO_write_ptr = p; - } + } more -= count; - } + } if (more == 0 || _IO_OVERFLOW (f, (unsigned char) *s++) == EOF) break; more--; @@ -534,9 +534,9 @@ _IO_default_xsgetn (fp, data, n) while (--i >= 0) *s++ = *p++; fp->_IO_read_ptr = p; - } - more -= count; - } + } + more -= count; + } if (more == 0 || __underflow (fp) == EOF) break; } @@ -959,7 +959,7 @@ _IO_unbuffer_write (void) int cnt; #define MAXTRIES 2 for (cnt = 0; cnt < MAXTRIES; ++cnt) - if (_IO_lock_trylock (*fp->_lock) == 0) + if (fp->_lock == NULL || _IO_lock_trylock (*fp->_lock) == 0) break; else /* Give the other thread time to finish up its use of the @@ -978,7 +978,7 @@ _IO_unbuffer_write (void) _IO_SETBUF (fp, NULL, 0); - if (cnt < MAXTRIES) + if (cnt < MAXTRIES && fp->_lock != NULL) _IO_lock_unlock (*fp->_lock); } diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index 7356eeb362..9d312d55aa 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2006, 2007, 2010 Free Software Foundation, Inc. +/* Copyright (C) 1991-2006, 2007, 2010, 2011 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -48,7 +48,7 @@ #if INT_MAX == LONG_MAX # define need_long 0 #else -# define need_long 1 +# define need_long 1 #endif /* Those are flags in the conversion format. */ @@ -102,9 +102,9 @@ # define __strtof_internal __wcstof_internal # define L_(Str) L##Str -# define CHAR_T wchar_t +# define CHAR_T wchar_t # define UCHAR_T unsigned int -# define WINT_T wint_t +# define WINT_T wint_t # undef EOF # define EOF WEOF #else @@ -128,7 +128,7 @@ return EOF # define L_(Str) Str -# define CHAR_T char +# define CHAR_T char # define UCHAR_T unsigned char # define WINT_T int #endif |