summaryrefslogtreecommitdiff
path: root/xdelta3/xdelta3.c
diff options
context:
space:
mode:
Diffstat (limited to 'xdelta3/xdelta3.c')
-rw-r--r--xdelta3/xdelta3.c238
1 files changed, 57 insertions, 181 deletions
diff --git a/xdelta3/xdelta3.c b/xdelta3/xdelta3.c
index b8aa9eb..5c79f37 100644
--- a/xdelta3/xdelta3.c
+++ b/xdelta3/xdelta3.c
@@ -549,50 +549,6 @@ static int xd3_decode_allocate (xd3_stream *stream, usize_t size,
549static void* xd3_alloc (xd3_stream *stream, usize_t elts, usize_t size); 549static void* xd3_alloc (xd3_stream *stream, usize_t elts, usize_t size);
550static void xd3_free (xd3_stream *stream, void *ptr); 550static void xd3_free (xd3_stream *stream, void *ptr);
551 551
552#if USE_UINT32
553static int xd3_read_uint32_t (xd3_stream *stream, const uint8_t **inpp,
554 const uint8_t *max, uint32_t *valp);
555#endif
556#if USE_UINT64
557static int xd3_read_uint64_t (xd3_stream *stream, const uint8_t **inpp,
558 const uint8_t *max, uint64_t *valp);
559#endif
560#if REGRESSION_TEST
561static int xd3_selftest (void);
562#endif
563
564/***********************************************************************/
565
566#define UINT32_OFLOW_MASK 0xfe000000U
567#define UINT64_OFLOW_MASK 0xfe00000000000000ULL
568
569#if SIZEOF_USIZE_T == 4
570#define USIZE_T_MAX UINT32_MAX
571#define xd3_decode_size xd3_decode_uint32_t
572#define xd3_emit_size xd3_emit_uint32_t
573#define xd3_sizeof_size xd3_sizeof_uint32_t
574#define xd3_read_size xd3_read_uint32_t
575#elif SIZEOF_USIZE_T == 8
576#define USIZE_T_MAX UINT64_MAX
577#define xd3_decode_size xd3_decode_uint64_t
578#define xd3_emit_size xd3_emit_uint64_t
579#define xd3_sizeof_size xd3_sizeof_uint64_t
580#define xd3_read_size xd3_read_uint64_t
581#endif
582
583#if SIZEOF_XOFF_T == 4
584#define XOFF_T_MAX UINT32_MAX
585#define xd3_decode_offset xd3_decode_uint32_t
586#define xd3_emit_offset xd3_emit_uint32_t
587#elif SIZEOF_XOFF_T == 8
588#define XOFF_T_MAX UINT64_MAX
589#define xd3_decode_offset xd3_decode_uint64_t
590#define xd3_emit_offset xd3_emit_uint64_t
591#endif
592
593#define USIZE_T_OVERFLOW(a,b) ((USIZE_T_MAX - (usize_t) (a)) < (usize_t) (b))
594#define XOFF_T_OVERFLOW(a,b) ((XOFF_T_MAX - (xoff_t) (a)) < (xoff_t) (b))
595
596const char* xd3_strerror (int ret) 552const char* xd3_strerror (int ret)
597{ 553{
598 switch (ret) 554 switch (ret)
@@ -798,112 +754,6 @@ const xd3_sec_type lzma_sec_type =
798#endif /* __XDELTA3_C_HEADER_PASS__ */ 754#endif /* __XDELTA3_C_HEADER_PASS__ */
799#ifdef __XDELTA3_C_INLINE_PASS__ 755#ifdef __XDELTA3_C_INLINE_PASS__
800 756
801const uint16_t __single_hash32[256] =
802{
803 /* This hashes the input alphabet (Scheme SLIB pseudo-random). */
804 0xbcd1, 0xbb65, 0x42c2, 0xdffe, 0x9666, 0x431b, 0x8504, 0xeb46,
805 0x6379, 0xd460, 0xcf14, 0x53cf, 0xdb51, 0xdb08, 0x12c8, 0xf602,
806 0xe766, 0x2394, 0x250d, 0xdcbb, 0xa678, 0x02af, 0xa5c6, 0x7ea6,
807 0xb645, 0xcb4d, 0xc44b, 0xe5dc, 0x9fe6, 0x5b5c, 0x35f5, 0x701a,
808 0x220f, 0x6c38, 0x1a56, 0x4ca3, 0xffc6, 0xb152, 0x8d61, 0x7a58,
809 0x9025, 0x8b3d, 0xbf0f, 0x95a3, 0xe5f4, 0xc127, 0x3bed, 0x320b,
810 0xb7f3, 0x6054, 0x333c, 0xd383, 0x8154, 0x5242, 0x4e0d, 0x0a94,
811 0x7028, 0x8689, 0x3a22, 0x0980, 0x1847, 0xb0f1, 0x9b5c, 0x4176,
812 0xb858, 0xd542, 0x1f6c, 0x2497, 0x6a5a, 0x9fa9, 0x8c5a, 0x7743,
813 0xa8a9, 0x9a02, 0x4918, 0x438c, 0xc388, 0x9e2b, 0x4cad, 0x01b6,
814 0xab19, 0xf777, 0x365f, 0x1eb2, 0x091e, 0x7bf8, 0x7a8e, 0x5227,
815 0xeab1, 0x2074, 0x4523, 0xe781, 0x01a3, 0x163d, 0x3b2e, 0x287d,
816 0x5e7f, 0xa063, 0xb134, 0x8fae, 0x5e8e, 0xb7b7, 0x4548, 0x1f5a,
817 0xfa56, 0x7a24, 0x900f, 0x42dc, 0xcc69, 0x02a0, 0x0b22, 0xdb31,
818 0x71fe, 0x0c7d, 0x1732, 0x1159, 0xcb09, 0xe1d2, 0x1351, 0x52e9,
819 0xf536, 0x5a4f, 0xc316, 0x6bf9, 0x8994, 0xb774, 0x5f3e, 0xf6d6,
820 0x3a61, 0xf82c, 0xcc22, 0x9d06, 0x299c, 0x09e5, 0x1eec, 0x514f,
821 0x8d53, 0xa650, 0x5c6e, 0xc577, 0x7958, 0x71ac, 0x8916, 0x9b4f,
822 0x2c09, 0x5211, 0xf6d8, 0xcaaa, 0xf7ef, 0x287f, 0x7a94, 0xab49,
823 0xfa2c, 0x7222, 0xe457, 0xd71a, 0x00c3, 0x1a76, 0xe98c, 0xc037,
824 0x8208, 0x5c2d, 0xdfda, 0xe5f5, 0x0b45, 0x15ce, 0x8a7e, 0xfcad,
825 0xaa2d, 0x4b5c, 0xd42e, 0xb251, 0x907e, 0x9a47, 0xc9a6, 0xd93f,
826 0x085e, 0x35ce, 0xa153, 0x7e7b, 0x9f0b, 0x25aa, 0x5d9f, 0xc04d,
827 0x8a0e, 0x2875, 0x4a1c, 0x295f, 0x1393, 0xf760, 0x9178, 0x0f5b,
828 0xfa7d, 0x83b4, 0x2082, 0x721d, 0x6462, 0x0368, 0x67e2, 0x8624,
829 0x194d, 0x22f6, 0x78fb, 0x6791, 0xb238, 0xb332, 0x7276, 0xf272,
830 0x47ec, 0x4504, 0xa961, 0x9fc8, 0x3fdc, 0xb413, 0x007a, 0x0806,
831 0x7458, 0x95c6, 0xccaa, 0x18d6, 0xe2ae, 0x1b06, 0xf3f6, 0x5050,
832 0xc8e8, 0xf4ac, 0xc04c, 0xf41c, 0x992f, 0xae44, 0x5f1b, 0x1113,
833 0x1738, 0xd9a8, 0x19ea, 0x2d33, 0x9698, 0x2fe9, 0x323f, 0xcde2,
834 0x6d71, 0xe37d, 0xb697, 0x2c4f, 0x4373, 0x9102, 0x075d, 0x8e25,
835 0x1672, 0xec28, 0x6acb, 0x86cc, 0x186e, 0x9414, 0xd674, 0xd1a5
836};
837
838const uint32_t __single_hash64[256] =
839{
840 /* http://random.org 2014.10.24 */
841 0xd25e9f0a, 0xb1af9d5e, 0xb753dfa2, 0x157050f7, /* 0 */
842 0xc84b072c, 0xdd14fe7c, 0xf92208c3, 0xdf08a0c0,
843 0x63a5c118, 0x76f5d90f, 0xa2f8b93e, 0xb6c12d22,
844 0xaf074957, 0x966fb7d9, 0x62f7b785, 0xb40e8a09,
845 0x0a811d5d, 0x323a6daa, 0xb62f7c5b, 0xfdcb9a53,
846 0xf25a9067, 0x4506bc7a, 0xff58a74b, 0x5ae62817,
847 0x74097675, 0x722c0fd9, 0x116a2a66, 0x65f76728,
848 0x72c79651, 0xe043cf9d, 0x64b867c7, 0x6604834f,
849 0xcdca58a6, 0x0f164e2d, 0x24515f05, 0x632cdbf8,
850 0x18091d4a, 0x3eff4128, 0x673d1c33, 0xd8e10c71,
851 0x1a3edf11, 0xba52892f, 0xa56949e0, 0xf3e1dd77, /* 10 */
852 0x86fcbe3e, 0x138d66d0, 0x4fc98359, 0xc22e5dd6,
853 0xc59f2267, 0x6c6dd739, 0xe03da190, 0x07e8469c,
854 0xadcfb02c, 0x00d3b0d9, 0xa1f44918, 0x8bd84d87,
855 0x08ec9ec1, 0xbbcd156f, 0xb57718e3, 0x3177e752,
856 0xf52a4d70, 0xde7aaad9, 0x075f1da0, 0x21ba00c6,
857 0xb9469a5c, 0xcf08d5ba, 0x91ac9edc, 0xc6167b63,
858 0xc1974919, 0xc8c8d195, 0x4b1996dd, 0xeff8991c,
859 0xf7f66c6b, 0x25b012e2, 0x59d12a98, 0xea40d3cc,
860 0x41f9970b, 0xec48101a, 0xa3bdcf90, 0x99f16905,
861 0x27af6c97, 0xc849af37, 0x49cad89b, 0xf48c2278, /* 20 */
862 0x5529c3d8, 0x9e7d6dce, 0x16feb52d, 0xf1b0aca1,
863 0xaf28fccb, 0x48e4ce3c, 0xc4436617, 0x64524e3e,
864 0x61806681, 0x6384f2d7, 0x1172880f, 0x34a5ef5f,
865 0xcc8cc0a8, 0x66e8f100, 0x2866085f, 0xba9b1b2d,
866 0x51285949, 0x2be4b574, 0x889b1ef5, 0x3dbe920d,
867 0x9277a62f, 0x0584a9f6, 0x085d8fc4, 0x4b5d403d,
868 0x4e46ca78, 0x3294c2f9, 0x29313e70, 0xe4f09b24,
869 0xe73b331c, 0x072f5552, 0x2e390b78, 0xea0021ca,
870 0xd8f40320, 0xed0e16fd, 0x7de9cf7a, 0xf17e3d6c,
871 0x8df1bd85, 0x052cae67, 0x3486e512, 0x3a1c09b8, /* 30 */
872 0x6c2a7b4e, 0x83455753, 0xbc0353ac, 0x0ffe20b6,
873 0x5fdcef85, 0x010f506c, 0x595ce972, 0xe28680d0,
874 0xa7e216b2, 0xa392ee0f, 0x25b73faa, 0x2b1f4983,
875 0xeeaefe98, 0x1d3d9cbc, 0x6aebe97b, 0x8b7b3584,
876 0x9e6a9a07, 0xd37f1e99, 0x4ac2a441, 0x8ae9a213,
877 0x7d0e27d7, 0x5de54b9a, 0x8621de1f, 0xf0f2f866,
878 0xcb08d275, 0x49c3f87e, 0xd5ee68c1, 0x9802fc77,
879 0x68be6c5e, 0x65aa8c27, 0xf423d5f7, 0x10ec5502,
880 0x9909bce1, 0x509cdf1b, 0x338fea72, 0x2733e9bf,
881 0xf92f4fd7, 0x87738ea2, 0x931a8bbc, 0x0a5c9155, /* 40 */
882 0xbe5edd9b, 0xadbf5838, 0x0338f8d2, 0x290da210,
883 0x390c37d8, 0xe7cffae8, 0x20617ebe, 0x464322dd,
884 0x7b3c4e78, 0xac142dcb, 0x2d5cef76, 0xd8fe49fc,
885 0x60f4e9a9, 0x7473816f, 0x0dc35f39, 0x5eed80c1,
886 0x0cb55ab6, 0x1d3ac541, 0x13c7f529, 0x7bffdf4a,
887 0xe334785b, 0x85263ec1, 0xd132ae56, 0x7c868b9e,
888 0x47f60638, 0x1012b979, 0x81c31dd3, 0x1af868c8,
889 0x0c5d0742, 0xd1b3e1a2, 0x5873200a, 0xf848465c,
890 0x0fc4d596, 0x609c18af, 0xc9f5a480, 0xd1a94a84,
891 0xa1431a3f, 0x7de8bb1a, 0x25f1256b, 0x1dcc732c, /* 50 */
892 0x6aa1549a, 0xa2367281, 0x32f2a77e, 0x82e62a0f,
893 0x045cbb56, 0x74b2027c, 0xd71a32d9, 0x022e7cb5,
894 0xe99be177, 0x60222fdf, 0xd69681ca, 0x9008ee2c,
895 0x32923db4, 0xcf82bf97, 0x38960a5b, 0xb3503d5b,
896 0x9bd4c7f2, 0x33c029c8, 0x1ef504a3, 0xdb249d3b,
897 0x91e89676, 0x4ca43b36, 0x9191433c, 0x465d5dc4,
898 0xf4dcb118, 0x9d11dd00, 0xb592f058, 0xdbe5ce30,
899 0x74790d92, 0x779850a8, 0x7180d25b, 0xfa951d99,
900 0x5990935a, 0x921cb022, 0x3b7c39bc, 0x6a38a7c7,
901 0xdc22703b, 0x142bab3b, 0x4e3d9479, 0x44bb8482, /* 60 */
902 0x8043abce, 0xfebe832a, 0x8e6a2f98, 0x4d43c4fe,
903 0xd192a70a, 0x802f3c3a, 0x5d11bbab, 0x2665d241,
904 0xb3f3a680, 0x3a8d223f, 0xcf82cdb4, 0x4ed28743,
905};
906
907/**************************************************************** 757/****************************************************************
908 Instruction tables 758 Instruction tables
909 *****************************************************************/ 759 *****************************************************************/
@@ -1499,55 +1349,59 @@ xd3_emit_bytes (xd3_stream *stream,
1499 \ 1349 \
1500 return xd3_emit_bytes (stream, output, buf + bufi, 10 - bufi) 1350 return xd3_emit_bytes (stream, output, buf + bufi, 10 - bufi)
1501 1351
1502#define IF_SIZEOF32(x) if (num < (1U << (7 * (x)))) return (x);
1503#define IF_SIZEOF64(x) if (num < (1ULL << (7 * (x)))) return (x);
1504
1505#if USE_UINT32 1352#if USE_UINT32
1506usize_t 1353usize_t
1507xd3_sizeof_uint32_t (uint32_t num) 1354xd3_sizeof_uint32_t (uint32_t num)
1508{ 1355{
1356#define IF_SIZEOF32(x) if (num < (1U << (7 * (x)))) return (x);
1509 IF_SIZEOF32(1); 1357 IF_SIZEOF32(1);
1510 IF_SIZEOF32(2); 1358 IF_SIZEOF32(2);
1511 IF_SIZEOF32(3); 1359 IF_SIZEOF32(3);
1512 IF_SIZEOF32(4); 1360 IF_SIZEOF32(4);
1361#undef IF_SIZEOF32
1513 return 5; 1362 return 5;
1514} 1363}
1515 1364
1516int 1365int
1517xd3_decode_uint32_t (xd3_stream *stream, uint32_t *val) 1366xd3_decode_uint32_t (xd3_stream *stream, uint32_t *val)
1518{ DECODE_INTEGER_TYPE (uint32_t, stream->dec_32part, UINT32_OFLOW_MASK); } 1367{
1368 DECODE_INTEGER_TYPE (uint32_t, stream->dec_32part, UINT32_OFLOW_MASK);
1369}
1519 1370
1520int 1371int
1521xd3_read_uint32_t (xd3_stream *stream, const uint8_t **inpp, 1372xd3_read_uint32_t (xd3_stream *stream, const uint8_t **inpp,
1522 const uint8_t *max, uint32_t *valp) 1373 const uint8_t *max, uint32_t *valp)
1523{ READ_INTEGER_TYPE (uint32_t, UINT32_OFLOW_MASK); } 1374{
1375 READ_INTEGER_TYPE (uint32_t, UINT32_OFLOW_MASK);
1376}
1524 1377
1525#if XD3_ENCODER 1378#if XD3_ENCODER
1526int 1379int
1527xd3_emit_uint32_t (xd3_stream *stream, xd3_output **output, uint32_t num) 1380xd3_emit_uint32_t (xd3_stream *stream, xd3_output **output, uint32_t num)
1528{ EMIT_INTEGER_TYPE (); } 1381{
1529#endif 1382 EMIT_INTEGER_TYPE ();
1530#endif 1383}
1384#endif /* XD3_ENCODER */
1385#endif /* USE_UINT32 */
1531 1386
1532#if USE_UINT64 1387#if USE_UINT64
1533int 1388int
1534xd3_decode_uint64_t (xd3_stream *stream, uint64_t *val) 1389xd3_decode_uint64_t (xd3_stream *stream, uint64_t *val)
1535{ DECODE_INTEGER_TYPE (uint64_t, stream->dec_64part, UINT64_OFLOW_MASK); } 1390{
1536 1391 DECODE_INTEGER_TYPE (uint64_t, stream->dec_64part, UINT64_OFLOW_MASK);
1537#if XD3_ENCODER 1392}
1538int
1539xd3_emit_uint64_t (xd3_stream *stream, xd3_output **output, uint64_t num)
1540{ EMIT_INTEGER_TYPE (); }
1541#endif
1542 1393
1543int 1394int
1544xd3_read_uint64_t (xd3_stream *stream, const uint8_t **inpp, 1395xd3_read_uint64_t (xd3_stream *stream, const uint8_t **inpp,
1545 const uint8_t *max, uint64_t *valp) 1396 const uint8_t *max, uint64_t *valp)
1546{ READ_INTEGER_TYPE (uint64_t, UINT64_OFLOW_MASK); } 1397{
1398 READ_INTEGER_TYPE (uint64_t, UINT64_OFLOW_MASK);
1399}
1547 1400
1548usize_t 1401usize_t
1549xd3_sizeof_uint64_t (uint64_t num) 1402xd3_sizeof_uint64_t (uint64_t num)
1550{ 1403{
1404#define IF_SIZEOF64(x) if (num < (1ULL << (7 * (x)))) return (x);
1551 IF_SIZEOF64(1); 1405 IF_SIZEOF64(1);
1552 IF_SIZEOF64(2); 1406 IF_SIZEOF64(2);
1553 IF_SIZEOF64(3); 1407 IF_SIZEOF64(3);
@@ -1557,11 +1411,18 @@ xd3_sizeof_uint64_t (uint64_t num)
1557 IF_SIZEOF64(7); 1411 IF_SIZEOF64(7);
1558 IF_SIZEOF64(8); 1412 IF_SIZEOF64(8);
1559 IF_SIZEOF64(9); 1413 IF_SIZEOF64(9);
1560 1414#undef IF_SIZEOF64
1561 return 10; 1415 return 10;
1562} 1416}
1563 1417
1564#endif 1418#if XD3_ENCODER
1419int
1420xd3_emit_uint64_t (xd3_stream *stream, xd3_output **output, uint64_t num)
1421{
1422 EMIT_INTEGER_TYPE ();
1423}
1424#endif /* XD3_ENCODER */
1425#endif /* USE_UINT64 */
1565 1426
1566/*********************************************************************** 1427/***********************************************************************
1567 Address cache stuff 1428 Address cache stuff
@@ -1928,11 +1789,13 @@ xd3_free_stream (xd3_stream *stream)
1928 xd3_free (stream, tmp); 1789 xd3_free (stream, tmp);
1929 } 1790 }
1930 1791
1792#if XD3_ENCODER
1931 xd3_free (stream, stream->large_table); 1793 xd3_free (stream, stream->large_table);
1932 xd3_free (stream, stream->small_table); 1794 xd3_free (stream, stream->small_table);
1795 xd3_free (stream, stream->large_hash.powers);
1796 xd3_free (stream, stream->small_hash.powers);
1933 xd3_free (stream, stream->small_prev); 1797 xd3_free (stream, stream->small_prev);
1934 1798
1935#if XD3_ENCODER
1936 { 1799 {
1937 int i; 1800 int i;
1938 for (i = 0; i < ENC_SECTS; i += 1) 1801 for (i = 0; i < ENC_SECTS; i += 1)
@@ -3158,7 +3021,7 @@ xd3_emit_hdr (xd3_stream *stream)
3158 inst_len = xd3_sizeof_output (INST_HEAD (stream)); 3021 inst_len = xd3_sizeof_output (INST_HEAD (stream));
3159 addr_len = xd3_sizeof_output (ADDR_HEAD (stream)); 3022 addr_len = xd3_sizeof_output (ADDR_HEAD (stream));
3160 3023
3161 /* The enc_len field is a redundency for future extensions.*/ 3024 /* The enc_len field is a redundency for future extensions. */
3162 enc_len = (1 + (xd3_sizeof_size (tgt_len) + 3025 enc_len = (1 + (xd3_sizeof_size (tgt_len) +
3163 xd3_sizeof_size (data_len) + 3026 xd3_sizeof_size (data_len) +
3164 xd3_sizeof_size (inst_len) + 3027 xd3_sizeof_size (inst_len) +
@@ -3299,6 +3162,7 @@ xd3_alloc_iopt (xd3_stream *stream, usize_t elts)
3299static int 3162static int
3300xd3_encode_init (xd3_stream *stream, int full_init) 3163xd3_encode_init (xd3_stream *stream, int full_init)
3301{ 3164{
3165 int ret;
3302 int i; 3166 int i;
3303 3167
3304 if (full_init) 3168 if (full_init)
@@ -3315,9 +3179,13 @@ xd3_encode_init (xd3_stream *stream, int full_init)
3315 usize_t hash_values = stream->src->max_winsize / 3179 usize_t hash_values = stream->src->max_winsize /
3316 stream->smatcher.large_step; 3180 stream->smatcher.large_step;
3317 3181
3318 xd3_size_hashtable (stream, 3182 if ((ret = xd3_size_hashtable (stream,
3319 hash_values, 3183 hash_values,
3320 & stream->large_hash); 3184 stream->smatcher.large_look,
3185 & stream->large_hash)))
3186 {
3187 return ret;
3188 }
3321 } 3189 }
3322 3190
3323 if (small_comp) 3191 if (small_comp)
@@ -3328,9 +3196,13 @@ xd3_encode_init (xd3_stream *stream, int full_init)
3328 * sense. @@@ */ 3196 * sense. @@@ */
3329 usize_t hash_values = stream->winsize; 3197 usize_t hash_values = stream->winsize;
3330 3198
3331 xd3_size_hashtable (stream, 3199 if ((ret = xd3_size_hashtable (stream,
3332 hash_values, 3200 hash_values,
3333 & stream->small_hash); 3201 stream->smatcher.small_look,
3202 & stream->small_hash)))
3203 {
3204 return ret;
3205 }
3334 } 3206 }
3335 } 3207 }
3336 3208
@@ -4627,7 +4499,7 @@ xd3_verify_large_state (xd3_stream *stream,
4627 const uint8_t *inp, 4499 const uint8_t *inp,
4628 usize_t x_cksum) 4500 usize_t x_cksum)
4629{ 4501{
4630 usize_t cksum = xd3_large_cksum (inp, stream->smatcher.large_look); 4502 usize_t cksum = xd3_large_cksum (&stream->large_hash, inp, stream->smatcher.large_look);
4631 XD3_ASSERT (cksum == x_cksum); 4503 XD3_ASSERT (cksum == x_cksum);
4632} 4504}
4633static void 4505static void
@@ -4771,8 +4643,12 @@ xd3_srcwin_move_point (xd3_stream *stream, usize_t *next_move_point)
4771 4643
4772 do 4644 do
4773 { 4645 {
4774 usize_t cksum = xd3_large_cksum (stream->src->curblk + blkpos, 4646 /* TODO: This would be significantly faster if the compiler
4775 stream->smatcher.large_look); 4647 * knew stream->smatcher.large_look (which the template for
4648 * xd3_string_match_* allows). */
4649 usize_t cksum = xd3_large_cksum (&stream->large_hash,
4650 stream->src->curblk + blkpos,
4651 stream->smatcher.large_look);
4776 usize_t hval = xd3_checksum_hash (& stream->large_hash, cksum); 4652 usize_t hval = xd3_checksum_hash (& stream->large_hash, cksum);
4777 4653
4778 stream->large_table[hval] = 4654 stream->large_table[hval] =
@@ -4934,7 +4810,7 @@ XD3_TEMPLATE(xd3_string_match_) (xd3_stream *stream)
4934 return ret; 4810 return ret;
4935 } 4811 }
4936 4812
4937 lcksum = xd3_large_cksum (inp, LLOOK); 4813 lcksum = xd3_large_cksum (&stream->large_hash, inp, LLOOK);
4938 } 4814 }
4939 4815
4940 /* TRYLAZYLEN: True if a certain length match should be followed by 4816 /* TRYLAZYLEN: True if a certain length match should be followed by
@@ -5110,7 +4986,7 @@ XD3_TEMPLATE(xd3_string_match_) (xd3_stream *stream)
5110 4986
5111 if (DO_LARGE && (stream->input_position + LLOOK < stream->avail_in)) 4987 if (DO_LARGE && (stream->input_position + LLOOK < stream->avail_in))
5112 { 4988 {
5113 lcksum = xd3_large_cksum_update (lcksum, inp, LLOOK); 4989 lcksum = xd3_large_cksum_update (&stream->large_hash, lcksum, inp, LLOOK);
5114 } 4990 }
5115 } 4991 }
5116 4992