diff --git a/contrib/ruby/ext/trilogy-ruby/cext.c b/contrib/ruby/ext/trilogy-ruby/cext.c index 54dc8168..43840fe7 100644 --- a/contrib/ruby/ext/trilogy-ruby/cext.c +++ b/contrib/ruby/ext/trilogy-ruby/cext.c @@ -31,13 +31,12 @@ struct trilogy_ctx { trilogy_conn_t conn; char server_version[TRILOGY_SERVER_VERSION_SIZE + 1]; unsigned int query_flags; - VALUE encoding; + rb_encoding *encoding; }; static void mark_trilogy(void *ptr) { struct trilogy_ctx *ctx = ptr; - rb_gc_mark(ctx->encoding); } static void free_trilogy(void *ptr) @@ -454,7 +453,7 @@ static VALUE rb_trilogy_connect(VALUE self, VALUE encoding, VALUE charset, VALUE trilogy_handshake_t handshake; VALUE val; - RB_OBJ_WRITE(self, &ctx->encoding, encoding); + ctx->encoding = rb_to_encoding(encoding); connopt.encoding = NUM2INT(charset); Check_Type(opts, T_HASH); @@ -811,10 +810,10 @@ static VALUE read_query_response(VALUE vargs) } } -#ifdef HAVE_RB_INTERNED_STR - VALUE column_name = rb_interned_str(column.name, column.name_len); +#ifdef HAVE_RB_ENC_INTERNED_STR + VALUE column_name = rb_enc_interned_str(column.name, column.name_len, ctx->encoding); #else - VALUE column_name = rb_str_new(column.name, column.name_len); + VALUE column_name = rb_enc_str_new(column.name, column.name_len, ctx->encoding); OBJ_FREEZE(column_name); #endif @@ -922,7 +921,7 @@ static VALUE rb_trilogy_query(VALUE self, VALUE query) struct trilogy_ctx *ctx = get_open_ctx(self); StringValue(query); - query = rb_str_export_to_enc(query, rb_to_encoding(ctx->encoding)); + query = rb_str_export_to_enc(query, ctx->encoding); int rc = trilogy_query_send(&ctx->conn, RSTRING_PTR(query), RSTRING_LEN(query)); diff --git a/contrib/ruby/ext/trilogy-ruby/extconf.rb b/contrib/ruby/ext/trilogy-ruby/extconf.rb index f618ef21..d23a96c3 100644 --- a/contrib/ruby/ext/trilogy-ruby/extconf.rb +++ b/contrib/ruby/ext/trilogy-ruby/extconf.rb @@ -16,6 +16,6 @@ have_library("crypto", "CRYPTO_malloc") have_library("ssl", "SSL_new") -have_func("rb_interned_str", "ruby.h") +have_func("rb_enc_interned_str", "ruby.h") create_makefile "trilogy/cext"