summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--ext/socket/mkconstants.rb31
-rw-r--r--ext/socket/socket.c8
3 files changed, 29 insertions, 17 deletions
diff --git a/ChangeLog b/ChangeLog
index 0dde7a992c..224f4111a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Fri Jan 2 17:20:31 2009 Tanaka Akira <akr@fsij.org>
+
+ * ext/socket/mkconstants.rb: use ID in the values of
+ family_to_str_hash. family_to_str returns a VALUE.
+
+ * ext/socket/socket.c (ipaddr): follow family_to_str change.
+
Fri Jan 2 17:01:51 2009 Tanaka Akira <akr@fsij.org>
* ext/socket/mkconstants.rb: refactored to gather stringizer
diff --git a/ext/socket/mkconstants.rb b/ext/socket/mkconstants.rb
index a90171277e..83efde1cd4 100644
--- a/ext/socket/mkconstants.rb
+++ b/ext/socket/mkconstants.rb
@@ -121,31 +121,36 @@ ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_name_to_int(str_var, len_var,
}
EOS
+def reverse_each_name_with_prefix_optional(pat, prefix_pat)
+ reverse_each_name(pat) {|n|
+ yield n, n
+ }
+ if prefix_pat
+ reverse_each_name(pat) {|n|
+ next if prefix_pat !~ n
+ yield n, $'
+ }
+ end
+end
+
+
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_hash(hash_var, pat, prefix_pat)")
<%=hash_var%> = st_init_numtable();
-% reverse_each_name(pat) {|n|
+% reverse_each_name_with_prefix_optional(pat, prefix_pat) {|n,s|
#ifdef <%=n%>
- st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)<%=c_str n%>);
+ st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)rb_intern2(<%=c_str s%>, <%=s.bytesize%>));
#endif
% }
-% if prefix_pat
-% reverse_each_name(pat) {|n|
-% next if prefix_pat !~ n
-#ifdef <%=n%>
- st_insert(<%=hash_var%>, (st_data_t)<%=n%>, (st_data_t)<%=c_str $'%>);
-#endif
-% }
-% end
EOS
ERB.new(<<'EOS', nil, '%').def_method(Object, "gen_int_to_name_func(func_name, hash_var)")
-static char *
+static VALUE
<%=func_name%>(int val)
{
st_data_t name;
if (st_lookup(<%=hash_var%>, (st_data_t)val, &name))
- return (char*)name;
- return NULL;
+ return rb_id2str((ID)name);
+ return Qnil;
}
EOS
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index b50747a5e1..76cb4ae045 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -1061,11 +1061,11 @@ ipaddr(struct sockaddr *sockaddr, int norevlookup)
VALUE ary;
int error;
char hbuf[1024], pbuf[1024];
- char *name;
- name = family_to_str(sockaddr->sa_family);
- if (name)
- family = rb_str_new2(name);
+ family = family_to_str(sockaddr->sa_family);
+ if (!NIL_P(family)) {
+ family = rb_str_dup(family);
+ }
else {
sprintf(pbuf, "unknown:%d", sockaddr->sa_family);
family = rb_str_new2(pbuf);