File 2622-Move-option-parsing-to-earlier-and-only-once.patch of Package erlang

From d86155f2d27a05dcb1495460013407eac58e94c8 Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Fri, 15 Aug 2025 16:10:59 +0200
Subject: [PATCH 2/3] Move option parsing to earlier and only once

---
 lib/kernel/src/inet_res.erl | 49 +++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 24 deletions(-)

diff --git a/lib/kernel/src/inet_res.erl b/lib/kernel/src/inet_res.erl
index 37da65c8da..04fe5c36ce 100644
--- a/lib/kernel/src/inet_res.erl
+++ b/lib/kernel/src/inet_res.erl
@@ -344,7 +344,8 @@ resolve(Name, Class, Type, Opts, Timeout) ->
     case nsdname(Name) of
 	{ok, Nm} ->
 	    Timer = inet:start_timer(Timeout),
-	    Res = res_query(Nm, Class, Type, Opts, Timer),
+	    Options = make_options(Opts),
+	    Res = res_query(Nm, Class, Type, Options, Timer),
 	    _ = inet:stop_timer(Timer),
 	    Res;
 	{error, _} = Error ->
@@ -642,7 +643,8 @@ gethostbyaddr_tm(IP, Opts, Timer) ->
                     Result;
                 {error, nxdomain} ->
                     %% Do a resolver lookup
-                    case res_query(Name, in, ?S_PTR, Opts, Timer) of
+                    Options = make_options(Opts),
+                    case res_query(Name, in, ?S_PTR, Options, Timer) of
                         {ok, Rec} ->
                             %% Process and cache DNS Record
                             inet_db:res_gethostbyaddr(Name, IP, Rec);
@@ -843,7 +845,8 @@ getbyname_tm(Name, Type, Opts, Timer) when is_list(Name) ->
                             {ok, HEnt};
 			_ ->
                             %% Do a resolver lookup
-                            res_getbyname(Name, Type, Opts, Timer)
+                            Options = make_options(Opts),
+                            res_getbyname(Name, Type, Options, Timer)
 		    end
 	    end;
 	false ->
@@ -894,24 +897,24 @@ type_p(Type) ->
 %% * For Name = "foo.bar"   try "foo.bar.dom1", "foo.bar.dom2", "foo.bar"
 %% That is to try Name as it is as a last resort if it is not absolute.
 %%
-res_getbyname(Name, Type, Opts, Timer) ->
+res_getbyname(Name, Type, Options, Timer) ->
     {EmbeddedDots, TrailingDot} = inet_parse:dots(Name),
     if
         TrailingDot ->
-	    res_getby_query(lists:droplast(Name), Type, Opts, Timer);
+	    res_getby_query(lists:droplast(Name), Type, Options, Timer);
 	EmbeddedDots =:= 0 ->
 	    res_getby_search(Name, inet_db:get_searchlist(),
-			     nxdomain, Type, Opts, Timer);
+			     nxdomain, Type, Options, Timer);
 	true ->
-	    case res_getby_query(Name, Type, Opts, Timer) of
+	    case res_getby_query(Name, Type, Options, Timer) of
 		{error,_Reason}=Error ->
 		    res_getby_search(Name, inet_db:get_searchlist(),
-				     Error, Type, Opts, Timer);
+				     Error, Type, Options, Timer);
 		Other -> Other
 	    end
     end.
 
-res_getby_search(Name, [Dom | Ds], _Reason, Type, Opts, Timer) ->
+res_getby_search(Name, [Dom | Ds], _Reason, Type, Options, Timer) ->
     QueryName =
         %% Join Name and Dom with a single dot.
         %% Allow Dom to be "." or "", but not to lead with ".".
@@ -925,17 +928,17 @@ res_getby_search(Name, [Dom | Ds], _Reason, Type, Opts, Timer) ->
             true ->
                 erlang:error({if_clause, Name, Dom})
         end,
-    case res_getby_query(QueryName, Type, Opts, Timer,
-			 inet_db:res_option(nameservers)) of
+    NSs = Options#options.nameservers,
+    case res_getby_query(QueryName, Type, Options, Timer, NSs) of
 	{ok, HEnt}         -> {ok, HEnt};
 	{error, NewReason} ->
-	    res_getby_search(Name, Ds, NewReason, Type, Opts, Timer)
+	    res_getby_search(Name, Ds, NewReason, Type, Options, Timer)
     end;
 res_getby_search(_Name, [], Reason, _, _, _) ->
     {error, Reason}.
 
-res_getby_query(Name, Type, Opts, Timer) ->
-    case res_query(Name, in, Type, Opts, Timer) of
+res_getby_query(Name, Type, Options, Timer) ->
+    case res_query(Name, in, Type, Options, Timer) of
 	{ok, Rec} ->
             %% Process and cache DNS Record
 	    inet_db:res_hostent_by_domain(Name, Type, Rec);
@@ -944,8 +947,8 @@ res_getby_query(Name, Type, Opts, Timer) ->
 	Error -> Error
     end.
 
-res_getby_query(Name, Type, Opts, Timer, NSs) ->
-    case res_query(Name, in, Type, Opts, Timer, NSs) of
+res_getby_query(Name, Type, Options, Timer, NSs) ->
+    case res_query(Name, in, Type, Options, Timer, NSs) of
 	{ok, Rec} ->
             %% Process and cache DNS Record
 	    inet_db:res_hostent_by_domain(Name, Type, Rec);
@@ -964,10 +967,9 @@ res_getby_query(Name, Type, Opts, Timer, NSs) ->
 
 
 %% Query first nameservers list then alt_nameservers list
-res_query(Name, Class, Type, Opts, Timer) ->
-    #q{options=#options{nameservers=NSs}}=Q =
-	make_query(Name, Class, Type, Opts),
-    case do_query(Q, NSs, Timer) of
+res_query(Name, Class, Type, Options, Timer) ->
+    Q = make_query(Name, Class, Type, Options),
+    case do_query(Q, Options#options.nameservers, Timer) of
 	{error,nxdomain}=Error ->
 	    res_query_alt(Q, Error, Timer);
 	{error,{nxdomain,_}}=Error ->
@@ -978,8 +980,8 @@ res_query(Name, Class, Type, Opts, Timer) ->
     end.
 
 %% Query just the argument nameservers list
-res_query(Name, Class, Type, Opts, Timer, NSs) ->
-    Q = make_query(Name, Class, Type, Opts),
+res_query(Name, Class, Type, Options, Timer, NSs) ->
+    Q = make_query(Name, Class, Type, Options),
     do_query(Q, NSs, Timer).
 
 res_query_alt(#q{options=#options{alt_nameservers=NSs}}=Q, Reply, Timer) ->
@@ -989,8 +991,7 @@ res_query_alt(#q{options=#options{alt_nameservers=NSs}}=Q, Reply, Timer) ->
 	    do_query(Q, NSs, Timer)
     end.
 
-make_query(Dname, Class, Type, Opts) ->
-    Options = make_options(Opts),
+make_query(Dname, Class, Type, Options) ->
     case Options#options.edns of
 	false ->
 	    #q{options=Options,
-- 
2.51.0

openSUSE Build Service is sponsored by