xref: /freebsd/contrib/ntp/util/byteorder.c (revision 5f4c09dd85bff675e0ca63c55ea3c517e0fddfcc)
1 /*
2  * This works on:
3  *   Crays
4  *   Conven
5  *   sparc's
6  *   Dec mip machines
7  *   Dec alpha machines
8  *   RS6000
9  *   SGI's
10  */
11 
12 #include <stdio.h>
13 
14 int
15 main(
16 	int argc,
17 	char *argv[]
18 	)
19 {
20 	int i;
21 	int big;
22 	union {
23 		unsigned long l;
24 		char c[sizeof(long)];
25 	} u;
26 
27 #if defined(LONG8)
28 	u.l = (((long)0x08070605) << 32) | (long)0x04030201;
29 #else
30 	u.l = 0x04030201;
31 #endif
32 	if (sizeof(long) > 4) {
33 		if (u.c[0] == 0x08) big = 1;
34 		else		    big = 0;
35 	} else {
36 		if (u.c[0] == 0x04) big = 1;
37 		else		    big = 0;
38 	}
39 	for (i=0; i< sizeof(long); i++) {
40 		if (big == 1 && (u.c[i] == (sizeof(long) - i))) {
41 			continue;
42 		} else if (big == 0 && (u.c[i] == (i+1))) {
43 			continue;
44 		} else {
45 			big = -1;
46 			break;
47 		}
48 	}
49 
50 	if (big == 1) {
51 		printf("XNTP_BIG_ENDIAN\n");
52 	} else if (big == 0) {
53 		printf("XNTP_LITTLE_ENDIAN\n");
54 	}
55 	exit(0);
56 }
57