Edit

IABSD.fr/src/lib/libc/stdlib/tfind.c

Branch :

  • Show log

    Commit

  • Author : guenther
    Date : 2015-09-26 16:03:48
    Hash : 89cd0876
    Message : lint is dead: delete useless LINTLIBRARY comments ok millert@

  • lib/libc/stdlib/tfind.c
  • /*	$OpenBSD: tfind.c,v 1.7 2015/09/26 16:03:48 guenther 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
     *
     * Written by reading the System V Interface Definition, not the code.
     *
     * Totally public domain.
     */
    #include <search.h>
    
    typedef struct node_t
    {
        char	  *key;
        struct node_t *llink, *rlink;
    } node;
    
    /* find a node, or return 0 */
    void *
    tfind(const void *vkey, void * const *vrootp,
        int (*compar)(const void *, const void *))
    {
        char *key = (char *)vkey;
        node **rootp = (node **)vrootp;
    
        if (rootp == (struct node_t **)0)
    	return ((struct node_t *)0);
        while (*rootp != (struct node_t *)0) {	/* T1: */
    	int r;
    	if ((r = (*compar)(key, (*rootp)->key)) == 0)	/* T2: */
    	    return (*rootp);		/* key found */
    	rootp = (r < 0) ?
    	    &(*rootp)->llink :		/* T3: follow left branch */
    	    &(*rootp)->rlink;		/* T4: follow right branch */
        }
        return (node *)0;
    }