Skip to content

Commit 08b732f

Browse files
committed
fix datatypes for gmp to be compatible with GMP/MPIR on different platforms
1 parent e7386aa commit 08b732f

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

ext/gmp/gmp.c

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -331,14 +331,14 @@ static void gmp_cmp(zval *return_value, zval *a_arg, zval *b_arg TSRMLS_DC);
331331
typedef void (*gmp_unary_op_t)(mpz_ptr, mpz_srcptr);
332332
typedef int (*gmp_unary_opl_t)(mpz_srcptr);
333333

334-
typedef void (*gmp_unary_ui_op_t)(mpz_ptr, unsigned long);
334+
typedef void (*gmp_unary_ui_op_t)(mpz_ptr, gmp_ulong);
335335

336336
typedef void (*gmp_binary_op_t)(mpz_ptr, mpz_srcptr, mpz_srcptr);
337337
typedef int (*gmp_binary_opl_t)(mpz_srcptr, mpz_srcptr);
338338

339-
typedef void (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, unsigned long);
339+
typedef void (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, gmp_ulong);
340340
typedef void (*gmp_binary_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
341-
typedef void (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long);
341+
typedef void (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, gmp_ulong);
342342

343343
static inline void gmp_zval_binary_ui_op(zval *return_value, zval *a_arg, zval *b_arg, gmp_binary_op_t gmp_op, gmp_binary_ui_op_t gmp_ui_op, int check_b_zero TSRMLS_DC);
344344
static inline void gmp_zval_binary_ui_op2(zval *return_value, zval *a_arg, zval *b_arg, gmp_binary_op2_t gmp_op, gmp_binary_ui_op2_t gmp_ui_op, int check_b_zero TSRMLS_DC);
@@ -483,7 +483,7 @@ static void shift_operator_helper(gmp_binary_ui_op_t op, zval *return_value, zva
483483

484484
FETCH_GMP_ZVAL(gmpnum_op, op1, temp);
485485
INIT_GMP_RETVAL(gmpnum_result);
486-
op(gmpnum_result, gmpnum_op, (unsigned long) shift);
486+
op(gmpnum_result, gmpnum_op, (gmp_ulong) shift);
487487
FREE_GMP_TEMP(temp);
488488
}
489489
}
@@ -862,7 +862,7 @@ static inline void gmp_zval_binary_ui_op(zval *return_value, zval *a_arg, zval *
862862
INIT_GMP_RETVAL(gmpnum_result);
863863

864864
if (use_ui) {
865-
gmp_ui_op(gmpnum_result, gmpnum_a, (unsigned long) Z_LVAL_P(b_arg));
865+
gmp_ui_op(gmpnum_result, gmpnum_a, (gmp_ulong) Z_LVAL_P(b_arg));
866866
} else {
867867
gmp_op(gmpnum_result, gmpnum_a, gmpnum_b);
868868
}
@@ -916,7 +916,7 @@ static inline void gmp_zval_binary_ui_op2(zval *return_value, zval *a_arg, zval
916916
add_next_index_zval(return_value, &result2);
917917

918918
if (use_ui) {
919-
gmp_ui_op(gmpnum_result1, gmpnum_result2, gmpnum_a, (unsigned long) Z_LVAL_P(b_arg));
919+
gmp_ui_op(gmpnum_result1, gmpnum_result2, gmpnum_a, (gmp_ulong) Z_LVAL_P(b_arg));
920920
} else {
921921
gmp_op(gmpnum_result1, gmpnum_result2, gmpnum_a, gmpnum_b);
922922
}
@@ -1560,7 +1560,7 @@ ZEND_FUNCTION(gmp_root)
15601560
}
15611561

15621562
INIT_GMP_RETVAL(gmpnum_result);
1563-
mpz_root(gmpnum_result, gmpnum_a, (unsigned long) nth);
1563+
mpz_root(gmpnum_result, gmpnum_a, (gmp_ulong) nth);
15641564
FREE_GMP_TEMP(temp_a);
15651565
}
15661566
/* }}} */
@@ -1600,10 +1600,10 @@ ZEND_FUNCTION(gmp_rootrem)
16001600
add_next_index_zval(return_value, &result2);
16011601

16021602
#if GMP_42_OR_NEWER
1603-
mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (unsigned long) nth);
1603+
mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (gmp_ulong) nth);
16041604
#else
1605-
mpz_root(gmpnum_result1, gmpnum_a, (unsigned long) nth);
1606-
mpz_pow_ui(gmpnum_result2, gmpnum_result1, (unsigned long) nth);
1605+
mpz_root(gmpnum_result1, gmpnum_a, (gmp_ulong) nth);
1606+
mpz_pow_ui(gmpnum_result2, gmpnum_result1, (gmp_ulong) nth);
16071607
mpz_sub(gmpnum_result2, gmpnum_a, gmpnum_result2);
16081608
mpz_abs(gmpnum_result2, gmpnum_result2);
16091609
#endif

ext/gmp/php_gmp.h

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,15 @@ ZEND_FUNCTION(gmp_popcount);
7575
ZEND_FUNCTION(gmp_hamdist);
7676
ZEND_FUNCTION(gmp_nextprime);
7777

78+
/* GMP and MPIR use different datatypes on different platforms */
79+
#ifdef PHP_WIN32
80+
typedef zend_long gmp_long;
81+
typedef zend_ulong gmp_ulong;
82+
#else
83+
typedef long gmp_long;
84+
typedef unsigned long gmp_ulong;
85+
#endif
86+
7887
ZEND_BEGIN_MODULE_GLOBALS(gmp)
7988
zend_bool rand_initialized;
8089
gmp_randstate_t rand_state;

0 commit comments

Comments
 (0)