byteorder.c revision 290001
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
14int
15main(
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