From 4f165a244cb23405ed7f607836098f180f1be08b Mon Sep 17 00:00:00 2001 From: Micael Karlberg Date: Thu, 17 May 2018 15:21:59 +0200 Subject: [socket-nif] More getopt Added guards and type specs for native getopt. --- erts/preloaded/src/socket.erl | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'erts') diff --git a/erts/preloaded/src/socket.erl b/erts/preloaded/src/socket.erl index f8aa75bf8f..a67a019b80 100644 --- a/erts/preloaded/src/socket.erl +++ b/erts/preloaded/src/socket.erl @@ -1424,7 +1424,7 @@ setopt(#socket{info = Info, ref = SockRef}, Level, Key, Value) -> Level :: integer(), Key :: {NativeOpt, ValueSize}, NativeOpt :: integer(), - ValueSize :: non_neg_integer(), + ValueSize :: int | bool | non_neg_integer(), Value :: term(), Reason :: term(). @@ -1437,7 +1437,7 @@ getopt(#socket{info = Info, ref = SockRef}, Level, Key) -> {EIsEncoded, ELevel} = enc_getopt_level(Level), EKey = enc_getopt_key(Level, Key, Domain, Type, Protocol), %% We may need to decode the value (for the same reason - %% we needed to encode the value for setopt). + %% we (may have) needed to encode the value for setopt). case nif_getopt(SockRef, EIsEncoded, ELevel, EKey) of ok -> ok; @@ -2020,7 +2020,8 @@ enc_sockopt_key(Level, Opt, set = _Dir, _D, _T, _P) enc_sockopt_key(Level, {NativeOpt, ValueSize} = Opt, get = _Dir, _D, _T, _P) when is_integer(Level) andalso is_integer(NativeOpt) andalso - is_integer(ValueSize) andalso (ValueSize >= 0) -> + ((is_integer(ValueSize) andalso (ValueSize >= 0)) orelse + ((ValueSize =:= int) orelse (ValueSize =:= bool))) -> Opt; enc_sockopt_key(Level, Opt, _Dir, _Domain, _Type, _Protocol) -> -- cgit v1.2.3