make includes fix from trunk
[minix.git] / include / net / hton.h
blob64faead63b5de55d9e398a45c2d73c9e3a75b566
1 /*
2 The following macro definitions convert to and from the network standard byte
3 order. The macros with their name in lower case guarantee to evaluate their
4 argument exactly once. The function of the macros is encoded in their names;
5 htons means convert a (unsigned) short in host byte order to network byte order.
6 */
8 #ifndef _NET__HTON_H
9 #define _NET__HTON_H
11 #include <minix/sys_config.h>
13 extern u16_t _tmp;
14 extern u32_t _tmp_l;
16 /* Find out about the byte order. */
18 /* assume <minix/config.h> is included, let's check */
19 #if (_MINIX_CHIP == 0)
20 #include "_MINIX_CHIP macro not set, include <minix/config.h>"
21 #endif
23 #if (_MINIX_CHIP == _CHIP_INTEL)
24 #define LITTLE_ENDIAN 1
25 #endif
27 #if (_MINIX_CHIP == _CHIP_M68000 || _MINIX_CHIP == _CHIP_SPARC)
28 #define BIG_ENDIAN 1
29 #endif
31 #if (LITTLE_ENDIAN) && (BIG_ENDIAN)
32 #include "both LITTLE_ENDIAN and BIG_ENDIAN are defined"
33 /* LITTLE_ENDIAN and BIG_ENDIAN are both defined */
34 #endif
36 #if !(LITTLE_ENDIAN) && !(BIG_ENDIAN)
37 #include "neither LITTLE_ENDIAN nor BIG_ENDIAN is defined"
38 /* LITTLE_ENDIAN and BIG_ENDIAN are both NOT defined */
39 #endif
41 #if LITTLE_ENDIAN
42 #define HTONS(x) ( ( (((unsigned short)(x)) >>8) & 0xff) | \
43 ((((unsigned short)(x)) & 0xff)<<8) )
44 #define NTOHS(x) ( ( (((unsigned short)(x)) >>8) & 0xff) | \
45 ((((unsigned short)(x)) & 0xff)<<8) )
46 #define HTONL(x) ((((x)>>24) & 0xffL) | (((x)>>8) & 0xff00L) | \
47 (((x)<<8) & 0xff0000L) | (((x)<<24) & 0xff000000L))
48 #define NTOHL(x) ((((x)>>24) & 0xffL) | (((x)>>8) & 0xff00L) | \
49 (((x)<<8) & 0xff0000L) | (((x)<<24) & 0xff000000L))
51 #if _WORD_SIZE > 2
52 #define htons(x) (_tmp=(x), ((_tmp>>8) & 0xff) | ((_tmp<<8) & 0xff00))
53 #define ntohs(x) (_tmp=(x), ((_tmp>>8) & 0xff) | ((_tmp<<8) & 0xff00))
54 #define htonl(x) (_tmp_l=(x), ((_tmp_l>>24) & 0xffL) | \
55 ((_tmp_l>>8) & 0xff00L) | \
56 ((_tmp_l<<8) & 0xff0000L) | ((_tmp_l<<24) & 0xff000000L))
57 #define ntohl(x) (_tmp_l=(x), ((_tmp_l>>24) & 0xffL) \
58 | ((_tmp_l>>8) & 0xff00L) | \
59 ((_tmp_l<<8) & 0xff0000L) | ((_tmp_l<<24) & 0xff000000L))
61 #else /* _WORD_SIZE == 2 */
62 /* The above macros are too unwieldy for a 16-bit machine. */
63 u16_t htons(u16_t x);
64 u16_t ntohs(u16_t x);
65 u32_t htonl(u32_t x);
66 u32_t ntohl(u32_t x);
67 #endif /* _WORD_SIZE == 2 */
69 #endif /* LITTLE_ENDIAN */
71 #if BIG_ENDIAN
72 #define htons(x) (x)
73 #define HTONS(x) (x)
74 #define ntohs(x) (x)
75 #define NTOHS(x) (x)
76 #define htonl(x) (x)
77 #define HTONL(x) (x)
78 #define ntohl(x) (x)
79 #define NTOHL(x) (x)
80 #endif /* BIG_ENDIAN */
82 #endif /* _NET__HTON_H */