]> code.delx.au - gnu-emacs/blobdiff - src/coding.c
(gnus-start-news-server): Use expand-file-name, not
[gnu-emacs] / src / coding.c
index 282f8e21e862fb0189b54756116f1b862e62f7ab..f44efa9415e976c1c68b314692766028ed1ad859 100644 (file)
@@ -614,7 +614,45 @@ decode_coding_emacs_mule (coding, source, destination, src_bytes, dst_bytes)
       unsigned char tmp[MAX_MULTIBYTE_LENGTH], *p;
       int bytes;
 
-      if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes))
+      if (*src == '\r')
+       {
+         int c;
+
+         src++;
+         if (coding->eol_type == CODING_EOL_CR)
+           c = '\n';
+         else if (coding->eol_type == CODING_EOL_CRLF)
+           {
+             ONE_MORE_BYTE (c);
+             if (c != '\n')
+               {
+                 if (coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
+                   {
+                     coding->result = CODING_FINISH_INCONSISTENT_EOL;
+                     goto label_end_of_loop;
+                   }
+                 src--;
+                 c = '\r';
+               }
+           }
+         *dst++ = c;
+         coding->produced_char++;
+         continue;
+       }
+      else if (*src == '\n')
+       {
+         if ((coding->eol_type == CODING_EOL_CR
+              || coding->eol_type == CODING_EOL_CRLF)
+             && coding->mode & CODING_MODE_INHIBIT_INCONSISTENT_EOL)
+           {
+             coding->result = CODING_FINISH_INCONSISTENT_EOL;
+             goto label_end_of_loop;
+           }
+         *dst++ = *src++;
+         coding->produced_char++;
+         continue;
+       }
+      else if (UNIBYTE_STR_AS_MULTIBYTE_P (src, src_end - src, bytes))
        {
          p = src;
          src += bytes;
@@ -633,6 +671,7 @@ decode_coding_emacs_mule (coding, source, destination, src_bytes, dst_bytes)
       while (bytes--) *dst++ = *p++;
       coding->produced_char++;
     }
+ label_end_of_loop:
   coding->consumed = coding->consumed_char = src_base - source;
   coding->produced = dst - destination;
 }
@@ -4184,6 +4223,7 @@ decode_coding (coding, source, destination, src_bytes, dst_bytes)
     }
 
   if (coding->result == CODING_FINISH_INSUFFICIENT_SRC
+      && coding->mode & CODING_MODE_LAST_BLOCK
       && coding->consumed == src_bytes)
     coding->result = CODING_FINISH_NORMAL;
 
@@ -4802,7 +4842,7 @@ code_convert_region (from, from_byte, to, to_byte, coding, encodep, replace)
          if (coding->type == coding_type_undecided)
            {
              /* It seems that the text contains only ASCII, but we
-                should not left it undecided because the deeper
+                should not leave it undecided because the deeper
                 decoding routine (decode_coding) tries to detect the
                 encodings again in vain.  */
              coding->type = coding_type_emacs_mule;