From 602615bf4559c9c2acd87676fef9cad3e25a2a6c Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 25 Sep 2026 17:14:03 +0900 Subject: [PATCH 1/3] win32/resolv: Cast method functions with RUBY_METHOD_FUNC GCC 15 in C23 mode reads `ANYARGS` as `(void)`, so the bare function pointers are rejected against Ruby headers that do not add the cast themselves, as happened with Ruby 3.1 on Windows. https://github.com/ruby/resolv/issues/92 Co-Authored-By: Claude Opus 5.5 --- ext/win32/resolv/resolv.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ext/win32/resolv/resolv.c b/ext/win32/resolv/resolv.c index 9150df5..00173e5 100644 --- a/ext/win32/resolv/resolv.c +++ b/ext/win32/resolv/resolv.c @@ -247,11 +247,11 @@ InitVM_resolv(void) reg_key_class = regkey; rb_undef_alloc_func(regkey); - rb_define_private_method(singl, "get_dns_server_list", get_dns_server_list, 0); - rb_define_private_method(singl, "tcpip_params", tcpip_params_open, 0); - rb_define_method(regkey, "open", reg_open, 1); - rb_define_method(regkey, "each_key", reg_each_key, 0); - rb_define_method(regkey, "value", reg_value, 1); + rb_define_private_method(singl, "get_dns_server_list", RUBY_METHOD_FUNC(get_dns_server_list), 0); + rb_define_private_method(singl, "tcpip_params", RUBY_METHOD_FUNC(tcpip_params_open), 0); + rb_define_method(regkey, "open", RUBY_METHOD_FUNC(reg_open), 1); + rb_define_method(regkey, "each_key", RUBY_METHOD_FUNC(reg_each_key), 0); + rb_define_method(regkey, "value", RUBY_METHOD_FUNC(reg_value), 1); } void From 94fa14dcb5e0e43b6bc2cde4cdd088dc8397679d Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 25 Sep 2026 17:15:30 +0900 Subject: [PATCH 2/3] Fix the Win32::Resolv guard in test_win32_config.rb `Win32::Resolve` is never defined, so these tests were not run anywhere. Co-Authored-By: Claude Opus 5.5 --- test/resolv/test_win32_config.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/resolv/test_win32_config.rb b/test/resolv/test_win32_config.rb index 6167af6..ced130c 100644 --- a/test/resolv/test_win32_config.rb +++ b/test/resolv/test_win32_config.rb @@ -3,7 +3,7 @@ require 'test/unit' require 'resolv' -if defined?(Win32::Resolve) +if defined?(Win32::Resolv) class TestWin32Config < Test::Unit::TestCase def test_get_item_property_string # Test reading a string registry value From 971a36ee720b4e07720add9d9668d10a5d0ac9a7 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Sat, 26 Sep 2026 07:16:36 +0900 Subject: [PATCH 3/3] Skip TestWin32Config without the win32/resolv extension JRuby on Windows loads its bundled `win32/resolv`, which has no `tcpip_params`, so two of these tests raised NoMethodError there. Co-Authored-By: Claude Opus 5.5 --- test/resolv/test_win32_config.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/resolv/test_win32_config.rb b/test/resolv/test_win32_config.rb index ced130c..9e5c115 100644 --- a/test/resolv/test_win32_config.rb +++ b/test/resolv/test_win32_config.rb @@ -3,7 +3,8 @@ require 'test/unit' require 'resolv' -if defined?(Win32::Resolv) +# JRuby loads its bundled win32/resolv, which lacks the registry access of the extension. +if defined?(Win32::Resolv) && Win32::Resolv.respond_to?(:tcpip_params, true) class TestWin32Config < Test::Unit::TestCase def test_get_item_property_string # Test reading a string registry value