summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-25 09:04:19 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-07-25 09:04:19 +0000
commite2ec68e53a690397d636f809a327c88fab37ba93 (patch)
tree146d87a685c69a5cac5a2b77fad35f8d170e087b
parent6b04f0093a029be0372c3f35514ef27cbcc6083f (diff)
* bignum.c (rb_big2str0, bigsqr): made interruptible. [ruby-Bugs-20622]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@18211 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog4
-rw-r--r--bignum.c5
-rw-r--r--common.mk3
3 files changed, 11 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 05396b114d..820e3c8243 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+Fri Jul 25 18:04:17 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * bignum.c (rb_big2str0, bigsqr): made interruptible. [ruby-Bugs-20622]
+
Fri Jul 25 00:10:23 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* file.c (rb_find_file_ext, rb_find_file): converts Windows style path
diff --git a/bignum.c b/bignum.c
index 074d09ce38..ca73fc0456 100644
--- a/bignum.c
+++ b/bignum.c
@@ -11,6 +11,7 @@
**********************************************************************/
#include "ruby.h"
+#include "rubysig.h"
#include <math.h>
#include <float.h>
@@ -720,6 +721,7 @@ rb_big2str0(x, base, trim)
s = RSTRING(ss)->ptr;
s[0] = RBIGNUM(x)->sign ? '+' : '-';
+ TRAP_BEG;
while (i && j > 1) {
long k = i;
BDIGIT_DBL num = 0;
@@ -749,6 +751,7 @@ rb_big2str0(x, base, trim)
RSTRING(ss)->len = i;
}
s[RSTRING(ss)->len] = '\0';
+ TRAP_END;
return ss;
}
@@ -1735,11 +1738,13 @@ bigsqr(x)
RBIGNUM(z)->len = len;
a2 = bigtrunc(rb_big_mul0(a, b));
len = RBIGNUM(a2)->len;
+ TRAP_BEG;
for (i = 0, num = 0; i < len; i++) {
num += (BDIGIT_DBL)BDIGITS(z)[i + k] + ((BDIGIT_DBL)BDIGITS(a2)[i] << 1);
BDIGITS(z)[i + k] = BIGLO(num);
num = BIGDN(num);
}
+ TRAP_END;
if (num) {
len = RBIGNUM(z)->len;
for (i += k; i < len && num; ++i) {
diff --git a/common.mk b/common.mk
index f4947eaaaf..c78736634c 100644
--- a/common.mk
+++ b/common.mk
@@ -368,7 +368,8 @@ RUBY_H_INCLUDES = {$(VPATH)}ruby.h {$(VPATH)}config.h {$(VPATH)}defines.h \
array.$(OBJEXT): {$(VPATH)}array.c $(RUBY_H_INCLUDES) \
{$(VPATH)}util.h {$(VPATH)}st.h
-bignum.$(OBJEXT): {$(VPATH)}bignum.c $(RUBY_H_INCLUDES)
+bignum.$(OBJEXT): {$(VPATH)}bignum.c $(RUBY_H_INCLUDES) \
+ {$(VPATH)}rubysig.h
class.$(OBJEXT): {$(VPATH)}class.c $(RUBY_H_INCLUDES) \
{$(VPATH)}rubysig.h {$(VPATH)}node.h {$(VPATH)}st.h
compar.$(OBJEXT): {$(VPATH)}compar.c $(RUBY_H_INCLUDES)