diff options
Diffstat (limited to 'winsup/mingw/mingwex/tsearch.c')
-rwxr-xr-x | winsup/mingw/mingwex/tsearch.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/winsup/mingw/mingwex/tsearch.c b/winsup/mingw/mingwex/tsearch.c index 55f192214..a0aa0eb36 100755 --- a/winsup/mingw/mingwex/tsearch.c +++ b/winsup/mingw/mingwex/tsearch.c @@ -23,33 +23,29 @@ tsearch(const void * __restrict__ vkey, /* key to be located */ void ** __restrict__ vrootp, /* address of tree root */ int (*compar) (const void *, const void *)) { - node_t *q, **n; + node_t *q; node_t **rootp = (node_t **)vrootp; if (rootp == NULL) return NULL; - n = rootp; - while (*n != NULL) { /* Knuth's T1: */ + while (*rootp != NULL) { /* Knuth's T1: */ int r; - if ((r = (*compar)(vkey, ((*n)->key))) == 0) /* T2: */ - return *n; /* we found it! */ + if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ + return *rootp; /* we found it! */ - n = (r < 0) ? + rootp = (r < 0) ? &(*rootp)->llink : /* T3: follow left branch */ &(*rootp)->rlink; /* T4: follow right branch */ - if (*n == NULL) - break; - rootp = n; } q = malloc(sizeof(node_t)); /* T5: key not found */ - if (!q) - return q; - *n = q; /* make new node */ - /* LINTED const castaway ok */ - q->key = (void *)vkey; /* initialize new node */ - q->llink = q->rlink = NULL; + if (q != 0) { /* make new node */ + *rootp = q; /* link new node to old */ + /* LINTED const castaway ok */ + q->key = (void *)vkey; /* initialize new node */ + q->llink = q->rlink = NULL; + } return q; } |