summaryrefslogtreecommitdiffhomepage
path: root/src/nxt_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/nxt_types.h')
-rw-r--r--src/nxt_types.h151
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_ */