summaryrefslogtreecommitdiffstats
path: root/transcode.c
Commit message (Collapse)AuthorAgeFilesLines
...
* * transcode.c (econv_primitive_errinfo): 5th element (partial_input)akr2008-08-301-15/+10
| | | | | | | | removed from result. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18962 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rdoc update.akr2008-08-291-0/+11
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18929 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* rdoc update.akr2008-08-281-0/+1
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18914 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_finish): new method.akr2008-08-281-0/+50
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18913 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_convert): new method.akr2008-08-281-0/+54
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18912 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_primitive_convert): accept nil asakr2008-08-281-7/+29
| | | | | | | destination_bytesize for unlimited destination size. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18911 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_primitive_convert): accept nil as input for emptyakr2008-08-281-5/+17
| | | | | | | | input. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18910 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (sym_invalid_byte_sequence): new variable.akr2008-08-281-7/+23
| | | | | | | | | | | | | | | (sym_undefined_conversion): ditto. (sym_destination_buffer_full): ditto. (sym_source_buffer_empty): ditto. (sym_finished): ditto. (sym_output_followed_by_input): ditto. (sym_incomplete_input): ditto. (econv_result_to_symbol): use above variables. (Init_transcode): initialize above variables. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18908 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (transcode_loop): simplified.akr2008-08-261-11/+2
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18876 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_result_t): enumeration constant:akr2008-08-261-12/+42
| | | | | | | | | | | | | | | | | | | | | | econv_incomplete_input. * io.c (finish_writeconv): check econv_incomplete_input. * transcode.c (transcode_restartable0): return econv_incomplete_input for unexpected end of source buffer. (trans_sweep): check econv_incomplete_input. (rb_trans_conv): ditto. (rb_econv_convert0): ditto. (rb_econv_convert): ditto. (transcode_loop): ditto. (make_econv_exception): change message for econv_incomplete_input. (econv_result_to_symbol): return :incomplete_input for econv_incomplete_input. (ecerr_incomplete_input): new method. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18875 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_elem_t): move to transcode.cakr2008-08-261-0/+42
| | | | | | | | | | | (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: http://svn.ruby-lang.org/repos/ruby/trunk@18872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_open): disable newline conversion for ASCIIakr2008-08-261-14/+33
| | | | | | | | incompatible encodings. (str_transcode0): don't need disable newline conversion here. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18870 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_binmode): binmode is effective only once.akr2008-08-261-0/+2
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18869 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (str_transcode0): disable newline conversion for ASCIIakr2008-08-251-7/+22
| | | | | | | | incompatible encoding. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18853 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (str_transcode0): don't short cut for newline conversion.akr2008-08-251-9/+21
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18852 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (make_econv_exception): show readagain part for invalidakr2008-08-251-7/+29
| | | | | | | | byte sequence exception. store the part as an instance variable. (ecerr_readagain_bytes): new method to access the readagain part. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_open): make last_tc NULL if there are onlyakr2008-08-251-26/+45
| | | | | | | | | | | additional transcoders. (econv_description): extracted from rb_econv_open_exc. (rb_econv_open_exc): use econv_description. (econv_inspect): use econv_description. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18843 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_open_by_transcoder_entries): initializeakr2008-08-251-2/+72
| | | | | | | | | | | last_error. num_trans may be zero. (rb_econv_convert0): num_trans may be zero. (rb_econv_putbackable): ditto. (rb_econv_putback): ditto. (rb_econv_convert): input_ptr and output_ptr may be NULL. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18835 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_substr_append): fix for buffer overrun.nobu2008-08-251-1/+2
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18831 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_open_exc): constified. nobu2008-08-251-1/+1
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * configure.in (BUILTIN_TRANSSRCS): defined.akr2008-08-241-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | (BUILTIN_TRANSOBJS): defined. * enc/Makefile.in (BUILTIN_TRANSES): defined. * enc/make_encmake.rb (BUILTIN_TRANSES): defined. * enc/depend: don't generate rules for builtin transcoders. * common.mk (COMMONOBJS): add BUILTIN_TRANSOBJS. (enc.mk): pass BUILTIN_TRANSOBJS. (newline.c): new rule. (newline.$(OBJEXT)): new ru.e (srcs): newline.c added. * Makefile.in (BUILTIN_TRANSSRCS): defined. (BUILTIN_TRANSOBJS): defined. * transcode.c (Init_transcode): call Init_newline. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18826 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (declare_transcoder): arguments order changed.akr2008-08-241-2/+1
| | | | | | | (rb_declare_transcoder): call declare_transcoder just once. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18824 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_t): use rb_econv_option_t.akr2008-08-241-8/+11
| | | | | | | | * transcode.c: follow the rb_econv_t change. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18823 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * io.c (rb_io_s_pipe): accept optional hash.akr2008-08-241-1/+4
| | | | | | | | | | | | | | | | (rb_io_set_encoding): ditto. (rb_io_extract_modeenc): use rb_econv_opts to initialize ecopts. (rb_file_open_generic): ditto. (rb_file_open_internal): ditto. (io_encoding_set): new argument: opt. (argf_set_encoding): copy fptr->encs.opts to argf_ecopts. * transcode.c (rb_econv_opts): accept Qnil for initialization. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18817 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_str_transcode): make 3rd argumentakr2008-08-241-19/+15
| | | | | | | | | | | | | | | | rb_econv_option_t*. * transcode.c (transcode_loop): take rb_econv_option_t* as a argument. (str_transcode0): ditto. (str_transcode): make rb_econv_option_t and call str_transcode0 with it. (rb_str_transcode): take rb_econv_option_t*. * io.c (io_fwrite): follow the rb_str_transcode change. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18814 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_opts): declared.akr2008-08-241-0/+6
| | | | | | | | | | * transcode.c (rb_econv_opts): defined. * io.c (rb_io_extract_modeenc): use rb_econv_opts. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18811 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_option_t): defined.akr2008-08-241-15/+18
| | | | | | | | | | | | | | | | (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: http://svn.ruby-lang.org/repos/ruby/trunk@18810 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_substr_append): associate dst with destinationakr2008-08-241-1/+4
| | | | | | | encoding when dst is created. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18809 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_str_transcode): add ecflags argument.akr2008-08-241-51/+90
| | | | | | | | | | | | | | | | | | | | * transcode.c (econv_opts): extracted from str_transcode. (str_transcode_enc_args): extracted from str_transcode. (str_transcode0): extracted from str_transcode. (str_transcode): use econv_opts, str_transcode_enc_args, str_transcode0. (rb_str_transcode): call str_transcode0. (econv_primitive_insert_output): give the additional argument for rb_str_transcode. * io.c (make_writeconv): use invalid/undef flags. (io_fwrite): ditto. (rb_scan_open_args): give the additional argument for rb_str_transcode. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18808 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (str_transcode): check last hash only if 0 < argc.akr2008-08-241-1/+4
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18807 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_substr_append): renamed fromakr2008-08-241-3/+20
| | | | | | | | | | | | | | | | | | | rb_econv_string. (rb_econv_str_convert): declared. (rb_econv_substr_convert): declared. (rb_econv_str_append): declared. * io.c (io_fwrite): use rb_econv_str_convert instead of rb_econv_string. * transcode.c (rb_econv_substr_append): renamed from rb_econv_string. (rb_econv_str_append): new function. (rb_econv_substr_convert): ditto. (rb_econv_str_convert): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_open): return NULL on error.akr2008-08-241-1/+1
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18804 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_open_exc): declared.akr2008-08-241-6/+53
| | | | | | | | | | | | | * transcode.c (rb_eNoConverter): new exception. (rb_econv_open_exc): new function. (transcode_loop): use rb_econv_open_exc. * io.c (make_writeconv): use rb_econv_open_exc. (make_readconv): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18803 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (ECONV_INVALID_MASK): defined.akr2008-08-231-50/+57
| | | | | | | | | | | | | | | | | | | | | (ECONV_INVALID_IGNORE): defined. (ECONV_INVALID_REPLACE): defined. (ECONV_UNDEF_MASK): defined. (ECONV_UNDEF_IGNORE): defined. (ECONV_UNDEF_REPLACE): defined. * transcode.c (INVALID_IGNORE): removed. (INVALID_REPLACE): removed. (UNDEF_IGNORE): removed. (UNDEF_REPLACE): removed. (rb_econv_convert0): renamed from rb_econv_convert. (rb_econv_convert): defined to call rb_econv_convert0 with replace/ignore behavior moved from transcode_loop. (transcode_loop): replace/ignore behavior removed. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18787 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/io.h (FMODE_TEXTMODE): defined.akr2008-08-221-24/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * include/ruby/encoding.h (rb_econv_t): new field: flags. (rb_econv_binmode): declared. * io.c (io_unread): text mode hack removed. (NEED_NEWLINE_DECODER): defined. (NEED_NEWLINE_ENCODER): defined. (NEED_READCONV): defined. (NEED_WRITECONV): defined. (TEXTMODE_NEWLINE_ENCODER): defined for windows. (make_writeconv): setup converter with TEXTMODE_NEWLINE_ENCODER for text mode. (io_fwrite): use NEED_WRITECONV. character code conversion is disabled if fptr->writeconv_stateless is nil. (make_readconv): setup converter with ECONV_UNIVERSAL_NEWLINE_DECODER for text mode. (read_all): use NEED_READCONV. (appendline): use NEED_READCONV. (rb_io_getline_1): use NEED_READCONV. (io_getc): use NEED_READCONV. (rb_io_ungetc): use NEED_READCONV. (rb_io_binmode): OS-level text mode test removed. call rb_econv_binmode. (rb_io_binmode_m): call rb_io_binmode_m with write_io as well. (rb_io_flags_mode): return mode string including "t". (rb_io_mode_flags): detect "t" for text mode. (rb_sysopen): always specify O_BINARY. * transcode.c (rb_econv_open_by_transcoder_entries): initialize flags. (rb_econv_open): if source and destination encoding is both empty string, open newline converter. last_tc will be NULL in this case. (rb_econv_encoding_to_insert_output): last_tc may be NULL now. (rb_econv_string): ditto. (output_replacement_character): ditto. (transcode_loop): ditto. (econv_init): ditto. (econv_inspect): ditto. (rb_econv_binmode): new function. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18780 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (rb_econv_open): fix memory leak.akr2008-08-191-4/+11
| | | | | | | | (rb_econv_close): ditto. fixed by shinichiro.h. [ruby-dev:35880] git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18710 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/io.h (rb_io_t): new fields: writeconv,akr2008-08-181-0/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | writeconv_stateless and writeconv_initialized. (MakeOpenFile): initialize them. * include/ruby/encoding.h (rb_econv_stateless_encoding): declared. (rb_econv_string): declared. * io.c (make_writeconv): new function. (io_fwrite): use econv. (make_readconv): fix error message. (finish_writeconv): new function. (fptr_finalize): call finish_writeconv. (clear_writeconv): new function. (clear_codeconv): new function to call both clear_readconv and clear_writeconv. (rb_io_fptr_finalize): call clear_codeconv instead of clear_readconv. (mode_enc): ditto. (io_set_encoding): ditto. (argf_next_argv): ditto. (io_encoding_set): ditto. * gc.c (gc_mark_children): mark writeconv_stateless in T_FILE. * transcode.c (stateless_encoding_i): new function. (rb_econv_stateless_encoding): ditto. (rb_econv_string): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18691 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (transcode_search_path): prevent infinite loop byakr2008-08-181-0/+3
| | | | | | | searching a path for self conversion. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_primitive_putback): new method.akr2008-08-171-0/+24
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18671 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_putbackable): declared.akr2008-08-171-0/+14
| | | | | | | | | | | | | (rb_econv_putback): ditto. * transcode.c (rb_econv_putbackable): implemented. (rb_econv_putback): ditto. * io.c (io_getc): put back bytes if possible. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18670 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (make_econv_exception): add several instance variablesakr2008-08-171-7/+54
| | | | | | | | | | | | | | | | | to exception object. (ecerr_source_encoding): new method: Encoding::ConversionUndefined#source_encoding and Encoding::InvalidByteSequence#source_encoding. (ecerr_destination_encoding): new method: Encoding::ConversionUndefined#destination_encoding and Encoding::InvalidByteSequence#destination_encoding. (econverr_error_char): new method: Encoding::ConversionUndefined#error_char. (econverr_error_bytes): new method: Encoding::ConversionUndefined#error_bytes. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18669 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_check_error): declared.akr2008-08-161-4/+47
| | | | | | | | | * transcode.c (make_econv_exception): new function. (transcode_loop): use make_econv_exception. (rb_econv_check_error): defined. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18662 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_elem_t): fields removed: from andakr2008-08-161-4/+12
| | | | | | | | | | | | | | | to. (rb_econv_t): new fields: source_encoding_name and destination_encoding_name. * transcode.c (rb_econv_open_by_transcoder_entries): initialize the new fields. (rb_econv_open): set up the new fields. (econv_inspect): use the new fields. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18655 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_t): add fields: in_buf_start,akr2008-08-161-213/+208
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | in_data_start, in_data_end, in_buf_end and last_trans_index. (rb_econv_output): removed. (rb_econv_insert_output): declared. (rb_econv_encoding_to_insert_output): declared. * enc/trans/newline.trans (rb_universal_newline): stateful_type changed. * transcode.c (transcode_restartable0): initialize inchar_start, tc->recognized_len and next_table at beginning of the loop. (rb_econv_open_by_transcoder_entries): initialize new fields. (rb_econv_open): setup last_trans_index. (trans_sweep): last out_buf_start can be non-NULL now. (rb_econv_convert): check last out_buf_start and in_buf_start at first. (rb_econv_output_with_destination_encoding): removed. (econv_just_convert): removed. (rb_econv_output): removed. (econv_primitive_output): method removed. (rb_econv_encoding_to_insert_output): new function. (allocate_converted_string): new function. (rb_econv_insert_output): new function. (econv_primitive_insert_output): new method. (output_replacement_character): use rb_econv_insert_output. unused arguments removed. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_just_convert): extracted from rb_econv_output.akr2008-08-151-38/+137
| | | | | | | | (rb_econv_output): use econv_just_convert. (econv_primitive_output): new method. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18647 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_output): add str_encodingakr2008-08-151-7/+89
| | | | | | | | | | | | | | | argument. * transcode.c (get_replacement_character): add repl_enc_ptr argument. (rb_econv_output_with_destination_encoding): renamed from rb_econv_output and make it static. (rb_econv_output): convert str and call rb_econv_output_with_destination_encoding. (output_replacement_character): follow above interface change. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18646 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_t): add error_tc in last_error.akr2008-08-151-5/+7
| | | | | | | | * transcode.c (rb_econv_convert): fill error_tc. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18644 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * include/ruby/encoding.h (rb_econv_t): new field: last_error.akr2008-08-151-16/+152
| | | | | | | | | | | * transcode.c (rb_trans_conv): new argument: result_position_ptr. (rb_econv_convert): fill last_error. (econv_result_to_symbol): extracted from econv_primitive_convert. (econv_primitive_errinfo): new method. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18643 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (conv_init): check empty name.akr2008-08-151-4/+6
| | | | git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18637 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
* * transcode.c (econv_init): don't create dummy encoding ifakr2008-08-151-12/+33
| | | | | | | | | rb_econv_open is failed. (make_dummy_encoding): new function extracted from make_encoding. (make_encoding): removed. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@18634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e