diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-02-22 10:50:21 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-02-22 10:50:21 +0000 |
commit | 23aff524c2d1f7793e27ec9782bb0e0c6e3b1035 (patch) | |
tree | 3a61b004ef554e58d035e29ae6895fe15a720a5c /bignum.c | |
parent | edcae0237fef7ff8a5d524b80ff91c697843eb01 (diff) | |
download | ruby-23aff524c2d1f7793e27ec9782bb0e0c6e3b1035.tar.gz ruby-23aff524c2d1f7793e27ec9782bb0e0c6e3b1035.tar.xz ruby-23aff524c2d1f7793e27ec9782bb0e0c6e3b1035.zip |
* bignum.c (BIGZEROP): fix for longer Bignum zeros. [ruby-Bugs-17454]
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@15575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r-- | bignum.c | 14 |
1 files changed, 13 insertions, 1 deletions
@@ -36,7 +36,19 @@ VALUE rb_cBignum; #define BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1))) #define BDIGMAX ((BDIGIT)-1) -#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || (RBIGNUM_LEN(x) == 1 && BDIGITS(x)[0] == 0)) +#define BIGZEROP(x) (RBIGNUM_LEN(x) == 0 || \ + (BDIGITS(x)[0] == 0 && \ + (RBIGNUM_LEN(x) == 1 || bigzero_p(x)))) + +static int +bigzero_p(VALUE x) +{ + long i; + for (i = 0; i < RBIGNUM_LEN(x); ++i) { + if (BDIGITS(x)[i]) return 0; + } + return 1; +} #define RBIGNUM_SET_LEN(b,l) \ ((RBASIC(b)->flags & RBIGNUM_EMBED_FLAG) ? \ |