Re: [PATCH] Proposed modification to log() in ext/standard/math.c
| From: | Pollita | Date: | Sun, 10 Nov 2002 22:46:21 +0000 |
| Subject: | Re: [PATCH] Proposed modification to log() in ext/standard/math.c | ||
| References: | 1 2 | Groups: | php.dev |
| Request: | Send a blank email to php-dev+get-90743@lists.php.net to get a copy of this message | ||
Apologies... I've made a new .patch file relative to revision 1.93 of
math.c in the CVS tree with modifications per instructions in
CODING_STANDARDS. Hope this meets with approval.
> On Sun, 10 Nov 2002, Pollita wrote:
>
>> I would like to offer the attached minor patch (relative to php-4.2.3)
>> to ext/standard/math.c to extend the functionality of log() to support
>> arbitrary bases.
>
> Please provide a unified diff (diff -u) against the latest CVS version.
> Also, please stick to the coding standards as described in the
> CODING_STANDARDS file.
>
> regards,
> Derick
>
> --
>
> ---------------------------------------------------------------------------
> Derick Rethans
> http://derickrethans.nl/ JDI Media Solutions
> --------------[ if you hold a unix shell to your ear, do you hear the c?
> ]-
--- math.c Sun Nov 10 14:34:19 2002 +++ math-smg.c Sun Nov 10 14:39:39 2002 @@ -525,13 +525,27 @@ PHP_FUNCTION(log) { - zval **num; + zval **num,**Zbase; + double base; + double denom=1.0; - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || zend_get_parameters_ex(2, &num, &Zbase) == FAILURE) { WRONG_PARAM_COUNT; } + /* If second parameter "base" is specified, use it, otherwise accept e */ + if (ZEND_NUM_ARGS() > 1) { + convert_to_double_ex(Zbase); + base = Z_DVAL_PP(Zbase); + if (base > 0.0) denom = log(base); + else { + /* A base of <= 0 is non-sensical */ + php_error(E_WARNING,"base parameter of log() must be greater than 0"); + RETURN_FALSE; + } + } + convert_to_double_ex(num); - Z_DVAL_P(return_value) = log(Z_DVAL_PP(num)); + Z_DVAL_P(return_value) = log(Z_DVAL_PP(num)) / denom; Z_TYPE_P(return_value) = IS_DOUBLE; }
--- math.c Sun Nov 10 14:34:19 2002 +++ math-smg.c Sun Nov 10 14:39:39 2002 @@ -525,13 +525,27 @@ PHP_FUNCTION(log) { - zval **num; + zval **num,**Zbase; + double base; + double denom=1.0; - if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &num) == FAILURE) { + if (ZEND_NUM_ARGS() < 1 || ZEND_NUM_ARGS() > 2 || zend_get_parameters_ex(2, &num, &Zbase) == FAILURE) { WRONG_PARAM_COUNT; } + /* If second parameter "base" is specified, use it, otherwise accept e */ + if (ZEND_NUM_ARGS() > 1) { + convert_to_double_ex(Zbase); + base = Z_DVAL_PP(Zbase); + if (base > 0.0) denom = log(base); + else { + /* A base of <= 0 is non-sensical */ + php_error(E_WARNING,"base parameter of log() must be greater than 0"); + RETURN_FALSE; + } + } + convert_to_double_ex(num); - Z_DVAL_P(return_value) = log(Z_DVAL_PP(num)); + Z_DVAL_P(return_value) = log(Z_DVAL_PP(num)) / denom; Z_TYPE_P(return_value) = IS_DOUBLE; }