summaryrefslogtreecommitdiffstats
path: root/io.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-30 16:08:03 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-05-30 16:08:03 +0000
commite0b8c444a503cd80e8c4600682f3ec8fad07d505 (patch)
tree8f8629ea50ad01c553bf56231af0b1f8a5d17287 /io.c
parentf1a769b87a5ebed50f7ea7df1051125eb20cf08a (diff)
downloadruby-e0b8c444a503cd80e8c4600682f3ec8fad07d505.tar.gz
ruby-e0b8c444a503cd80e8c4600682f3ec8fad07d505.tar.xz
ruby-e0b8c444a503cd80e8c4600682f3ec8fad07d505.zip
* io.c (rb_f_syscall): type dispatch should be based on
rb_check_string_type(), not FIXNUM_P(), because values may be a bignum. [ruby-talk:72257] * eval.c (rb_call0): should pass the current klass value to block_invoke, which may be called via "super". [ruby-core:01077] * eval.c (block_invoke): now takes 4th argument "klass". * eval.c (block_alloc): should propagate BLOCK_PROC to ruby_block. * marshal.c (r_object0): should not use "yield" method, use "call" instead. (ruby-bugs-ja PR#476) git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@3886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'io.c')
-rw-r--r--io.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/io.c b/io.c
index 137759505..3aceb78cb 100644
--- a/io.c
+++ b/io.c
@@ -3446,16 +3446,16 @@ rb_f_syscall(argc, argv)
rb_raise(rb_eArgError, "too few arguments for syscall");
arg[0] = NUM2LONG(argv[0]); argv++;
while (items--) {
- if (FIXNUM_P(*argv)) {
- arg[i] = (unsigned long)NUM2LONG(*argv);
- }
- else {
- VALUE v = *argv;
+ VALUE v = rb_check_string_type(*argv);
+ if (!NIL_P(v)) {
StringValue(v);
rb_str_modify(v);
arg[i] = (unsigned long)RSTRING(v)->ptr;
}
+ else {
+ arg[i] = (unsigned long)NUM2LONG(*argv);
+ }
argv++;
i++;
}