diff options
author | Kenichi Handa <handa@m17n.org> | 2005-02-14 01:04:50 +0000 |
---|---|---|
committer | Kenichi Handa <handa@m17n.org> | 2005-02-14 01:04:50 +0000 |
commit | 3bb917bff6b70e242c8aefeb567c4c522cc9d185 (patch) | |
tree | 1f07c7436f49f76cece1ff32007da75dec5e2b21 /src/coding.c | |
parent | 1bd70c6e1d8bf8c2a02d68efd0fe8b4fa9bef60d (diff) | |
download | emacs-3bb917bff6b70e242c8aefeb567c4c522cc9d185.tar.gz |
(encode_coding_string): Always return a unibyte string.
If NOCOPY is nonzero and there's no need of encoding, make STR
unibyte directly.
Diffstat (limited to 'src/coding.c')
-rw-r--r-- | src/coding.c | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/src/coding.c b/src/coding.c index 79e32fbed60..2ab4296381a 100644 --- a/src/coding.c +++ b/src/coding.c @@ -6361,7 +6361,12 @@ encode_coding_string (str, coding, nocopy) if (SYMBOLP (coding->pre_write_conversion) && !NILP (Ffboundp (coding->pre_write_conversion))) - str = run_pre_post_conversion_on_str (str, coding, 1); + { + str = run_pre_post_conversion_on_str (str, coding, 1); + /* As STR is just newly generated, we don't have to copy it + anymore. */ + nocopy = 1; + } from = 0; to = SCHARS (str); @@ -6369,21 +6374,10 @@ encode_coding_string (str, coding, nocopy) /* Encoding routines determine the multibyteness of the source text by coding->src_multibyte. */ - coding->src_multibyte = STRING_MULTIBYTE (str); + coding->src_multibyte = SCHARS (str) < SBYTES (str); coding->dst_multibyte = 0; if (! CODING_REQUIRE_ENCODING (coding)) - { - coding->consumed = SBYTES (str); - coding->consumed_char = SCHARS (str); - if (STRING_MULTIBYTE (str)) - { - str = Fstring_as_unibyte (str); - nocopy = 1; - } - coding->produced = SBYTES (str); - coding->produced_char = SCHARS (str); - return (nocopy ? str : Fcopy_sequence (str)); - } + goto no_need_of_encoding; if (coding->composing != COMPOSITION_DISABLED) coding_save_composition (coding, from, to, str); @@ -6399,7 +6393,7 @@ encode_coding_string (str, coding, nocopy) if (from == to_byte) { coding_free_composition_data (coding); - return (nocopy ? str : Fcopy_sequence (str)); + goto no_need_of_encoding; } shrinked_bytes = from + (SBYTES (str) - to_byte); } @@ -6444,6 +6438,25 @@ encode_coding_string (str, coding, nocopy) coding_free_composition_data (coding); return newstr; + + no_need_of_encoding: + coding->consumed = SBYTES (str); + coding->consumed_char = SCHARS (str); + if (STRING_MULTIBYTE (str)) + { + if (nocopy) + /* We are sure that STR doesn't contain a multibyte + character. */ + STRING_SET_UNIBYTE (str); + else + { + str = Fstring_as_unibyte (str); + nocopy = 1; + } + } + coding->produced = SBYTES (str); + coding->produced_char = SCHARS (str); + return (nocopy ? str : Fcopy_sequence (str)); } |