Updated to fedora-glibc-20080716T0944 fedora-glibc-2_8_90-9
authorjakub <jakub>
Wed, 16 Jul 2008 09:53:42 +0000 (09:53 +0000)
committerjakub <jakub>
Wed, 16 Jul 2008 09:53:42 +0000 (09:53 +0000)
19 files changed:
ChangeLog
fedora/branch.mk
fedora/glibc.spec.in
libio/iosetvbuf.c
localedata/ChangeLog
localedata/charmaps/UTF-8
localedata/locales/iso14651_t1_common
malloc/hooks.c
nscd/connections.c
resolv/res_query.c
resolv/res_send.c
stdio-common/Makefile
stdio-common/tst-setvbuf1.c [new file with mode: 0644]
stdio-common/tst-setvbuf1.expect [new file with mode: 0644]
stdio-common/vfprintf.c
sysdeps/mach/hurd/bits/fcntl.h
sysdeps/mach/hurd/open.c
sysdeps/mach/hurd/openat.c
time/mktime.c

index 7edad28..2f4f0f3 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -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.
index ab0528f..1b14d1b 100644 (file)
@@ -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
index f84d8f4..1c13bea 100644 (file)
@@ -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
index 7580230..a92eaeb 100644 (file)
@@ -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)
index a7291be..7c3f41d 100644 (file)
@@ -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.
index d4375bb..34b2f7e 100644 (file)
@@ -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
index 35c0af0..cbca3eb 100644 (file)
@@ -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
index 1e01b73..c889376 100644 (file)
@@ -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
index 0afc95a..e4d32b2 100644 (file)
@@ -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);
index 3d2f2fe..b2b45ac 100644 (file)
@@ -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
index e78ff96..dec3ac7 100644 (file)
@@ -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. */
 
index f8ae6f2..944270d 100644 (file)
@@ -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 (file)
index 0000000..2241093
--- /dev/null
@@ -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 (file)
index 0000000..281c18c
--- /dev/null
@@ -0,0 +1,2 @@
+Output #2 <stdout>.
+Output #1 <stderr>.
index ca6343c..714c76c 100644 (file)
@@ -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
index 2f890c1..b4147ce 100644 (file)
@@ -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
index bdfed5e..519789f 100644 (file)
@@ -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)
index 1faf857..f0a3404 100644 (file)
@@ -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)
index e299375..e47d696 100644 (file)
@@ -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;