From 46d6af3a9ca883ac2b68f11f8e2ad23e494510be Mon Sep 17 00:00:00 2001 From: naruse Date: Wed, 5 Dec 2007 16:04:12 +0000 Subject: * ext/iconv/iconv.c (iconv_s_list): support NetBSD/Citrus iconv. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14115 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/iconv/iconv.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'ext/iconv/iconv.c') diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c index 844b792208..fbbca7e3b9 100644 --- a/ext/iconv/iconv.c +++ b/ext/iconv/iconv.c @@ -741,6 +741,24 @@ iconv_s_list(void) state = *(int *)args; if (state) rb_jump_tag(state); if (args[1]) return args[1]; +#elif defined(HAVE___ICONV_FREE_LIST) + char **list; + size_t sz, i; + VALUE ary; + + if (__iconv_get_list(&list, &sz)) return Qnil; + + ary = rb_ary_new2(sz); + for (i = 0; i < sz; i++) { + rb_ary_push(ary, rb_str_new2(list[i])); + } + __iconv_free_list(list, sz); + + if (!rb_block_given_p()) + return ary; + for (i = 0; i < RARRAY_LEN(ary); i++) { + rb_yield(RARRAY_PTR(ary)[i]); + } #else rb_notimplement(); #endif -- cgit v1.2.3