diff options
author | Earnie Boyd <earnie@users.sf.net> | 2012-08-04 00:06:27 +0400 |
---|---|---|
committer | Earnie Boyd <earnie@users.sf.net> | 2012-08-04 00:06:27 +0400 |
commit | a451d291c52e3b73c5543a5dc05b774ae869fcd5 (patch) | |
tree | 98d262b5604a36113c71aade78790e5f4beed559 /winsup/mingw/mingwex | |
parent | eb9dc9d0686bdcd6f6342d82092b57c179aea1d9 (diff) |
* include/_mingw.h (threadlocalinfostruct, threadmbinfostruct,
*pthreadlocinfo, *pthreadmbcinfo, _locale_tstruct, *_locale_t): Declare.
Diffstat (limited to 'winsup/mingw/mingwex')
-rwxr-xr-x | winsup/mingw/mingwex/tsearch.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/winsup/mingw/mingwex/tsearch.c b/winsup/mingw/mingwex/tsearch.c index a0aa0eb36..55f192214 100755 --- a/winsup/mingw/mingwex/tsearch.c +++ b/winsup/mingw/mingwex/tsearch.c @@ -23,29 +23,33 @@ 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; + node_t *q, **n; node_t **rootp = (node_t **)vrootp; if (rootp == NULL) return NULL; - while (*rootp != NULL) { /* Knuth's T1: */ + n = rootp; + while (*n != NULL) { /* Knuth's T1: */ int r; - if ((r = (*compar)(vkey, (*rootp)->key)) == 0) /* T2: */ - return *rootp; /* we found it! */ + if ((r = (*compar)(vkey, ((*n)->key))) == 0) /* T2: */ + return *n; /* we found it! */ - rootp = (r < 0) ? + n = (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 != 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; - } + 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; return q; } |