xref: /unit/src/nxt_types.h (revision 2721:b7e339706db1)
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) NGINX, Inc.
5  */
6 
7 #ifndef _NXT_TYPES_H_INCLUDED_
8 #define _NXT_TYPES_H_INCLUDED_
9 
10 
11 /*
12  * nxt_int_t corresponds to the most efficient integer type,
13  * an architecture word.  It is usually the long type,
14  * but on Win64 the long is int32_t, so pointer size suits better.
15  * nxt_int_t must be no less than int32_t.
16  */
17 
18 #if (__amd64__)
19 /*
20  * AMD64 64-bit multiplication and division operations
21  * are slower and 64-bit instructions are longer.
22  */
23 #define NXT_INT_T_SIZE       4
24 typedef int                  nxt_int_t;
25 typedef u_int                nxt_uint_t;
26 
27 #else
28 #define NXT_INT_T_SIZE       NXT_PTR_SIZE
29 typedef intptr_t             nxt_int_t;
30 typedef uintptr_t            nxt_uint_t;
31 #endif
32 
33 
34 typedef nxt_uint_t           nxt_bool_t;
35 
36 
37 /*
38  * nxt_off_t corresponds to OS's off_t, a file offset type.
39  * Although Linux, Solaris, and HP-UX define both off_t and off64_t,
40  * setting _FILE_OFFSET_BITS to 64 defines off_t as off64_t.
41  */
42 typedef off_t                nxt_off_t;
43 
44 
45 /*
46  * nxt_time_t corresponds to OS's time_t, time in seconds.  nxt_time_t is
47  * a signed integer.  OS's time_t may be an integer or real-floating type,
48  * though it is usually a signed 32-bit or 64-bit integer depending on
49  * platform bit count.  There are however exceptions, e.g., time_t is:
50  *   32-bit on 64-bit NetBSD prior to 6.0 version;
51  *   64-bit on 32-bit NetBSD 6.0;
52  *   32-bit on 64-bit OpenBSD;
53  *   64-bit in Linux x32 ABI;
54  *   64-bit in 32-bit Visual Studio C++ 2005.
55  */
56 #if (NXT_QNX)
57 /*
58  * QNX defines time_t as uint32_t.
59  * Y2038 fix: "typedef int64_t  nxt_time_t".
60  */
61 typedef int32_t              nxt_time_t;
62 
63 #else
64 /* Y2038, if time_t is 32-bit integer. */
65 typedef time_t               nxt_time_t;
66 #endif
67 
68 
69 #if (NXT_PTR_SIZE == 8)
70 #define NXT_64BIT            1
71 #define NXT_32BIT            0
72 
73 #else
74 #define NXT_64BIT            0
75 #define NXT_32BIT            1
76 #endif
77 
78 
79 #define NXT_INT64_T_LEN      nxt_length("-9223372036854775808")
80 #define NXT_INT32_T_LEN      nxt_length("-2147483648")
81 
82 #define NXT_INT64_T_HEXLEN   nxt_length("FFFFFFFFFFFFFFFF")
83 #define NXT_INT32_T_HEXLEN   nxt_length("FFFFFFFF")
84 
85 #define NXT_INT64_T_MAX      0x7FFFFFFFFFFFFFFFLL
86 #define NXT_INT32_T_MAX      0x7FFFFFFF
87 
88 
89 #if (NXT_INT_T_SIZE == 8)
90 #define NXT_INT_T_LEN        NXT_INT64_T_LEN
91 #define NXT_INT_T_HEXLEN     NXT_INT64_T_HEXLEN
92 #define NXT_INT_T_MAX        NXT_INT64_T_MAX
93 
94 #else
95 #define NXT_INT_T_LEN        NXT_INT32_T_LEN
96 #define NXT_INT_T_HEXLEN     NXT_INT32_T_HEXLEN
97 #define NXT_INT_T_MAX        NXT_INT32_T_MAX
98 #endif
99 
100 
101 #if (NXT_64BIT)
102 #define NXT_ATOMIC_T_LEN     NXT_INT64_T_LEN
103 #define NXT_ATOMIC_T_HEXLEN  NXT_INT64_T_HEXLEN
104 #define NXT_ATOMIC_T_MAX     NXT_INT64_T_MAX
105 
106 #else
107 #define NXT_ATOMIC_T_LEN     NXT_INT32_T_LEN
108 #define NXT_ATOMIC_T_HEXLEN  NXT_INT32_T_HEXLEN
109 #define NXT_ATOMIC_T_MAX     NXT_INT32_T_MAX
110 #endif
111 
112 
113 #if (NXT_OFF_T_SIZE == 8)
114 typedef uint64_t             nxt_uoff_t;
115 #define NXT_OFF_T_LEN        NXT_INT64_T_LEN
116 #define NXT_OFF_T_HEXLEN     NXT_INT64_T_HEXLEN
117 #define NXT_OFF_T_MAX        NXT_INT64_T_MAX
118 
119 #else
120 typedef uint32_t             nxt_uoff_t;
121 #define NXT_OFF_T_LEN        NXT_INT32_T_LEN
122 #define NXT_OFF_T_HEXLEN     NXT_INT32_T_HEXLEN
123 #define NXT_OFF_T_MAX        NXT_INT32_T_MAX
124 #endif
125 
126 
127 #if (NXT_SIZE_T_SIZE == 8)
128 #define NXT_SIZE_T_LEN       NXT_INT64_T_LEN
129 #define NXT_SIZE_T_HEXLEN    NXT_INT64_T_HEXLEN
130 #define NXT_SIZE_T_MAX       NXT_INT64_T_MAX
131 
132 #else
133 #define NXT_SIZE_T_LEN       NXT_INT32_T_LEN
134 #define NXT_SIZE_T_HEXLEN    NXT_INT32_T_HEXLEN
135 #define NXT_SIZE_T_MAX       NXT_INT32_T_MAX
136 #endif
137 
138 
139 #if (NXT_TIME_T_SIZE == 8)
140 #define NXT_TIME_T_LEN       NXT_INT64_T_LEN
141 #define NXT_TIME_T_HEXLEN    NXT_INT64_T_HEXLEN
142 #define NXT_TIME_T_MAX       NXT_INT64_T_MAX
143 
144 #else
145 #define NXT_TIME_T_LEN       NXT_INT32_T_LEN
146 #define NXT_TIME_T_HEXLEN    NXT_INT32_T_HEXLEN
147 #define NXT_TIME_T_MAX       NXT_INT32_T_MAX
148 #endif
149 
150 
151 #endif /* _NXT_TYPES_H_INCLUDED_ */
152