]> granicus.if.org Git - ejabberd/commitdiff
Compatibility with R17 in mod_block_strangers
authorAlexey Shchepin <alexey@process-one.net>
Mon, 23 Jan 2017 16:04:22 +0000 (19:04 +0300)
committerAlexey Shchepin <alexey@process-one.net>
Mon, 23 Jan 2017 16:04:22 +0000 (19:04 +0300)
rebar.config
src/mod_block_strangers.erl

index cc04c86d0b1f878e12918dbdd488179c64e17c3a..7e9fe145efb07c2f2c514eb397024678b3667660 100644 (file)
@@ -88,6 +88,7 @@
             {if_var_true, elixir, {d, 'ELIXIR_ENABLED'}},
             {if_var_true, erlang_deprecated_types, {d, 'ERL_DEPRECATED_TYPES'}},
            {if_version_above, "18", {d, 'STRONG_RAND_BYTES'}},
+           {if_version_above, "17", {d, 'GB_SETS_ITERATOR_FROM'}},
             {if_var_true, hipe, native},
             {src_dirs, [asn1, src,
                         {if_var_true, tools, tools},
index 383848724e36563eb77658b2e3e7e104cd1ea578..56fddd093aa22bb6e578877f2a993e64a9108623 100644 (file)
@@ -92,11 +92,30 @@ filter_packet(Acc) ->
     Acc.
 
 sets_bare_member({U, S, <<"">>} = LBJID, Set) ->
-    case ?SETS:next(?SETS:iterator_from(LBJID, Set)) of
+    case ?SETS:next(sets_iterator_from(LBJID, Set)) of
         {{U, S, _}, _} -> true;
         _ -> false
     end.
 
+-ifdef(GB_SETS_ITERATOR_FROM).
+sets_iterator_from(Element, Set) ->
+    ?SETS:iterator_from(Element, Set).
+-else.
+%% Copied from gb_sets.erl
+%% TODO: Remove after dropping R17 support
+sets_iterator_from(S, {_, T}) ->
+    iterator_from(S, T, []).
+
+iterator_from(S, {K, _, T}, As) when K < S ->
+    iterator_from(S, T, As);
+iterator_from(_, {_, nil, _} = T, As) ->
+    [T | As];
+iterator_from(S, {_, L, _} = T, As) ->
+    iterator_from(S, L, [T | As]);
+iterator_from(_, nil, As) ->
+    As.
+-endif.
+
 
 depends(_Host, _Opts) ->
     [].