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