Mercurial > hg > xemacs-beta
diff src/file-coding.c @ 2531:7de8d9ab7bbd
[xemacs-hg @ 2005-01-29 09:06:37 by ben]
Fix recognition of coding magic cookie in autodetection
file-coding.c: Use UExtbyte for semantic correctness.
file-coding.c: Fix code that recognizes ;;;###coding cookie.
author | ben |
---|---|
date | Sat, 29 Jan 2005 09:06:40 +0000 |
parents | 3d8143fc88e1 |
children | 9f70af3ac939 |
line wrap: on
line diff
--- a/src/file-coding.c Sat Jan 29 00:32:38 2005 +0000 +++ b/src/file-coding.c Sat Jan 29 09:06:40 2005 +0000 @@ -3541,10 +3541,10 @@ blanks). If found, return it, otherwise nil. */ static Lisp_Object -snarf_coding_system (const Ibyte *p, Bytecount len) +snarf_coding_system (const UExtbyte *p, Bytecount len) { Bytecount n; - Ibyte *name; + UExtbyte *name; while (*p == ' ' || *p == '\t') p++, len--; len = min (len, 1000); @@ -3563,7 +3563,9 @@ if (n > 0) { name[n] = '\0'; - return find_coding_system_for_text_file (intern_int (name), 0); + /* This call to intern_int() is OK because we already verified that + there are only ASCII characters in the string */ + return find_coding_system_for_text_file (intern_int ((Ibyte *) name), 0); } return Qnil; @@ -3598,6 +3600,7 @@ { const UExtbyte *p; const UExtbyte *scan_end; + Bytecount cookie_len; /* Look for initial "-*-"; mode line prefix */ for (p = data, @@ -3639,20 +3642,26 @@ break; } -#if 0 - /* #### Totally wrong as is, rewrite */ - /* Look for initial ;;;###coding system */ - + /* Look for ;;;###coding system */ + + cookie_len = LENGTH (";;;###coding system: "); + + for (p = data, + scan_end = data + len - cookie_len; + p <= scan_end; + p++) { - Bytecount ind = fast_string_match (QScoding_system_cookie, - data, Qnil, 0, len, 0, ERROR_ME_NOT, - 1); - if (ind >= 0) - return - snarf_coding_system (data + ind + LENGTH (";;;###coding system: "), - len - ind - LENGTH (";;;###coding system: ")); + if (*p == ';' && !memcmp (p, ";;;###coding system: ", cookie_len)) + { + const UExtbyte *suffix; + + p += cookie_len; + suffix = p; + while (suffix < scan_end && !isspace (*suffix)) + suffix++; + return snarf_coding_system (p, suffix - p); + } } -#endif /* 0 */ return Qnil; }