- /* If autodetection is called for, do it now. */
- if (XCODING_SYSTEM_TYPE(*codesys_in_out) == CODESYS_AUTODETECT
- || *eol_type_in_out == EOL_AUTODETECT) {
- Extbyte buf[4096];
- Lisp_Object coding_system = Qnil;
- Extbyte *p;
- Lstream_data_count nread =
- Lstream_read(stream, buf, sizeof(buf));
- Extbyte *scan_end;
- int lines_checked = 0;
-
- /* Look for initial "-*-"; mode line prefix */
- for (p = buf,
- scan_end = buf + nread - LENGTH("-*-coding:?-*-");
- p <= scan_end && lines_checked < LINES_TO_CHECK; p++)
- if (*p == '-' && *(p + 1) == '*' && *(p + 2) == '-') {
- Extbyte *local_vars_beg = p + 3;
- /* Look for final "-*-"; mode line suffix */
- for (p = local_vars_beg,
- scan_end = buf + nread - LENGTH("-*-");
- p <= scan_end
- && lines_checked < LINES_TO_CHECK; p++)
- if (*p == '-' && *(p + 1) == '*'
- && *(p + 2) == '-') {
- Extbyte *suffix = p;
- /* Look for "coding:" */
- for (p = local_vars_beg,
- scan_end =
- suffix -
- LENGTH("coding:?");
- p <= scan_end; p++)
- if (memcmp
- ("coding:", p,
- LENGTH("coding:"))
- == 0
- && (p ==
- local_vars_beg
- || (*(p - 1) ==
- ' '
- || *(p -
- 1) ==
- '\t'
- || *(p -
- 1) ==
- ';'))) {
- Extbyte save;
- int n;
- p += LENGTH
- ("coding:");
- while (*p == ' '
- || *p ==
- '\t')
- p++;
-
- /* Get coding system name */
- save = *suffix;
- *suffix = '\0';
- /* Characters valid in a MIME charset name (rfc 1521),
- and in a Lisp symbol name. */
- n = strspn((char
- *)p,
- "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- "abcdefghijklmnopqrstuvwxyz"
- "0123456789"
- "!$%&*+-.^_{|}~");
- *suffix = save;
- if (n > 0) {
- save =
- p
- [n];
- p[n] =
- '\0';
- coding_system
- =
- Ffind_coding_system
- (intern
- ((char *)p));
- p[n] =
- save;
- }
- break;
- }
- break;
- }
- /* #### file must use standard EOLs or we miss 2d line */
- /* #### not to mention this is broken for UTF-16 DOS files */
- else if (*p == '\n' || *p == '\r') {
- lines_checked++;
- /* skip past multibyte (DOS) newline */
- if (*p == '\r'
- && *(p + 1) == '\n')
- p++;
- }
- break;
- }
- /* #### file must use standard EOLs or we miss 2d line */
- /* #### not to mention this is broken for UTF-16 DOS files */
- else if (*p == '\n' || *p == '\r') {
+
+ /* Look for initial "-*-"; mode line prefix */
+ for (p = buf, scan_end = buf + nread - LENGTH("-*-coding:?-*-");
+ p <= scan_end && lines_checked < LINES_TO_CHECK; p++) {
+ Extbyte *local_vars_beg = p + 3;
+
+ if (*p == '\n' || *p == '\r') {
+ /* file must use standard EOLs or we miss 2d
+ line not to mention this is broken for
+ UTF-16 DOS files */
+ lines_checked++;
+ /* skip past multibyte (DOS) newline */
+ if (*p == '\r' && *(p + 1) == '\n')
+ p++;
+ continue;
+ }
+ if (*p != '-' || *(p + 1) != '*' || *(p + 2) != '-') {
+ continue;
+ }
+
+ /* Look for final "-*-"; mode line suffix */
+ for (p = local_vars_beg, scan_end = buf + nread - LENGTH("-*-");
+ p <= scan_end && lines_checked < LINES_TO_CHECK; p++) {
+ Extbyte *suffix = p;
+ if (*p == '\n' || *p == '\r') {
+ /* file must use standard EOLs or we
+ miss 2d line not to mention this is
+ broken for UTF-16 DOS files */