# HG changeset patch # User Richard M. Stallman # Date 870805173 0 # Node ID 04ed7c3f5cee636ab0e6148678983a2b23c047d9 # Parent f3580f4e35871a1a3563107e5b61c72d91de6e9e (detect_eol_type): If EOL representation does not seem consistent, use no conversion. diff -r f3580f4e3587 -r 04ed7c3f5cee src/coding.c --- a/src/coding.c Tue Aug 05 18:08:38 1997 +0000 +++ b/src/coding.c Tue Aug 05 18:19:33 1997 +0000 @@ -2703,6 +2703,8 @@ is encoded. Return one of CODING_EOL_LF, CODING_EOL_CRLF, CODING_EOL_CR, and CODING_EOL_UNDECIDED. */ +#define MAX_EOL_CHECK_COUNT 3 + int detect_eol_type (src, src_bytes) unsigned char *src; @@ -2710,21 +2712,34 @@ { unsigned char *src_end = src + src_bytes; unsigned char c; - - while (src < src_end) + int total = 0; /* How many end-of-lines are found so far. */ + int eol_type = CODING_EOL_UNDECIDED; + int this_eol_type; + + while (src < src_end && total < MAX_EOL_CHECK_COUNT) { c = *src++; - if (c == '\n') - return CODING_EOL_LF; - else if (c == '\r') + if (c == '\n' || c == '\r') { - if (src < src_end && *src == '\n') - return CODING_EOL_CRLF; + total++; + if (c == '\n') + this_eol_type = CODING_EOL_LF; + else if (src >= src_end || *src != '\n') + this_eol_type = CODING_EOL_CR; else - return CODING_EOL_CR; + this_eol_type = CODING_EOL_CRLF, src++; + + if (eol_type == CODING_EOL_UNDECIDED) + /* This is the first end-of-line. */ + eol_type = this_eol_type; + else if (eol_type != this_eol_type) + /* The found type is different from what found before. + We had better not decode end-of-line. */ + return CODING_EOL_LF; } } - return CODING_EOL_UNDECIDED; + + return (total ? eol_type : CODING_EOL_UNDECIDED); } /* Detect how end-of-line of a text of length SRC_BYTES pointed by SRC