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