File 1274-Handle-built-in-protocol-aliases.patch of Package erlang

From 5ce721204addbf70872986b1537e5a78427c8a07 Mon Sep 17 00:00:00 2001
From: Raimo Niskanen <raimo@erlang.org>
Date: Fri, 11 Apr 2025 18:40:24 +0200
Subject: [PATCH 1/2] Handle built-in protocol aliases

---
 erts/preloaded/ebin/prim_socket.beam | Bin 15772 -> 15916 bytes
 erts/preloaded/src/prim_socket.erl   |  20 +++++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/erts/preloaded/src/prim_socket.erl b/erts/preloaded/src/prim_socket.erl
index 38d330cc22..e78714b8e5 100644
--- a/erts/preloaded/src/prim_socket.erl
+++ b/erts/preloaded/src/prim_socket.erl
@@ -179,7 +179,7 @@ put_supports_table(Tag, MkTable) ->
     Table =
         try nif_supports(Tag) of
             Data ->
-                maps:from_list(MkTable(Data))
+                merge_values(MkTable(Data))
         catch
             error : notsup ->
                 #{}
@@ -187,6 +187,24 @@ put_supports_table(Tag, MkTable) ->
     p_put(Tag, Table),
     Table.
 
+%% Like maps:from_list/1 the last duplicate key wins,
+%% except if both values are lists; append the second to the first.
+%%
+merge_values([]) -> #{};
+merge_values([{Key, Val} | L]) ->
+    M = merge_values(L),
+    case M of
+        #{ Key := Val2 } ->
+            if
+                is_list(Val), is_list(Val2) ->
+                    M#{ Key := Val ++ Val2 };
+                true ->
+                    M
+            end;
+        #{} ->
+            M#{ Key => Val }
+    end.
+
 %% ->
 %% [{Num, [Name, ...]}
 %%  {Name, Num} for all names]
-- 
2.43.0

openSUSE Build Service is sponsored by