summaryrefslogtreecommitdiff
path: root/Zend/zend_long.h
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/zend_long.h')
-rw-r--r--Zend/zend_long.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/Zend/zend_long.h b/Zend/zend_long.h
new file mode 100644
index 0000000000..153b4d24f2
--- /dev/null
+++ b/Zend/zend_long.h
@@ -0,0 +1,122 @@
+/*
+ +----------------------------------------------------------------------+
+ | Zend Engine |
+ +----------------------------------------------------------------------+
+ | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
+ +----------------------------------------------------------------------+
+ | This source file is subject to version 2.00 of the Zend license, |
+ | that is bundled with this package in the file LICENSE, and is |
+ | available through the world-wide-web at the following url: |
+ | http://www.zend.com/license/2_00.txt. |
+ | If you did not receive a copy of the Zend license and are unable to |
+ | obtain it through the world-wide-web, please send a note to |
+ | license@zend.com so we can mail you a copy immediately. |
+ +----------------------------------------------------------------------+
+ | Authors: Anatol Belski <ab@php.net> |
+ +----------------------------------------------------------------------+
+*/
+
+/* $Id$ */
+
+
+#ifndef ZEND_LONG_H
+#define ZEND_LONG_H
+
+#include "main/php_stdint.h"
+
+/* This is the heart of the whole int64 enablement in zval. */
+#if defined(__X86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)
+# define ZEND_ENABLE_ZVAL_LONG64 1
+#endif
+
+/* Integer types. */
+#ifdef ZEND_ENABLE_ZVAL_LONG64
+typedef int64_t zend_long;
+typedef uint64_t zend_ulong;
+typedef int64_t zend_off_t;
+# define ZEND_LONG_MAX INT64_MAX
+# define ZEND_LONG_MIN INT64_MIN
+# define ZEND_ULONG_MAX UINT64_MAX
+# ifdef _WIN64
+# define Z_L(i) i##i64
+# define Z_UL(i) i##Ui64
+# else
+# define Z_L(i) i##LL
+# define Z_UL(i) i##ULL
+# endif
+# define SIZEOF_ZEND_LONG 8
+#else
+typedef int32_t zend_long;
+typedef uint32_t zend_ulong;
+typedef int32_t zend_off_t;
+# define ZEND_LONG_MAX INT32_MAX
+# define ZEND_LONG_MIN INT32_MIN
+# define ZEND_ULONG_MAX UINT32_MAX
+# define Z_L(i) INT32_C(i)
+# define Z_UL(i) UINT32_C(i)
+# define SIZEOF_ZEND_LONG 4
+#endif
+
+
+/* Conversion macros. */
+#define ZEND_LTOA_BUF_LEN 65
+
+#ifdef ZEND_ENABLE_ZVAL_LONG64
+# define ZEND_LONG_FMT "%" PRId64
+# define ZEND_ULONG_FMT "%" PRIu64
+# define ZEND_LONG_FMT_SPEC PRId64
+# define ZEND_ULONG_FMT_SPEC PRIu64
+# ifdef PHP_WIN32
+# define ZEND_LTOA(i, s, len) _i64toa_s((i), (s), (len), 10)
+# define ZEND_ATOL(i, s) i = _atoi64((s))
+# define ZEND_STRTOL(s0, s1, base) _strtoi64((s0), (s1), (base))
+# define ZEND_STRTOUL(s0, s1, base) _strtoui64((s0), (s1), (base))
+# define ZEND_STRTOL_PTR _strtoi64
+# define ZEND_STRTOUL_PTR _strtoui64
+# define ZEND_ABS _abs64
+# else
+# define ZEND_LTOA(i, s, len) \
+ do { \
+ int st = snprintf((s), (len), ZEND_LONG_FMT, (i)); \
+ (s)[st] = '\0'; \
+ } while (0)
+# define ZEND_ATOL(i, s) (i) = atoll((s))
+# define ZEND_STRTOL(s0, s1, base) strtoll((s0), (s1), (base))
+# define ZEND_STRTOUL(s0, s1, base) strtoull((s0), (s1), (base))
+# define ZEND_STRTOL_PTR strtoll
+# define ZEND_STRTOUL_PTR strtoull
+# define ZEND_ABS imaxabs
+# endif
+#else
+# define ZEND_STRTOL(s0, s1, base) strtol((s0), (s1), (base))
+# define ZEND_STRTOUL(s0, s1, base) strtoul((s0), (s1), (base))
+# define ZEND_LONG_FMT "%" PRId32
+# define ZEND_ULONG_FMT "%" PRIu32
+# define ZEND_LONG_FMT_SPEC PRId32
+# define ZEND_ULONG_FMT_SPEC PRIu32
+# ifdef PHP_WIN32
+# define ZEND_LTOA(i, s, len) _ltoa_s((i), (s), (len), 10)
+# define ZEND_ATOL(i, s) i = atol((s))
+# else
+# define ZEND_LTOA(i, s, len) \
+ do { \
+ int st = snprintf((s), (len), ZEND_LONG_FMT, (i)); \
+ (s)[st] = '\0'; \
+ } while (0)
+# define ZEND_ATOL(i, s) (i) = atol((s))
+# endif
+# define ZEND_STRTOL_PTR strtol
+# define ZEND_STRTOUL_PTR strtoul
+# define ZEND_ABS abs
+#endif
+
+
+#endif /* ZEND_LONG_H */
+
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * indent-tabs-mode: t
+ * End:
+ */