summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorpfg <pfg@FreeBSD.org>2016-01-26 04:51:44 +0000
committerpfg <pfg@FreeBSD.org>2016-01-26 04:51:44 +0000
commitbe9764f2dc77a9a48f82fcacd3441b35f54a2680 (patch)
tree57b61ce9bd5ac1d74948b02278d80dce7868c236 /lib
parentd8eecc212bf99877ef9d79b1975ce7865712cf8e (diff)
downloadFreeBSD-src-be9764f2dc77a9a48f82fcacd3441b35f54a2680.zip
FreeBSD-src-be9764f2dc77a9a48f82fcacd3441b35f54a2680.tar.gz
Revert r279010:
tdelete(3): don't delete the node we are about to return. The original change, from NetBSD, was bogus; introduced a memory leak and and broke POSIX. By reverting we actually match NetBSD's latest revision. This is a direct commit to 10 since this function was rewritten in 11-current. Reported by: Markiyan Kushnir Obtained from: NetBSD (CVS rev. 1.7, 1.8)
Diffstat (limited to 'lib')
-rw-r--r--lib/libc/stdlib/tdelete.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/libc/stdlib/tdelete.c b/lib/libc/stdlib/tdelete.c
index bef187e..8a599e5 100644
--- a/lib/libc/stdlib/tdelete.c
+++ b/lib/libc/stdlib/tdelete.c
@@ -1,4 +1,4 @@
-/* $NetBSD: tdelete.c,v 1.2 1999/09/16 11:45:37 lukem Exp $ */
+/* $NetBSD: tdelete.c,v 1.8 2016/01/20 20:47:41 christos Exp $ */
/*
* Tree search generalized from Knuth (6.2.2) Algorithm T just like
@@ -14,7 +14,7 @@
#include <sys/cdefs.h>
#if 0
#if defined(LIBC_SCCS) && !defined(lint)
-__RCSID("$NetBSD: tdelete.c,v 1.6 2012/06/25 22:32:45 abs Exp $");
+__RCSID("$NetBSD: tdelete.c,v 1.8 2016/01/20 20:47:41 christos Exp $");
#endif /* LIBC_SCCS and not lint */
#endif
__FBSDID("$FreeBSD$");
@@ -25,9 +25,9 @@ __FBSDID("$FreeBSD$");
/*
- * find a node with given key
+ * delete node with given key
*
- * vkey: key to be found
+ * vkey: key to be deleted
* vrootp: address of the root of the tree
* compar: function to carry out node comparisons
*/
@@ -65,8 +65,7 @@ tdelete(const void * __restrict vkey, void ** __restrict vrootp,
q->rlink = (*rootp)->rlink;
}
}
- if (p != *rootp)
- free(*rootp); /* D4: Free node */
+ free(*rootp); /* D4: Free node */
*rootp = q; /* link parent to new node */
return p;
}
OpenPOWER on IntegriCloud