1#ifndef COMPAT_H_
2#define COMPAT_H_
3
4#include "config.h"
5
6#include <sys/types.h>
7
8#ifdef HAVE_STDINT_H
9#include <stdint.h>
10#endif
11
12#ifdef HAVE_ASM_BYTEORDER_H
13#include <asm/byteorder.h>
14#endif
15
16#ifdef HAVE_SYS_BYTEORDER_H
17#  include <sys/byteorder.h>
18#  if defined(_BIG_ENDIAN) && !defined(_LITTLE_ENDIAN)
19#    undef _BIG_ENDIAN
20#    define _BIG_ENDIAN	4321
21#    define _BYTE_ORDER	_BIG_ENDIAN
22#  elif defined(_LITTLE_ENDIAN) && !defined(_BIG_ENDIAN)
23#    undef _LITTLE_ENDIAN
24#    define _LITTLE_ENDIAN	1234
25#    define _BYTE_ORDER	_LITTLE_ENDIAN
26#  endif
27#endif
28
29#ifdef HAVE_BYTESWAP_H
30#include <byteswap.h>
31#endif
32
33#ifdef HAVE_MACHINE_ENDIAN_H
34#include <machine/endian.h>
35#endif
36
37#ifdef HAVE_LIBKERN_OSBYTEORDER_H
38#include <libkern/OSByteOrder.h>
39#endif
40
41#ifndef HAVE_STRLCPY
42size_t strlcpy(char *, const char *, size_t);
43#endif
44
45#ifndef __UNCONST
46#define __UNCONST(a)    ((void *)(unsigned long)(const void *)(a))
47#endif
48
49#ifdef HAVE_HTOBE64
50#  define ISCSI_HTOBE64(x)	htobe64(x)
51#  define ISCSI_BE64TOH(x)	be64toh(x)
52#else
53#  if defined(HAVE_LIBKERN_OSBYTEORDER_H)
54#    define ISCSI_HTOBE64(x)	(x) = OSSwapBigToHostInt64((u_int64_t)(x))
55#  elif _BYTE_ORDER == _BIG_ENDIAN
56#    define ISCSI_HTOBE64(x)	(x)
57#  elif defined(HAVE___BSWAP64)
58#    define ISCSI_HTOBE64(x)	(x) = __bswap64((u_int64_t)(x))
59#  else   /* LITTLE_ENDIAN */
60#    define ISCSI_HTOBE64(x)	(((uint64_t)(ISCSI_NTOHL((uint32_t)(((x) << 32) >> 32))) << 32) | (uint32_t)ISCSI_NTOHL(((uint32_t)((x) >> 32))))
61#  endif  /* LITTLE_ENDIAN */
62#  define ISCSI_BE64TOH(x)	ISCSI_HTOBE64(x)
63#endif
64
65#ifndef _DIAGASSERT
66#  ifndef __static_cast
67#  define __static_cast(x,y) (x)y
68#  endif
69#define _DIAGASSERT(e) (__static_cast(void,0))
70#endif
71
72/* Added for busybox, which doesn't define INFTIM */
73#ifndef INFTIM
74#define INFTIM	-1
75#endif
76
77#endif /* COMPAT_H_ */
78