aboutsummaryrefslogtreecommitdiffstats
path: root/ext
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-14 14:24:42 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-05-14 14:24:42 +0000
commit5ec5c6d52c69517d97cddd5daeb0b5c9af80ff81 (patch)
tree55bceed1296f72beaaa023ce046e4c08d5cc44c0 /ext
parentb6decf289fb90e579733ed29571f0870c7a7c169 (diff)
downloadruby-5ec5c6d52c69517d97cddd5daeb0b5c9af80ff81.tar.gz
socket: fix build error and warnings on mingw
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@40738 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext')
-rw-r--r--ext/socket/extconf.rb15
-rw-r--r--ext/socket/ifaddr.c4
-rw-r--r--ext/socket/rubysocket.h7
3 files changed, 25 insertions, 1 deletions
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 : \