PageRenderTime 6ms CodeModel.GetById 1ms app.highlight 3ms RepoModel.GetById 1ms app.codeStats 0ms

/contrib/ntp/util/byteorder.c

https://bitbucket.org/freebsd/freebsd-head/
C | 56 lines | 42 code | 4 blank | 10 comment | 22 complexity | ec52fc2b6c58d763ee9e463726bf464f MD5 | raw file
 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}