diff --git a/ChangeLog b/ChangeLog index 76a271381d..5d9c00b701 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,10 +7,31 @@ Wed Apr 17 23:55:34 2002 Akinori MUSHA * ext/Setup*, ext/bigfloat/*: Back out the import of BigFloat in favor of its forthcoming successor, BigDecimal. +Wed Apr 17 16:53:33 2002 Yukihiro Matsumoto + + * re.c (rb_reg_expr_str): should treat backslash specially in + escaping. + +Wed Apr 17 08:16:41 2002 Michal Rokos + + * io.c: complete off_t handling; missing argument for + fptr_finalize(); polished rb_scan_args call. + +Wed Apr 17 00:01:59 2002 Michal Rokos + + * dir.c: wrap multi-statment macro by do { } while (0) + + * eval.c, numeric,c, sprintf.c, util.c: ditto. + Tue Apr 16 08:59:50 2002 Nobuyoshi Nakada * eval.c (assign): convert mrhs to mvalue. +Mon Apr 15 18:12:57 2002 Yukihiro Matsumoto + + * bignum.c (rb_big_eq): check `y == x' if y is neither Fixnum, + Bignum, nor Float. + Mon Apr 15 09:27:31 2002 Yukihiro Matsumoto * pack.c (pack_unpack): should treat 'U' in character unit, not in diff --git a/array.c b/array.c index 18f08ce532..ff5ded0e5c 100644 --- a/array.c +++ b/array.c @@ -173,7 +173,7 @@ rb_ary_new3(n, va_alist) VALUE rb_ary_new4(n, elts) long n; - VALUE *elts; + const VALUE *elts; { VALUE ary; diff --git a/bignum.c b/bignum.c index 873d359540..b4e9148f42 100644 --- a/bignum.c +++ b/bignum.c @@ -861,9 +861,12 @@ rb_big_eq(x, y) case T_BIGNUM: break; case T_FLOAT: - return (rb_big2dbl(x) == RFLOAT(y)->value)?Qtrue:Qfalse; + if (rb_big2dbl(x) == RFLOAT(y)->value) + return Qtrue; + else + return Qfalse; default: - return Qfalse; + return rb_equal(y, x); } if (RBIGNUM(x)->sign != RBIGNUM(y)->sign) return Qfalse; if (RBIGNUM(x)->len != RBIGNUM(y)->len) return Qfalse; diff --git a/class.c b/class.c index 45dcf417b1..485653517b 100644 --- a/class.c +++ b/class.c @@ -772,11 +772,11 @@ rb_define_attr(klass, name, read, write) int #ifdef HAVE_STDARG_PROTOTYPES -rb_scan_args(int argc, VALUE *argv, const char *fmt, ...) +rb_scan_args(int argc, const VALUE *argv, const char *fmt, ...) #else rb_scan_args(argc, argv, fmt, va_alist) int argc; - VALUE *argv; + const VALUE *argv; const char *fmt; va_dcl #endif diff --git a/compar.c b/compar.c index 86494e27c5..371459f348 100644 --- a/compar.c +++ b/compar.c @@ -6,7 +6,7 @@ $Date$ created at: Thu Aug 26 14:39:48 JST 1993 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ diff --git a/dir.c b/dir.c index 6814e4a36f..8ade5471c6 100644 --- a/dir.c +++ b/dir.c @@ -6,7 +6,7 @@ $Date$ created at: Wed Jan 5 09:51:01 JST 1994 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto Copyright (C) 2000 Network Applied Communication Laboratory, Inc. Copyright (C) 2000 Information-technology Promotion Agency, Japan @@ -313,10 +313,10 @@ dir_closed() rb_raise(rb_eIOError, "closed directory"); } -#define GetDIR(obj, dirp) {\ +#define GetDIR(obj, dirp) do {\ Data_Get_Struct(obj, struct dir_data, dirp);\ if (dirp->dir == NULL) dir_closed();\ -} +} while (0) static VALUE dir_path(dir) diff --git a/enum.c b/enum.c index 301dd95166..4b5ec822f4 100644 --- a/enum.c +++ b/enum.c @@ -6,7 +6,7 @@ $Date$ created at: Fri Oct 1 15:15:19 JST 1993 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ @@ -172,12 +172,12 @@ static VALUE enum_collect(obj) VALUE obj; { - VALUE tmp; + VALUE ary; - tmp = rb_ary_new(); - rb_iterate(rb_each, obj, rb_block_given_p() ? collect_i : collect_all, tmp); + ary = rb_ary_new(); + rb_iterate(rb_each, obj, rb_block_given_p() ? collect_i : collect_all, ary); - return tmp; + return ary; } static VALUE diff --git a/eval.c b/eval.c index 4bee61cd81..484671d65b 100644 --- a/eval.c +++ b/eval.c @@ -518,12 +518,13 @@ static struct SCOPE *top_scope; _frame.argc = 0; \ _frame.argv = 0; \ _frame.flags = FRAME_ALLOCA; \ - ruby_frame = &_frame; \ + ruby_frame = &_frame #define POP_FRAME() \ ruby_sourcefile = _frame.file; \ ruby_sourceline = _frame.line; \ - ruby_frame = _frame.prev; } + ruby_frame = _frame.prev; \ +} struct BLOCKTAG { struct RBasic super; @@ -581,7 +582,7 @@ new_blktag() _block.flags = BLOCK_D_SCOPE; \ _block.dyna_vars = ruby_dyna_vars; \ _block.wrapper = ruby_wrapper; \ - ruby_block = &_block; + ruby_block = &_block #define POP_BLOCK() \ if (_block.tag->flags & (BLOCK_DYNAMIC)) \ @@ -595,7 +596,7 @@ struct RVarmap *ruby_dyna_vars; #define PUSH_VARS() { \ struct RVarmap * volatile _old; \ _old = ruby_dyna_vars; \ - ruby_dyna_vars = 0; + ruby_dyna_vars = 0 #define POP_VARS() \ if (_old && (ruby_scope->flags & SCOPE_DONT_RECYCLE)) {\ @@ -750,7 +751,7 @@ static struct iter *ruby_iter; struct iter _iter; \ _iter.prev = ruby_iter; \ _iter.iter = (i); \ - ruby_iter = &_iter; \ + ruby_iter = &_iter #define POP_ITER() \ ruby_iter = _iter.prev; \ @@ -777,7 +778,7 @@ static struct tag *prot_tag; _tag.scope = ruby_scope; \ _tag.tag = ptag; \ _tag.dst = 0; \ - prot_tag = &_tag; + prot_tag = &_tag #define PROT_NONE 0 #define PROT_FUNC -1 @@ -785,11 +786,11 @@ static struct tag *prot_tag; #define EXEC_TAG() setjmp(prot_tag->buf) -#define JUMP_TAG(st) { \ +#define JUMP_TAG(st) do { \ ruby_frame = prot_tag->frame; \ ruby_iter = prot_tag->iter; \ longjmp(prot_tag->buf,(st)); \ -} +} while (0) #define POP_TAG() \ if (_tag.prev) \ @@ -815,9 +816,10 @@ VALUE ruby_class; static VALUE ruby_wrapper; /* security wrapper */ #define PUSH_CLASS() { \ - VALUE _class = ruby_class; \ + VALUE _class = ruby_class -#define POP_CLASS() ruby_class = _class; } +#define POP_CLASS() ruby_class = _class; \ +} static NODE *ruby_cref = 0; static NODE *top_cref; @@ -834,7 +836,7 @@ static NODE *top_cref; _scope->flags = 0; \ _old = ruby_scope; \ ruby_scope = _scope; \ - scope_vmode = SCOPE_PUBLIC; + scope_vmode = SCOPE_PUBLIC typedef struct thread * rb_thread_t; static rb_thread_t curr_thread = 0; @@ -863,7 +865,7 @@ static VALUE eval _((VALUE,VALUE,VALUE,char*,int)); static NODE *compile _((VALUE, char*, int)); static VALUE rb_yield_0 _((VALUE, VALUE, VALUE, int)); -static VALUE rb_call _((VALUE,VALUE,ID,int,VALUE*,int)); +static VALUE rb_call _((VALUE,VALUE,ID,int,const VALUE*,int)); static VALUE module_setup _((VALUE,NODE*)); static VALUE massign _((VALUE,NODE*,VALUE,int)); @@ -1150,7 +1152,7 @@ ruby_options(argc, argv) { int state; - PUSH_TAG(PROT_NONE) + PUSH_TAG(PROT_NONE); if ((state = EXEC_TAG()) == 0) { ruby_process_options(argc, argv); } @@ -1714,7 +1716,7 @@ copy_node_scope(node, rval) # define TMP_ALLOC(n) ALLOCA_N(VALUE,n) #endif -#define SETUP_ARGS(anode) {\ +#define SETUP_ARGS(anode) do {\ NODE *n = anode;\ if (!n) {\ argc = 0;\ @@ -1752,14 +1754,14 @@ copy_node_scope(node, rval) ruby_sourcefile = file;\ ruby_sourceline = line;\ }\ -} +} while (0) #define BEGIN_CALLARGS {\ struct BLOCK *tmp_block = ruby_block;\ if (ruby_iter->iter == ITER_PRE) {\ ruby_block = ruby_block->prev;\ }\ - PUSH_ITER(ITER_NOT); + PUSH_ITER(ITER_NOT) #define END_CALLARGS \ ruby_block = tmp_block;\ @@ -4651,7 +4653,7 @@ rb_call(klass, recv, mid, argc, argv, scope) VALUE klass, recv; ID mid; int argc; /* OK */ - VALUE *argv; /* OK */ + const VALUE *argv; /* OK */ int scope; { NODE *body; /* OK */ @@ -4780,7 +4782,7 @@ rb_funcall2(recv, mid, argc, argv) VALUE recv; ID mid; int argc; - VALUE *argv; + const VALUE *argv; { return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 1); } @@ -4790,7 +4792,7 @@ rb_funcall3(recv, mid, argc, argv) VALUE recv; ID mid; int argc; - VALUE *argv; + const VALUE *argv; { return rb_call(CLASS_OF(recv), recv, mid, argc, argv, 0); } @@ -4798,7 +4800,7 @@ rb_funcall3(recv, mid, argc, argv) VALUE rb_call_super(argc, argv) int argc; - VALUE *argv; + const VALUE *argv; { VALUE result; @@ -8372,7 +8374,7 @@ rb_thread_abort_exc_set(thread, val) th->priority = 0;\ th->gid = 1;\ th->locals = 0;\ -} while(0) +} while (0) static rb_thread_t rb_thread_alloc(klass) diff --git a/file.c b/file.c index ca036ea5d3..3a7f5e393f 100644 --- a/file.c +++ b/file.c @@ -1678,7 +1678,7 @@ rb_file_s_truncate(klass, path, len) SafeStringValue(path); #ifdef HAVE_TRUNCATE - if (truncate(RSTRING(path)->ptr, NUM2INT(len)) < 0) + if (truncate(RSTRING(path)->ptr, NUM2OFFT(len)) < 0) rb_sys_fail(RSTRING(path)->ptr); #else # ifdef HAVE_CHSIZE @@ -1694,7 +1694,7 @@ rb_file_s_truncate(klass, path, len) rb_sys_fail(RSTRING(path)->ptr); } # endif - if (chsize(tmpfd, NUM2INT(len)) < 0) { + if (chsize(tmpfd, NUM2OFFT(len)) < 0) { close(tmpfd); rb_sys_fail(RSTRING(path)->ptr); } @@ -1719,11 +1719,11 @@ rb_file_truncate(obj, len) rb_raise(rb_eIOError, "not opened for writing"); } #ifdef HAVE_TRUNCATE - if (ftruncate(fileno(fptr->f), NUM2INT(len)) < 0) + if (ftruncate(fileno(fptr->f), NUM2OFFT(len)) < 0) rb_sys_fail(fptr->path); #else # ifdef HAVE_CHSIZE - if (chsize(fileno(fptr->f), NUM2INT(len)) < 0) + if (chsize(fileno(fptr->f), NUM2OFFT(len)) < 0) rb_sys_fail(fptr->path); # else rb_notimplement(); diff --git a/inits.c b/inits.c index d3fffb654e..dd7af5afb1 100644 --- a/inits.c +++ b/inits.c @@ -6,7 +6,7 @@ $Date$ created at: Tue Dec 28 16:01:58 JST 1993 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ diff --git a/intern.h b/intern.h index 0eed0ddda6..2ca00ace4a 100644 --- a/intern.h +++ b/intern.h @@ -23,7 +23,7 @@ VALUE rb_assoc_new _((VALUE, VALUE)); VALUE rb_ary_new _((void)); VALUE rb_ary_new2 _((long)); VALUE rb_ary_new3 __((long,...)); -VALUE rb_ary_new4 _((long, VALUE *)); +VALUE rb_ary_new4 _((long, const VALUE *)); VALUE rb_ary_freeze _((VALUE)); VALUE rb_ary_aref _((int, VALUE*, VALUE)); void rb_ary_store _((VALUE, long, VALUE)); @@ -204,7 +204,7 @@ VALUE rb_find_file _((VALUE)); /* gc.c */ int ruby_stack_check _((void)); int ruby_stack_length _((VALUE**)); -char *rb_source_filename _((const char *)); +char *rb_source_filename _((const char*)); void rb_gc_mark_locations _((VALUE*, VALUE*)); void rb_mark_tbl _((struct st_table*)); void rb_mark_hash _((struct st_table*)); @@ -224,7 +224,7 @@ VALUE rb_hash_aref _((VALUE, VALUE)); VALUE rb_hash_aset _((VALUE, VALUE, VALUE)); VALUE rb_hash_delete_if _((VALUE)); VALUE rb_hash_delete _((VALUE,VALUE)); -int rb_path_check _((char *)); +int rb_path_check _((char*)); int rb_env_path_tainted _((void)); /* io.c */ EXTERN VALUE rb_fs; @@ -278,7 +278,7 @@ VALUE rb_Integer _((VALUE)); VALUE rb_Float _((VALUE)); VALUE rb_String _((VALUE)); VALUE rb_Array _((VALUE)); -double rb_cstr_to_dbl _((const char *, int)); +double rb_cstr_to_dbl _((const char*, int)); double rb_str_to_dbl _((VALUE, int)); /* parse.y */ EXTERN int ruby_sourceline; @@ -354,14 +354,14 @@ VALUE rb_str_new _((const char*, long)); VALUE rb_str_new2 _((const char*)); VALUE rb_str_new3 _((VALUE)); VALUE rb_str_new4 _((VALUE)); -VALUE rb_str_new5 _((VALUE, const char *, long)); +VALUE rb_str_new5 _((VALUE, const char*, long)); VALUE rb_tainted_str_new _((const char*, long)); VALUE rb_tainted_str_new2 _((const char*)); VALUE rb_str_buf_new _((long)); VALUE rb_str_buf_new2 _((const char*)); VALUE rb_str_buf_append _((VALUE, VALUE)); -VALUE rb_str_buf_cat _((VALUE, const char *, long)); -VALUE rb_str_buf_cat2 _((VALUE, const char *)); +VALUE rb_str_buf_cat _((VALUE, const char*, long)); +VALUE rb_str_buf_cat2 _((VALUE, const char*)); VALUE rb_obj_as_string _((VALUE)); VALUE rb_str_dup _((VALUE)); VALUE rb_str_dup_frozen _((VALUE)); @@ -415,8 +415,8 @@ void rb_free_generic_ivar _((VALUE)); VALUE rb_ivar_get _((VALUE, ID)); VALUE rb_ivar_set _((VALUE, ID, VALUE)); VALUE rb_ivar_defined _((VALUE, ID)); -VALUE rb_iv_set _((VALUE, const char *, VALUE)); -VALUE rb_iv_get _((VALUE, const char *)); +VALUE rb_iv_set _((VALUE, const char*, VALUE)); +VALUE rb_iv_get _((VALUE, const char*)); VALUE rb_obj_instance_variables _((VALUE)); VALUE rb_obj_remove_instance_variable _((VALUE, VALUE)); void *rb_mod_const_at _((VALUE, void*)); @@ -436,9 +436,9 @@ void rb_autoload_load _((ID)); VALUE rb_cvar_defined _((VALUE, ID)); void rb_cvar_set _((VALUE, ID, VALUE, int)); VALUE rb_cvar_get _((VALUE, ID)); -void rb_cv_set _((VALUE, const char *, VALUE)); -VALUE rb_cv_get _((VALUE, const char *)); -void rb_define_class_variable _((VALUE, const char *, VALUE)); +void rb_cv_set _((VALUE, const char*, VALUE)); +VALUE rb_cv_get _((VALUE, const char*)); +void rb_define_class_variable _((VALUE, const char*, VALUE)); VALUE rb_mod_class_variables _((VALUE)); VALUE rb_mod_remove_cvar _((VALUE, VALUE)); /* version.c */ diff --git a/io.c b/io.c index bc6724786a..97f950a1ee 100644 --- a/io.c +++ b/io.c @@ -364,7 +364,7 @@ rb_io_seek(io, offset, whence) int whence; { OpenFile *fptr; - long pos; + off_t pos; GetOpenFile(io, fptr); pos = fseeko(fptr->f, NUM2OFFT(offset), whence); @@ -381,11 +381,11 @@ rb_io_seek_m(argc, argv, io) VALUE io; { VALUE offset, ptrname; - int whence; + int whence = SEEK_SET; - rb_scan_args(argc, argv, "11", &offset, &ptrname); - if (argc == 1) whence = SEEK_SET; - else whence = NUM2INT(ptrname); + if (rb_scan_args(argc, argv, "11", &offset, &ptrname) == 2) { + whence = NUM2INT(ptrname); + } return rb_io_seek(io, offset, whence); } @@ -395,14 +395,14 @@ rb_io_set_pos(io, offset) VALUE io, offset; { OpenFile *fptr; - long pos; + off_t pos; GetOpenFile(io, fptr); pos = fseeko(fptr->f, NUM2OFFT(offset), SEEK_SET); if (pos != 0) rb_sys_fail(fptr->path); clearerr(fptr->f); - return INT2NUM(pos); + return OFFT2NUM(pos); } static VALUE @@ -1161,6 +1161,7 @@ rb_io_isatty(io) static void fptr_finalize(fptr, fin) OpenFile *fptr; + int fin; { int n1 = 0, n2 = 0, e = 0, f1, f2 = -1; @@ -1318,13 +1319,13 @@ rb_io_sysseek(argc, argv, io) VALUE io; { VALUE offset, ptrname; - int whence; + int whence = SEEK_SET; OpenFile *fptr; off_t pos; - rb_scan_args(argc, argv, "11", &offset, &ptrname); - if (argc == 1) whence = SEEK_SET; - else whence = NUM2INT(ptrname); + if (rb_scan_args(argc, argv, "11", &offset, &ptrname) == 2) { + whence = NUM2INT(ptrname); + } GetOpenFile(io, fptr); if ((fptr->mode & FMODE_READABLE) && READ_DATA_PENDING(fptr->f)) { diff --git a/main.c b/main.c index ef1b495d9c..3c6ccf43a3 100644 --- a/main.c +++ b/main.c @@ -6,7 +6,7 @@ $Date$ created at: Fri Aug 19 13:19:58 JST 1994 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ diff --git a/marshal.c b/marshal.c index 0aefac1f8d..b15af3b620 100644 --- a/marshal.c +++ b/marshal.c @@ -6,7 +6,7 @@ $Date$ created at: Thu Apr 27 16:30:01 JST 1995 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ diff --git a/math.c b/math.c index d4a24d2b45..153c5b7f0e 100644 --- a/math.c +++ b/math.c @@ -6,7 +6,7 @@ $Date$ created at: Tue Jan 25 14:12:56 JST 1994 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ @@ -16,16 +16,17 @@ VALUE rb_mMath; #define Need_Float(x) (x) = rb_Float(x) -#define Need_Float2(x,y) {\ +#define Need_Float2(x,y) do {\ Need_Float(x);\ Need_Float(y);\ -} +} while (0) static VALUE math_atan2(obj, y, x) VALUE obj, x, y; { Need_Float2(y, x); + return rb_float_new(atan2(RFLOAT(y)->value, RFLOAT(x)->value)); } @@ -85,6 +86,7 @@ math_atan(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(atan(RFLOAT(x)->value)); } @@ -102,6 +104,7 @@ math_cosh(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(cosh(RFLOAT(x)->value)); } @@ -119,6 +122,7 @@ math_sinh(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(sinh(RFLOAT(x)->value)); } @@ -136,6 +140,7 @@ math_tanh(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(tanh(RFLOAT(x)->value)); } @@ -144,6 +149,7 @@ math_acosh(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(acosh(RFLOAT(x)->value)); } @@ -152,6 +158,7 @@ math_asinh(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(asinh(RFLOAT(x)->value)); } @@ -160,6 +167,7 @@ math_atanh(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(atanh(RFLOAT(x)->value)); } @@ -168,6 +176,7 @@ math_exp(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(exp(RFLOAT(x)->value)); } @@ -181,6 +190,7 @@ math_log(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(log(RFLOAT(x)->value)); } @@ -189,6 +199,7 @@ math_log10(obj, x) VALUE obj, x; { Need_Float(x); + return rb_float_new(log10(RFLOAT(x)->value)); } @@ -210,8 +221,8 @@ math_frexp(obj, x) int exp; Need_Float(x); + d = frexp(RFLOAT(x)->value, &exp); - return rb_assoc_new(rb_float_new(d), INT2NUM(exp)); } @@ -222,6 +233,7 @@ math_ldexp(obj, x, n) double d; Need_Float(x); + return rb_float_new(d = ldexp(RFLOAT(x)->value, NUM2INT(n))); } @@ -230,6 +242,7 @@ math_hypot(obj, x, y) VALUE obj, x, y; { Need_Float2(x, y); + return rb_float_new(hypot(RFLOAT(x)->value, RFLOAT(y)->value)); } diff --git a/prec.c b/prec.c index 436b4d5bbc..aad80d9c1f 100644 --- a/prec.c +++ b/prec.c @@ -6,7 +6,7 @@ $Date$ created at: Tue Jan 26 02:40:41 2000 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ diff --git a/random.c b/random.c index ba568cdb82..e3830166d4 100644 --- a/random.c +++ b/random.c @@ -6,7 +6,7 @@ $Date$ created at: Fri Dec 24 16:39:21 JST 1993 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ @@ -77,7 +77,7 @@ void srand48 _((long)); #endif /* not HAVE_DRAND48 */ static int first = 1; -#ifdef HAVE_RANDOM +#ifdef HAVE_INITSTATE static char state[256]; #endif @@ -88,7 +88,7 @@ rand_init(seed) int old; static unsigned int saved_seed; -#if defined HAVE_INITSTATE +#ifdef HAVE_INITSTATE if (first == 1) { initstate(1, state, sizeof state); } @@ -111,11 +111,11 @@ rb_f_srand(argc, argv, obj) VALUE *argv; VALUE obj; { - VALUE a; + VALUE sd; unsigned int seed, old; rb_secure(4); - if (rb_scan_args(argc, argv, "01", &a) == 0) { + if (rb_scan_args(argc, argv, "01", &sd) == 0) { static int n = 0; struct timeval tv; @@ -123,7 +123,7 @@ rb_f_srand(argc, argv, obj) seed = tv.tv_sec ^ tv.tv_usec ^ getpid() ^ n++; } else { - seed = NUM2UINT(a); + seed = NUM2UINT(sd); } old = rand_init(seed); diff --git a/re.c b/re.c index 41364a189b..2488ccba95 100644 --- a/re.c +++ b/re.c @@ -238,7 +238,13 @@ rb_reg_expr_str(str, s, len) else { p = s; while (p= bsiz) {\ REALLOC_N(buf, char, bsiz*2);\ bsiz*=2;\ - }\ -} + } -#define PUSH(s, l) { \ +#define PUSH(s, l) do { \ CHECK(l);\ memcpy(&buf[blen], s, l);\ blen += (l);\ -} +} while (0) #define GETARG() \ ((nextarg >= argc) ? (rb_raise(rb_eArgError, "too few argument."), 0) : argv[nextarg++]) -#define GETASTER(val) { \ +#define GETASTER(val) do { \ t = p++; \ n = 0; \ for (; p < end && ISDIGIT(*p); p++) { \ @@ -98,7 +97,7 @@ remove_sign_bits(str, base) p = t; \ } \ val = NUM2INT(tmp); \ -} +} while (0) VALUE rb_f_sprintf(argc, argv) diff --git a/string.c b/string.c index 72a1783aa8..4eb2bb9966 100644 --- a/string.c +++ b/string.c @@ -58,6 +58,10 @@ str_new(klass, ptr, len) { VALUE str = rb_obj_alloc(klass); + if (len < 0) { + rb_raise(rb_eArgError, "negative string size (or size too big)"); + } + RSTRING(str)->len = len; RSTRING(str)->aux.capa = len; RSTRING(str)->ptr = ALLOC_N(char,len+1); @@ -460,8 +464,8 @@ void rb_str_modify(str) VALUE str; { - if (str_independent(str)) return; - str_make_independent(str); + if (!str_independent(str)) + str_make_independent(str); } VALUE diff --git a/time.c b/time.c index 4ac38bc0f7..9bfaba1ad9 100644 --- a/time.c +++ b/time.c @@ -6,7 +6,7 @@ $Date$ created at: Tue Dec 28 14:31:59 JST 1993 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ @@ -40,9 +40,8 @@ struct time_object { int tm_got; }; -#define GetTimeval(obj, tobj) {\ - Data_Get_Struct(obj, struct time_object, tobj);\ -} +#define GetTimeval(obj, tobj) \ + Data_Get_Struct(obj, struct time_object, tobj) static VALUE time_s_alloc(klass) diff --git a/util.c b/util.c index feb7004d52..d43ee63448 100644 --- a/util.c +++ b/util.c @@ -6,7 +6,7 @@ $Date$ created at: Fri Mar 10 17:22:34 JST 1995 - Copyright (C) 1993-2001 Yukihiro Matsumoto + Copyright (C) 1993-2002 Yukihiro Matsumoto **********************************************************************/ @@ -464,8 +464,8 @@ static void mmrot3_(a, b, c, mmarg) /*****************************************************/ typedef struct { char *LL, *RR; } stack_node; /* Stack structure for L,l,R,r */ -#define PUSH(ll,rr) {top->LL = (ll); top->RR = (rr); ++top;} /* Push L,l,R,r */ -#define POP(ll,rr) {--top; ll = top->LL; rr = top->RR;} /* Pop L,l,R,r */ +#define PUSH(ll,rr) do { top->LL = (ll); top->RR = (rr); ++top; } while (0) /* Push L,l,R,r */ +#define POP(ll,rr) do { --top; ll = top->LL; rr = top->RR; } while (0) /* Pop L,l,R,r */ #define med3(a,b,c) ((*cmp)(a,b)<0 ? \ ((*cmp)(b,c)<0 ? b : ((*cmp)(a,c)<0 ? c : a)) : \