From 60fc255995b784764db3c52146e1cda83246a851 Mon Sep 17 00:00:00 2001 From: Andrew Clayton Date: Tue, 21 Jan 2025 19:15:02 +0000 Subject: [PATCH] ruby: Fix build failures with Ruby 3.4 Ruby 3.4 started to actually mark some deprecated functions as *deprecated* now resulting in compiler warnings (which due to -Werror we treat as errors and thus the build fails). The *new* functions were actually introduced back in Ruby 1.9.2, so have been around for quite some time. We claim support for Ruby 2.0 onwards so this is more than fine. The new API replaces the old 'mark' and 'free' parameters with a struct that allows for more fine tuning/configuration. We never made use of either of those parameters and so the only member of this struct we *need* to set is the structure wrapper name. Ruby pytests still pass after this change... Closes: https://github.com/nginx/unit/issues/1525 Link: Signed-off-by: Andrew Clayton --- src/ruby/nxt_ruby_stream_io.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/ruby/nxt_ruby_stream_io.c b/src/ruby/nxt_ruby_stream_io.c index 4ef69cee1..4182a35ba 100644 --- a/src/ruby/nxt_ruby_stream_io.c +++ b/src/ruby/nxt_ruby_stream_io.c @@ -21,6 +21,9 @@ static VALUE nxt_ruby_stream_io_flush(VALUE obj); static VALUE nxt_ruby_stream_io_close(VALUE obj); +static const rb_data_type_t nxt_rctx_dt = { .wrap_struct_name = "rctx" }; + + VALUE nxt_ruby_stream_io_input_init(void) { @@ -73,7 +76,7 @@ nxt_ruby_stream_io_new(VALUE class, VALUE arg) { VALUE self; - self = Data_Wrap_Struct(class, 0, 0, (void *) (uintptr_t) arg); + self = TypedData_Wrap_Struct(class, &nxt_rctx_dt, (void *)(uintptr_t)arg); rb_obj_call_init(self, 0, NULL); @@ -96,7 +99,7 @@ nxt_ruby_stream_io_gets(VALUE obj) nxt_ruby_ctx_t *rctx; nxt_unit_request_info_t *req; - Data_Get_Struct(obj, nxt_ruby_ctx_t, rctx); + TypedData_Get_Struct(obj, nxt_ruby_ctx_t, &nxt_rctx_dt, rctx); req = rctx->req; if (req->content_length == 0) { @@ -152,7 +155,7 @@ nxt_ruby_stream_io_read(VALUE obj, VALUE args) long copy_size, u_size; nxt_ruby_ctx_t *rctx; - Data_Get_Struct(obj, nxt_ruby_ctx_t, rctx); + TypedData_Get_Struct(obj, nxt_ruby_ctx_t, &nxt_rctx_dt, rctx); copy_size = rctx->req->content_length; @@ -208,7 +211,7 @@ nxt_ruby_stream_io_puts(VALUE obj, VALUE args) return Qnil; } - Data_Get_Struct(obj, nxt_ruby_ctx_t, rctx); + TypedData_Get_Struct(obj, nxt_ruby_ctx_t, &nxt_rctx_dt, rctx); nxt_ruby_stream_io_s_write(rctx, RARRAY_PTR(args)[0]); @@ -226,7 +229,7 @@ nxt_ruby_stream_io_write(VALUE obj, VALUE args) return Qnil; } - Data_Get_Struct(obj, nxt_ruby_ctx_t, rctx); + TypedData_Get_Struct(obj, nxt_ruby_ctx_t, &nxt_rctx_dt, rctx); len = nxt_ruby_stream_io_s_write(rctx, RARRAY_PTR(args)[0]);