~mingw-w64/mingw-w64/experimental

« back to all changes in this revision

Viewing changes to ros-privexp/mingw-w64-crt/misc/tfind.c

  • Committer: NightStrike
  • Date: 2010-08-11 22:20:57 UTC
  • Revision ID: svn-v4:4407c894-4637-0410-b4f5-ada5f102cad1:experimental:3266
Branch for adding option for supporting ros

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*      $NetBSD: tfind.c,v 1.3.18.2 2005/03/23 11:12:21 tron Exp $      */
 
2
 
 
3
/*
 
4
 * Tree search generalized from Knuth (6.2.2) Algorithm T just like
 
5
 * the AT&T man page says.
 
6
 *
 
7
 * The node_t structure is for internal use only, lint doesn't grok it.
 
8
 *
 
9
 * Written by reading the System V Interface Definition, not the code.
 
10
 *
 
11
 * Totally public domain.
 
12
 */
 
13
 
 
14
#include <assert.h>
 
15
#define _SEARCH_PRIVATE
 
16
#include <stdlib.h>
 
17
#include <search.h>
 
18
 
 
19
 
 
20
/* find a node, or return 0 */
 
21
void *
 
22
tfind(const void *vkey,
 
23
      void * const *vrootp,
 
24
      int (*compar) (const void *, const void *))
 
25
{
 
26
        node_t * const *rootp = (node_t * const*)vrootp;
 
27
 
 
28
        if (rootp == NULL)
 
29
                return NULL;
 
30
 
 
31
        while (*rootp != NULL) {                /* T1: */
 
32
                int r;
 
33
 
 
34
                if ((r = (*compar)(vkey, (*rootp)->key)) == 0)  /* T2: */
 
35
                        return *rootp;          /* key found */
 
36
                rootp = (r < 0) ?
 
37
                    &(*rootp)->llink :          /* T3: follow left branch */
 
38
                    &(*rootp)->rlink;           /* T4: follow right branch */
 
39
        }
 
40
        return NULL;
 
41
}