ruby-changes:7787
From: akr <ko1@a...>
Date: Sat, 13 Sep 2008 00:40:09 +0900 (JST)
Subject: [ruby-changes:7787] Ruby:r19307 (trunk): * transcode.c (enc_arg): take arg as VALUE * to prevent GC problem.
akr 2008-09-13 00:39:46 +0900 (Sat, 13 Sep 2008) New Revision: 19307 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=19307 Log: * transcode.c (enc_arg): take arg as VALUE * to prevent GC problem. Modified files: trunk/ChangeLog trunk/transcode.c Index: ChangeLog =================================================================== --- ChangeLog (revision 19306) +++ ChangeLog (revision 19307) @@ -1,3 +1,7 @@ +Sat Sep 13 00:38:54 2008 Tanaka Akira <akr@f...> + + * transcode.c (enc_arg): take arg as VALUE * to prevent GC problem. + Fri Sep 12 23:19:41 2008 Tanaka Akira <akr@f...> * transcode.c (rb_econv_add_transcoder_at): fix loop condition. Index: transcode.c =================================================================== --- transcode.c (revision 19306) +++ transcode.c (revision 19307) @@ -2361,17 +2361,17 @@ } static int -enc_arg(VALUE arg, const char **name_p, rb_encoding **enc_p) +enc_arg(volatile VALUE *arg, const char **name_p, rb_encoding **enc_p) { rb_encoding *enc; const char *n; int encidx; VALUE encval; - if ((encidx = rb_to_encoding_index(encval = arg)) < 0) { + if ((encidx = rb_to_encoding_index(encval = *arg)) < 0) { enc = NULL; encidx = 0; - n = StringValueCStr(encval); + n = StringValueCStr(*arg); } else { enc = rb_enc_from_index(encidx); @@ -2385,7 +2385,7 @@ } static int -str_transcode_enc_args(VALUE str, VALUE arg1, VALUE arg2, +str_transcode_enc_args(VALUE str, volatile VALUE *arg1, volatile VALUE *arg2, const char **sname_p, rb_encoding **senc_p, const char **dname_p, rb_encoding **denc_p) { @@ -2395,7 +2395,7 @@ dencidx = enc_arg(arg1, &dname, &denc); - if (NIL_P(arg2)) { + if (NIL_P(*arg2)) { sencidx = rb_enc_get_index(str); senc = rb_enc_from_index(sencidx); sname = rb_enc_name(senc); @@ -2416,6 +2416,7 @@ { VALUE dest; VALUE str = *self; + volatile VALUE arg1, arg2; long blen, slen; unsigned char *buf, *bp, *sp; const unsigned char *fromp; @@ -2427,7 +2428,9 @@ rb_raise(rb_eArgError, "wrong number of arguments (%d for 1..2)", argc); } - dencidx = str_transcode_enc_args(str, argv[0], argc==1 ? Qnil : argv[1], &sname, &senc, &dname, &denc); + arg1 = argv[0]; + arg2 = argc==1 ? Qnil : argv[1]; + dencidx = str_transcode_enc_args(str, &arg1, &arg2, &sname, &senc, &dname, &denc); if ((ecflags & (ECONV_UNIVERSAL_NEWLINE_DECORATOR| ECONV_CRLF_NEWLINE_DECORATOR| @@ -2637,7 +2640,7 @@ const char *arg_name, *result_name; rb_encoding *arg_enc, *result_enc; - enc_arg(arg, &arg_name, &arg_enc); + enc_arg(&arg, &arg_name, &arg_enc); result_name = rb_econv_asciicompat_encoding(arg_name); -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/