summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2007-12-24 18:09:50 +0000
committerDmitry Stogov <dmitry@php.net>2007-12-24 18:09:50 +0000
commited5a424b4f419ba293f0d4ea31cfb98b83ec92c8 (patch)
tree8aa61e0ee0979864c7dce8b1e9ed3da33e2d75ef /Zend/zend_operators.c
parent7c75fe7b8ce1531924bc71713ee34dceaeb9956c (diff)
downloadphp-git-ed5a424b4f419ba293f0d4ea31cfb98b83ec92c8.tar.gz
Additional fix for bug #42868
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r--Zend/zend_operators.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index c177c3ec8f..c2271f1734 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -186,36 +186,38 @@ ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
#define MAX_UNSIGNED_INT ((double) LONG_MAX * 2) + 1
#ifdef _WIN64
# define DVAL_TO_LVAL(d, l) \
- if ((d) > LONG_MAX) { \
- if ((d) > MAX_UNSIGNED_INT) { \
- (l) = LONG_MAX; \
- } else { \
- (l) = (long)(unsigned long)(__int64) (d); \
- } \
- } else { \
- if((d) < LONG_MIN) { \
- (l) = LONG_MIN; \
- } else { \
- (l) = (long) (d); \
- } \
- }
+ if ((d) > LONG_MAX) { \
+ (l) = (long)(unsigned long)(__int64) (d); \
+ } else { \
+ (l) = (long) (d); \
+ }
+#elif !defined(_WIN64) && __WORDSIZE == 64
+# define DVAL_TO_LVAL(d, l) \
+ if ((d) >= LONG_MAX) { \
+ (l) = LONG_MAX; \
+ } else if ((d) <= LONG_MIN) { \
+ (l) = LONG_MIN; \
+ } else {\
+ (l) = (long) (d); \
+ }
#else
# define DVAL_TO_LVAL(d, l) \
- if ((d) > LONG_MAX) { \
- if ((d) > MAX_UNSIGNED_INT) { \
- (l) = LONG_MAX; \
- } else { \
- (l) = (unsigned long) (d); \
- } \
- } else { \
- if((d) < LONG_MIN) { \
- (l) = LONG_MIN; \
- } else { \
- (l) = (long) (d); \
- } \
- }
+ if ((d) > LONG_MAX) { \
+ if ((d) > MAX_UNSIGNED_INT) { \
+ (l) = LONG_MAX; \
+ } else { \
+ (l) = (unsigned long) (d); \
+ } \
+ } else { \
+ if((d) < LONG_MIN) { \
+ (l) = LONG_MIN; \
+ } else { \
+ (l) = (long) (d); \
+ } \
+ }
#endif
+
#define zendi_convert_to_long(op, holder, result) \
if (op == result) { \
convert_to_long(op); \