File 2530-ssh-Add-delete_options-function-and-macro.patch of Package erlang

From 07e27685ce12e38db14feb0e3adb34e7c1a78903 Mon Sep 17 00:00:00 2001
From: Hans Nilsson <hans@erlang.org>
Date: Tue, 11 May 2021 15:30:07 +0200
Subject: [PATCH 1/2] ssh: Add delete_options function and macro

---
 lib/ssh/src/ssh.hrl         |  1 +
 lib/ssh/src/ssh_options.erl | 24 ++++++++++++++++++++----
 2 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl
index 33f6833830..e37a14a156 100644
--- a/lib/ssh/src/ssh.hrl
+++ b/lib/ssh/src/ssh.hrl
@@ -117,6 +117,7 @@
 
 -define(do_del_opt(C,K,O),  ssh_options:delete_key(C,K,O, ?MODULE,?LINE)).
 -define(DELETE_INTERNAL_OPT(Key,Opts),  ?do_del_opt(internal_options,Key,Opts) ).
+-define(DELETE_OPT(KeyOrKeys,Opts),     ?do_del_opt(user_options,KeyOrKeys,Opts)     ).
 
 
 %% Types
diff --git a/lib/ssh/src/ssh_options.erl b/lib/ssh/src/ssh_options.erl
index b5b0a9d2d8..71d51be7db 100644
--- a/lib/ssh/src/ssh_options.erl
+++ b/lib/ssh/src/ssh_options.erl
@@ -134,10 +134,26 @@ put_socket_value(A, SockOpts) when is_atom(A) ->
 -spec delete_key(option_class(), option_key(), options(),
                  atom(), non_neg_integer()) -> options().
 
-delete_key(internal_options, Key, Opts, _CallerMod, _CallerLine) when is_map(Opts) ->
-    InternalOpts = maps:get(internal_options,Opts),
-    Opts#{internal_options := maps:remove(Key, InternalOpts)}.
-        
+delete_key(user_options, Key, Opts, _CallerMod, _CallerLine) when is_map(Opts) ->
+   if
+       is_list(Key) ->
+           lists:foldl(fun maps:remove/2, Opts, Key);
+       true ->
+           maps:remove(Key, Opts)
+   end;
+
+delete_key(Class, Key, Opts, _CallerMod, _CallerLine) when is_map(Opts) andalso
+                                                           (Class == socket_options orelse
+                                                            Class == internal_options) ->
+    Opts#{Class := 
+              if
+                  is_list(Key) ->
+                      lists:foldl(fun maps:remove/2, maps:get(Class,Opts), Key);
+                  true ->
+                      maps:remove(Key, maps:get(Class,Opts))
+              end
+         }.
+
 
 %%%================================================================
 %%%
-- 
2.26.2

openSUSE Build Service is sponsored by