Windows global stuff:
[krb5.git] / src / lib / krb5 / krb / faddr_ordr.c
1 /*
2  * lib/krb5/krb/faddr_ordr.c
3  *
4  * Copyright 1990 by the Massachusetts Institute of Technology.
5  * All Rights Reserved.
6  *
7  * Export of this software from the United States of America may
8  *   require a specific license from the United States Government.
9  *   It is the responsibility of any person or organization contemplating
10  *   export to obtain such a license before exporting.
11  * 
12  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
13  * distribute this software and its documentation for any purpose and
14  * without fee is hereby granted, provided that the above copyright
15  * notice appear in all copies and that both that copyright notice and
16  * this permission notice appear in supporting documentation, and that
17  * the name of M.I.T. not be used in advertising or publicity pertaining
18  * to distribution of the software without specific, written prior
19  * permission.  M.I.T. makes no representations about the suitability of
20  * this software for any purpose.  It is provided "as is" without express
21  * or implied warranty.
22  * 
23  *
24  * krb5_fulladdr_order()
25  */
26
27 #include "k5-int.h"
28
29 #ifndef min
30 #define min(a,b) ((a) > (b) ? (a) : (b))
31 #endif
32
33 /*
34  * Return an ordering on the two full addresses:  0 if the same,
35  * < 0 if first is less than 2nd, > 0 if first is greater than 2nd.
36  */
37 int
38 krb5_fulladdr_order(context, addr1, addr2)
39     krb5_context context;
40     register const krb5_fulladdr *addr1;
41     register const krb5_fulladdr *addr2;
42 {
43     int dir;
44     const int minlen = min(addr1->address->length, addr2->address->length);
45     register int i;
46
47     dir = addr1->address->addrtype - addr2->address->addrtype;
48     if (dir)
49         return(dir);
50
51     dir = addr1->address->length - addr2->address->length;
52     if (dir)
53         return(dir);
54
55     for (i = 0; i < minlen; i++) {
56         if ((unsigned char) addr1->address->contents[i] <
57             (unsigned char) addr2->address->contents[i])
58             return -1;
59         else if ((unsigned char) addr1->address->contents[i] >
60                  (unsigned char) addr2->address->contents[i])
61             return 1;
62     }
63     if (addr1->port > addr2->port)
64         return(1);
65     else if (addr1->port < addr2->port)
66         return(-1);
67     else
68         return(0);
69 }