From 350e8342f93e3679da790494b4d448bea8ebf819 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 22 Feb 2008 10:50:21 +0000 Subject: * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@15575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ bignum.c | 16 +++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index f56bf69107..c7f9d85c21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Fri Feb 22 19:50:19 2008 Nobuyoshi Nakada + + * bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454] + Fri Feb 22 16:09:53 2008 Nobuyoshi Nakada * bignum.c (rb_big_lshift, rb_big_rshift, rb_big_aref): removed excess diff --git a/bignum.c b/bignum.c index 3e85f04246..9a5bd0c228 100644 --- a/bignum.c +++ b/bignum.c @@ -37,7 +37,21 @@ VALUE rb_cBignum; #define BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1))) #define BDIGMAX ((BDIGIT)-1) -#define BIGZEROP(x) (RBIGNUM(x)->len == 0 || (RBIGNUM(x)->len == 1 && BDIGITS(x)[0] == 0)) +#define BIGZEROP(x) (RBIGNUM(x)->len == 0 || \ + (BDIGITS(x)[0] == 0 && \ + (RBIGNUM(x)->len == 1 || bigzero_p(x)))) + +static int bigzero_p(VALUE); +static int +bigzero_p(x) + VALUE x; +{ + long i; + for (i = 0; i < RBIGNUM(x)->len; ++i) { + if (BDIGITS(x)[i]) return 0; + } + return 1; +} static VALUE bignew_1(klass, len, sign) -- cgit v1.2.3