Mercurial > emacs
changeset 55964:49894995b543
(find_safe_codings): Check NILP (safe_codings) only at
the necessary places.
author | Kenichi Handa <handa@m17n.org> |
---|---|
date | Sun, 06 Jun 2004 23:59:19 +0000 |
parents | e2a4206075f9 |
children | a98219d0f4e4 |
files | src/coding.c |
diffstat | 1 files changed, 26 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/coding.c Sun Jun 06 22:40:53 2004 +0000 +++ b/src/coding.c Sun Jun 06 23:59:19 2004 +0000 @@ -6570,8 +6570,8 @@ possible coding systems. If it is nil, it means that we have not yet found any coding systems. - WORK_TABLE is a copy of the char-table Vchar_coding_system_table. An - element of WORK_TABLE is set to t once the element is looked up. + WORK_TABLE a char-table of which element is set to t once the + element is looked up. If a non-ASCII single byte char is found, set *single_byte_char_found to 1. */ @@ -6586,6 +6586,8 @@ Lisp_Object val, ch; Lisp_Object prev, tail; + if (NILP (safe_codings)) + goto done_safe_codings; while (p < pend) { c = STRING_CHAR_AND_LENGTH (p, pend - p, len); @@ -6595,11 +6597,6 @@ continue; if (SINGLE_BYTE_CHAR_P (c)) *single_byte_char_found = 1; - if (NILP (safe_codings)) - /* Already all coding systems are excluded. But, we can't - terminate the loop here because non-ASCII single-byte char - must be found. */ - continue; /* Check the safe coding systems for C. */ ch = make_number (c); val = Faref (work_table, ch); @@ -6677,12 +6674,33 @@ { /* Exclude this coding system from SAFE_CODINGS. */ if (EQ (tail, safe_codings)) - safe_codings = XCDR (safe_codings); + { + safe_codings = XCDR (safe_codings); + if (NILP (safe_codings)) + goto done_safe_codings; + } else XSETCDR (prev, XCDR (tail)); } } } + + done_safe_codings: + /* If the above loop was terminated before P reaches PEND, it means + SAFE_CODINGS was set to nil. If we have not yet found an + non-ASCII single-byte char, check it now. */ + if (! *single_byte_char_found) + while (p < pend) + { + c = STRING_CHAR_AND_LENGTH (p, pend - p, len); + p += len; + if (! ASCII_BYTE_P (c) + && SINGLE_BYTE_CHAR_P (c)) + { + *single_byte_char_found = 1; + break; + } + } return safe_codings; }