diff options
author | Elliott Hughes <enh@google.com> | 2012-08-13 17:02:11 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2012-08-13 17:41:49 -0700 |
commit | 409302f0f9fce73ea4c82bbfd439041cd7923d34 (patch) | |
tree | bc23c82d6b9a68cfe2b114496399e1561d5db749 /libc/bionic/tdelete.c | |
parent | 54655eaf92ca91bfe2fa293896059a181e27b6eb (diff) | |
download | android_bionic-409302f0f9fce73ea4c82bbfd439041cd7923d34.tar.gz android_bionic-409302f0f9fce73ea4c82bbfd439041cd7923d34.tar.bz2 android_bionic-409302f0f9fce73ea4c82bbfd439041cd7923d34.zip |
Switch to upstream NetBSD tdelete/tfind/tsearch.
tdestroy is a GNU extension, so that stays.
Change-Id: Iedebaff25ea7e92b1ab1dd4440da12b67b99aa40
Diffstat (limited to 'libc/bionic/tdelete.c')
-rw-r--r-- | libc/bionic/tdelete.c | 71 |
1 files changed, 0 insertions, 71 deletions
diff --git a/libc/bionic/tdelete.c b/libc/bionic/tdelete.c deleted file mode 100644 index b64b47a2a..000000000 --- a/libc/bionic/tdelete.c +++ /dev/null @@ -1,71 +0,0 @@ -/* $NetBSD: tdelete.c,v 1.2 1999/09/16 11:45:37 lukem Exp $ */ - -/* - * Tree search generalized from Knuth (6.2.2) Algorithm T just like - * the AT&T man page says. - * - * The node_t structure is for internal use only, lint doesn't grok it. - * - * Written by reading the System V Interface Definition, not the code. - * - * Totally public domain. - */ - -#include <sys/cdefs.h> -#if 0 -#if defined(LIBC_SCCS) && !defined(lint) -__RCSID("$NetBSD: tdelete.c,v 1.2 1999/09/16 11:45:37 lukem Exp $"); -#endif /* LIBC_SCCS and not lint */ -#endif -__FBSDID("$FreeBSD: release/9.0.0/lib/libc/stdlib/tdelete.c 108694 2003-01-05 02:43:18Z tjr $"); - -#define _SEARCH_PRIVATE -#include <search.h> -#include <stdlib.h> - - -/* - * delete node with given key - * - * vkey: key to be deleted - * vrootp: address of the root of the tree - * compar: function to carry out node comparisons - */ -void * -tdelete(const void * __restrict vkey, void ** __restrict vrootp, - int (*compar)(const void *, const void *)) -{ - node_t **rootp = (node_t **)vrootp; - node_t *p, *q, *r; - int cmp; - - if (rootp == NULL || (p = *rootp) == NULL) - return NULL; - - while ((cmp = (*compar)(vkey, (*rootp)->key)) != 0) { - p = *rootp; - rootp = (cmp < 0) ? - &(*rootp)->llink : /* follow llink branch */ - &(*rootp)->rlink; /* follow rlink branch */ - if (*rootp == NULL) - return NULL; /* key not found */ - } - r = (*rootp)->rlink; /* D1: */ - if ((q = (*rootp)->llink) == NULL) /* Left NULL? */ - q = r; - else if (r != NULL) { /* Right link is NULL? */ - if (r->llink == NULL) { /* D2: Find successor */ - r->llink = q; - q = r; - } else { /* D3: Find NULL link */ - for (q = r->llink; q->llink != NULL; q = r->llink) - r = q; - r->llink = q->rlink; - q->llink = (*rootp)->llink; - q->rlink = (*rootp)->rlink; - } - } - free(*rootp); /* D4: Free node */ - *rootp = q; /* link parent to new node */ - return p; -} |