From 3553a86eb51365cc524cf5c549b37770448d550d Mon Sep 17 00:00:00 2001 From: nobu Date: Wed, 4 Nov 2015 07:27:10 +0000 Subject: ext: use RARRAY_CONST_PTR * ext/bigdecimal/bigdecimal.c: use RARRAY_CONST_PTR just fore reference instead of RARRAY_PTR, to keep the array WB-protected. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52448 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/bigdecimal/bigdecimal.c | 4 +- ext/date/date_core.c | 40 ++++++++++---------- ext/dbm/dbm.c | 6 ++- ext/fiddle/closure.c | 6 +-- ext/fiddle/function.c | 4 +- ext/gdbm/gdbm.c | 6 ++- ext/io/console/console.c | 6 ++- ext/openssl/ossl_ocsp.c | 4 +- ext/openssl/ossl_ssl.c | 2 +- ext/openssl/ossl_x509cert.c | 4 +- ext/openssl/ossl_x509crl.c | 8 ++-- ext/openssl/ossl_x509req.c | 4 +- ext/openssl/ossl_x509revoked.c | 4 +- ext/psych/psych_emitter.c | 6 +-- ext/readline/readline.c | 2 +- ext/sdbm/init.c | 6 ++- ext/socket/ancdata.c | 2 +- ext/socket/socket.c | 14 +++---- ext/tk/tcltklib.c | 17 +++++---- ext/tk/tkutil/tkutil.c | 84 ++++++++++++++++++++++-------------------- 20 files changed, 123 insertions(+), 106 deletions(-) (limited to 'ext') diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 7d498724fe..63236a01d5 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -699,7 +699,7 @@ BigDecimal_to_i(VALUE self) } else { VALUE a = BigDecimal_split(self); - VALUE digits = RARRAY_PTR(a)[1]; + VALUE digits = RARRAY_CONST_PTR(a)[1]; VALUE numerator = rb_funcall(digits, rb_intern("to_i"), 0); VALUE ret; ssize_t dpower = e - (ssize_t)RSTRING_LEN(digits); @@ -788,7 +788,7 @@ BigDecimal_to_r(VALUE self) sign = VpGetSign(p); power = VpExponent10(p); a = BigDecimal_split(self); - digits = RARRAY_PTR(a)[1]; + digits = RARRAY_CONST_PTR(a)[1]; denomi_power = power - RSTRING_LEN(digits); numerator = rb_funcall(digits, rb_intern("to_i"), 0); diff --git a/ext/date/date_core.c b/ext/date/date_core.c index 1b87b09c55..642a0e4398 100644 --- a/ext/date/date_core.c +++ b/ext/date/date_core.c @@ -3826,14 +3826,14 @@ rt_complete_frags(VALUE klass, VALUE hash) for (i = 0; i < RARRAY_LEN(tab); i++) { VALUE x, a; - x = RARRAY_PTR(tab)[i]; - a = RARRAY_PTR(x)[1]; + x = RARRAY_CONST_PTR(tab)[i]; + a = RARRAY_CONST_PTR(x)[1]; { long j, n = 0; for (j = 0; j < RARRAY_LEN(a); j++) - if (!NIL_P(ref_hash0(RARRAY_PTR(a)[j]))) + if (!NIL_P(ref_hash0(RARRAY_CONST_PTR(a)[j]))) n++; if (n > eno) { eno = n; @@ -3845,8 +3845,8 @@ rt_complete_frags(VALUE klass, VALUE hash) g = 0; else { g = 1; - k = RARRAY_PTR(RARRAY_PTR(tab)[idx])[0]; - a = RARRAY_PTR(RARRAY_PTR(tab)[idx])[1]; + k = RARRAY_CONST_PTR(RARRAY_CONST_PTR(tab)[idx])[0]; + a = RARRAY_CONST_PTR(RARRAY_CONST_PTR(tab)[idx])[1]; e = eno; } } @@ -3867,7 +3867,7 @@ rt_complete_frags(VALUE klass, VALUE hash) long i; for (i = 0; i < RARRAY_LEN(a); i++) { - VALUE e = RARRAY_PTR(a)[i]; + VALUE e = RARRAY_CONST_PTR(a)[i]; if (!NIL_P(ref_hash0(e))) break; @@ -3884,7 +3884,7 @@ rt_complete_frags(VALUE klass, VALUE hash) long i; for (i = 0; i < RARRAY_LEN(a); i++) { - VALUE e = RARRAY_PTR(a)[i]; + VALUE e = RARRAY_CONST_PTR(a)[i]; if (!NIL_P(ref_hash0(e))) break; @@ -3908,7 +3908,7 @@ rt_complete_frags(VALUE klass, VALUE hash) long i; for (i = 0; i < RARRAY_LEN(a); i++) { - VALUE e = RARRAY_PTR(a)[i]; + VALUE e = RARRAY_CONST_PTR(a)[i]; if (!NIL_P(ref_hash0(e))) break; @@ -3925,7 +3925,7 @@ rt_complete_frags(VALUE klass, VALUE hash) long i; for (i = 0; i < RARRAY_LEN(a); i++) { - VALUE e = RARRAY_PTR(a)[i]; + VALUE e = RARRAY_CONST_PTR(a)[i]; if (!NIL_P(ref_hash0(e))) break; @@ -7085,16 +7085,16 @@ d_lite_marshal_load(VALUE self, VALUE a) if (RARRAY_LEN(a) == 2) { - ajd = f_sub(RARRAY_PTR(a)[0], half_days_in_day); + ajd = f_sub(RARRAY_CONST_PTR(a)[0], half_days_in_day); of = INT2FIX(0); - sg = RARRAY_PTR(a)[1]; + sg = RARRAY_CONST_PTR(a)[1]; if (!k_numeric_p(sg)) sg = DBL2NUM(RTEST(sg) ? GREGORIAN : JULIAN); } else { - ajd = RARRAY_PTR(a)[0]; - of = RARRAY_PTR(a)[1]; - sg = RARRAY_PTR(a)[2]; + ajd = RARRAY_CONST_PTR(a)[0]; + of = RARRAY_CONST_PTR(a)[1]; + sg = RARRAY_CONST_PTR(a)[2]; } old_to_new(ajd, of, sg, @@ -7119,12 +7119,12 @@ d_lite_marshal_load(VALUE self, VALUE a) int jd, df, of; double sg; - nth = RARRAY_PTR(a)[0]; - jd = NUM2INT(RARRAY_PTR(a)[1]); - df = NUM2INT(RARRAY_PTR(a)[2]); - sf = RARRAY_PTR(a)[3]; - of = NUM2INT(RARRAY_PTR(a)[4]); - sg = NUM2DBL(RARRAY_PTR(a)[5]); + nth = RARRAY_CONST_PTR(a)[0]; + jd = NUM2INT(RARRAY_CONST_PTR(a)[1]); + df = NUM2INT(RARRAY_CONST_PTR(a)[2]); + sf = RARRAY_CONST_PTR(a)[3]; + of = NUM2INT(RARRAY_CONST_PTR(a)[4]); + sg = NUM2DBL(RARRAY_CONST_PTR(a)[5]); if (!df && f_zero_p(sf) && !of) { set_to_simple(self, &dat->s, nth, jd, sg, 0, 0, 0, HAVE_JD); } else { diff --git a/ext/dbm/dbm.c b/ext/dbm/dbm.c index d2904f5bbe..9202b9c2a8 100644 --- a/ext/dbm/dbm.c +++ b/ext/dbm/dbm.c @@ -528,7 +528,7 @@ fdbm_delete_if(VALUE obj) } for (i = 0; i < RARRAY_LEN(ary); i++) { - keystr = RARRAY_PTR(ary)[i]; + keystr = RARRAY_CONST_PTR(ary)[i]; key.dptr = RSTRING_PTR(keystr); key.dsize = (DSIZE_TYPE)RSTRING_LEN(keystr); if (dbm_delete(dbm, key)) { @@ -599,11 +599,13 @@ static VALUE fdbm_store(VALUE,VALUE,VALUE); static VALUE update_i(RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm)) { + const VALUE *ptr; Check_Type(pair, T_ARRAY); if (RARRAY_LEN(pair) < 2) { rb_raise(rb_eArgError, "pair must be [key, value]"); } - fdbm_store(dbm, RARRAY_PTR(pair)[0], RARRAY_PTR(pair)[1]); + ptr = RARRAY_CONST_PTR(pair); + fdbm_store(dbm, ptr[0], ptr[1]); return Qnil; } diff --git a/ext/fiddle/closure.c b/ext/fiddle/closure.c index ca1b10a61b..502f47f037 100644 --- a/ext/fiddle/closure.c +++ b/ext/fiddle/closure.c @@ -70,7 +70,7 @@ callback(ffi_cif *cif, void *resp, void **args, void *ctx) cPointer = rb_const_get(mFiddle, rb_intern("Pointer")); for (i = 0; i < argc; i++) { - type = NUM2INT(RARRAY_PTR(rbargs)[i]); + type = NUM2INT(RARRAY_CONST_PTR(rbargs)[i]); switch (type) { case TYPE_VOID: argc = 0; @@ -123,7 +123,7 @@ callback(ffi_cif *cif, void *resp, void **args, void *ctx) } } - ret = rb_funcall2(self, rb_intern("call"), argc, RARRAY_PTR(params)); + ret = rb_funcall2(self, rb_intern("call"), argc, RARRAY_CONST_PTR(params)); RB_GC_GUARD(params); type = NUM2INT(ctype); @@ -210,7 +210,7 @@ initialize(int rbargc, VALUE argv[], VALUE self) cl->argv = (ffi_type **)xcalloc(argc + 1, sizeof(ffi_type *)); for (i = 0; i < argc; i++) { - int type = NUM2INT(RARRAY_PTR(args)[i]); + int type = NUM2INT(RARRAY_CONST_PTR(args)[i]); cl->argv[i] = INT2FFI_TYPE(type); } cl->argv[argc] = NULL; diff --git a/ext/fiddle/function.c b/ext/fiddle/function.c index 4c19821bfa..9db29e8bd6 100644 --- a/ext/fiddle/function.c +++ b/ext/fiddle/function.c @@ -110,7 +110,7 @@ initialize(int argc, VALUE argv[], VALUE self) arg_types = xcalloc(RARRAY_LEN(args) + 1, sizeof(ffi_type *)); for (i = 0; i < RARRAY_LEN(args); i++) { - int type = NUM2INT(RARRAY_PTR(args)[i]); + int type = NUM2INT(RARRAY_CONST_PTR(args)[i]); arg_types[i] = INT2FFI_TYPE(type); } arg_types[RARRAY_LEN(args)] = NULL; @@ -164,7 +164,7 @@ function_call(int argc, VALUE argv[], VALUE self) values = (void **)((char *)generic_args + (size_t)argc * sizeof(fiddle_generic)); for (i = 0; i < argc; i++) { - VALUE type = RARRAY_PTR(types)[i]; + VALUE type = RARRAY_CONST_PTR(types)[i]; VALUE src = argv[i]; if(NUM2INT(type) == TYPE_VOIDP) { diff --git a/ext/gdbm/gdbm.c b/ext/gdbm/gdbm.c index 143b4e8ebb..445facc4fd 100644 --- a/ext/gdbm/gdbm.c +++ b/ext/gdbm/gdbm.c @@ -634,7 +634,7 @@ fgdbm_delete_if(VALUE obj) } for (i = 0; i < RARRAY_LEN(ary); i++) - rb_gdbm_delete(obj, RARRAY_PTR(ary)[i]); + rb_gdbm_delete(obj, RARRAY_CONST_PTR(ary)[i]); if (status) rb_jump_tag(status); if (n > 0) dbmp->di_size = n - (int)RARRAY_LEN(ary); rb_ary_clear(ary); @@ -747,11 +747,13 @@ fgdbm_store(VALUE obj, VALUE keystr, VALUE valstr) static VALUE update_i(RB_BLOCK_CALL_FUNC_ARGLIST(pair, dbm)) { + const VALUE *ptr; Check_Type(pair, T_ARRAY); if (RARRAY_LEN(pair) < 2) { rb_raise(rb_eArgError, "pair must be [key, value]"); } - fgdbm_store(dbm, RARRAY_PTR(pair)[0], RARRAY_PTR(pair)[1]); + ptr = RARRAY_CONST_PTR(pair); + fgdbm_store(dbm, ptr[0], ptr[1]); return Qnil; } diff --git a/ext/io/console/console.c b/ext/io/console/console.c index b5aa1a371c..6716d32201 100644 --- a/ext/io/console/console.c +++ b/ext/io/console/console.c @@ -521,12 +521,14 @@ console_set_winsize(VALUE io, VALUE size) int newrow, newcol; #endif VALUE row, col, xpixel, ypixel; + const VALUE *sz; int fd; GetOpenFile(io, fptr); size = rb_Array(size); - rb_scan_args((int)RARRAY_LEN(size), RARRAY_PTR(size), "22", - &row, &col, &xpixel, &ypixel); + rb_check_arity(RARRAY_LENINT(size), 2, 4); + sz = RARRAY_CONST_PTR(size); + row = sz[0], col = sz[1], xpixel = sz[2], ypixel = sz[3]; fd = GetWriteFD(fptr); #if defined TIOCSWINSZ ws.ws_row = ws.ws_col = ws.ws_xpixel = ws.ws_ypixel = 0; diff --git a/ext/openssl/ossl_ocsp.c b/ext/openssl/ossl_ocsp.c index 00078e62df..197fcc9d47 100644 --- a/ext/openssl/ossl_ocsp.c +++ b/ext/openssl/ossl_ocsp.c @@ -682,7 +682,7 @@ ossl_ocspbres_add_status(VALUE self, VALUE cid, VALUE status, /* All ary's members should be X509Extension */ Check_Type(ext, T_ARRAY); for (i = 0; i < RARRAY_LEN(ext); i++) - OSSL_Check_Kind(RARRAY_PTR(ext)[i], cX509Ext); + OSSL_Check_Kind(RARRAY_CONST_PTR(ext)[i], cX509Ext); } error = 0; @@ -711,7 +711,7 @@ ossl_ocspbres_add_status(VALUE self, VALUE cid, VALUE status, sk_X509_EXTENSION_pop_free(single->singleExtensions, X509_EXTENSION_free); single->singleExtensions = NULL; for(i = 0; i < RARRAY_LEN(ext); i++){ - x509ext = DupX509ExtPtr(RARRAY_PTR(ext)[i]); + x509ext = DupX509ExtPtr(RARRAY_CONST_PTR(ext)[i]); if(!OCSP_SINGLERESP_add_ext(single, x509ext, -1)){ X509_EXTENSION_free(x509ext); error = 1; diff --git a/ext/openssl/ossl_ssl.c b/ext/openssl/ossl_ssl.c index a57cc06c46..a5c415fa1d 100644 --- a/ext/openssl/ossl_ssl.c +++ b/ext/openssl/ossl_ssl.c @@ -759,7 +759,7 @@ ossl_sslctx_setup(VALUE self) if(!NIL_P(val)){ if (RB_TYPE_P(val, T_ARRAY)) { for(i = 0; i < RARRAY_LEN(val); i++){ - client_ca = GetX509CertPtr(RARRAY_PTR(val)[i]); + client_ca = GetX509CertPtr(RARRAY_CONST_PTR(val)[i]); if (!SSL_CTX_add_client_CA(ctx, client_ca)){ /* Copies X509_NAME => FREE it. */ ossl_raise(eSSLError, "SSL_CTX_add_client_CA"); diff --git a/ext/openssl/ossl_x509cert.c b/ext/openssl/ossl_x509cert.c index 80a8f9527a..97db4b2b1d 100644 --- a/ext/openssl/ossl_x509cert.c +++ b/ext/openssl/ossl_x509cert.c @@ -668,13 +668,13 @@ ossl_x509_set_extensions(VALUE self, VALUE ary) Check_Type(ary, T_ARRAY); /* All ary's members should be X509Extension */ for (i=0; icert_info->extensions, X509_EXTENSION_free); x509->cert_info->extensions = NULL; for (i=0; icrl->revoked, X509_REVOKED_free); crl->crl->revoked = NULL; for (i=0; icrl->extensions, X509_EXTENSION_free); crl->crl->extensions = NULL; for (i=0; ireq_info->attributes, X509_ATTRIBUTE_free); req->req_info->attributes = NULL; for (i=0;iextensions, X509_EXTENSION_free); rev->extensions = NULL; for (i=0; i= 4) { - af = RARRAY_PTR(sa)[0]; - port = RARRAY_PTR(sa)[1]; - host = RARRAY_PTR(sa)[3]; + af = RARRAY_CONST_PTR(sa)[0]; + port = RARRAY_CONST_PTR(sa)[1]; + host = RARRAY_CONST_PTR(sa)[3]; if (NIL_P(host)) { - host = RARRAY_PTR(sa)[2]; + host = RARRAY_CONST_PTR(sa)[2]; } else { /* diff --git a/ext/tk/tcltklib.c b/ext/tk/tcltklib.c index 2906cb7281..fed21d3709 100644 --- a/ext/tk/tcltklib.c +++ b/ext/tk/tcltklib.c @@ -42,6 +42,9 @@ int rb_thread_check_trap_pending(void); #define RARRAY_PTR(s) (RARRAY(s)->ptr) #define RARRAY_LEN(s) (RARRAY(s)->len) #endif +#if !defined(RARRAY_CONST_PTR) +#define RARRAY_CONST_PTR(s) (const VALUE *)RARRAY_PTR(s) +#endif #ifdef OBJ_UNTRUST #define RbTk_OBJ_UNTRUST(x) do {OBJ_TAINT(x); OBJ_UNTRUST(x);} while (0) @@ -1889,15 +1892,15 @@ set_max_block_time(self, time) case T_BIGNUM: /* time is micro-second value */ divmod = rb_funcall(time, rb_intern("divmod"), 1, LONG2NUM(1000000)); - tcl_time.sec = NUM2LONG(RARRAY_PTR(divmod)[0]); - tcl_time.usec = NUM2LONG(RARRAY_PTR(divmod)[1]); + tcl_time.sec = NUM2LONG(RARRAY_CONST_PTR(divmod)[0]); + tcl_time.usec = NUM2LONG(RARRAY_CONST_PTR(divmod)[1]); break; case T_FLOAT: /* time is second value */ divmod = rb_funcall(time, rb_intern("divmod"), 1, INT2FIX(1)); - tcl_time.sec = NUM2LONG(RARRAY_PTR(divmod)[0]); - tcl_time.usec = (long)(NUM2DBL(RARRAY_PTR(divmod)[1]) * 1000000); + tcl_time.sec = NUM2LONG(RARRAY_CONST_PTR(divmod)[0]); + tcl_time.usec = (long)(NUM2DBL(RARRAY_CONST_PTR(divmod)[1]) * 1000000); default: { @@ -7210,7 +7213,7 @@ tk_funcall(func, argc, argv, obj) DUMP2("back from handler (current thread:%"PRIxVALUE")", current); /* get result & free allocated memory */ - ret = RARRAY_PTR(result)[0]; + ret = RARRAY_CONST_PTR(result)[0]; #if 0 /* use Tcl_EventuallyFree */ Tcl_EventuallyFree((ClientData)alloc_done, TCL_DYNAMIC); /* XXXXXXXX */ #else @@ -7694,7 +7697,7 @@ ip_eval(self, str) DUMP2("back from handler (current thread:%"PRIxVALUE")", current); /* get result & free allocated memory */ - ret = RARRAY_PTR(result)[0]; + ret = RARRAY_CONST_PTR(result)[0]; #if 0 /* use Tcl_EventuallyFree */ Tcl_EventuallyFree((ClientData)alloc_done, TCL_DYNAMIC); /* XXXXXXXX */ @@ -9193,7 +9196,7 @@ ip_invoke_with_position(argc, argv, obj, position) DUMP2("back from handler (current thread:%"PRIxVALUE")", current); /* get result & free allocated memory */ - ret = RARRAY_PTR(result)[0]; + ret = RARRAY_CONST_PTR(result)[0]; #if 0 /* use Tcl_EventuallyFree */ Tcl_EventuallyFree((ClientData)alloc_done, TCL_DYNAMIC); /* XXXXXXXX */ #else diff --git a/ext/tk/tkutil/tkutil.c b/ext/tk/tkutil/tkutil.c index 676581d641..2bfb6bf50a 100644 --- a/ext/tk/tkutil/tkutil.c +++ b/ext/tk/tkutil/tkutil.c @@ -37,6 +37,9 @@ static int rb_thread_critical; /* dummy */ #define RARRAY_PTR(s) (RARRAY(s)->ptr) #define RARRAY_LEN(s) (RARRAY(s)->len) #endif +#if !defined(RARRAY_CONST_PTR) +#define RARRAY_CONST_PTR(s) (const VALUE *)RARRAY_PTR(s) +#endif #if defined(HAVE_STRNDUP) && !defined(_GNU_SOURCE) extern char *strndup(const char* _ptr, size_t _len); @@ -334,8 +337,8 @@ ary2list(ary, enc_flag, self) /* size = RARRAY_LEN(ary); */ size = 0; for(idx = 0; idx < RARRAY_LEN(ary); idx++) { - if (RB_TYPE_P(RARRAY_PTR(ary)[idx], T_HASH)) { - size += 2 * RHASH_SIZE(RARRAY_PTR(ary)[idx]); + if (RB_TYPE_P(RARRAY_CONST_PTR(ary)[idx], T_HASH)) { + size += 2 * RHASH_SIZE(RARRAY_CONST_PTR(ary)[idx]); } else { size++; } @@ -343,7 +346,7 @@ ary2list(ary, enc_flag, self) dst = rb_ary_new2(size); for(idx = 0; idx < RARRAY_LEN(ary); idx++) { - val = RARRAY_PTR(ary)[idx]; + val = RARRAY_CONST_PTR(ary)[idx]; str_val = Qnil; switch(TYPE(val)) { case T_ARRAY: @@ -374,7 +377,7 @@ ary2list(ary, enc_flag, self) } size2 = RARRAY_LEN(val); for(idx2 = 0; idx2 < size2; idx2++) { - val2 = RARRAY_PTR(val)[idx2]; + val2 = RARRAY_CONST_PTR(val)[idx2]; switch(TYPE(val2)) { case T_ARRAY: str_val = ary2list(val2, enc_flag, self); @@ -435,7 +438,7 @@ ary2list(ary, enc_flag, self) if (RTEST(dst_enc) && !NIL_P(sys_enc)) { for(idx = 0; idx < RARRAY_LEN(dst); idx++) { - str_val = RARRAY_PTR(dst)[idx]; + str_val = RARRAY_CONST_PTR(dst)[idx]; if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) { str_val = rb_funcall(self, ID_toUTF8, 1, str_val); } else { @@ -488,7 +491,7 @@ ary2list2(ary, enc_flag, self) size = RARRAY_LEN(ary); dst = rb_ary_new2(size); for(idx = 0; idx < RARRAY_LEN(ary); idx++) { - val = RARRAY_PTR(ary)[idx]; + val = RARRAY_CONST_PTR(ary)[idx]; str_val = Qnil; switch(TYPE(val)) { case T_ARRAY: @@ -529,7 +532,7 @@ ary2list2(ary, enc_flag, self) if (RTEST(dst_enc) && !NIL_P(sys_enc)) { for(idx = 0; idx < RARRAY_LEN(dst); idx++) { - str_val = RARRAY_PTR(dst)[idx]; + str_val = RARRAY_CONST_PTR(dst)[idx]; if (rb_obj_respond_to(self, ID_toUTF8, Qtrue)) { str_val = rb_funcall(self, ID_toUTF8, 1, str_val); } else { @@ -571,27 +574,27 @@ assoc2kv(assoc, ary, self) len = RARRAY_LEN(assoc); for(i = 0; i < len; i++) { - pair = RARRAY_PTR(assoc)[i]; + pair = RARRAY_CONST_PTR(assoc)[i]; if (!RB_TYPE_P(pair, T_ARRAY)) { rb_ary_push(dst, key2keyname(pair)); continue; } switch(RARRAY_LEN(assoc)) { case 2: - rb_ary_push(dst, RARRAY_PTR(pair)[2]); + rb_ary_push(dst, RARRAY_CONST_PTR(pair)[2]); case 1: - rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0])); + rb_ary_push(dst, key2keyname(RARRAY_CONST_PTR(pair)[0])); case 0: continue; default: - rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0])); + rb_ary_push(dst, key2keyname(RARRAY_CONST_PTR(pair)[0])); val = rb_ary_new2(RARRAY_LEN(pair) - 1); for(j = 1; j < RARRAY_LEN(pair); j++) { - rb_ary_push(val, RARRAY_PTR(pair)[j]); + rb_ary_push(val, RARRAY_CONST_PTR(pair)[j]); } rb_ary_push(dst, val); @@ -619,27 +622,27 @@ assoc2kv_enc(assoc, ary, self) len = RARRAY_LEN(assoc); for(i = 0; i < len; i++) { - pair = RARRAY_PTR(assoc)[i]; + pair = RARRAY_CONST_PTR(assoc)[i]; if (!RB_TYPE_P(pair, T_ARRAY)) { rb_ary_push(dst, key2keyname(pair)); continue; } switch(RARRAY_LEN(assoc)) { case 2: - rb_ary_push(dst, get_eval_string_core(RARRAY_PTR(pair)[2], Qtrue, self)); + rb_ary_push(dst, get_eval_string_core(RARRAY_CONST_PTR(pair)[2], Qtrue, self)); case 1: - rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0])); + rb_ary_push(dst, key2keyname(RARRAY_CONST_PTR(pair)[0])); case 0: continue; default: - rb_ary_push(dst, key2keyname(RARRAY_PTR(pair)[0])); + rb_ary_push(dst, key2keyname(RARRAY_CONST_PTR(pair)[0])); val = rb_ary_new2(RARRAY_LEN(pair) - 1); for(j = 1; j < RARRAY_LEN(pair); j++) { - rb_ary_push(val, RARRAY_PTR(pair)[j]); + rb_ary_push(val, RARRAY_CONST_PTR(pair)[j]); } rb_ary_push(dst, get_eval_string_core(val, Qtrue, self)); @@ -661,7 +664,7 @@ push_kv(key, val, args) { volatile VALUE ary; - ary = RARRAY_PTR(args)[0]; + ary = RARRAY_CONST_PTR(args)[0]; #if 0 rb_ary_push(ary, key2keyname(key)); @@ -671,7 +674,7 @@ push_kv(key, val, args) if (val == TK_None) return ST_CHECK; - rb_ary_push(ary, get_eval_string_core(val, Qnil, RARRAY_PTR(args)[1])); + rb_ary_push(ary, get_eval_string_core(val, Qnil, RARRAY_CONST_PTR(args)[1])); return ST_CHECK; } @@ -702,20 +705,20 @@ push_kv_enc(key, val, args) { volatile VALUE ary; - ary = RARRAY_PTR(args)[0]; + ary = RARRAY_CONST_PTR(args)[0]; #if 0 rb_ary_push(ary, key2keyname(key)); if (val != TK_None) { rb_ary_push(ary, get_eval_string_core(val, Qtrue, - RARRAY_PTR(args)[1])); + RARRAY_CONST_PTR(args)[1])); } #endif rb_ary_push(ary, key2keyname(key)); if (val == TK_None) return ST_CHECK; - rb_ary_push(ary, get_eval_string_core(val, Qtrue, RARRAY_PTR(args)[1])); + rb_ary_push(ary, get_eval_string_core(val, Qtrue, RARRAY_CONST_PTR(args)[1])); return ST_CHECK; } @@ -1529,6 +1532,7 @@ cbsubst_table_setup(argc, argv, self) volatile VALUE longkey_inf; volatile VALUE proc_inf; VALUE inf; + const VALUE *infp; ID id; struct cbsubst_info *subst_inf; long idx, len; @@ -1559,15 +1563,16 @@ cbsubst_table_setup(argc, argv, self) */ len = RARRAY_LEN(key_inf); for(idx = 0; idx < len; idx++) { - inf = RARRAY_PTR(key_inf)[idx]; + inf = RARRAY_CONST_PTR(key_inf)[idx]; if (!RB_TYPE_P(inf, T_ARRAY)) continue; + infp = RARRAY_CONST_PTR(inf); - chr = NUM2CHR(RARRAY_PTR(inf)[0]); - subst_inf->type[chr] = NUM2CHR(RARRAY_PTR(inf)[1]); + chr = NUM2CHR(infp[0]); + subst_inf->type[chr] = NUM2CHR(infp[1]); subst_inf->full_subst_length += 3; - id = SYM2ID(RARRAY_PTR(inf)[2]); + id = SYM2ID(infp[2]); subst_inf->ivar[chr] = rb_intern_str(rb_sprintf("@%"PRIsVALUE, rb_id2str(id))); rb_attr(self, id, 1, 0, Qtrue); @@ -1582,27 +1587,28 @@ cbsubst_table_setup(argc, argv, self) */ len = RARRAY_LEN(longkey_inf); for(idx = 0; idx < len; idx++) { - inf = RARRAY_PTR(longkey_inf)[idx]; + inf = RARRAY_CONST_PTR(longkey_inf)[idx]; if (!RB_TYPE_P(inf, T_ARRAY)) continue; + infp = RARRAY_CONST_PTR(inf); chr = (unsigned char)(0x80 + idx); - subst_inf->keylen[chr] = RSTRING_LEN(RARRAY_PTR(inf)[0]); + subst_inf->keylen[chr] = RSTRING_LEN(infp[0]); #if HAVE_STRNDUP - subst_inf->key[chr] = strndup(RSTRING_PTR(RARRAY_PTR(inf)[0]), - RSTRING_LEN(RARRAY_PTR(inf)[0])); + subst_inf->key[chr] = strndup(RSTRING_PTR(infp[0]), + RSTRING_LEN(infp[0])); #else - subst_inf->key[chr] = malloc(RSTRING_LEN(RARRAY_PTR(inf)[0]) + 1); + subst_inf->key[chr] = malloc(RSTRING_LEN(infp[0]) + 1); if (subst_inf->key[chr]) { - strncpy(subst_inf->key[chr], RSTRING_PTR(RARRAY_PTR(inf)[0]), - RSTRING_LEN(RARRAY_PTR(inf)[0]) + 1); - subst_inf->key[chr][RSTRING_LEN(RARRAY_PTR(inf)[0])] = '\0'; + strncpy(subst_inf->key[chr], RSTRING_PTR(infp[0]), + RSTRING_LEN(infp[0]) + 1); + subst_inf->key[chr][RSTRING_LEN(infp[0])] = '\0'; } #endif - subst_inf->type[chr] = NUM2CHR(RARRAY_PTR(inf)[1]); + subst_inf->type[chr] = NUM2CHR(infp[1]); subst_inf->full_subst_length += (subst_inf->keylen[chr] + 2); - id = SYM2ID(RARRAY_PTR(inf)[2]); + id = SYM2ID(infp[2]); subst_inf->ivar[chr] = rb_intern_str(rb_sprintf("@%"PRIsVALUE, rb_id2str(id))); rb_attr(self, id, 1, 0, Qtrue); @@ -1616,7 +1622,7 @@ cbsubst_table_setup(argc, argv, self) len = RARRAY_LEN(proc_inf); for(idx = 0; idx < len; idx++) { VALUE type, proc; - inf = RARRAY_PTR(proc_inf)[idx]; + inf = RARRAY_CONST_PTR(proc_inf)[idx]; if (!RB_TYPE_P(inf, T_ARRAY)) continue; if (RARRAY_LEN(inf) < 2) continue; type = rb_ary_entry(inf, 0); @@ -1676,10 +1682,10 @@ cbsubst_scan_args(self, arg_key, val_ary) } if (NIL_P(proc)) { - rb_ary_push(dst, RARRAY_PTR(val_ary)[idx]); + rb_ary_push(dst, RARRAY_CONST_PTR(val_ary)[idx]); } else { rb_ary_push(dst, rb_funcall(proc, ID_call, 1, - RARRAY_PTR(val_ary)[idx])); + RARRAY_CONST_PTR(val_ary)[idx])); } } -- cgit v1.2.3