* ext/iconv/iconv.c (iconv_s_list): return encoding list if no block

is given.  [ruby-dev:23063]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6122 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2004-04-08 09:22:04 +00:00
parent 8586deca95
commit 51c8d62bff
2 changed files with 19 additions and 3 deletions

View File

@ -1,3 +1,8 @@
Thu Apr 8 18:22:00 2004 Nobuyoshi Nakada <nobu@ruby-lang.org>
* ext/iconv/iconv.c (iconv_s_list): return encoding list if no block
is given. [ruby-dev:23063]
Wed Apr 7 15:29:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org> Wed Apr 7 15:29:24 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
* pack.c (pack_pack): use NUM2INT() instead of num2i32(). * pack.c (pack_pack): use NUM2INT() instead of num2i32().

View File

@ -650,6 +650,7 @@ iconv_s_conv
struct iconv_name_list { struct iconv_name_list {
unsigned int namescount; unsigned int namescount;
const char *const *names; const char *const *names;
VALUE array;
}; };
static VALUE static VALUE
@ -669,6 +670,9 @@ list_iconv_i
for (i = 0; i < namescount; i++) { for (i = 0; i < namescount; i++) {
rb_ary_push(ary, rb_str_new2(names[i])); rb_ary_push(ary, rb_str_new2(names[i]));
} }
if (p->array) {
return rb_ary_push(p->array, ary);
}
return rb_yield(ary); return rb_yield(ary);
} }
@ -688,6 +692,7 @@ list_iconv
list.namescount = namescount; list.namescount = namescount;
list.names = names; list.names = names;
list.array = ((VALUE *)data)[1];
rb_protect(list_iconv_i, (VALUE)&list, state); rb_protect(list_iconv_i, (VALUE)&list, state);
return *state; return *state;
} }
@ -697,8 +702,14 @@ static VALUE
iconv_s_list _((void)) iconv_s_list _((void))
{ {
#ifdef HAVE_ICONVLIST #ifdef HAVE_ICONVLIST
int state = 0; int state;
iconvlist(list_iconv, &state); VALUE args[2];
args[1] = rb_block_given_p() ? 0 : rb_ary_new();
iconvlist(list_iconv, args);
state = *(int *)args;
if (state) rb_jump_tag(state);
if (args[1]) return args[1];
#else #else
rb_notimplement(); rb_notimplement();
#endif #endif