From e76b1a11ca8eace6ee592722255195e2fe02ecd5 Mon Sep 17 00:00:00 2001 From: usa Date: Fri, 26 Sep 2008 02:07:19 +0000 Subject: [PATCH] * transcode.c, include/ruby/encoding.c (rb_transcode_convertible): new function. checking the existance of converter. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 5 +++++ include/ruby/encoding.h | 1 + transcode.c | 14 ++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/ChangeLog b/ChangeLog index b6b1f219e0..ff7ca9c1cf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Sep 26 11:05:41 2008 NAKAMURA Usaku + + * transcode.c, include/ruby/encoding.c (rb_transcode_convertible): + new function. checking the existance of converter. + Fri Sep 26 10:35:50 2008 Nobuyoshi Nakada * variable.c (global_variable, struct trace_var): made function diff --git a/include/ruby/encoding.h b/include/ruby/encoding.h index 2c7f105ec3..b6ac57418c 100644 --- a/include/ruby/encoding.h +++ b/include/ruby/encoding.h @@ -209,6 +209,7 @@ typedef enum { typedef struct rb_econv_t rb_econv_t; VALUE rb_str_transcode(VALUE str, VALUE to, int ecflags, VALUE ecopts); +int rb_transcode_convertible(const char* from_encoding, const char* to_encoding); int rb_econv_prepare_opts(VALUE opthash, VALUE *ecopts); diff --git a/transcode.c b/transcode.c index 26c57d039d..1f0909cd3f 100644 --- a/transcode.c +++ b/transcode.c @@ -2839,6 +2839,20 @@ econv_s_search_convpath(int argc, VALUE *argv, VALUE klass) return convpath; } +/* + * check the existance of converter. + * returns the count of the converting paths. + * result: >=0:success -1:failure + */ +int +rb_transcode_convertible(const char* from_encoding, const char* to_encoding) +{ + VALUE convpath = Qnil; + transcode_search_path(from_encoding, to_encoding, search_convpath_i, + &convpath); + return RTEST(convpath); +} + struct rb_econv_init_by_convpath_t { rb_econv_t *ec; int index;