aboutsummaryrefslogtreecommitdiffstats
path: root/src/coding.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/coding.c')
-rw-r--r--src/coding.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/coding.c b/src/coding.c
index 3acbd090e13..0cdd8f9cd9e 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -1365,6 +1365,45 @@ decode_coding_utf_8 (struct coding_system *coding)
1365 break; 1365 break;
1366 } 1366 }
1367 1367
1368 /* In the simple case, rapidly handle ordinary characters */
1369 if (multibytep && ! eol_dos
1370 && charbuf < charbuf_end - 6 && src < src_end - 6)
1371 {
1372 while (charbuf < charbuf_end - 6 && src < src_end - 6)
1373 {
1374 c1 = *src;
1375 if (c1 & 0x80)
1376 break;
1377 src++;
1378 consumed_chars++;
1379 *charbuf++ = c1;
1380
1381 c1 = *src;
1382 if (c1 & 0x80)
1383 break;
1384 src++;
1385 consumed_chars++;
1386 *charbuf++ = c1;
1387
1388 c1 = *src;
1389 if (c1 & 0x80)
1390 break;
1391 src++;
1392 consumed_chars++;
1393 *charbuf++ = c1;
1394
1395 c1 = *src;
1396 if (c1 & 0x80)
1397 break;
1398 src++;
1399 consumed_chars++;
1400 *charbuf++ = c1;
1401 }
1402 /* If we handled at least one character, restart the main loop. */
1403 if (src != src_base)
1404 continue;
1405 }
1406
1368 if (byte_after_cr >= 0) 1407 if (byte_after_cr >= 0)
1369 c1 = byte_after_cr, byte_after_cr = -1; 1408 c1 = byte_after_cr, byte_after_cr = -1;
1370 else 1409 else