diff options
-rw-r--r-- | ChangeLog | 12 | ||||
-rw-r--r-- | ext/socket/extconf.rb | 15 | ||||
-rw-r--r-- | ext/socket/ifaddr.c | 4 | ||||
-rw-r--r-- | ext/socket/rubysocket.h | 7 |
4 files changed, 37 insertions, 1 deletions
@@ -1,3 +1,15 @@ +Tue May 14 23:24:31 2013 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * ext/socket/extconf.rb: check for if_nametoindex() for + i686-w64-mingw32, and check for declarations of if_indextoname() and + if_nametoindex(). + + * ext/socket/ifaddr.c (ifaddr_ifindex): not-implement unless + if_nametoindex() is available. + + * ext/socket/rubysocket.h: declare if_indextoname() and + if_nametoindex() if available but not declared. + Tue May 14 19:58:17 2013 CHIKANAGA Tomoyuki <nagachika@ruby-lang.org> * ext/dl/lib/dl/func.rb (DL::Function#call): check tainted when diff --git a/ext/socket/extconf.rb b/ext/socket/extconf.rb index 88e7366e37..458871fbd9 100644 --- a/ext/socket/extconf.rb +++ b/ext/socket/extconf.rb @@ -421,7 +421,20 @@ EOF have_func("getpeerucred(0, (ucred_t **)NULL)", headers) # SunOS - have_func('if_indextoname(0, "")', headers) + have_func_decl = proc do |name, headers| + if !checking_for("declaration of #{name}()") {!%w[int void].all? {|ret| try_compile(<<EOF)}} +#{cpp_include(headers)} +#{ret} #{name}(void); +EOF + $defs << "-DNEED_#{name.tr_cpp}_DECL" + end + end + if have_func('if_indextoname(0, "")', headers) + have_func_decl["if_indextoname"] + end + if have_func('if_nametoindex("")', headers) + have_func_decl["if_nametoindex"] + end have_func("hsterror", headers) have_func('getipnodebyname("", 0, 0, (int *)0)', headers) # RFC 2553 diff --git a/ext/socket/ifaddr.c b/ext/socket/ifaddr.c index 446fe20546..e5eb48bf2c 100644 --- a/ext/socket/ifaddr.c +++ b/ext/socket/ifaddr.c @@ -135,6 +135,7 @@ ifaddr_name(VALUE self) * Returns the interface index of _ifaddr_. */ +#ifdef HAVE_IF_NAMETOINDEX static VALUE ifaddr_ifindex(VALUE self) { @@ -146,6 +147,9 @@ ifaddr_ifindex(VALUE self) } return UINT2NUM(ifindex); } +#else +#define ifaddr_ifindex rb_f_notimplement +#endif /* * call-seq: diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h index 7b1d43afac..97c02fc410 100644 --- a/ext/socket/rubysocket.h +++ b/ext/socket/rubysocket.h @@ -106,6 +106,13 @@ typedef int socklen_t; #endif +#ifdef NEED_IF_INDEXTONAME_DECL +char *if_indextoname(unsigned int, char *); +#endif +#ifdef NEED_IF_NAMETOINDEX_DECL +unsigned int if_nametoindex(const char *); +#endif + #define SOCKLEN_MAX \ (0 < (socklen_t)-1 ? \ ~(socklen_t)0 : \ |