File 0940-Don-t-use-protocol-name-aliases-for-socket-option-na.patch of Package erlang

From 0602b060d11bd1f1010c698975e6ece18b2d7bee Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Mon, 14 Apr 2025 16:49:37 +0200
Subject: [PATCH 2/2] Don't use protocol name aliases for socket option names

---
 erts/emulator/nifs/common/prim_socket_nif.c |   3 +-
 erts/preloaded/ebin/prim_socket.beam        | Bin 15916 -> 15820 bytes
 erts/preloaded/src/prim_socket.erl          |  69 +++++++-------------
 3 files changed, 26 insertions(+), 46 deletions(-)

diff --git a/erts/emulator/nifs/common/prim_socket_nif.c b/erts/emulator/nifs/common/prim_socket_nif.c
index aa889d4810..ac76306b80 100644
--- a/erts/emulator/nifs/common/prim_socket_nif.c
+++ b/erts/emulator/nifs/common/prim_socket_nif.c
@@ -5088,8 +5088,7 @@ ERL_NIF_TERM esock_supports_options(ErlNifEnv* env)
         }
         levels =
             MKC(env,
-                MKT2(env,
-                     esock_encode_level(env, levelP->level), options),
+                MKT3(env, *levelP->nameP, MKI(env, levelP->level), options),
                 levels);
     }
 
diff --git a/erts/preloaded/src/prim_socket.erl b/erts/preloaded/src/prim_socket.erl
index e78714b8e5..483d6591c3 100644
--- a/erts/preloaded/src/prim_socket.erl
+++ b/erts/preloaded/src/prim_socket.erl
@@ -164,15 +164,14 @@ on_load(Extra) when is_map(Extra) ->
     init().
 
 init() ->
-    PT =
-        put_supports_table(protocols,
-			   fun (Protocols) -> protocols_table(Protocols) end),
-    _ = put_supports_table(options,
-			   fun (Options) -> options_table(Options, PT) end),
-    _ = put_supports_table(ioctl_requests,
-			   fun (Requests) -> Requests end),
-    _ = put_supports_table(ioctl_flags, fun (Flags) -> Flags end),
-    _ = put_supports_table(msg_flags, fun (Flags) -> Flags end),
+    put_supports_table(protocols,
+                       fun (Protocols) -> protocols_table(Protocols) end),
+    put_supports_table(options,
+                       fun (Options) -> options_table(Options) end),
+    put_supports_table(ioctl_requests,
+                       fun (Requests) -> Requests end),
+    put_supports_table(ioctl_flags, fun (Flags) -> Flags end),
+    put_supports_table(msg_flags, fun (Flags) -> Flags end),
     ok.
 
 put_supports_table(Tag, MkTable) ->
@@ -184,8 +183,7 @@ put_supports_table(Tag, MkTable) ->
             error : notsup ->
                 #{}
         end,
-    p_put(Tag, Table),
-    Table.
+    p_put(Tag, Table).
 
 %% Like maps:from_list/1 the last duplicate key wins,
 %% except if both values are lists; append the second to the first.
@@ -219,41 +217,24 @@ protocols_table(Protocols, [], _Num) ->
     protocols_table(Protocols).
 
 %% ->
-%% [{{socket,Opt}, {socket,OptNum}} |
-%%  {{Level, Opt}, {LevelNum, OptNum}} for all Levels (protocol aliases)]
-options_table([], _PT) ->
+%% [{{socket,Opt}, {socket,OptNum} | undefined} |
+%%  {{Level, Opt}, {LevelNum, OptNum} | undefined}]
+options_table([]) ->
     [];
-options_table([{socket, LevelOpts} | Options], PT) ->
-    options_table(Options, PT, socket, LevelOpts, [socket]);
-options_table([{LevelNum, LevelOpts} | Options], PT) ->
-    Levels = maps:get(LevelNum, PT),
-    options_table(Options, PT, LevelNum, LevelOpts, Levels).
+options_table([{socket = Level, _LevelNum, LevelOpts} | Options]) ->
+    options_table(Options, Level, Level, LevelOpts);
+options_table([{Level, LevelNum, LevelOpts} | Options]) ->
+    options_table(Options, Level, LevelNum, LevelOpts).
 %%
-options_table(Options, PT, _Level, [], _Levels) ->
-    options_table(Options, PT);
-options_table(Options, PT, Level, [LevelOpt | LevelOpts], Levels) ->
-    LevelOptNum =
-        case LevelOpt of
-            {Opt, OptNum} ->
-                {Level,OptNum};
-            Opt when is_atom(Opt) ->
-                undefined
-        end,
-    options_table(
-      Options, PT, Level, LevelOpts, Levels,
-      Opt, LevelOptNum, Levels).
-%%
-options_table(
-  Options, PT, Level, LevelOpts, Levels,
-  _Opt, _LevelOptNum, []) ->
-    options_table(Options, PT, Level, LevelOpts, Levels);
-options_table(
-  Options, PT, Level, LevelOpts, Levels,
-  Opt, LevelOptNum, [L | Ls]) ->
-    [{{L,Opt}, LevelOptNum} |
-     options_table(
-       Options, PT, Level, LevelOpts, Levels,
-       Opt, LevelOptNum, Ls)].
+options_table(Options, _Level, _LevelNum, []) ->
+    options_table(Options);
+options_table(Options, Level, LevelNum, [LevelOpt | LevelOpts]) ->
+    [case LevelOpt of
+         {Opt, OptNum} ->
+             {{Level, Opt}, {LevelNum,OptNum}};
+         Opt when is_atom(Opt) ->
+             {{Level, Opt}, undefined}
+     end | options_table(Options, Level, LevelNum, LevelOpts)].
 
 %% ===========================================================================
 %% API for 'socket'
-- 
2.43.0

openSUSE Build Service is sponsored by