diff options
Diffstat (limited to 'src/nxt_types.h')
-rw-r--r-- | src/nxt_types.h | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/nxt_types.h b/src/nxt_types.h new file mode 100644 index 00000000..4c501556 --- /dev/null +++ b/src/nxt_types.h @@ -0,0 +1,151 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_TYPES_H_INCLUDED_ +#define _NXT_TYPES_H_INCLUDED_ + + +/* + * nxt_int_t corresponds to the most efficient integer type, + * an architecture word. It is usually the long type, + * but on Win64 the long is int32_t, so pointer size suits better. + * nxt_int_t must be no less than int32_t. + */ + +#if (__amd64__) +/* + * AMD64 64-bit multiplication and division operations + * are slower and 64-bit instructions are longer. + */ +#define NXT_INT_T_SIZE 4 +typedef int nxt_int_t; +typedef u_int nxt_uint_t; + +#else +#define NXT_INT_T_SIZE NXT_PTR_SIZE +typedef intptr_t nxt_int_t; +typedef uintptr_t nxt_uint_t; +#endif + + +typedef nxt_uint_t nxt_bool_t; + + +/* + * nxt_off_t corresponds to OS's off_t, a file offset type. + * Although Linux, Solaris, and HP-UX define both off_t and off64_t, + * setting _FILE_OFFSET_BITS to 64 defines off_t as off64_t. + */ +typedef off_t nxt_off_t; + + +/* + * nxt_time_t corresponds to OS's time_t, time in seconds. nxt_time_t is + * a signed integer. OS's time_t may be an integer or real-floating type, + * though it is usually a signed 32-bit or 64-bit integer depending on + * platform bit count. There are however exceptions, e.g., time_t is: + * 32-bit on 64-bit NetBSD prior to 6.0 version; + * 64-bit on 32-bit NetBSD 6.0; + * 32-bit on 64-bit OpenBSD; + * 64-bit in Linux x32 ABI; + * 64-bit in 32-bit Visual Studio C++ 2005. + */ +#if (NXT_QNX) +/* + * QNX defines time_t as uint32_t. + * Y2038 fix: "typedef int64_t nxt_time_t". + */ +typedef int32_t nxt_time_t; + +#else +/* Y2038, if time_t is 32-bit integer. */ +typedef time_t nxt_time_t; +#endif + + +#if (NXT_PTR_SIZE == 8) +#define NXT_64BIT 1 +#define NXT_32BIT 0 + +#else +#define NXT_64BIT 0 +#define NXT_32BIT 1 +#endif + + +#define NXT_INT64_T_LEN (sizeof("-9223372036854775808") - 1) +#define NXT_INT32_T_LEN (sizeof("-2147483648") - 1) + +#define NXT_INT64_T_HEXLEN (sizeof("fffffffffffffffff") - 1) +#define NXT_INT32_T_HEXLEN (sizeof("ffffffff") - 1) + +#define NXT_INT64_T_MAX 0x7fffffffffffffffLL +#define NXT_INT32_T_MAX 0x7fffffff + + +#if (NXT_INT_T_SIZE == 8) +#define NXT_INT_T_LEN NXT_INT64_T_LEN +#define NXT_INT_T_HEXLEN NXT_INT64_T_HEXLEN +#define NXT_INT_T_MAX NXT_INT64_T_MAX + +#else +#define NXT_INT_T_LEN NXT_INT32_T_LEN +#define NXT_INT_T_HEXLEN NXT_INT32_T_HEXLEN +#define NXT_INT_T_MAX NXT_INT32_T_MAX +#endif + + +#if (NXT_64BIT) +#define NXT_ATOMIC_T_LEN NXT_INT64_T_LEN +#define NXT_ATOMIC_T_HEXLEN NXT_INT64_T_HEXLEN +#define NXT_ATOMIC_T_MAX NXT_INT64_T_MAX + +#else +#define NXT_ATOMIC_T_LEN NXT_INT32_T_LEN +#define NXT_ATOMIC_T_HEXLEN NXT_INT32_T_HEXLEN +#define NXT_ATOMIC_T_MAX NXT_INT32_T_MAX +#endif + + +#if (NXT_OFF_T_SIZE == 8) +typedef uint64_t nxt_uoff_t; +#define NXT_OFF_T_LEN NXT_INT64_T_LEN +#define NXT_OFF_T_HEXLEN NXT_INT64_T_HEXLEN +#define NXT_OFF_T_MAX NXT_INT64_T_MAX + +#else +typedef uint32_t nxt_uoff_t; +#define NXT_OFF_T_LEN NXT_INT32_T_LEN +#define NXT_OFF_T_HEXLEN NXT_INT32_T_HEXLEN +#define NXT_OFF_T_MAX NXT_INT32_T_MAX +#endif + + +#if (NXT_SIZE_T_SIZE == 8) +#define NXT_SIZE_T_LEN NXT_INT64_T_LEN +#define NXT_SIZE_T_HEXLEN NXT_INT64_T_HEXLEN +#define NXT_SIZE_T_MAX NXT_INT64_T_MAX + +#else +#define NXT_SIZE_T_LEN NXT_INT32_T_LEN +#define NXT_SIZE_T_HEXLEN NXT_INT32_T_HEXLEN +#define NXT_SIZE_T_MAX NXT_INT32_T_MAX +#endif + + +#if (NXT_TIME_T_SIZE == 8) +#define NXT_TIME_T_LEN NXT_INT64_T_LEN +#define NXT_TIME_T_HEXLEN NXT_INT64_T_HEXLEN +#define NXT_TIME_T_MAX NXT_INT64_T_MAX + +#else +#define NXT_TIME_T_LEN NXT_INT32_T_LEN +#define NXT_TIME_T_HEXLEN NXT_INT32_T_HEXLEN +#define NXT_TIME_T_MAX NXT_INT32_T_MAX +#endif + + +#endif /* _NXT_TYPES_H_INCLUDED_ */ |