mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Remove some dead code from BCMath (#14130)
* Remove unused output.c code * Remove unused ignore_last parameter from _bc_do_compare()
This commit is contained in:
@@ -6,7 +6,7 @@ PHP_ARG_ENABLE([bcmath],
|
||||
if test "$PHP_BCMATH" != "no"; then
|
||||
PHP_NEW_EXTENSION(bcmath, bcmath.c \
|
||||
libbcmath/src/add.c libbcmath/src/div.c libbcmath/src/init.c libbcmath/src/neg.c libbcmath/src/raisemod.c libbcmath/src/sub.c \
|
||||
libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/output.c libbcmath/src/recmul.c \
|
||||
libbcmath/src/compare.c libbcmath/src/divmod.c libbcmath/src/int2num.c libbcmath/src/num2long.c libbcmath/src/recmul.c \
|
||||
libbcmath/src/sqrt.c libbcmath/src/zero.c libbcmath/src/doaddsub.c libbcmath/src/floor_or_ceil.c libbcmath/src/nearzero.c libbcmath/src/num2str.c \
|
||||
libbcmath/src/raise.c libbcmath/src/rmzero.c libbcmath/src/round.c libbcmath/src/str2num.c libbcmath/src/convert.c,
|
||||
$ext_shared,, -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1)
|
||||
|
||||
@@ -6,7 +6,7 @@ if (PHP_BCMATH == "yes") {
|
||||
EXTENSION("bcmath", "bcmath.c", null, "/DZEND_ENABLE_STATIC_TSRMLS_CACHE=1");
|
||||
ADD_SOURCES("ext/bcmath/libbcmath/src", "add.c div.c init.c neg.c \
|
||||
raisemod.c sub.c compare.c divmod.c int2num.c \
|
||||
num2long.c output.c recmul.c sqrt.c zero.c doaddsub.c \
|
||||
num2long.c recmul.c sqrt.c zero.c doaddsub.c \
|
||||
floor_or_ceil.c nearzero.c num2str.c raise.c rmzero.c str2num.c \
|
||||
round.c convert.c", "bcmath");
|
||||
|
||||
|
||||
@@ -49,7 +49,7 @@ bc_num bc_add(bc_num n1, bc_num n2, size_t scale_min)
|
||||
} else {
|
||||
/* subtraction must be done. */
|
||||
/* Compare magnitudes. */
|
||||
switch (_bc_do_compare(n1, n2, false, false)) {
|
||||
switch (_bc_do_compare(n1, n2, false)) {
|
||||
case -1:
|
||||
/* n1 is less than n2, subtract n1 from n2. */
|
||||
sum = _bc_do_sub(n2, n1, scale_min);
|
||||
|
||||
@@ -166,8 +166,6 @@ void bc_raise_bc_exponent(bc_num base, bc_num exponent, bc_num *resul, size_t sc
|
||||
|
||||
bool bc_sqrt(bc_num *num, size_t scale);
|
||||
|
||||
void bc_out_num(bc_num num, int o_base, void (* out_char)(char), bool leading_zero);
|
||||
|
||||
/* Prototypes needed for external utility routines. */
|
||||
#define bc_new_num(length, scale) _bc_new_num_ex((length), (scale), 0)
|
||||
#define bc_free_num(num) _bc_free_num_ex((num), 0)
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
than N2 and +1 if N1 is greater than N2. If USE_SIGN is false, just
|
||||
compare the magnitudes. */
|
||||
|
||||
int _bc_do_compare(bc_num n1, bc_num n2, bool use_sign, bool ignore_last)
|
||||
int _bc_do_compare(bc_num n1, bc_num n2, bool use_sign)
|
||||
{
|
||||
char *n1ptr, *n2ptr;
|
||||
|
||||
@@ -85,9 +85,6 @@ int _bc_do_compare(bc_num n1, bc_num n2, bool use_sign, bool ignore_last)
|
||||
count--;
|
||||
}
|
||||
|
||||
if (ignore_last && count == 1 && n1->n_scale == n2->n_scale) {
|
||||
return (0);
|
||||
}
|
||||
if (count != 0) {
|
||||
if (*n1ptr > *n2ptr) {
|
||||
/* Magnitude of n1 > n2. */
|
||||
@@ -141,5 +138,5 @@ int _bc_do_compare(bc_num n1, bc_num n2, bool use_sign, bool ignore_last)
|
||||
/* This is the "user callable" routine to compare numbers N1 and N2. */
|
||||
int bc_compare(bc_num n1, bc_num n2)
|
||||
{
|
||||
return _bc_do_compare(n1, n2, true, false);
|
||||
return _bc_do_compare(n1, n2, true);
|
||||
}
|
||||
|
||||
@@ -1,188 +0,0 @@
|
||||
/* output.c: bcmath library file. */
|
||||
/*
|
||||
Copyright (C) 1991, 1992, 1993, 1994, 1997 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000 Philip A. Nelson
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details. (LICENSE)
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to:
|
||||
|
||||
The Free Software Foundation, Inc.
|
||||
59 Temple Place, Suite 330
|
||||
Boston, MA 02111-1307 USA.
|
||||
|
||||
You may contact the author by:
|
||||
e-mail: philnelson@acm.org
|
||||
us-mail: Philip A. Nelson
|
||||
Computer Science Department, 9062
|
||||
Western Washington University
|
||||
Bellingham, WA 98226-9062
|
||||
|
||||
*************************************************************************/
|
||||
|
||||
#include "bcmath.h"
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "zend_alloc.h"
|
||||
|
||||
|
||||
/* The following routines provide output for bcd numbers package
|
||||
using the rules of POSIX bc for output. */
|
||||
|
||||
/* This structure is used for saving digits in the conversion process. */
|
||||
typedef struct stk_rec {
|
||||
long digit;
|
||||
struct stk_rec *next;
|
||||
} stk_rec;
|
||||
|
||||
/* The reference string for digits. */
|
||||
static const char ref_str[] = "0123456789ABCDEF";
|
||||
|
||||
|
||||
/* A special output routine for "multi-character digits." Exactly
|
||||
SIZE characters must be output for the value VAL. If SPACE is
|
||||
non-zero, we must output one space before the number. OUT_CHAR
|
||||
is the actual routine for writing the characters. */
|
||||
|
||||
void bc_out_long(long val, size_t size, bool space, void (*out_char)(char))
|
||||
{
|
||||
char digits[40];
|
||||
size_t len, ix;
|
||||
|
||||
if (space) (*out_char)(' ');
|
||||
snprintf(digits, sizeof(digits), "%ld", val);
|
||||
len = strlen(digits);
|
||||
while (size > len) {
|
||||
(*out_char)('0');
|
||||
size--;
|
||||
}
|
||||
for (ix = 0; ix < len; ix++) {
|
||||
(*out_char)(digits[ix]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Output of a bcd number. NUM is written in base O_BASE using OUT_CHAR
|
||||
as the routine to do the actual output of the characters. */
|
||||
|
||||
void bc_out_num(bc_num num, int o_base, void (*out_char)(char), bool leading_zero)
|
||||
{
|
||||
char *nptr;
|
||||
int index, fdigit;
|
||||
bool pre_space;
|
||||
stk_rec *digits, *temp;
|
||||
bc_num int_part, base, cur_dig, t_num, max_o_digit;
|
||||
|
||||
/* The negative sign if needed. */
|
||||
if (num->n_sign == MINUS) (*out_char)('-');
|
||||
|
||||
/* Output the number. */
|
||||
if (bc_is_zero(num)) {
|
||||
(*out_char)('0');
|
||||
} else {
|
||||
if (o_base == 10) {
|
||||
/* The number is in base 10, do it the fast way. */
|
||||
nptr = num->n_value;
|
||||
if (num->n_len > 1 || *nptr != 0) {
|
||||
for (index = num->n_len; index > 0; index--) {
|
||||
(*out_char)(BCD_CHAR(*nptr++));
|
||||
}
|
||||
} else {
|
||||
nptr++;
|
||||
}
|
||||
|
||||
if (leading_zero && bc_is_zero(num)) {
|
||||
(*out_char)('0');
|
||||
}
|
||||
|
||||
/* Now the fraction. */
|
||||
if (num->n_scale > 0) {
|
||||
(*out_char)('.');
|
||||
for (index = 0; index < num->n_scale; index++) {
|
||||
(*out_char)(BCD_CHAR(*nptr++));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* special case ... */
|
||||
if (leading_zero && bc_is_zero(num)) {
|
||||
(*out_char)('0');
|
||||
}
|
||||
|
||||
/* The number is some other base. */
|
||||
digits = NULL;
|
||||
bc_init_num(&int_part);
|
||||
bc_divide(num, BCG(_one_), &int_part, 0);
|
||||
bc_init_num(&cur_dig);
|
||||
bc_init_num(&base);
|
||||
bc_num frac_part = bc_sub(num, int_part, 0);
|
||||
/* Make the INT_PART and FRAC_PART positive. */
|
||||
int_part->n_sign = PLUS;
|
||||
frac_part->n_sign = PLUS;
|
||||
bc_int2num(&base, o_base);
|
||||
bc_init_num(&max_o_digit);
|
||||
bc_int2num(&max_o_digit, o_base - 1);
|
||||
|
||||
/* Get the digits of the integer part and push them on a stack. */
|
||||
while (!bc_is_zero(int_part)) {
|
||||
bc_modulo(int_part, base, &cur_dig, 0);
|
||||
/* PHP Change: malloc() -> emalloc() */
|
||||
temp = (stk_rec *) emalloc(sizeof(stk_rec));
|
||||
temp->digit = bc_num2long(cur_dig);
|
||||
temp->next = digits;
|
||||
digits = temp;
|
||||
bc_divide(int_part, base, &int_part, 0);
|
||||
}
|
||||
|
||||
/* Print the digits on the stack. */
|
||||
if (digits != NULL) {
|
||||
/* Output the digits. */
|
||||
while (digits != NULL) {
|
||||
temp = digits;
|
||||
digits = digits->next;
|
||||
if (o_base <= 16) {
|
||||
(*out_char)(ref_str[(int) temp->digit]);
|
||||
} else {
|
||||
bc_out_long(temp->digit, max_o_digit->n_len, 1, out_char);
|
||||
}
|
||||
efree(temp);
|
||||
}
|
||||
}
|
||||
|
||||
/* Get and print the digits of the fraction part. */
|
||||
if (num->n_scale > 0) {
|
||||
(*out_char)('.');
|
||||
pre_space = false;
|
||||
t_num = bc_copy_num(BCG(_one_));
|
||||
while (t_num->n_len <= num->n_scale) {
|
||||
bc_multiply_ex(frac_part, base, &frac_part, num->n_scale);
|
||||
fdigit = bc_num2long(frac_part);
|
||||
bc_int2num(&int_part, fdigit);
|
||||
bc_sub_ex(frac_part, int_part, &frac_part, 0);
|
||||
if (o_base <= 16) {
|
||||
(*out_char)(ref_str[fdigit]);
|
||||
} else {
|
||||
bc_out_long(fdigit, max_o_digit->n_len, pre_space, out_char);
|
||||
pre_space = true;
|
||||
}
|
||||
bc_multiply_ex(t_num, base, &t_num, 0);
|
||||
}
|
||||
bc_free_num (&t_num);
|
||||
}
|
||||
|
||||
/* Clean up. */
|
||||
bc_free_num (&int_part);
|
||||
bc_free_num (&frac_part);
|
||||
bc_free_num (&base);
|
||||
bc_free_num (&cur_dig);
|
||||
bc_free_num (&max_o_digit);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -35,7 +35,7 @@
|
||||
#include <stddef.h>
|
||||
|
||||
/* routines */
|
||||
int _bc_do_compare (bc_num n1, bc_num n2, bool use_sign, bool ignore_last);
|
||||
int _bc_do_compare (bc_num n1, bc_num n2, bool use_sign);
|
||||
bc_num _bc_do_add (bc_num n1, bc_num n2, size_t scale_min);
|
||||
bc_num _bc_do_sub (bc_num n1, bc_num n2, size_t scale_min);
|
||||
void _bc_rm_leading_zeros (bc_num num);
|
||||
|
||||
@@ -49,7 +49,7 @@ bc_num bc_sub(bc_num n1, bc_num n2, size_t scale_min)
|
||||
} else {
|
||||
/* subtraction must be done. */
|
||||
/* Compare magnitudes. */
|
||||
switch (_bc_do_compare(n1, n2, false, false)) {
|
||||
switch (_bc_do_compare(n1, n2, false)) {
|
||||
case -1:
|
||||
/* n1 is less than n2, subtract n1 from n2. */
|
||||
diff = _bc_do_sub(n2, n1, scale_min);
|
||||
|
||||
Reference in New Issue
Block a user