(encode_coding_string): Always return a unibyte string.
If NOCOPY is nonzero and there's no need of encoding, make STR unibyte directly.
This commit is contained in:
parent
1bd70c6e1d
commit
3bb917bff6
2 changed files with 37 additions and 15 deletions
|
@ -1,3 +1,12 @@
|
|||
2005-02-14 Kenichi Handa <handa@m17n.org>
|
||||
|
||||
* coding.c (encode_coding_string): Always return a unibyte string.
|
||||
If NOCOPY is nonzero and there's no need of encoding, make STR
|
||||
unibyte directly.
|
||||
|
||||
* xselect.c (lisp_data_to_selection_data): If OBJ is a non-ASCII
|
||||
multibyte string, signal an error instead of aborting.
|
||||
|
||||
2005-02-12 Dan Nicolaescu <dann@ics.uci.edu>
|
||||
|
||||
* keyboard.c: If HAVE_FCNTL_H include fcntl.h.
|
||||
|
|
43
src/coding.c
43
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));
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue