summaryrefslogtreecommitdiff
path: root/transcode.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-24 07:12:44 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-24 07:12:44 +0000
commit9b8adfed222ed950b74d76a45179b3ba785c4e05 (patch)
treeedfb35283b18e6013f36bc68e52c70fd65b28212 /transcode.c
parentb47c46106a0e2937d059e81b6fbecafe3a3d4347 (diff)
* include/ruby/encoding.h (rb_econv_option_t): defined.
(rb_econv_open): 3rd arg changed. (rb_econv_open_exc): ditto. * io.c (make_writeconv): use rb_econv_option_t. (make_readconv): ditto. (rb_econv_open): take rb_econv_option_t for options. (rb_econv_open_exc): ditto. (transcode_loop): use rb_econv_option_t. (econv_init): use rb_econv_option_t. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c33
1 files changed, 18 insertions, 15 deletions
diff --git a/transcode.c b/transcode.c
index fdabb2fd13..66287c957f 100644
--- a/transcode.c
+++ b/transcode.c
@@ -733,11 +733,12 @@ trans_open_i(const char *from, const char *to, int depth, void *arg)
}
rb_econv_t *
-rb_econv_open(const char *from, const char *to, int flags)
+rb_econv_open(const char *from, const char *to, rb_econv_option_t *opts)
{
transcoder_entry_t **entries = NULL;
int num_trans;
static rb_econv_t *ec;
+ int flags = opts ? opts->flags : 0;
if (*from == '\0' && *to == '\0') {
num_trans = 0;
@@ -1123,7 +1124,7 @@ allocate_converted_string(const char *str_encoding, const char *insert_encoding,
if (dst_bufsize == 0)
dst_bufsize += 1;
- ec = rb_econv_open(str_encoding, insert_encoding, 0);
+ ec = rb_econv_open(str_encoding, insert_encoding, NULL);
if (ec == NULL)
return NULL;
dst_str = xmalloc(dst_bufsize);
@@ -1410,8 +1411,9 @@ rb_econv_binmode(rb_econv_t *ec)
}
VALUE
-rb_econv_open_exc(const char *senc, const char *denc, int flags)
+rb_econv_open_exc(const char *senc, const char *denc, rb_econv_option_t *opts)
{
+ int flags = opts ? opts->flags : 0;
VALUE mesg, exc;
int noenc = 0;
mesg = rb_str_new_cstr("code converter open failed (");
@@ -1553,12 +1555,12 @@ transcode_loop(const unsigned char **in_pos, unsigned char **out_pos,
unsigned char *out_start = *out_pos;
int max_output;
VALUE exc;
- int ecflags;
+ rb_econv_option_t ecopts;
- ecflags = opt & (ECONV_INVALID_MASK|ECONV_UNDEF_MASK);
- ec = rb_econv_open(from_encoding, to_encoding, ecflags);
+ ecopts.flags = opt & (ECONV_INVALID_MASK|ECONV_UNDEF_MASK);
+ ec = rb_econv_open(from_encoding, to_encoding, &ecopts);
if (!ec)
- rb_exc_raise(rb_econv_open_exc(from_encoding, to_encoding, ecflags));
+ rb_exc_raise(rb_econv_open_exc(from_encoding, to_encoding, &ecopts));
last_tc = ec->last_tc;
max_output = last_tc ? last_tc->transcoder->max_output : 1;
@@ -1604,11 +1606,12 @@ transcode_loop(const unsigned char **in_pos, unsigned char **out_pos,
int max_output;
VALUE exc;
int ecflags;
+ rb_econv_option_t ecopts;
- ecflags = opt & (ECONV_INVALID_MASK|ECONV_UNDEF_MASK);
- ec = rb_econv_open(from_encoding, to_encoding, ecflags);
+ ecopts.flags = opt & (ECONV_INVALID_MASK|ECONV_UNDEF_MASK);
+ ec = rb_econv_open(from_encoding, to_encoding, &ecopts);
if (!ec)
- rb_exc_raise(rb_econv_open_exc(from_encoding, to_encoding, ecflags));
+ rb_exc_raise(rb_econv_open_exc(from_encoding, to_encoding, &ecopts));
last_tc = ec->last_tc;
max_output = last_tc ? last_tc->transcoder->max_output : 1;
@@ -1955,14 +1958,14 @@ econv_init(int argc, VALUE *argv, VALUE self)
const char *sname, *dname;
rb_encoding *senc, *denc;
rb_econv_t *ec;
- int flags;
+ rb_econv_option_t ecopts;
rb_scan_args(argc, argv, "21", &source_encoding, &destination_encoding, &flags_v);
if (flags_v == Qnil)
- flags = 0;
+ ecopts.flags = 0;
else
- flags = NUM2INT(flags_v);
+ ecopts.flags = NUM2INT(flags_v);
senc = NULL;
sidx = rb_to_encoding_index(source_encoding);
@@ -1989,9 +1992,9 @@ econv_init(int argc, VALUE *argv, VALUE self)
rb_raise(rb_eTypeError, "already initialized");
}
- ec = rb_econv_open(sname, dname, flags);
+ ec = rb_econv_open(sname, dname, &ecopts);
if (!ec) {
- rb_exc_raise(rb_econv_open_exc(sname, dname, flags));
+ rb_exc_raise(rb_econv_open_exc(sname, dname, &ecopts));
}
if (*sname && *dname) { /* check "" to "universal_newline" */