diff options
-rw-r--r-- | ChangeLog | 52 | ||||
-rw-r--r-- | fedora/branch.mk | 4 | ||||
-rw-r--r-- | fedora/glibc.spec.in | 10 | ||||
-rw-r--r-- | libio/iosetvbuf.c | 2 | ||||
-rw-r--r-- | localedata/ChangeLog | 11 | ||||
-rw-r--r-- | localedata/charmaps/UTF-8 | 2 | ||||
-rw-r--r-- | localedata/locales/iso14651_t1_common | 270 | ||||
-rw-r--r-- | malloc/hooks.c | 4 | ||||
-rw-r--r-- | nscd/connections.c | 112 | ||||
-rw-r--r-- | resolv/res_query.c | 26 | ||||
-rw-r--r-- | resolv/res_send.c | 1 | ||||
-rw-r--r-- | stdio-common/Makefile | 8 | ||||
-rw-r--r-- | stdio-common/tst-setvbuf1.c | 19 | ||||
-rw-r--r-- | stdio-common/tst-setvbuf1.expect | 2 | ||||
-rw-r--r-- | stdio-common/vfprintf.c | 11 | ||||
-rw-r--r-- | sysdeps/mach/hurd/bits/fcntl.h | 2 | ||||
-rw-r--r-- | sysdeps/mach/hurd/open.c | 13 | ||||
-rw-r--r-- | sysdeps/mach/hurd/openat.c | 14 | ||||
-rw-r--r-- | time/mktime.c | 6 |
19 files changed, 522 insertions, 47 deletions
@@ -1,3 +1,55 @@ +2008-07-15 Ulrich Drepper <drepper@redhat.com> + + * stdio-common/vfprintf.c (_IO_helper_overflow): In case _IO_sputn + doesn't manage to write anything, fail. + + * malloc/hooks.c (__malloc_check_init): Remove printf. + +2008-07-14 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * sysdeps/mach/hurd/bits/fcntl.h: Include <sys/types.h>. + +2008-07-12 Ulrich Drepper <drepper@redhat.com> + + * nscd/connections.c (main_loop_poll): Fix handling of read errors + from inotify. + (main_loop_epoll): Likewise. + +2008-07-09 Ulrich Drepper <drepper@redhat.com> + + * resolv/res_send.c: Remove unnecessary res_pquery prototype. + + * resolv/res_query.c (__libc_res_nquery): Issue debug message only + if DEBUG is defined. + + * resolv/res_query.c (__libc_res_nquery): Align buffer for T_AAAA + query. Adjust buffer size computation for padding. + +2008-07-08 Ulrich Drepper <drepper@redhat.com> + + * stdio-common/Makefile: Add rules to build and run tst-setvbuf1. + * stdio-common/tst-setvbuf1.c: New file. + * stdio-common/tst-setvbuf1.expect: New file. + + [BZ #6719] + * libio/iosetvbuf.c (_IO_setvbuf): Correctly clear buffering flags + when selecting fully-buffered stream. + Patch by Wang Xin <wxinee@gmail.com>. + +2008-07-06 Samuel Thibault <samuel.thibault@ens-lyon.org> + + * sysdeps/mach/hurd/open.c: Include <stdio.h>. + (__open_2): New function. + (__open64_2): New alias to __open_2. + * sysdeps/mach/hurd/openat.c: Include <stdio.h>. + (__openat_2): New function. + (__openat64_2): New alias to __openat_2. + +2008-07-06 Ulrich Drepper <drepper@redhat.com> + + [BZ #6723] + * time/mktime.c (__mktime_internal): Normalize tp->tm_isdst value. + 2008-07-01 Samuel Thibault <samuel.thibault@ens-lyon.org> * sysdeps/unix/bsd/bsd4.4/bits/socket.h: Define MSG_NOSIGNAL. diff --git a/fedora/branch.mk b/fedora/branch.mk index ab0528fd81..1b14d1b8f4 100644 --- a/fedora/branch.mk +++ b/fedora/branch.mk @@ -3,5 +3,5 @@ glibc-branch := fedora glibc-base := HEAD DIST_BRANCH := devel COLLECTION := dist-f8 -fedora-sync-date := 2008-07-03 12:03 UTC -fedora-sync-tag := fedora-glibc-20080703T1203 +fedora-sync-date := 2008-07-16 09:44 UTC +fedora-sync-tag := fedora-glibc-20080716T0944 diff --git a/fedora/glibc.spec.in b/fedora/glibc.spec.in index f84d8f49ad..1c13bea7a8 100644 --- a/fedora/glibc.spec.in +++ b/fedora/glibc.spec.in @@ -19,7 +19,7 @@ Summary: The GNU libc libraries Name: glibc Version: @glibcversion@ -Release: 8 +Release: 9 # GPLv2+ is used in a bunch of programs, LGPLv2+ is used for libraries. # Things that are linked directly into dynamically linked programs # and shared libraries (e.g. crt files, lib*_nonshared.a) have an additional @@ -976,6 +976,14 @@ rm -f *.filelist* %endif %changelog +* Wed Jul 16 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-9 +- update from trunk + - fix unbuffered vfprintf if writing to the stream fails (#455360) + - remove useless "malloc: using debugging hooks" message (#455355) + - nscd fixes + - fix resolver alignment issues (#454500) + - fix setvbuf (BZ#6719) + * Thu Jul 3 2008 Jakub Jelinek <jakub@redhat.com> 2.8.90-8 - update from trunk - watch even resolv.conf in nscd using inotify diff --git a/libio/iosetvbuf.c b/libio/iosetvbuf.c index 7580230eb6..a92eaebf85 100644 --- a/libio/iosetvbuf.c +++ b/libio/iosetvbuf.c @@ -45,7 +45,7 @@ _IO_setvbuf (fp, buf, mode, size) switch (mode) { case _IOFBF: - fp->_IO_file_flags &= ~_IO_LINE_BUF|_IO_UNBUFFERED; + fp->_IO_file_flags &= ~(_IO_LINE_BUF|_IO_UNBUFFERED); if (buf == NULL) { if (fp->_IO_buf_base == NULL) diff --git a/localedata/ChangeLog b/localedata/ChangeLog index a7291beec9..7c3f41d21b 100644 --- a/localedata/ChangeLog +++ b/localedata/ChangeLog @@ -1,3 +1,14 @@ +2008-07-11 Ulrich Drepper <drepper@redhat.com> + + * locales/iso14651_t1_common: Add Kannada collation support. + Patch by Pravin Satpute <psatpute@redhat.com>. + +2008-07-08 Ulrich Drepper <drepper@redhat.com> + + [BZ #6713] + * charmaps/UTF-8: Fix U1DBA entry representation. + Patch by Colin Watson. + 2008-06-27 Ulrich Drepper <drepper@redhat.com> * tst-strptime.c (do_test): Add test of %EY. diff --git a/localedata/charmaps/UTF-8 b/localedata/charmaps/UTF-8 index d4375bbab4..34b2f7ee8f 100644 --- a/localedata/charmaps/UTF-8 +++ b/localedata/charmaps/UTF-8 @@ -5961,7 +5961,7 @@ CHARMAP <U1DB7> /xe1/xb6/xb7 MODIFIER LETTER SMALL UPSILON <U1DB8> /xe1/xb6/xb8 MODIFIER LETTER SMALL CAPITAL U <U1DB9> /xe1/xb6/xb9 MODIFIER LETTER SMALL V WITH HOOK -<U1DBA> /xe1/xb6/xbe MODIFIER LETTER SMALL TURNED V +<U1DBA> /xe1/xb6/xba MODIFIER LETTER SMALL TURNED V <U1DBB> /xe1/xb6/xbb MODIFIER LETTER SMALL Z <U1DBC> /xe1/xb6/xbc MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK <U1DBD> /xe1/xb6/xbd MODIFIER LETTER SMALL Z WITH CURL diff --git a/localedata/locales/iso14651_t1_common b/localedata/locales/iso14651_t1_common index 35c0af0b21..cbca3eb863 100644 --- a/localedata/locales/iso14651_t1_common +++ b/localedata/locales/iso14651_t1_common @@ -64,6 +64,7 @@ script <DEVANAGARI> script <GUJARATI> script <TELUGU> script <GURUMUKHI> +script <KANNADA> # Déclaration des symboles internes / Declaration of internal symbols # @@ -816,6 +817,99 @@ collating-symbol <tippi> collating-symbol <adak> collating-symbol <pa-halant> +#<KANNADA> +# +# kvd- denotes vowel modifier +# km- denotes matras +# kvw- denotes vowels +# <KNKT> denotes Nukta characters + +collating-element <kn-sign_ii> from "<U0CBF><U0CD5>" +collating-element <kn-sign_e> from "<U0CC6><U0CD5>" +collating-element <kn-sign_o> from "<U0CC6><U0CC2><U0CD5>" +collating-element <kn-sign1_o> from "<U0CCA><U0CD5>" +collating-element <kn-sign_shorto> from "<U0CC6><U0CC2>" +collating-element <kn-sign_ai> from "<U0CC6><U0CD6>" + +# defning symbols + +collating-symbol <sign-jihvamuliya> +collating-symbol <sign-upadhmaniya> +collating-symbol <KNKT> +collating-symbol <kvw-a> +collating-symbol <kvw-aa> +collating-symbol <kvw-i> +collating-symbol <kvw-ii> +collating-symbol <kvw-u> +collating-symbol <kvw-uu> +collating-symbol <kvw-vocalicr> +collating-symbol <kvw-vocalicrr> +collating-symbol <kvw-vocalicl> +collating-symbol <kvw-vocalicll> +collating-symbol <kvw-shorte> +collating-symbol <kvw-e> +collating-symbol <kvw-ai> +collating-symbol <kvw-shorto> +collating-symbol <kvw-o> +collating-symbol <kvw-au> +collating-symbol <k-ka> +collating-symbol <k-kha> +collating-symbol <k-ga> +collating-symbol <k-gha> +collating-symbol <k-nga> +collating-symbol <k-ca> +collating-symbol <k-cha> +collating-symbol <k-ja> +collating-symbol <k-jha> +collating-symbol <k-nya> +collating-symbol <k-tta> +collating-symbol <k-ttha> +collating-symbol <k-dda> +collating-symbol <k-ddha> +collating-symbol <k-nna> +collating-symbol <k-ta> +collating-symbol <k-tha> +collating-symbol <k-da> +collating-symbol <k-dha> +collating-symbol <k-na> +collating-symbol <k-pa> +collating-symbol <k-pha> +collating-symbol <k-ba> +collating-symbol <k-bha> +collating-symbol <k-ma> +collating-symbol <k-ya> +collating-symbol <k-ra> +collating-symbol <k-rra> +collating-symbol <k-la> +collating-symbol <k-va> +collating-symbol <k-sha> +collating-symbol <k-ssa> +collating-symbol <k-sa> +collating-symbol <k-ha> +collating-symbol <k-lla> +collating-symbol <k-fa> +collating-symbol <k-avagrah> +collating-symbol <km-aa> +collating-symbol <km-i> +collating-symbol <km-ii> +collating-symbol <km-u> +collating-symbol <km-uu> +collating-symbol <km-vocalicr> +collating-symbol <km-vocalicrr> +collating-symbol <km-vocalicl> +collating-symbol <km-vocalicll> +collating-symbol <km-shorte> +collating-symbol <km-e> +collating-symbol <km-ai> +collating-symbol <km-shorto> +collating-symbol <km-o> +collating-symbol <km-au> +collating-symbol <kvd-anuswara> +collating-symbol <kvd-visarg> +collating-symbol <k-halant> +collating-symbol <k-lenght_mark> +collating-symbol <k-ai_lenght_mark> + # Ordre des symboles internes / Order of internal symbols # # SYMB. N° @@ -1557,6 +1651,88 @@ collating-symbol <pa-halant> <tippi> <pa-halant> +# +# <KANNADA> +# +# collation weights in order + +<KNKT> +<sign-jihvamuliya> +<sign-upadhmaniya> +<kvw-a> +<kvw-aa> +<kvw-i> +<kvw-ii> +<kvw-u> +<kvw-uu> +<kvw-vocalicr> +<kvw-vocalicrr> +<kvw-vocalicl> +<kvw-vocalicll> +<kvw-shorte> +<kvw-e> +<kvw-ai> +<kvw-shorto> +<kvw-o> +<kvw-au> +<k-ka> +<k-kha> +<k-ga> +<k-gha> +<k-nga> +<k-ca> +<k-cha> +<k-ja> +<k-jha> +<k-nya> +<k-tta> +<k-ttha> +<k-dda> +<k-ddha> +<k-nna> +<k-ta> +<k-tha> +<k-da> +<k-dha> +<k-na> +<k-pa> +<k-pha> +<k-ba> +<k-bha> +<k-ma> +<k-ya> +<k-ra> +<k-rra> +<k-la> +<k-va> +<k-sha> +<k-ssa> +<k-sa> +<k-ha> +<k-lla> +<k-fa> +<k-avagrah> +<km-aa> +<km-i> +<km-ii> +<km-u> +<km-uu> +<km-vocalicr> +<km-vocalicrr> +<km-vocalicl> +<km-vocalicll> +<km-shorte> +<km-e> +<km-ai> +<km-shorto> +<km-o> +<km-au> +<kvd-anuswara> +<kvd-visarg> +<k-halant> +<k-lenght_mark> +<k-ai_lenght_mark> + order_start <SPECIAL>;forward;backward;forward;forward,position # # Tout caractère non précisément défini sera considéré comme caractère spécial @@ -3698,6 +3874,100 @@ order_start <GURUMUKHI>;forward;forward;forward;forward,position <U0A3C> IGNORE;<PNKT>;<MIN>;IGNORE <U0A71> IGNORE;<adak>;<MIN>;IGNORE +order_start <KANNADA>;forward;forward;forward;forward,position +<U0CE6> <0>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CE7> <1>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CE8> <2>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CE9> <3>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CEA> <4>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CEB> <5>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CEC> <6>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CED> <7>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CEE> <8>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CEF> <9>;"<BAS><NUM>";"<MIN><MIN>";IGNORE +<U0CF1> <sign-jihvamuliya>;<BAS>;<MIN>;IGNORE +<U0CF2> <sign-upadhmaniya>;<BAS>;<MIN>;IGNORE +<U0C85> <kvw-a>;<BAS>;<MIN>;IGNORE +<U0C86> <kvw-aa>;<BAS>;<MIN>;IGNORE +<U0C87> <kvw-i>;<BAS>;<MIN>;IGNORE +<U0C88> <kvw-ii>;<BAS>;<MIN>;IGNORE +<U0C89> <kvw-u>;<BAS>;<MIN>;IGNORE +<U0C8A> <kvw-uu>;<BAS>;<MIN>;IGNORE +<U0C8B> <kvw-vocalicr>;<BAS>;<MIN>;IGNORE +<U0CE0> <kvw-vocalicrr>;<BAS>;<MIN>;IGNORE +<U0C8C> <kvw-vocalicl>;<BAS>;<MIN>;IGNORE +<U0CE1> <kvw-vocalicll>;<BAS>;<MIN>;IGNORE +<U0C8E> <kvw-shorte>;<BAS>;<MIN>;IGNORE +<U0C8F> <kvw-e>;<BAS>;<MIN>;IGNORE +<U0C90> <kvw-ai>;<BAS>;<MIN>;IGNORE +<U0C92> <kvw-shorto>;<BAS>;<MIN>;IGNORE +<U0C93> <kvw-o>;<BAS>;<MIN>;IGNORE +<U0C94> <kvw-au>;<BAS>;<MIN>;IGNORE +<U0C95> <k-ka>;<BAS>;<MIN>;IGNORE +<U0C96> <k-kha>;<BAS>;<MIN>;IGNORE +<U0C97> <k-ga>;<BAS>;<MIN>;IGNORE +<U0C98> <k-gha>;<BAS>;<MIN>;IGNORE +<U0C99> <k-nga>;<BAS>;<MIN>;IGNORE +<U0C9A> <k-ca>;<BAS>;<MIN>;IGNORE +<U0C9B> <k-cha>;<BAS>;<MIN>;IGNORE +<U0C9C> <k-ja>;<BAS>;<MIN>;IGNORE +<U0C9D> <k-jha>;<BAS>;<MIN>;IGNORE +<U0C9E> <k-nya>;<BAS>;<MIN>;IGNORE +<U0C9F> <k-tta>;<BAS>;<MIN>;IGNORE +<U0CA0> <k-ttha>;<BAS>;<MIN>;IGNORE +<U0CA1> <k-dda>;<BAS>;<MIN>;IGNORE +<U0CA2> <k-ddha>;<BAS>;<MIN>;IGNORE +<U0CA3> <k-nna>;<BAS>;<MIN>;IGNORE +<U0CA4> <k-ta>;<BAS>;<MIN>;IGNORE +<U0CA5> <k-tha>;<BAS>;<MIN>;IGNORE +<U0CA6> <k-da>;<BAS>;<MIN>;IGNORE +<U0CA7> <k-dha>;<BAS>;<MIN>;IGNORE +<U0CA8> <k-na>;<BAS>;<MIN>;IGNORE +<U0CAA> <k-pa>;<BAS>;<MIN>;IGNORE +<U0CAB> <k-pha>;<BAS>;<MIN>;IGNORE +<U0CAC> <k-ba>;<BAS>;<MIN>;IGNORE +<U0CAD> <k-bha>;<BAS>;<MIN>;IGNORE +<U0CAE> <k-ma>;<BAS>;<MIN>;IGNORE +<U0CAF> <k-ya>;<BAS>;<MIN>;IGNORE +<U0CB0> <k-ra>;<BAS>;<MIN>;IGNORE +<U0CB1> <k-rra>;<BAS>;<MIN>;IGNORE +<U0CB2> <k-la>;<BAS>;<MIN>;IGNORE +<U0CB5> <k-va>;<BAS>;<MIN>;IGNORE +<U0CB6> <k-sha>;<BAS>;<MIN>;IGNORE +<U0CB7> <k-ssa>;<BAS>;<MIN>;IGNORE +<U0CB8> <k-sa>;<BAS>;<MIN>;IGNORE +<U0CB9> <k-ha>;<BAS>;<MIN>;IGNORE +<U0CB3> <k-lla>;<BAS>;<MIN>;IGNORE +<U0CDE> <k-fa>;<BAS>;<MIN>;IGNORE +<U0CBD> <k-avagrah>;<BAS>;<MIN>;IGNORE +<U0CBE> <km-aa>;<BAS>;<MIN>;IGNORE +<U0CBF> <km-i>;<BAS>;<MIN>;IGNORE +<U0CC0> <km-ii>;<BAS>;<MIN>;IGNORE +<kn-sign_ii> <km-ii>;<BAS>;<MIN>;IGNORE +<U0CC1> <km-u>;<BAS>;<MIN>;IGNORE +<U0CC2> <km-uu>;<BAS>;<MIN>;IGNORE +<U0CC3> <km-vocalicr>;<BAS>;<MIN>;IGNORE +<U0CC4> <km-vocalicrr>;<BAS>;<MIN>;IGNORE +<U0CE2> <km-vocalicl>;<BAS>;<MIN>;IGNORE +<U0CE3> <km-vocalicll>;<BAS>;<MIN>;IGNORE +<U0CC6> <km-shorte>;<BAS>;<MIN>;IGNORE +<U0CC7> <km-e>;<BAS>;<MIN>;IGNORE +<kn-sign_e> <km-e>;<BAS>;<MIN>;IGNORE +<U0CC8> <km-ai>;<BAS>;<MIN>;IGNORE +<kn-sign_ai> <km-ai>;<BAS>;<MIN>;IGNORE +<U0CCA> <km-shorto>;<BAS>;<MIN>;IGNORE +<kn-sign_shorto> <km-shorto>;<BAS>;<MIN>;IGNORE +<U0CCB> <km-o>;<BAS>;<MIN>;IGNORE +<kn-sign_o> <km-o>;<BAS>;<MIN>;IGNORE +<kn-sign1_o> <km-o>;<BAS>;<MIN>;IGNORE +<U0CCC> <km-au>;<BAS>;<MIN>;IGNORE +<U0C82> <kvd-anuswara>;<BAS>;<MIN>;IGNORE +<U0C83> <kvd-visarg>;<BAS>;<MIN>;IGNORE +<U0CCD> <k-halant>;<BAS>;<MIN>;IGNORE +<U0CD5> <k-lenght_mark>;<BAS>;<MIN>;IGNORE +<U0CD6> <k-ai_lenght_mark>;<BAS>;<MIN>;IGNORE +<U0CBC> IGNORE;<KNKT>;<MIN>;IGNORE + order_end END LC_COLLATE diff --git a/malloc/hooks.c b/malloc/hooks.c index 1e01b73afd..c88937665c 100644 --- a/malloc/hooks.c +++ b/malloc/hooks.c @@ -1,5 +1,5 @@ /* Malloc implementation for multiple threads without lock contention. - Copyright (C) 2001-2006, 2007 Free Software Foundation, Inc. + Copyright (C) 2001-2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger <wg@malloc.de>, 2001. @@ -96,8 +96,6 @@ __malloc_check_init() __free_hook = free_check; __realloc_hook = realloc_check; __memalign_hook = memalign_check; - if(check_action & 1) - malloc_printerr (5, "malloc: using debugging hooks", NULL); } /* A simple, standard set of debugging hooks. Overhead is `only' one diff --git a/nscd/connections.c b/nscd/connections.c index 0afc95a227..e4d32b27de 100644 --- a/nscd/connections.c +++ b/nscd/connections.c @@ -1806,42 +1806,64 @@ main_loop_poll (void) size_t first = 1; #ifdef HAVE_INOTIFY - if (conns[1].fd == inotify_fd) + if (inotify_fd != -1 && conns[1].fd == inotify_fd) { if (conns[1].revents != 0) { - bool done[lastdb] = { false, }; + bool to_clear[lastdb] = { false, }; union { struct inotify_event i; char buf[100]; } inev; - while (TEMP_FAILURE_RETRY (read (inotify_fd, &inev, - sizeof (inev))) - >= (ssize_t) sizeof (struct inotify_event)) + while (1) { + ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev, + sizeof (inev))); + if (nb < (ssize_t) sizeof (struct inotify_event)) + { + if (nb == -1) + { + /* Something went wrong when reading the inotify + data. Better disable inotify. */ + conns[1].fd = -1; + firstfree = 1; + if (nused == 2) + nused = 1; + close (inotify_fd); + inotify_fd = -1; + dbg_log (_("disabled inotify after read error")); + } + break; + } + /* Check which of the files changed. */ for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) - if (!done[dbcnt] - && (inev.i.wd == dbs[dbcnt].inotify_descr - || (dbcnt == hstdb - && inev.i.wd == resolv_conf_descr))) + if (inev.i.wd == dbs[dbcnt].inotify_descr) { - if (dbcnt == hstdb - && inev.i.wd == resolv_conf_descr) - res_init (); - - pthread_mutex_lock (&dbs[dbcnt].prune_lock); - dbs[dbcnt].clear_cache = 1; - pthread_mutex_unlock (&dbs[dbcnt].prune_lock); - pthread_cond_signal (&dbs[dbcnt].prune_cond); - - done[dbcnt] = true; - break; + to_clear[dbcnt] = true; + goto next; } + + if (inev.i.wd == resolv_conf_descr) + { + res_init (); + to_clear[hstdb] = true; + } + next:; } + /* Actually perform the cache clearing. */ + for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) + if (to_clear[dbcnt]) + { + pthread_mutex_lock (&dbs[dbcnt].prune_lock); + dbs[dbcnt].clear_cache = 1; + pthread_mutex_unlock (&dbs[dbcnt].prune_lock); + pthread_cond_signal (&dbs[dbcnt].prune_cond); + } + --n; } @@ -1966,27 +1988,57 @@ main_loop_epoll (int efd) #ifdef HAVE_INOTIFY else if (revs[cnt].data.fd == inotify_fd) { + bool to_clear[lastdb] = { false, }; union { struct inotify_event i; char buf[100]; } inev; - while (TEMP_FAILURE_RETRY (read (inotify_fd, &inev, - sizeof (inev))) - >= (ssize_t) sizeof (struct inotify_event)) + while (1) { + ssize_t nb = TEMP_FAILURE_RETRY (read (inotify_fd, &inev, + sizeof (inev))); + if (nb < (ssize_t) sizeof (struct inotify_event)) + { + if (nb == -1) + { + /* Something went wrong when reading the inotify + data. Better disable inotify. */ + (void) epoll_ctl (efd, EPOLL_CTL_DEL, inotify_fd, + NULL); + close (inotify_fd); + inotify_fd = -1; + dbg_log (_("disabled inotify after read error")); + } + break; + } + /* Check which of the files changed. */ for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) if (inev.i.wd == dbs[dbcnt].inotify_descr) { - pthread_mutex_trylock (&dbs[dbcnt].prune_lock); - dbs[dbcnt].clear_cache = 1; - pthread_mutex_unlock (&dbs[dbcnt].prune_lock); - pthread_cond_signal (&dbs[dbcnt].prune_cond); - break; + to_clear[dbcnt] = true; + goto next; } + + if (inev.i.wd == resolv_conf_descr) + { + res_init (); + to_clear[hstdb] = true; + } + next:; } + + /* Actually perform the cache clearing. */ + for (size_t dbcnt = 0; dbcnt < lastdb; ++dbcnt) + if (to_clear[dbcnt]) + { + pthread_mutex_lock (&dbs[dbcnt].prune_lock); + dbs[dbcnt].clear_cache = 1; + pthread_mutex_unlock (&dbs[dbcnt].prune_lock); + pthread_cond_signal (&dbs[dbcnt].prune_cond); + } } #endif else @@ -2010,8 +2062,10 @@ main_loop_epoll (int efd) /* Now look for descriptors for accepted connections which have no reply in too long of a time. */ time_t laststart = now - ACCEPT_TIMEOUT; + assert (starttime[sock] == 0); + assert (inotify_fd == -1 || starttime[inotify_fd] == 0); for (int cnt = highest; cnt > STDERR_FILENO; --cnt) - if (cnt != sock && starttime[cnt] != 0 && starttime[cnt] < laststart) + if (starttime[cnt] != 0 && starttime[cnt] < laststart) { /* We are waiting for this one for too long. Close it. */ (void) epoll_ctl (efd, EPOLL_CTL_DEL, cnt, NULL); diff --git a/resolv/res_query.c b/resolv/res_query.c index 3d2f2fe3a9..b2b45acde7 100644 --- a/resolv/res_query.c +++ b/resolv/res_query.c @@ -146,18 +146,34 @@ __libc_res_nquery(res_state statp, { if ((oflags & RES_F_EDNS0ERR) == 0 && (statp->options & RES_USE_EDNS0) != 0) - n = __res_nopt(statp, n, query1, bufsize, anslen / 2); + { + n = __res_nopt(statp, n, query1, bufsize, anslen / 2); + if (n < 0) + goto unspec_nomem; + } nquery1 = n; - query2 = buf + nquery1; + /* Align the buffer. */ + int npad = ((nquery1 + __alignof__ (HEADER) - 1) + & ~(__alignof__ (HEADER) - 1)) - nquery1; + if (n > bufsize - npad) + { + n = -1; + goto unspec_nomem; + } + int nused = n + npad; + query2 = buf + nused; n = res_nmkquery(statp, QUERY, name, class, T_AAAA, NULL, 0, - NULL, query2, bufsize - n); + NULL, query2, bufsize - nused); if (n > 0 && (oflags & RES_F_EDNS0ERR) == 0 && (statp->options & RES_USE_EDNS0) != 0) - n = __res_nopt(statp, n, query2, bufsize - n, anslen / 2); + n = __res_nopt(statp, n, query2, bufsize - nused - n, + anslen / 2); nquery2 = n; } + + unspec_nomem:; } else { @@ -188,8 +204,10 @@ __libc_res_nquery(res_state statp, if ((statp->options & RES_USE_EDNS0) != 0 && ((oflags ^ statp->_flags) & RES_F_EDNS0ERR) != 0) { statp->_flags |= RES_F_EDNS0ERR; +#ifdef DEBUG if (statp->options & RES_DEBUG) printf(";; res_nquery: retry without EDNS0\n"); +#endif goto again; } #ifdef DEBUG diff --git a/resolv/res_send.c b/resolv/res_send.c index e78ff967aa..dec3ac7a3f 100644 --- a/resolv/res_send.c +++ b/resolv/res_send.c @@ -194,7 +194,6 @@ static int sock_eq(struct sockaddr_in6 *, struct sockaddr_in6 *); /* Reachover. */ static void convaddr4to6(struct sockaddr_in6 *sa); -void res_pquery(const res_state, const u_char *, int, FILE *); /* Public. */ diff --git a/stdio-common/Makefile b/stdio-common/Makefile index f8ae6f25d9..944270dafe 100644 --- a/stdio-common/Makefile +++ b/stdio-common/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 1991-2006, 2007 Free Software Foundation, Inc. +# Copyright (C) 1991-2006, 2007, 2008 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 @@ -58,7 +58,7 @@ tests := tstscanf test_rdwr test-popen tstgetln test-fseek \ tst-popen tst-unlockedio tst-fmemopen2 tst-put-error tst-fgets \ tst-fwrite bug16 bug17 tst-swscanf tst-sprintf2 bug18 bug18a \ bug19 bug19a tst-popen2 scanf13 scanf14 scanf15 bug20 bug21 bug22 \ - scanf16 scanf17 + scanf16 scanf17 tst-setvbuf1 test-srcs = tst-unbputc tst-printf @@ -130,3 +130,7 @@ bug15-ENV = LOCPATH=$(common-objpfx)localedata ifneq (,$(filter %REENTRANT, $(defines))) CPPFLAGS += -D_IO_MTSAFE_IO endif + +$(objpfx)tst-setvbuf1.out: tst-setvbuf1.expect $(objpfx)tst-setvbuf1 + $(built-program-cmd) > $@ 2>&1 + cmp tst-setvbuf1.expect $@ diff --git a/stdio-common/tst-setvbuf1.c b/stdio-common/tst-setvbuf1.c new file mode 100644 index 0000000000..22410939c9 --- /dev/null +++ b/stdio-common/tst-setvbuf1.c @@ -0,0 +1,19 @@ +#include <stdio.h> + +static int +do_test (void) +{ + if (setvbuf (stderr, NULL, _IOFBF, BUFSIZ) != 0) + { + puts ("Set full buffer error."); + return 1; + } + + fprintf (stderr, "Output #1 <stderr>.\n"); + printf ("Output #2 <stdout>.\n"); + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" diff --git a/stdio-common/tst-setvbuf1.expect b/stdio-common/tst-setvbuf1.expect new file mode 100644 index 0000000000..281c18ca1e --- /dev/null +++ b/stdio-common/tst-setvbuf1.expect @@ -0,0 +1,2 @@ +Output #2 <stdout>. +Output #1 <stderr>. diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index ca6343c37f..714c76c3d4 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007 +/* Copyright (C) 1991-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -2080,6 +2080,11 @@ _IO_helper_overflow (_IO_FILE *s, int c) { _IO_size_t written = _IO_sputn (target, s->_wide_data->_IO_write_base, used); + if (written == 0 || written == WEOF) + return WEOF; + __wmemmove (s->_wide_data->_IO_write_base, + s->_wide_data->_IO_write_base + written, + used - written); s->_wide_data->_IO_write_ptr -= written; } #else @@ -2087,6 +2092,10 @@ _IO_helper_overflow (_IO_FILE *s, int c) if (used) { _IO_size_t written = _IO_sputn (target, s->_IO_write_base, used); + if (written == 0 || written == EOF) + return EOF; + memmove (s->_IO_write_base, s->_IO_write_base + written, + used - written); s->_IO_write_ptr -= written; } #endif diff --git a/sysdeps/mach/hurd/bits/fcntl.h b/sysdeps/mach/hurd/bits/fcntl.h index 2f890c1b65..b4147cee51 100644 --- a/sysdeps/mach/hurd/bits/fcntl.h +++ b/sysdeps/mach/hurd/bits/fcntl.h @@ -22,6 +22,8 @@ # error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." #endif +#include <sys/types.h> + /* File access modes. These are understood by io servers; they can be passed in `dir_lookup', and are returned by `io_get_openmodes'. Consequently they can be passed to `open', `hurd_file_name_lookup', and diff --git a/sysdeps/mach/hurd/open.c b/sysdeps/mach/hurd/open.c index bdfed5e311..519789f22f 100644 --- a/sysdeps/mach/hurd/open.c +++ b/sysdeps/mach/hurd/open.c @@ -19,6 +19,7 @@ #include <errno.h> #include <fcntl.h> #include <stdarg.h> +#include <stdio.h> #include <hurd.h> #include <hurd/fd.h> @@ -52,8 +53,20 @@ weak_alias (__libc_open, __open) libc_hidden_weak (__open) weak_alias (__libc_open, open) +int +__open_2 (file, oflag) + const char *file; + int oflag; +{ + if (oflag & O_CREAT) + __fortify_fail ("invalid open call: O_CREAT without mode"); + + return __open (file, oflag); +} + /* open64 is just the same as open for us. */ weak_alias (__libc_open, __libc_open64) weak_alias (__libc_open, __open64) libc_hidden_weak (_open64) weak_alias (__libc_open, open64) +strong_alias (__open_2, __open64_2) diff --git a/sysdeps/mach/hurd/openat.c b/sysdeps/mach/hurd/openat.c index 1faf857e16..f0a3404cd8 100644 --- a/sysdeps/mach/hurd/openat.c +++ b/sysdeps/mach/hurd/openat.c @@ -21,6 +21,7 @@ #include <fcntl.h> #include <stdarg.h> #include <stddef.h> +#include <stdio.h> #include <sys/stat.h> #include <hurd.h> #include <hurd/fd.h> @@ -56,7 +57,20 @@ __openat (fd, file, oflag) libc_hidden_def (__openat) weak_alias (__openat, openat) +int +__openat_2 (fd, file, oflag) + int fd; + const char *file; + int oflag; +{ + if (oflag & O_CREAT) + __fortify_fail ("invalid openat call: O_CREAT without mode"); + + return __openat (fd, file, oflag); +} + /* openat64 is just the same as openat for us. */ weak_alias (__openat, __openat64) libc_hidden_weak (__openat64) weak_alias (__openat, openat64) +strong_alias (__openat_2, __openat64_2) diff --git a/time/mktime.c b/time/mktime.c index e299375a16..e47d69615a 100644 --- a/time/mktime.c +++ b/time/mktime.c @@ -1,5 +1,5 @@ /* Convert a `struct tm' to a time_t value. - Copyright (C) 1993-1999, 2002-2006, 2007 Free Software Foundation, Inc. + Copyright (C) 1993-1999, 2002-2007, 2008 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@twinsun.com>. @@ -293,7 +293,9 @@ __mktime_internal (struct tm *tp, int mday = tp->tm_mday; int mon = tp->tm_mon; int year_requested = tp->tm_year; - int isdst = tp->tm_isdst; + /* Normalize the value. */ + int isdst = ((tp->tm_isdst >> (8 * sizeof (tp->tm_isdst) - 1)) + | (tp->tm_isdst != 0)); /* 1 if the previous probe was DST. */ int dst2; |