summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rw-r--r--ext/socket/mkconstants.rb9
-rw-r--r--ext/socket/rubysocket.h11
3 files changed, 22 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 9def8e1a0f..56a5272f07 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Jan 20 20:05:21 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/rubysocket.h (pseudo_AF_FTIP): moved from mkconstants.rb.
+
+ * ext/socket/mkconstants.rb: prepend header if -H is not given.
+
Tue Jan 20 17:50:00 2009 NARUSE, Yui <naruse@ruby-lang.org>
* ext/nkf/nkf-utf8/nkf.c (nkf_buf): use nkf_char.
diff --git a/ext/socket/mkconstants.rb b/ext/socket/mkconstants.rb
index bc574aa3e5..c7f599beb8 100644
--- a/ext/socket/mkconstants.rb
+++ b/ext/socket/mkconstants.rb
@@ -34,10 +34,7 @@ end
opt.parse!
-result = ''
-# workaround for NetBSD, OpenBSD and etc.
-result << "#define pseudo_AF_FTIP pseudo_AF_RTIP\n"
h = {}
DATA.each_line {|s|
@@ -258,7 +255,8 @@ def_intern('intern_protocol_family', /\APF_/)
def_intern('intern_socktype', /\ASOCK_/)
def_intern('intern_ipproto', /\AIPPROTO_/)
-result << ERB.new(<<'EOS', nil, '%').result(binding)
+result = ERB.new(<<'EOS', nil, '%').result(binding)
+/* autogenerated file */
<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| vardef }.join("\n") %>
@@ -276,6 +274,7 @@ init_constants(VALUE mConst)
EOS
header_result = ERB.new(<<'EOS', nil, '%').result(binding)
+/* autogenerated file */
<%= gen_const_decls %>
<%= NAME_TO_INT_DEFS.map {|decl, func| decl }.join("\n") %>
<%= INTERN_DEFS.map {|vardef, gen_hash, decl, func| decl }.join("\n") %>
@@ -285,6 +284,8 @@ if opt_H
File.open(opt_H, 'w') {|f|
f << header_result
}
+else
+ result = header_result + result
end
if opt_o
diff --git a/ext/socket/rubysocket.h b/ext/socket/rubysocket.h
index 365eab63da..6d4a70a95d 100644
--- a/ext/socket/rubysocket.h
+++ b/ext/socket/rubysocket.h
@@ -59,9 +59,20 @@
#include <fcntl.h>
#endif
#endif
+
#ifndef EWOULDBLOCK
#define EWOULDBLOCK EAGAIN
#endif
+
+/*
+ * workaround for NetBSD, OpenBSD and etc.
+ * The problem is since 4.4BSD-Lite.
+ * FreeBSD fix the problem at FreeBSD 2.2.0.
+ * NetBSD fix the problem at NetBSD 3.0 by kern/29624.
+ * OpenBSD fix the problem at OpenBSD 3.8.
+ */
+#define pseudo_AF_FTIP pseudo_AF_RTIP
+
#ifndef HAVE_GETADDRINFO
# include "addrinfo.h"
#endif