[BZ #10100]
authorUlrich Drepper <drepper@redhat.com>
Fri, 24 Apr 2009 18:20:10 +0000 (18:20 +0000)
committerUlrich Drepper <drepper@redhat.com>
Fri, 24 Apr 2009 18:20:10 +0000 (18:20 +0000)
2009-04-24  Ulrich Drepper  <drepper@redhat.com>
[BZ #10100]
* misc/hsearch_r.c (hsearch_r): Add back ensurance that hval is
not zero.

ChangeLog
locale/programs/locarchive.c
misc/hsearch_r.c

index 70c7e48..2ea0108 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2009-04-24  Ulrich Drepper  <drepper@redhat.com>
+
+       [BZ #10100]
+       * misc/hsearch_r.c (hsearch_r): Add back ensurance that hval is
+       not zero.
+
 2009-04-24  Jakub Jelinek  <jakub@redhat.com>
 
        * iconvdata/sjis.c (BODY): Don't advance inptr before
index 02f89de..66c5d39 100644 (file)
@@ -131,14 +131,12 @@ create_archive (const char *archivefname, struct locarhandle *ah)
 
   /* To prepare for enlargements of the mmaped area reserve some
      address space.  */
-  size_t reserved;
+  size_t reserved = RESERVE_MMAP_SIZE;
   int xflags = 0;
-  p = mmap64 (NULL, RESERVE_MMAP_SIZE, PROT_NONE, MAP_ANON, -1, 0);
-  if (p != MAP_FAILED)
-    {
-      xflags = MAP_FIXED;
-      reserved = RESERVE_MMAP_SIZE;
-    }
+  if (total < RESERVE_MMAP_SIZE
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_ANON, -1, 0))
+         != MAP_FAILED))
+    xflags = MAP_FIXED;
   else
     {
       p = NULL;
@@ -580,14 +578,13 @@ open_archive (struct locarhandle *ah, bool readonly)
 
   /* To prepare for enlargements of the mmaped area reserve some
      address space.  */
-  size_t reserved;
+  size_t reserved = RESERVE_MMAP_SIZE;
   int xflags = 0;
-  void *p = mmap64 (NULL, RESERVE_MMAP_SIZE, PROT_NONE, MAP_ANON, -1, 0);
-  if (p != MAP_FAILED)
-    {
-      xflags = MAP_FIXED;
-      reserved = RESERVE_MMAP_SIZE;
-    }
+  void *p;
+  if (st.st_size < RESERVE_MMAP_SIZE
+      && ((p = mmap64 (NULL, RESERVE_MMAP_SIZE, PROT_NONE, MAP_ANON, -1, 0))
+         != MAP_FAILED))
+    xflags = MAP_FIXED;
   else
     {
       p = NULL;
@@ -612,7 +609,7 @@ close_archive (struct locarhandle *ah)
 {
   if (ah->fd != -1)
     {
-      munmap (ah->addr, ah->mmaped);
+      munmap (ah->addr, MAX (ah->reserved, ah->mmaped));
       close (ah->fd);
     }
 }
index 6e32afc..73b9565 100644 (file)
@@ -157,6 +157,8 @@ hsearch_r (item, action, retval, htab)
       hval <<= 4;
       hval += item.key[count];
     }
+  if (hval == 0)
+    ++hval;
 
   /* First hash function: simply take the modul but prevent zero. */
   idx = hval % htab->size + 1;