diff options
author | Tomas Abrahamsson <[email protected]> | 2012-05-29 21:46:32 +0200 |
---|---|---|
committer | Tomas Abrahamsson <[email protected]> | 2012-08-16 01:48:04 +0200 |
commit | 2e3852b6942d4bf4eab909b501b7085d5ccd0e68 (patch) | |
tree | 9a8b240fe2da18460b3b8b4af0147b3c76bc20ae /erts/emulator/drivers | |
parent | 9d3bb79a1bec07706de46a67a001269dbbada293 (diff) | |
download | otp-2e3852b6942d4bf4eab909b501b7085d5ccd0e68.tar.gz otp-2e3852b6942d4bf4eab909b501b7085d5ccd0e68.tar.bz2 otp-2e3852b6942d4bf4eab909b501b7085d5ccd0e68.zip |
Add checks for in6addr_any and in6addr_loopback
These variables are normally declared by <netinet/in.h>,
but for instance not on Windows 7, SDK 7.1.
Work around that by using IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT
if present, fallback to using :: and ::1.
Diffstat (limited to 'erts/emulator/drivers')
-rw-r--r-- | erts/emulator/drivers/common/inet_drv.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/erts/emulator/drivers/common/inet_drv.c b/erts/emulator/drivers/common/inet_drv.c index 9f84329dd8..7f3b3323f5 100644 --- a/erts/emulator/drivers/common/inet_drv.c +++ b/erts/emulator/drivers/common/inet_drv.c @@ -1228,6 +1228,27 @@ struct erl_drv_entry inet_driver_entry = NULL, }; +#if HAVE_IN6 +# if ! defined(HAVE_IN6ADDR_ANY) || ! HAVE_IN6ADDR_ANY +# if HAVE_DECL_IN6ADDR_ANY_INIT +static const struct in6_addr in6addr_any = { { IN6ADDR_ANY_INIT } }; +# else +static const struct in6_addr in6addr_any = + { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } }; +# endif /* HAVE_IN6ADDR_ANY_INIT */ +# endif /* ! HAVE_DECL_IN6ADDR_ANY */ + +# if ! defined(HAVE_IN6ADDR_LOOPBACK) || ! HAVE_IN6ADDR_LOOPBACK +# if HAVE_DECL_IN6ADDR_LOOPBACK_INIT +static const struct in6_addr in6addr_loopback = + { { IN6ADDR_LOOPBACK_INIT } }; +# else +static const struct in6_addr in6addr_loopback = + { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } }; +# endif /* HAVE_IN6ADDR_LOOPBACk_INIT */ +# endif /* ! HAVE_DECL_IN6ADDR_LOOPBACK */ +#endif /* HAVE_IN6 */ + /* XXX: is this a driver interface function ??? */ void erl_exit(int n, char*, ...); |