]> granicus.if.org Git - php/commitdiff
fix datatypes for gmp to be compatible with GMP/MPIR on different platforms
authorAnatol Belski <ab@php.net>
Tue, 2 Sep 2014 16:19:51 +0000 (18:19 +0200)
committerAnatol Belski <ab@php.net>
Tue, 2 Sep 2014 16:19:51 +0000 (18:19 +0200)
ext/gmp/gmp.c
ext/gmp/php_gmp.h

index 19c7f286205213a05f259f076c1b20c5cb322f17..1dfaa332cb1a0f5696c67ecaef63d4d0b7cb76f3 100644 (file)
@@ -331,14 +331,14 @@ static void gmp_cmp(zval *return_value, zval *a_arg, zval *b_arg TSRMLS_DC);
 typedef void (*gmp_unary_op_t)(mpz_ptr, mpz_srcptr);
 typedef int (*gmp_unary_opl_t)(mpz_srcptr);
 
-typedef void (*gmp_unary_ui_op_t)(mpz_ptr, unsigned long);
+typedef void (*gmp_unary_ui_op_t)(mpz_ptr, gmp_ulong);
 
 typedef void (*gmp_binary_op_t)(mpz_ptr, mpz_srcptr, mpz_srcptr);
 typedef int (*gmp_binary_opl_t)(mpz_srcptr, mpz_srcptr);
 
-typedef void (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, unsigned long);
+typedef void (*gmp_binary_ui_op_t)(mpz_ptr, mpz_srcptr, gmp_ulong);
 typedef void (*gmp_binary_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr);
-typedef void (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long);
+typedef void (*gmp_binary_ui_op2_t)(mpz_ptr, mpz_ptr, mpz_srcptr, gmp_ulong);
 
 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);
 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
 
                FETCH_GMP_ZVAL(gmpnum_op, op1, temp);
                INIT_GMP_RETVAL(gmpnum_result);
-               op(gmpnum_result, gmpnum_op, (unsigned long) shift);
+               op(gmpnum_result, gmpnum_op, (gmp_ulong) shift);
                FREE_GMP_TEMP(temp);
        }
 }
@@ -862,7 +862,7 @@ static inline void gmp_zval_binary_ui_op(zval *return_value, zval *a_arg, zval *
        INIT_GMP_RETVAL(gmpnum_result);
 
        if (use_ui) {
-               gmp_ui_op(gmpnum_result, gmpnum_a, (unsigned long) Z_LVAL_P(b_arg));
+               gmp_ui_op(gmpnum_result, gmpnum_a, (gmp_ulong) Z_LVAL_P(b_arg));
        } else {
                gmp_op(gmpnum_result, gmpnum_a, gmpnum_b);
        }
@@ -916,7 +916,7 @@ static inline void gmp_zval_binary_ui_op2(zval *return_value, zval *a_arg, zval
        add_next_index_zval(return_value, &result2);
 
        if (use_ui) {
-               gmp_ui_op(gmpnum_result1, gmpnum_result2, gmpnum_a, (unsigned long) Z_LVAL_P(b_arg));
+               gmp_ui_op(gmpnum_result1, gmpnum_result2, gmpnum_a, (gmp_ulong) Z_LVAL_P(b_arg));
        } else {
                gmp_op(gmpnum_result1, gmpnum_result2, gmpnum_a, gmpnum_b);
        }
@@ -1560,7 +1560,7 @@ ZEND_FUNCTION(gmp_root)
        }
 
        INIT_GMP_RETVAL(gmpnum_result);
-       mpz_root(gmpnum_result, gmpnum_a, (unsigned long) nth);
+       mpz_root(gmpnum_result, gmpnum_a, (gmp_ulong) nth);
        FREE_GMP_TEMP(temp_a);
 }
 /* }}} */
@@ -1600,10 +1600,10 @@ ZEND_FUNCTION(gmp_rootrem)
        add_next_index_zval(return_value, &result2);
 
 #if GMP_42_OR_NEWER
-       mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (unsigned long) nth);
+       mpz_rootrem(gmpnum_result1, gmpnum_result2, gmpnum_a, (gmp_ulong) nth);
 #else
-       mpz_root(gmpnum_result1, gmpnum_a, (unsigned long) nth);
-       mpz_pow_ui(gmpnum_result2, gmpnum_result1, (unsigned long) nth);
+       mpz_root(gmpnum_result1, gmpnum_a, (gmp_ulong) nth);
+       mpz_pow_ui(gmpnum_result2, gmpnum_result1, (gmp_ulong) nth);
        mpz_sub(gmpnum_result2, gmpnum_a, gmpnum_result2);
        mpz_abs(gmpnum_result2, gmpnum_result2);
 #endif
index b3706c534d50916ef68ac47875fb637e9b5720b7..bce2a9eacabeee3b7a9ca9d7f802b6fc3353fa8e 100644 (file)
@@ -75,6 +75,15 @@ ZEND_FUNCTION(gmp_popcount);
 ZEND_FUNCTION(gmp_hamdist);
 ZEND_FUNCTION(gmp_nextprime);
 
+/* GMP and MPIR use different datatypes on different platforms */
+#ifdef PHP_WIN32
+typedef zend_long gmp_long;
+typedef zend_ulong gmp_ulong;
+#else
+typedef long gmp_long;
+typedef unsigned long gmp_ulong;
+#endif
+
 ZEND_BEGIN_MODULE_GLOBALS(gmp)
        zend_bool rand_initialized;
        gmp_randstate_t rand_state;