1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* include/ruby/io.h (rb_io_t): new fields: encs.ecopts and

writeconv_pre_ecopts.
  (MakeOpenFile): initialize them.

* include/ruby/encoding.h (rb_str_transcode): take ecopts argument.
  (rb_econv_flags): removed.
  (rb_econv_prepare_opts): declared.
  (rb_econv_open_opts): declared.

* io.c (make_writeconv): use rb_econv_open_opts.
  (make_readconv): ditto.
  (io_fwrite): follow rb_str_transcode change.
  (rb_io_extract_modeenc): use rb_econv_prepare_opts.
  (rb_file_open_generic): initialize encs.ecopts.
  (rb_file_open_internal): ditto.
  (rb_io_reopen): ditto.
  (argf_ecopts): defined.
  (argf_next_argv): set encs.ecopts.
  (io_encoding_set): use rb_econv_prepare_opts.
  (argf_set_encoding): set argf_ecopts.

* gc.c (gc_mark_children): mark encs.ecopts and writeconv_pre_ecopts
  in T_FILE.

* transcode.c (transcode_loop): take ecopts argument. use
  rb_econv_open_opts.
  (rb_econv_flags): removed.
  (rb_econv_prepare_opts): defined.
  (rb_econv_open_opts): defined.
  (str_transcode0): take ecopts.
  (str_transcode): use rb_econv_prepare_opts.
  (rb_str_transcode): take ecopts.
  (econv_init): accept hash argument.
  (econv_insert_output): follow rb_str_transcode change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19109 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
akr 2008-09-03 18:18:10 +00:00
parent 0ebcad6a7b
commit 58964e3249
9 changed files with 184 additions and 31 deletions

View file

@ -58,6 +58,7 @@ typedef struct rb_io_t {
rb_encoding *enc;
rb_encoding *enc2;
int flags;
VALUE ecopts;
} encs;
rb_econv_t *readconv;
@ -69,6 +70,7 @@ typedef struct rb_io_t {
rb_econv_t *writeconv;
VALUE writeconv_stateless;
int writeconv_pre_flags;
VALUE writeconv_pre_ecopts;
int writeconv_initialized;
} rb_io_t;
@ -123,11 +125,14 @@ typedef struct rb_io_t {
fp->cbuf_capa = 0;\
fp->writeconv = NULL;\
fp->writeconv_stateless = Qnil;\
fp->writeconv_pre_flags = 0;\
fp->writeconv_pre_ecopts = Qnil;\
fp->writeconv_initialized = 0;\
fp->tied_io_for_writing = 0;\
fp->encs.enc = NULL;\
fp->encs.enc2 = NULL;\
fp->encs.flags = 0;\
fp->encs.ecopts = Qnil;\
} while (0)
FILE *rb_io_stdio_file(rb_io_t *fptr);