From: Kazuhiro NISHIYAMA Date: 2000-11-19T04:37:48+09:00 Subject: [ruby-dev:11590] marshal.c パッチ array.cと同じように型が気になったところのパッチを作ってみました。 intからlongへの変更とintからsize_tへの変更があります。 それからMARSHAL_MAJORとMARSHAL_MINORのチェックのところを変更して、 新しいのか古いのかわかりやすくしました。 # dRubyでどっちがどっちかわかりにくかったので。 コメント追加だけの変更のところは変更していいかどうかわからなかった ところです。 /* w_short? */のところ(1つ)は変更するとmarshal結果が変わりそうだった、 /* Is cast necessary? */のところ(3つ)はキャストは不要なのではないか と思ったところです。 /* or size_t */のところ(1つ)は中(freadやmemcpy)はsize_tの方が よさそうで外(r_bytes2)はlongの方が良さそうだったのでlongに してみました。 --- ZnZ(ゼット エヌ ゼット) 西山和広(Kazuhiro NISHIYAMA) mailto:zn@mbf.nifty.com --- marshal.c~ Thu Nov 2 20:35:09 2000 +++ marshal.c Sun Nov 19 04:21:59 2000 @@ -111,7 +111,7 @@ static void w_bytes(s, n, arg) char *s; - int n; + size_t n; struct dump_arg *arg; { w_long(n, arg); @@ -128,7 +128,7 @@ int x; struct dump_arg *arg; { - int i; + size_t i; for (i=0; i> (i*8)) & 0xff, arg); @@ -141,7 +141,7 @@ struct dump_arg *arg; { char buf[sizeof(long)+1]; - int i, len = 0; + size_t i, len = 0; if (x == 0) { w_byte(0, arg); @@ -350,15 +350,15 @@ w_byte(TYPE_BIGNUM, arg); { char sign = RBIGNUM(obj)->sign?'+':'-'; - int len = RBIGNUM(obj)->len; + long len = RBIGNUM(obj)->len; BDIGIT *d = RBIGNUM(obj)->digits; w_byte(sign, arg); - w_long(SHORTLEN(len), arg); + w_long(SHORTLEN(len), arg); /* w_short? */ while (len--) { #if SIZEOF_BDIGITS > SIZEOF_SHORT BDIGIT num = *d; - int i; + size_t i; for (i=0; ilen; + long len = RARRAY(obj)->len; VALUE *ptr = RARRAY(obj)->ptr; w_long(len, arg); @@ -419,10 +419,10 @@ case T_STRUCT: w_byte(TYPE_STRUCT, arg); { - int len = RSTRUCT(obj)->len; + long len = RSTRUCT(obj)->len; char *path = rb_class2name(CLASS_OF(obj)); VALUE mem; - int i; + long i; w_unique(path, arg); w_long(len, arg); @@ -597,12 +597,12 @@ struct load_arg *arg; { register long x; - int c = (char)r_byte(arg); + int c = (char)r_byte(arg); /* Is cast necessary? */ int i; if (c == 0) return 0; if (c > 0) { - if (c > sizeof(long)) long_toobig((int)c); + if (c > sizeof(long)) long_toobig((int)c); /* Is cast necessary? */ x = 0; for (i=0;i sizeof(long)) long_toobig((int)c); + if (c > sizeof(long)) long_toobig((int)c); /* Is cast necessary? */ x = -1; for (i=0;ifp) { @@ -655,7 +655,7 @@ struct load_arg *arg; { ID id; - int num = r_long(arg); + long num = r_long(arg); if (st_lookup(arg->symbol, num, &id)) { return id; @@ -699,7 +699,7 @@ struct load_arg *arg; { char *buf; - int len; + long len; r_bytes2(buf, len, arg); return rb_str_new(buf, len); @@ -723,7 +723,7 @@ VALUE obj; struct load_arg *arg; { - int len; + long len; len = r_long(arg); if (len > 0) { @@ -780,7 +780,7 @@ case TYPE_FIXNUM: { - int i = r_long(arg); + long i = r_long(arg); return INT2FIX(i); } @@ -795,7 +795,7 @@ case TYPE_BIGNUM: { - int len; + long len; BDIGIT *digits; NEWOBJ(big, struct RBignum); @@ -808,7 +808,7 @@ #if SIZEOF_BDIGITS > SIZEOF_SHORT BDIGIT num = 0; int shift = 0; - int i; + size_t i; for (i=0; i