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