summaryrefslogtreecommitdiffstats
path: root/bignum.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-06-07 16:33:01 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-06-07 16:33:01 +0000
commit47f82d8db36673156252726f1ee4e6201017a432 (patch)
tree8fae5a1140049d13043e01a4bd2c7358d2807a5d /bignum.c
parente74c4aa46232ce83afea7c6c8b0ccf892095ea36 (diff)
downloadruby-47f82d8db36673156252726f1ee4e6201017a432.tar.gz
ruby-47f82d8db36673156252726f1ee4e6201017a432.tar.xz
ruby-47f82d8db36673156252726f1ee4e6201017a432.zip
* bignum.c (bignorm): fixed a bug in normalizing negative numbers
reported from Honda Hiroki <hhonda@ipflex.com>. normalizing should not trim preceding zeros from negative numbers. * ext/socket/socket.c (ruby_getaddrinfo__aix): merged a patch from KUBO Takehiro <kubo@jiubao.org> to support AIX. [ruby-list:40832] * lib/yaml/rubytypes.rb (Array::to_yaml): merged a patch from Tilman Sauerbeck <tilman@code-monkey.de>. [ruby-core:05055] * lib/yaml/rubytypes.rb (Hash::to_yaml): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8589 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/bignum.c b/bignum.c
index 6a31b5adc..e53415007 100644
--- a/bignum.c
+++ b/bignum.c
@@ -105,9 +105,15 @@ bignorm(x)
BDIGIT *ds = BDIGITS(x);
while (len-- && !ds[len]) ;
- RBIGNUM(x)->len = ++len;
+ len++;
+ if (RBIGNUM(x)->sign) {
+ RBIGNUM(x)->len = len;
+ }
+ else if (len == 0) {
+ return x;
+ }
- if (len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
+ if (RBIGNUM(x)->len*SIZEOF_BDIGITS <= sizeof(VALUE)) {
long num = 0;
while (len--) {
num = BIGUP(num) + ds[len];