Annotation of 43BSDTahoe/new/spms/src/bin/pdiff/ptree.c, revision 1.1.1.1

1.1       root        1: /* $Header$ */
                      2: 
                      3: /*
                      4:  * Author: Peter J. Nicklin
                      5:  */
                      6: #include "null.h"
                      7: #include "ptree.h"
                      8: /*
                      9:  * ptree() searchs for a project directory name in a binary tree. If the
                     10:  * search is unsuccessful, a new node is added to the tree.
                     11:  */
                     12: PTREE *
                     13: ptree(p, alias, pd1, pd2)
                     14:        PTREE *p;                       /* current node pointer */
                     15:        char *alias;                    /* project directory alias */
                     16:        char *pd1;                      /* project directory pathname */
                     17:        char *pd2;                      /* project directory pathname */
                     18: {
                     19:        char *strsav();                 /* save a string somewhere */
                     20:        int comp;                       /* compare key values */
                     21:        int strcmp();                   /* string comparison */
                     22:        PTREE *palloc();                /* allocate a tree node */
                     23: 
                     24:        if (p == NULL)
                     25:                {                       /* a new alias has arrived */
                     26:                if ((p = palloc()) == NULL || (p->alias = strsav(alias)) == NULL)
                     27:                        goto nomemory;
                     28:                if (pd1 != NULL)
                     29:                        {
                     30:                        if ((p->pd1 = strsav(pd1)) == NULL)
                     31:                                goto nomemory;
                     32:                        p->pd2 = NULL;
                     33:                        }
                     34:                else    {
                     35:                        if ((p->pd2 = strsav(pd2)) == NULL)
                     36:                                goto nomemory;
                     37:                        p->pd1 = NULL;
                     38:                        }
                     39:                p->left  = p->right = NULL;
                     40:                }
                     41:        else if ((comp = strcmp(alias, p->alias)) < 0)
                     42:                p->left = ptree(p->left, alias, pd1, pd2);
                     43:        else if (comp > 0)
                     44:                p->right = ptree(p->right, alias, pd1, pd2);
                     45:        else if (comp == 0)
                     46:                if ((p->pd2 = strsav(pd2)) == NULL)
                     47:                        {
                     48: nomemory:              warn("out of memory");
                     49:                        exit(2);
                     50:                        }
                     51:        return(p);
                     52:        }
                     53: 
                     54: 
                     55: 
                     56: /*
                     57:  * ptreerm() removes a project directory tree.
                     58:  */
                     59: void
                     60: ptreerm(p)
                     61:        PTREE *p;                       /* current node pointer */
                     62: {
                     63:        if (p != NULL)
                     64:                {
                     65:                if (p->left != NULL)
                     66:                        ptreerm(p->left);
                     67:                if (p->right != NULL)
                     68:                        ptreerm(p->right);
                     69:                free(p->alias);
                     70:                if (p->pd1 != NULL)
                     71:                        free(p->pd1);
                     72:                if (p->pd2 != NULL)
                     73:                        free(p->pd2);
                     74:                free((char *) p);
                     75:                }
                     76: }
                     77: 
                     78: 
                     79: 
                     80: /*
                     81:  * palloc allocates memory for a project tree node.
                     82:  */
                     83: static PTREE *
                     84: palloc()
                     85: {
                     86:        char *malloc();                 /* memory allocator */
                     87: 
                     88:        return((PTREE *) malloc(sizeof(PTREE)));
                     89:        }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.