SIM-115: update simulator to use latest E2SM KPM version 3
[sim/e2-interface.git] / e2sim / asn1c / asn_system.h
1 /*
2  * Copyright (c) 2003-2017 Lev Walkin <vlm@lionet.info>. All rights reserved.
3  * Redistribution and modifications are permitted subject to BSD license.
4  */
5 /*
6  * Miscellaneous system-dependent types.
7  */
8 #ifndef ASN_SYSTEM_H
9 #define ASN_SYSTEM_H
10
11 #ifdef  HAVE_CONFIG_H
12 #include "config.h"
13 #endif
14
15 #ifndef _DEFAULT_SOURCE
16 #define _DEFAULT_SOURCE 1
17 #endif
18
19 #ifndef _BSD_SOURCE
20 #define _BSD_SOURCE /* for snprintf() on some linux systems  */
21 #endif
22
23 #include <stdio.h>      /* For snprintf(3) */
24 #include <stdlib.h>     /* For *alloc(3) */
25 #include <string.h>     /* For memcpy(3) */
26 #include <sys/types.h>  /* For size_t */
27 #include <limits.h>     /* For LONG_MAX */
28 #include <stdarg.h>     /* For va_start */
29 #include <stddef.h>     /* for offsetof and ptrdiff_t */
30 #include <inttypes.h>   /* for PRIdMAX */
31
32 #ifdef  _WIN32
33
34 #include <malloc.h>
35 #ifndef __MINGW32__
36 #define  snprintf       _snprintf
37 #define  vsnprintf      _vsnprintf
38 #endif
39
40 /* To avoid linking with ws2_32.lib, here's the definition of ntohl() */
41 #define sys_ntohl(l)    ((((l) << 24)  & 0xff000000)    \
42                         | (((l) << 8) & 0xff0000)       \
43                         | (((l) >> 8)  & 0xff00)        \
44                         | ((l >> 24) & 0xff))
45
46 #ifdef _MSC_VER                 /* MSVS.Net */
47 #ifndef __cplusplus
48 #define inline __inline
49 #endif
50 #ifndef ASSUMESTDTYPES  /* Standard types have been defined elsewhere */
51 #define ssize_t         SSIZE_T
52 #if _MSC_VER < 1600
53 typedef char            int8_t;
54 typedef short           int16_t;
55 typedef int             int32_t;
56 typedef unsigned char   uint8_t;
57 typedef unsigned short  uint16_t;
58 typedef unsigned int    uint32_t;
59 #else /* _MSC_VER >= 1600 */
60 #include <stdint.h>
61 #endif /* _MSC_VER < 1600 */
62 #endif  /* ASSUMESTDTYPES */
63 #define WIN32_LEAN_AND_MEAN
64 #include <windows.h>
65 #include <float.h>
66 #define isnan _isnan
67 #define finite _finite
68 #define copysign _copysign
69 #define ilogb   _logb
70 #else   /* !_MSC_VER */
71 #include <stdint.h>
72 #endif  /* _MSC_VER */
73
74 #else   /* !_WIN32 */
75
76 #if defined(__vxworks)
77 #include <types/vxTypes.h>
78 #else   /* !defined(__vxworks) */
79
80 #include <inttypes.h>   /* C99 specifies this file */
81 #ifdef HAVE_NETINET_IN_H
82 #include <netinet/in.h> /* for ntohl() */
83 #endif
84 #define sys_ntohl(foo)  ntohl(foo)
85 #endif  /* defined(__vxworks) */
86
87 #endif  /* _WIN32 */
88
89 #if     __GNUC__ >= 3 || defined(__clang__)
90 #define CC_ATTRIBUTE(attr)    __attribute__((attr))
91 #else
92 #define CC_ATTRIBUTE(attr)
93 #endif
94 #if defined(__GNUC__) && ((__GNUC__ == 4 && __GNUC_MINOR__>= 4) || __GNUC__ > 4)
95 #define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(gnu_printf, fmt, var))
96 #elif defined(__GNUC__)
97 #if defined(ANDROID)
98 #define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(__format__(__printf__, fmt, var))
99 #else
100 #define CC_PRINTFLIKE(fmt, var) CC_ATTRIBUTE(format(printf, fmt, var))
101 #endif
102 #else
103 #define CC_PRINTFLIKE(fmt, var)
104 #endif
105 #define CC_NOTUSED                  CC_ATTRIBUTE(unused)
106 #ifndef CC_ATTR_NO_SANITIZE
107 #if     __GNUC__ < 8
108 #define CC_ATTR_NO_SANITIZE(what)
109 #else
110 #define CC_ATTR_NO_SANITIZE(what)   CC_ATTRIBUTE(no_sanitize(what))
111 #endif
112 #endif
113
114 /* Figure out if thread safety is requested */
115 #if !defined(ASN_THREAD_SAFE) && (defined(THREAD_SAFE) || defined(_REENTRANT))
116 #define ASN_THREAD_SAFE
117 #endif  /* Thread safety */
118
119 #ifndef offsetof        /* If not defined by <stddef.h> */
120 #define offsetof(s, m)  ((ptrdiff_t)&(((s *)0)->m) - (ptrdiff_t)((s *)0))
121 #endif  /* offsetof */
122
123 #ifndef MIN             /* Suitable for comparing primitive types (integers) */
124 #if defined(__GNUC__)
125 #define MIN(a,b)        ({ __typeof a _a = a; __typeof b _b = b;        \
126         ((_a)<(_b)?(_a):(_b)); })
127 #else   /* !__GNUC__ */
128 #define MIN(a,b)        ((a)<(b)?(a):(b))       /* Unsafe variant */
129 #endif /* __GNUC__ */
130 #endif  /* MIN */
131
132 #if __STDC_VERSION__ >= 199901L
133 #ifndef SIZE_MAX
134 #define SIZE_MAX   ((~((size_t)0)) >> 1)
135 #endif
136
137 #ifndef RSIZE_MAX   /* C11, Annex K */
138 #define RSIZE_MAX   (SIZE_MAX >> 1)
139 #endif
140 #ifndef RSSIZE_MAX   /* Halve signed size even further than unsigned */
141 #define RSSIZE_MAX   ((ssize_t)(RSIZE_MAX >> 1))
142 #endif
143 #else   /* Old compiler */
144 #undef  SIZE_MAX
145 #undef  RSIZE_MAX
146 #undef  RSSIZE_MAX
147 #define SIZE_MAX   ((~((size_t)0)) >> 1)
148 #define RSIZE_MAX   (SIZE_MAX >> 1)
149 #define RSSIZE_MAX   ((ssize_t)(RSIZE_MAX >> 1))
150 #endif
151
152 #if __STDC_VERSION__ >= 199901L
153 #define ASN_PRI_SIZE "zu"
154 #define ASN_PRI_SSIZE "zd"
155 #define ASN_PRIuMAX PRIuMAX
156 #define ASN_PRIdMAX PRIdMAX
157 #else
158 #define ASN_PRI_SIZE "lu"
159 #define ASN_PRI_SSIZE "ld"
160 #if LLONG_MAX > LONG_MAX
161 #define ASN_PRIuMAX "llu"
162 #define ASN_PRIdMAX "lld"
163 #else
164 #define ASN_PRIuMAX "lu"
165 #define ASN_PRIdMAX "ld"
166 #endif
167 #endif
168
169 #endif  /* ASN_SYSTEM_H */