aboutsummaryrefslogtreecommitdiffstats
path: root/transcode.c
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-26 15:01:11 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-08-26 15:01:11 +0000
commita68e409eaab13ed85df4308a5a3bbb045dbbd639 (patch)
treef9fef164bb35870430e85be8e38b5a49cec606fa /transcode.c
parent8039100c0abc8b1c71445839ff42f2798f399ac2 (diff)
downloadruby-a68e409eaab13ed85df4308a5a3bbb045dbbd639.tar.gz
* include/ruby/encoding.h (rb_econv_elem_t): move to transcode.c
(rb_econv_t): defined as an incomplete type. * transcode.c (rb_econv_elem_t): moved from encoding.h. (rb_econv_t): complete type defined. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'transcode.c')
-rw-r--r--transcode.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/transcode.c b/transcode.c
index a35db7c0cb..78efb93c22 100644
--- a/transcode.c
+++ b/transcode.c
@@ -23,6 +23,48 @@ VALUE rb_cEncodingConverter;
static VALUE sym_invalid, sym_undef, sym_ignore, sym_replace;
+typedef struct {
+ struct rb_transcoding *tc;
+ unsigned char *out_buf_start;
+ unsigned char *out_data_start;
+ unsigned char *out_data_end;
+ unsigned char *out_buf_end;
+ rb_econv_result_t last_result;
+} rb_econv_elem_t;
+
+struct rb_econv_t {
+ rb_econv_option_t opts;
+ const char *source_encoding_name;
+ const char *destination_encoding_name;
+
+ unsigned char *in_buf_start;
+ unsigned char *in_data_start;
+ unsigned char *in_data_end;
+ unsigned char *in_buf_end;
+ rb_econv_elem_t *elems;
+ int num_trans;
+ int num_finished;
+ int last_trans_index; /* last trans, not including universal newline */
+ struct rb_transcoding *last_tc;
+
+ /* last error */
+ struct {
+ rb_econv_result_t result;
+ struct rb_transcoding *error_tc;
+ const char *source_encoding;
+ const char *destination_encoding;
+ const unsigned char *error_bytes_start;
+ size_t error_bytes_len;
+ size_t readagain_len;
+ int partial_input;
+ } last_error;
+
+ /* The following fields are only for Encoding::Converter.
+ * rb_econv_open set them NULL. */
+ rb_encoding *source_encoding;
+ rb_encoding *destination_encoding;
+};
+
/*
* Dispatch data and logic
*/