Skip to content

Commit

Permalink
device open: return error instead of an exception
Browse files Browse the repository at this point in the history
When opening the character device, if an error occurs, return the
error to the caller rather than throwing an exception.
  • Loading branch information
msantos committed Jun 19, 2011
1 parent cd6804c commit 6375824
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
9 changes: 7 additions & 2 deletions src/tunctl_darwin.erl
Expand Up @@ -56,15 +56,20 @@ create(<<>>, Opt) ->

%% Ignore the options for now
create(Ifname, Opt) when byte_size(Ifname) < ?IFNAMSIZ, is_list(Opt) ->
{ok, FD} = procket:dev(binary_to_list(Ifname)),
case procket:dev(binary_to_list(Ifname)) of
{ok, FD} ->
create_1(FD, Ifname, Opt);
Error ->
Error
end.

create_1(FD, Ifname, Opt) ->
case proplists:get_bool(tap_pi, Opt) of
true ->
ok = tunctl:ioctl(FD, ?TUNSIFHEAD, 1);
false ->
ok
end,

{ok, FD, Ifname}.


Expand Down
20 changes: 14 additions & 6 deletions src/tunctl_linux.erl
Expand Up @@ -54,13 +54,21 @@
create(<<>>, Opt) ->
create(<<0:(15*8)>>, Opt);
create(Ifname, Opt) when byte_size(Ifname) < ?IFNAMSIZ, is_list(Opt) ->
{ok, FD} = procket:dev(?TUNDEV),
Flag = lists:foldl(fun(N, F) -> F bor flag(N) end, 0, Opt),
Result = procket:ioctl(FD, ?TUNSETIFF,
<<Ifname/binary, 0:((15*8) - (byte_size(Ifname)*8)), 0:8, % ifrn_name[IFNAMSIZ]: interface name
Flag:2/native-signed-integer-unit:8, % ifru_flags
0:(14*8)>>),
case procket:dev(?TUNDEV) of
{ok, FD} ->
create_1(FD, Ifname, Opt);
Error ->
Error
end.

create_1(FD, Ifname, Opt) ->
Flag = lists:foldl(fun(N, F) -> F bor flag(N) end, 0, Opt),
Result = procket:ioctl(FD, ?TUNSETIFF, <<
Ifname/binary,
0:((15*8) - (byte_size(Ifname)*8)), 0:8, % ifrn_name[IFNAMSIZ]: interface name
Flag:2/native-signed-integer-unit:8, % ifru_flags
0:(14*8)
>>),
case Result of
{ok, Dev} ->
{ok, FD, hd(binary:split(Dev, <<0>>))};
Expand Down

0 comments on commit 6375824

Please sign in to comment.