about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--misc/Makefile4
-rw-r--r--misc/hsearch_r.c8
-rw-r--r--misc/tst-hsearch.c31
4 files changed, 41 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index 8268adcbee..c2742e7e9f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2002-01-29  Ulrich Drepper  <drepper@redhat.com>
+
+	* misc/hsearch_r.c (hsearch_r): Don't insert anything if entry is
+	found.
+	* misc/Makefile (tests): Add tst-hsearch.
+	* misc/tst-hsearch.c: New file.
+
 2002-01-18  Wolfram Gloger  <wg@malloc.de>
 
 	* malloc/malloc.c: Rewrite, adapted from Doug Lea's malloc-2.7.0.c.
diff --git a/misc/Makefile b/misc/Makefile
index 6f935a57a5..a5cee879bc 100644
--- a/misc/Makefile
+++ b/misc/Makefile
@@ -1,4 +1,4 @@
-# Copyright (C) 1991-1999,2000,01 Free Software Foundation, Inc.
+# Copyright (C) 1991-1999, 2000, 2001, 2002 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
@@ -70,7 +70,7 @@ install-lib := libbsd-compat.a libg.a
 endif
 gpl2lgpl := error.c error.h
 
-tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent
+tests := tst-dirname tst-tsearch tst-fdset tst-efgcvt tst-mntent tst-hsearch
 
 CFLAGS-tsearch.c = $(exceptions)
 CFLAGS-lsearch.c = $(exceptions)
diff --git a/misc/hsearch_r.c b/misc/hsearch_r.c
index 59964eb0ad..a7629a5da4 100644
--- a/misc/hsearch_r.c
+++ b/misc/hsearch_r.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
+/* Copyright (C) 1993, 1995, 1996, 1997, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
    Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1993.
 
@@ -168,9 +168,6 @@ hsearch_r (item, action, retval, htab)
       if (htab->table[idx].used == hval
 	  && strcmp (item.key, htab->table[idx].entry.key) == 0)
 	{
-          if (action == ENTER)
-	    htab->table[idx].entry.data = item.data;
-
 	  *retval = &htab->table[idx].entry;
 	  return 1;
 	}
@@ -195,9 +192,6 @@ hsearch_r (item, action, retval, htab)
           if (htab->table[idx].used == hval
 	      && strcmp (item.key, htab->table[idx].entry.key) == 0)
 	    {
-              if (action == ENTER)
-	        htab->table[idx].entry.data = item.data;
-
 	      *retval = &htab->table[idx].entry;
 	      return 1;
 	    }
diff --git a/misc/tst-hsearch.c b/misc/tst-hsearch.c
new file mode 100644
index 0000000000..6c19b22472
--- /dev/null
+++ b/misc/tst-hsearch.c
@@ -0,0 +1,31 @@
+#include <search.h>
+#include <stdio.h>
+
+int
+main (void)
+{
+  int a = 1;
+  int b = 2;
+  ENTRY i;
+  ENTRY *e;
+
+  if (hcreate (20) == 0)
+    {
+      puts ("hcreate failed");
+      return 1;
+    }
+
+  i.key = (char *) "one";
+  i.data = &a;
+  if (hsearch (i, ENTER) == NULL)
+    return 1;
+
+  i.key = (char *) "one";
+  i.data = &b;
+  e = hsearch (i, ENTER);
+  printf ("e.data = %d\n", *(int *) e->data);
+  if (*(int *) e->data != 1)
+    return 1;
+
+  return 0;
+}