Annotation of 43BSDReno/contrib/isode-beta/dsap/common/as_merge.c, revision 1.1

1.1     ! root        1: #include "quipu/util.h"
        !             2: #include "quipu/attrvalue.h"
        !             3: 
        !             4: Attr_Sequence as_merge (a,b)
        !             5: Attr_Sequence a,b;
        !             6: {
        !             7: register Attr_Sequence aptr, bptr, result, trail, tmp;
        !             8: 
        !             9:        if ( a == NULLATTR )
        !            10:                return (b);
        !            11:        if ( b == NULLATTR )
        !            12:                return (a);
        !            13: 
        !            14:        /* start sequence off, make sure 'a' is the first */
        !            15:        switch (AttrT_cmp (a->attr_type,b->attr_type)) {
        !            16:                case 0: /* equal */
        !            17:                        result = a;
        !            18:                        a->attr_value = avs_merge (a->attr_value, b->attr_value);
        !            19:                        aptr = a->attr_link;
        !            20:                        bptr = b->attr_link;
        !            21:                        free ((char *) b);
        !            22:                        break;
        !            23:                case -1:
        !            24:                        result = b;
        !            25:                        aptr = a;
        !            26:                        bptr = b->attr_link;
        !            27:                        break;
        !            28:                case 1:
        !            29:                        result = a;
        !            30:                        aptr = a->attr_link;
        !            31:                        bptr = b;
        !            32:                        break;
        !            33:                }
        !            34: 
        !            35:        trail = result;
        !            36:        while (  (aptr != NULLATTR) && (bptr != NULLATTR) ) {
        !            37: 
        !            38:           switch (AttrT_cmp (aptr->attr_type,bptr->attr_type)) {
        !            39:                case 0: /* equal */
        !            40:                        aptr->attr_value = avs_merge (aptr->attr_value, bptr->attr_value);
        !            41:                        tmp = bptr->attr_link;
        !            42:                        free ((char *) bptr);
        !            43:                        trail->attr_link = aptr;
        !            44:                        trail = aptr;
        !            45:                        aptr = aptr->attr_link;
        !            46:                        bptr = tmp;
        !            47:                        break;
        !            48:                case -1:
        !            49:                        trail->attr_link = bptr;
        !            50:                        trail = bptr;
        !            51:                        bptr = bptr->attr_link;
        !            52:                        break;
        !            53:                case 1:
        !            54:                        trail->attr_link = aptr;
        !            55:                        trail = aptr;
        !            56:                        aptr = aptr->attr_link;
        !            57:                        break;
        !            58:            }
        !            59:        }
        !            60:        if (aptr == NULLATTR)
        !            61:                trail->attr_link = bptr;
        !            62:        else
        !            63:                trail->attr_link = aptr;
        !            64: 
        !            65:        return (result);
        !            66: }
        !            67: 
        !            68: Attr_Sequence as_merge_aux (a,b)
        !            69: Attr_Sequence a,b;
        !            70: {
        !            71: register Attr_Sequence aptr, bptr, result, trail, tmp;
        !            72: 
        !            73:        if ( a == NULLATTR )
        !            74:                return (b);
        !            75:        if ( b == NULLATTR )
        !            76:                return (a);
        !            77: 
        !            78:        /* start sequence off, make sure 'a' is the first */
        !            79:        switch (AttrT_cmp (a->attr_type,b->attr_type)) {
        !            80:                case 0: /* equal */
        !            81:                        result = a;
        !            82:                        avs_free (a->attr_value);
        !            83:                        a->attr_value = b->attr_value;
        !            84:                        aptr = a->attr_link;
        !            85:                        bptr = b->attr_link;
        !            86:                        free ((char *) b);
        !            87:                        break;
        !            88:                case -1:
        !            89:                        result = b;
        !            90:                        aptr = a;
        !            91:                        bptr = b->attr_link;
        !            92:                        break;
        !            93:                case 1:
        !            94:                        result = a;
        !            95:                        aptr = a->attr_link;
        !            96:                        bptr = b;
        !            97:                        break;
        !            98:                }
        !            99: 
        !           100:        trail = result;
        !           101:        while (  (aptr != NULLATTR) && (bptr != NULLATTR) ) {
        !           102: 
        !           103:           switch (AttrT_cmp (aptr->attr_type,bptr->attr_type)) {
        !           104:                case 0: /* equal */
        !           105:                        avs_free (aptr->attr_value);
        !           106:                        aptr->attr_value = bptr->attr_value;
        !           107:                        tmp = bptr->attr_link;
        !           108:                        free ((char *) bptr);
        !           109:                        trail->attr_link = aptr;
        !           110:                        trail = aptr;
        !           111:                        aptr = aptr->attr_link;
        !           112:                        bptr = tmp;
        !           113:                        break;
        !           114:                case -1:
        !           115:                        trail->attr_link = bptr;
        !           116:                        trail = bptr;
        !           117:                        bptr = bptr->attr_link;
        !           118:                        break;
        !           119:                case 1:
        !           120:                        trail->attr_link = aptr;
        !           121:                        trail = aptr;
        !           122:                        aptr = aptr->attr_link;
        !           123:                        break;
        !           124:            }
        !           125:        }
        !           126:        if (aptr == NULLATTR)
        !           127:                trail->attr_link = bptr;
        !           128:        else
        !           129:                trail->attr_link = aptr;
        !           130: 
        !           131:        return (result);
        !           132: }
        !           133: 

unix.superglobalmegacorp.com

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