[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c

2008-01-30 Thread Ilia Alshanetsky
iliaa   Wed Jan 30 18:25:51 2008 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
  Log:
  
  Fixed bug #43981 (gmp_div_r() does not preserve the sign of 1st argument)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.8&r2=1.49.2.2.2.11.2.9&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.8 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.9
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.8 Mon Dec 31 07:17:08 2007
+++ php-src/ext/gmp/gmp.c   Wed Jan 30 18:25:51 2008
@@ -569,6 +569,9 @@
if (use_ui && gmp_ui_op) {
if (allow_ui_return) {
long_result = gmp_ui_op(*gmpnum_result, *gmpnum_a, 
(unsigned long)Z_LVAL_PP(b_arg));
+   if (mpz_sgn(*gmpnum_a) == -1) {
+   long_result = -long_result;
+   }
} else {
gmp_ui_op(*gmpnum_result, *gmpnum_a, (unsigned 
long)Z_LVAL_PP(b_arg));
}

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c

2007-11-01 Thread Stanislav Malyshev
stasThu Nov  1 20:25:11 2007 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
  Log:
  fix 64-bit
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.6&r2=1.49.2.2.2.11.2.7&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.6 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.7
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.6 Thu Nov  1 18:36:24 2007
+++ php-src/ext/gmp/gmp.c   Thu Nov  1 20:25:11 2007
@@ -1523,7 +1523,7 @@
 ZEND_FUNCTION(gmp_testbit)
 {
zval **a_arg;
-   int index;
+   long index;
mpz_t *gmpnum_a;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl", &a_arg, 
&index) == FAILURE){

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c

2007-11-01 Thread Stanislav Malyshev
stasThu Nov  1 18:36:24 2007 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
  Log:
  fix gcd - can return larger than long with long arg
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.5&r2=1.49.2.2.2.11.2.6&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.5 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.6
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.5 Thu Nov  1 17:51:34 2007
+++ php-src/ext/gmp/gmp.c   Thu Nov  1 18:36:24 2007
@@ -1239,7 +1239,7 @@
return;
}
 
-   gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, 
(gmp_binary_ui_op_t)mpz_gcd_ui, 1, 0 TSRMLS_CC);
+   gmp_zval_binary_ui_op_ex(return_value, a_arg, b_arg, mpz_gcd, 
(gmp_binary_ui_op_t)mpz_gcd_ui, 0, 0 TSRMLS_CC);
 }
 /* }}} */
 

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c

2007-11-01 Thread Stanislav Malyshev
stasThu Nov  1 17:51:34 2007 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
  Log:
  merge gmp_testbit()
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.4&r2=1.49.2.2.2.11.2.5&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.4 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.5
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.4 Thu Nov  1 09:34:18 2007
+++ php-src/ext/gmp/gmp.c   Thu Nov  1 17:51:34 2007
@@ -238,6 +238,12 @@
 ZEND_END_ARG_INFO()
 
 static
+ZEND_BEGIN_ARG_INFO(arginfo_gmp_testbit, 0)
+   ZEND_ARG_INFO(0, a)
+   ZEND_ARG_INFO(0, index)
+ZEND_END_ARG_INFO()
+
+static
 ZEND_BEGIN_ARG_INFO(arginfo_gmp_popcount, 0)
ZEND_ARG_INFO(0, a)
 ZEND_END_ARG_INFO()
@@ -308,8 +314,9 @@
ZEND_FE(gmp_xor,arginfo_gmp_xor)
ZEND_FE(gmp_setbit, arginfo_gmp_setbit)
ZEND_FE(gmp_clrbit, arginfo_gmp_clrbit)
-   ZEND_FE(gmp_scan0, arginfo_gmp_scan0)
-   ZEND_FE(gmp_scan1, arginfo_gmp_scan1)
+   ZEND_FE(gmp_scan0,  arginfo_gmp_scan0)
+   ZEND_FE(gmp_scan1,  arginfo_gmp_scan1)
+   ZEND_FE(gmp_testbit,arginfo_gmp_testbit)
ZEND_FE(gmp_popcount, arginfo_gmp_popcount)
ZEND_FE(gmp_hamdist, arginfo_gmp_hamdist)
ZEND_FE(gmp_nextprime, arginfo_gmp_nextprime)
@@ -1511,6 +1518,32 @@
 }
 /* }}} */
 
+/* {{{ proto bool gmp_testbit(resource a, int index)
+   Tests if bit is set in a */
+ZEND_FUNCTION(gmp_testbit)
+{
+   zval **a_arg;
+   int index;
+   mpz_t *gmpnum_a;
+
+   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl", &a_arg, 
&index) == FAILURE){
+   return;
+   }
+
+   ZEND_FETCH_RESOURCE(gmpnum_a, mpz_t *, a_arg, -1, GMP_RESOURCE_NAME, 
le_gmp);
+
+   if (index < 0) {
+   php_error_docref(NULL TSRMLS_CC, E_WARNING, "Index must be 
greater than or equal to zero");
+   RETURN_FALSE;
+   }
+
+   if (mpz_tstbit(*gmpnum_a, index)) {
+   RETURN_TRUE;
+   }
+   RETURN_FALSE;
+}
+/* }}} */
+
 /* {{{ proto int gmp_popcount(resource a)
Calculates the population count of a */
 ZEND_FUNCTION(gmp_popcount)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c

2007-11-01 Thread Antony Dovgal
tony2001Thu Nov  1 09:34:19 2007 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
  Log:
  fix reading uninitialized values
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.3&r2=1.49.2.2.2.11.2.4&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.3 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.4
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.3 Thu Nov  1 09:25:09 2007
+++ php-src/ext/gmp/gmp.c   Thu Nov  1 09:34:18 2007
@@ -1064,8 +1064,8 @@
mpz_ui_pow_ui(*gmpnum_result, Z_LVAL_PP(base_arg), exp);
} else {
mpz_pow_ui(*gmpnum_result, *gmpnum_base, exp);
+   FREE_GMP_TEMP(temp_base);
}
-   FREE_GMP_TEMP(temp_base);
ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
 }
 /* }}} */
@@ -1098,7 +1098,9 @@
 
if (!mpz_cmp_ui(*gmpnum_mod, 0)) {
FREE_GMP_TEMP(temp_base);
-   FREE_GMP_TEMP(temp_exp);
+   if (use_ui) {
+   FREE_GMP_TEMP(temp_exp);
+   }
FREE_GMP_TEMP(temp_mod);
RETURN_FALSE;
}
@@ -1108,10 +1110,10 @@
mpz_powm_ui(*gmpnum_result, *gmpnum_base, (unsigned 
long)Z_LVAL_PP(exp_arg), *gmpnum_mod);
} else {
mpz_powm(*gmpnum_result, *gmpnum_base, *gmpnum_exp, 
*gmpnum_mod);
+   FREE_GMP_TEMP(temp_exp);
}
 
FREE_GMP_TEMP(temp_base);
-   FREE_GMP_TEMP(temp_exp);
FREE_GMP_TEMP(temp_mod);
 
ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c /ext/gmp/tests 015.phpt 021.phpt 024.phpt 025.phpt 026.phpt

2007-11-01 Thread Antony Dovgal
tony2001Thu Nov  1 09:25:11 2007 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
/php-src/ext/gmp/tests  015.phpt 021.phpt 024.phpt 025.phpt 026.phpt 
  Log:
  fix 64bit issues & tests
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.2&r2=1.49.2.2.2.11.2.3&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.2 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.3
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.2 Thu Nov  1 00:46:12 2007
+++ php-src/ext/gmp/gmp.c   Thu Nov  1 09:25:09 2007
@@ -770,14 +770,14 @@
 {
zval **number_arg;
mpz_t * gmpnumber;
-   int base=0;
+   long base=0;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|l", 
&number_arg, &base) == FAILURE) {
return;
}
 
if (base && (base < 2 || base > 36)) {
-   php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for 
conversion: %d (should be between 2 and 36)", base);
+   php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for 
conversion: %ld (should be between 2 and 36)", base);
RETURN_FALSE;
}
 
@@ -816,7 +816,8 @@
 ZEND_FUNCTION(gmp_strval)
 {
zval **gmpnumber_arg;
-   int base=10, num_len;
+   int num_len;
+   long base = 10;
mpz_t * gmpnum;
char *out_string;
int temp_a;
@@ -826,7 +827,7 @@
}
 
if (base < 2 || base > 36) {
-   php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for 
conversion: %d", base);
+   php_error_docref(NULL TSRMLS_CC, E_WARNING, "Bad base for 
conversion: %ld", base);
RETURN_FALSE;
}
 
@@ -887,7 +888,7 @@
 ZEND_FUNCTION(gmp_div_qr)
 {
zval **a_arg, **b_arg;
-   int round = GMP_ROUND_ZERO;
+   long round = GMP_ROUND_ZERO;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ|l", &a_arg, 
&b_arg, &round) == FAILURE) {
return;
@@ -913,7 +914,7 @@
 ZEND_FUNCTION(gmp_div_r)
 {
zval **a_arg, **b_arg;
-   int round = GMP_ROUND_ZERO;
+   long round = GMP_ROUND_ZERO;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ|l", &a_arg, 
&b_arg, &round) == FAILURE) {
return;
@@ -938,7 +939,7 @@
 ZEND_FUNCTION(gmp_div_q)
 {
zval **a_arg, **b_arg;
-   int round = GMP_ROUND_ZERO;
+   long round = GMP_ROUND_ZERO;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ|l", &a_arg, 
&b_arg, &round) == FAILURE) {
return;
@@ -1037,12 +1038,13 @@
Raise base to power exp */
 ZEND_FUNCTION(gmp_pow)
 {
-   zval **base_arg, **exp_arg;
+   zval **base_arg;
mpz_t *gmpnum_result, *gmpnum_base;
int use_ui = 0;
int temp_base;
+   long exp;
 
-   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ZZ", &base_arg, 
&exp_arg) == FAILURE){
+   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl", &base_arg, 
&exp) == FAILURE) {
return;
}
 
@@ -1052,18 +1054,16 @@
FETCH_GMP_ZVAL(gmpnum_base, base_arg, temp_base);
}
 
-   convert_to_long_ex(exp_arg);
-
-   if (Z_LVAL_PP(exp_arg) < 0) {
-   php_error_docref(NULL TSRMLS_CC, E_WARNING,"Negative exponent 
not supported");
+   if (exp < 0) {
+   php_error_docref(NULL TSRMLS_CC, E_WARNING, "Negative exponent 
not supported");
RETURN_FALSE;
}

INIT_GMP_NUM(gmpnum_result);
if (use_ui) {
-   mpz_ui_pow_ui(*gmpnum_result, Z_LVAL_PP(base_arg), 
Z_LVAL_PP(exp_arg));
+   mpz_ui_pow_ui(*gmpnum_result, Z_LVAL_PP(base_arg), exp);
} else {
-   mpz_pow_ui(*gmpnum_result, *gmpnum_base, Z_LVAL_PP(exp_arg));
+   mpz_pow_ui(*gmpnum_result, *gmpnum_base, exp);
}
FREE_GMP_TEMP(temp_base);
ZEND_REGISTER_RESOURCE(return_value, gmpnum_result, le_gmp);
@@ -1206,7 +1206,7 @@
 {
zval **gmpnumber_arg;
mpz_t *gmpnum_a;
-   int reps = 10;
+   long reps = 10;
int temp_a;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|l", 
&gmpnumber_arg, &reps) == FAILURE) {
@@ -1369,7 +1369,7 @@
Gets random number */
 ZEND_FUNCTION(gmp_random)
 {
-   int limiter = 20;
+   long limiter = 20;
mpz_t *gmpnum_result;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &limiter) == 
FAILURE) {
@@ -1463,7 +1463,8 @@
 ZEND_FUNCTION(gmp_setbit)
 {
zval **a_arg;
-   int index, set = 1;
+   long index;
+   zend_bool set = 1;
mpz_t *gmpnum_a;
 
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zl|b", &a_arg, 
&index, &set) == FAILURE) {
@@ -1490,7 +1491,7 @@
 ZEND_FUNCTION(gmp_clrbit)
 {
zval **a_arg;
-   int index;
+   long index;
mpz_t *gmpnum_a;
 
if (zend_parse_param

[PHP-CVS] cvs: php-src(PHP_5_3) /ext/gmp gmp.c /ext/gmp/tests 004.phpt 005.phpt 006.phpt 007.phpt 008.phpt 009.phpt 010.phpt 011.phpt 012.phpt 013.phpt 014.phpt 015.phpt 016.phpt 017.phpt 018.phpt 01

2007-10-31 Thread Stanislav Malyshev
stasThu Nov  1 00:46:13 2007 UTC

  Modified files:  (Branch: PHP_5_3)
/php-src/ext/gmpgmp.c 
/php-src/ext/gmp/tests  004.phpt 005.phpt 006.phpt 007.phpt 008.phpt 
009.phpt 010.phpt 011.phpt 012.phpt 013.phpt 
014.phpt 015.phpt 016.phpt 017.phpt 018.phpt 
019.phpt 020.phpt 021.phpt 022.phpt 023.phpt 
024.phpt 025.phpt 026.phpt 027.phpt 028.phpt 
029.phpt 030.phpt 031.phpt 032.phpt 033.phpt 
034.phpt 035.phpt 036.phpt 037.phpt 038.phpt 
039.phpt 
  Log:
  - Fix memory leaks (bug #42509)
  - Fix _gmp_binary_opl
  - Use modern parameter parsing
  
  http://cvs.php.net/viewvc.cgi/php-src/ext/gmp/gmp.c?r1=1.49.2.2.2.11.2.1&r2=1.49.2.2.2.11.2.2&diff_format=u
Index: php-src/ext/gmp/gmp.c
diff -u php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.1 
php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.2
--- php-src/ext/gmp/gmp.c:1.49.2.2.2.11.2.1 Thu Sep 27 18:00:39 2007
+++ php-src/ext/gmp/gmp.c   Thu Nov  1 00:46:12 2007
@@ -423,16 +423,23 @@
 
 /* Fetch zval to be GMP number.
Initially, zval can be also number or string */
-#define FETCH_GMP_ZVAL(gmpnumber, zval) \
-if (Z_TYPE_PP(zval) == IS_RESOURCE) { \
-   ZEND_FETCH_RESOURCE(gmpnumber, mpz_t *, zval, -1, GMP_RESOURCE_NAME, 
le_gmp);\
-} else {\
-   if (convert_to_gmp(&gmpnumber, zval, 0 TSRMLS_CC) == FAILURE) {\
-   RETURN_FALSE;\
-   }\
-   ZEND_REGISTER_RESOURCE(NULL, gmpnumber, le_gmp);\
+#define FETCH_GMP_ZVAL(gmpnumber, zval, tmp_resource)  
\
+if (Z_TYPE_PP(zval) == IS_RESOURCE) {  
\
+   ZEND_FETCH_RESOURCE(gmpnumber, mpz_t *, zval, -1, GMP_RESOURCE_NAME, 
le_gmp);   \
+   tmp_resource = 0;   
\
+} else {   

\
+   if (convert_to_gmp(&gmpnumber, zval, 0 TSRMLS_CC) == FAILURE) { 
\
+   RETURN_FALSE;   
\
+   }   

\
+   tmp_resource = ZEND_REGISTER_RESOURCE(NULL, gmpnumber, le_gmp); 
\
 }
 
+#define FREE_GMP_TEMP(tmp_resource)\
+   if(tmp_resource) {  \
+   zend_list_delete(tmp_resource); \
+   }
+
+
 /* create a new initialized GMP number */
 #define INIT_GMP_NUM(gmpnumber) { gmpnumber=emalloc(sizeof(mpz_t)); 
mpz_init(*gmpnumber); }
 #define FREE_GMP_NUM(gmpnumber) { mpz_clear(*gmpnumber); efree(gmpnumber); }
@@ -524,13 +531,14 @@
mpz_t *gmpnum_a, *gmpnum_b, *gmpnum_result;
unsigned long long_result = 0;
int use_ui = 0;
+   int arga_tmp = 0, argb_tmp = 0;
 
-   FETCH_GMP_ZVAL(gmpnum_a, a_arg);
+   FETCH_GMP_ZVAL(gmpnum_a, a_arg, arga_tmp);

if (gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) {
use_ui = 1;
} else {
-   FETCH_GMP_ZVAL(gmpnum_b, b_arg);
+   FETCH_GMP_ZVAL(gmpnum_b, b_arg, argb_tmp);
}
 
if(check_b_zero) {
@@ -543,6 +551,8 @@
 
if(b_is_zero) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Zero 
operand not allowed");
+   FREE_GMP_TEMP(arga_tmp);
+   FREE_GMP_TEMP(argb_tmp);
RETURN_FALSE;
}
}
@@ -559,6 +569,9 @@
gmp_op(*gmpnum_result, *gmpnum_a, *gmpnum_b);
}
 
+   FREE_GMP_TEMP(arga_tmp);
+   FREE_GMP_TEMP(argb_tmp);
+
if (use_ui && allow_ui_return) {
FREE_GMP_NUM(gmpnum_result);
RETURN_LONG((long)long_result);
@@ -578,14 +591,15 @@
zval r;
int use_ui = 0;
unsigned long long_result = 0;
+   int arga_tmp = 0, argb_tmp = 0;
 
-   FETCH_GMP_ZVAL(gmpnum_a, a_arg);
+   FETCH_GMP_ZVAL(gmpnum_a, a_arg, arga_tmp);
 
if (gmp_ui_op && Z_TYPE_PP(b_arg) == IS_LONG && Z_LVAL_PP(b_arg) >= 0) {
/* use _ui function */
use_ui = 1;
} else {
-   FETCH_GMP_ZVAL(gmpnum_b, b_arg);
+   FETCH_GMP_ZVAL(gmpnum_b, b_arg, argb_tmp);
}
 
if(check_b_zero) {
@@ -598,6 +612,8 @@