/* * Copyright (C) Igor Sysoev * Copyright (C) NGINX, Inc. */ #ifndef _NJS_TYPES_H_INCLUDED_ #define _NJS_TYPES_H_INCLUDED_ #define NJS_OK 0 #define NJS_ERROR (-1) #define NJS_AGAIN (-2) #define NJS_DECLINED (-3) #define NJS_DONE (-4) /* * off_t is 32 bit on Linux, Solaris and HP-UX by default. * Must be before . */ #define _FILE_OFFSET_BITS 64 /* u_char, u_int, int8_t, int32_t, int64_t, size_t, off_t. */ #include #include #if (__LP64__) #define NJS_64BIT 1 #define NJS_PTR_SIZE 8 #else #define NJS_64BIT 0 #define NJS_PTR_SIZE 4 #endif /* * njs_int_t corresponds to the most efficient integer type, an architecture * word. It is usually the long type, however on Win64 the long is int32_t, * so pointer size suits better. njs_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 NJS_INT_T_SIZE 4 typedef int njs_int_t; typedef u_int njs_uint_t; #else #define NJS_INT_T_SIZE NJS_PTR_SIZE typedef intptr_t njs_int_t; typedef uintptr_t njs_uint_t; #endif #if (NJS_HAVE_UNSIGNED_INT128) typedef unsigned __int128 njs_uint128_t; #endif #if (NJS_INT_T_SIZE == 8) #define NJS_INT_T_LEN NJS_INT64_T_LEN #define NJS_INT_T_HEXLEN NJS_INT64_T_HEXLEN #define NJS_INT_T_MAX NJS_INT64_T_MAX #else #define NJS_INT_T_LEN NJS_INT32_T_LEN #define NJS_INT_T_HEXLEN NJS_INT32_T_HEXLEN #define NJS_INT_T_MAX NJS_INT32_T_MAX #endif typedef njs_uint_t njs_bool_t; typedef int njs_err_t; /* * njs_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. */ #if (NJS_WINDOWS) /* Windows defines off_t as a 32-bit "long". */ typedef __int64 njs_off_t; #else typedef off_t njs_off_t; #endif /* * njs_time_t corresponds to OS's time_t, time in seconds. njs_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 bits length. 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. * * Besides, QNX defines time_t as uint32_t. */ #if (NJS_QNX) /* Y2038 fix: "typedef int64_t njs_time_t". */ typedef int32_t njs_time_t; #else /* Y2038, if time_t is 32-bit integer. */ typedef time_t njs_time_t; #endif typedef pid_t njs_pid_t; #define NJS_INT32_T_LEN njs_length("-2147483648") #define NJS_INT64_T_LEN njs_length("-9223372036854775808") #define NJS_DOUBLE_LEN (1 + DBL_MAX_10_EXP) #define NJS_MAX_ERROR_STR 2048 #endif /* _NJS_TYPES_H_INCLUDED_ */