Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
486e45ff
Commit
486e45ff
authored
Apr 24, 2020
by
Madelyn Olson
Browse files
Implemented CRC64 based on slice by 4
parent
022f0944
Changes
5
Hide whitespace changes
Inline
Side-by-side
src/Makefile
View file @
486e45ff
...
...
@@ -206,9 +206,9 @@ endif
REDIS_SERVER_NAME
=
redis-server
REDIS_SENTINEL_NAME
=
redis-sentinel
REDIS_SERVER_OBJ
=
adlist.o quicklist.o ae.o anet.o dict.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o crc64.o bitops.o sentinel.o notify.o setproctitle.o blocked.o hyperloglog.o latency.o sparkline.o redis-check-rdb.o redis-check-aof.o geo.o lazyfree.o module.o evict.o expire.o geohash.o geohash_helper.o childinfo.o defrag.o siphash.o rax.o t_stream.o listpack.o localtime.o lolwut.o lolwut5.o lolwut6.o acl.o gopher.o tracking.o connection.o tls.o sha256.o timeout.o
REDIS_SERVER_OBJ
=
adlist.o quicklist.o ae.o anet.o dict.o server.o sds.o zmalloc.o lzf_c.o lzf_d.o pqsort.o zipmap.o sha1.o ziplist.o release.o networking.o util.o object.o db.o replication.o rdb.o t_string.o t_list.o t_set.o t_zset.o t_hash.o config.o aof.o pubsub.o multi.o debug.o sort.o intset.o syncio.o cluster.o crc16.o endianconv.o slowlog.o scripting.o bio.o rio.o rand.o memtest.o
crcspeed.o
crc64.o bitops.o sentinel.o notify.o setproctitle.o blocked.o hyperloglog.o latency.o sparkline.o redis-check-rdb.o redis-check-aof.o geo.o lazyfree.o module.o evict.o expire.o geohash.o geohash_helper.o childinfo.o defrag.o siphash.o rax.o t_stream.o listpack.o localtime.o lolwut.o lolwut5.o lolwut6.o acl.o gopher.o tracking.o connection.o tls.o sha256.o timeout.o
REDIS_CLI_NAME
=
redis-cli
REDIS_CLI_OBJ
=
anet.o adlist.o dict.o redis-cli.o zmalloc.o release.o ae.o crc64.o siphash.o crc16.o
REDIS_CLI_OBJ
=
anet.o adlist.o dict.o redis-cli.o zmalloc.o release.o ae.o
crcspeed.o
crc64.o siphash.o crc16.o
REDIS_BENCHMARK_NAME
=
redis-benchmark
REDIS_BENCHMARK_OBJ
=
ae.o anet.o redis-benchmark.o adlist.o dict.o zmalloc.o siphash.o
REDIS_CHECK_RDB_NAME
=
redis-check-rdb
...
...
src/crc64.c
View file @
486e45ff
/* Redis uses the CRC64 variant with "Jones" coefficients and init value of 0.
*
* Specification of this CRC64 variant follows:
* Name: crc-64-jones
* Width: 64 bites
* Poly: 0xad93d23594c935a9
* Reflected In: True
* Xor_In: 0xffffffffffffffff
* Reflected_Out: True
* Xor_Out: 0x0
* Check("123456789"): 0xe9c6d914c4b8d9ca
*
* Copyright (c) 2012, Salvatore Sanfilippo <antirez at gmail dot com>
/* Copyright (c) 2014, Matt Stancliff <matt@genges.com>
* Copyright (c) 2020, Amazon Web Services
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
...
...
@@ -37,159 +26,134 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE. */
#include <stdint.h>
static
const
uint64_t
crc64_tab
[
256
]
=
{
UINT64_C
(
0x0000000000000000
),
UINT64_C
(
0x7ad870c830358979
),
UINT64_C
(
0xf5b0e190606b12f2
),
UINT64_C
(
0x8f689158505e9b8b
),
UINT64_C
(
0xc038e5739841b68f
),
UINT64_C
(
0xbae095bba8743ff6
),
UINT64_C
(
0x358804e3f82aa47d
),
UINT64_C
(
0x4f50742bc81f2d04
),
UINT64_C
(
0xab28ecb46814fe75
),
UINT64_C
(
0xd1f09c7c5821770c
),
UINT64_C
(
0x5e980d24087fec87
),
UINT64_C
(
0x24407dec384a65fe
),
UINT64_C
(
0x6b1009c7f05548fa
),
UINT64_C
(
0x11c8790fc060c183
),
UINT64_C
(
0x9ea0e857903e5a08
),
UINT64_C
(
0xe478989fa00bd371
),
UINT64_C
(
0x7d08ff3b88be6f81
),
UINT64_C
(
0x07d08ff3b88be6f8
),
UINT64_C
(
0x88b81eabe8d57d73
),
UINT64_C
(
0xf2606e63d8e0f40a
),
UINT64_C
(
0xbd301a4810ffd90e
),
UINT64_C
(
0xc7e86a8020ca5077
),
UINT64_C
(
0x4880fbd87094cbfc
),
UINT64_C
(
0x32588b1040a14285
),
UINT64_C
(
0xd620138fe0aa91f4
),
UINT64_C
(
0xacf86347d09f188d
),
UINT64_C
(
0x2390f21f80c18306
),
UINT64_C
(
0x594882d7b0f40a7f
),
UINT64_C
(
0x1618f6fc78eb277b
),
UINT64_C
(
0x6cc0863448deae02
),
UINT64_C
(
0xe3a8176c18803589
),
UINT64_C
(
0x997067a428b5bcf0
),
UINT64_C
(
0xfa11fe77117cdf02
),
UINT64_C
(
0x80c98ebf2149567b
),
UINT64_C
(
0x0fa11fe77117cdf0
),
UINT64_C
(
0x75796f2f41224489
),
UINT64_C
(
0x3a291b04893d698d
),
UINT64_C
(
0x40f16bccb908e0f4
),
UINT64_C
(
0xcf99fa94e9567b7f
),
UINT64_C
(
0xb5418a5cd963f206
),
UINT64_C
(
0x513912c379682177
),
UINT64_C
(
0x2be1620b495da80e
),
UINT64_C
(
0xa489f35319033385
),
UINT64_C
(
0xde51839b2936bafc
),
UINT64_C
(
0x9101f7b0e12997f8
),
UINT64_C
(
0xebd98778d11c1e81
),
UINT64_C
(
0x64b116208142850a
),
UINT64_C
(
0x1e6966e8b1770c73
),
UINT64_C
(
0x8719014c99c2b083
),
UINT64_C
(
0xfdc17184a9f739fa
),
UINT64_C
(
0x72a9e0dcf9a9a271
),
UINT64_C
(
0x08719014c99c2b08
),
UINT64_C
(
0x4721e43f0183060c
),
UINT64_C
(
0x3df994f731b68f75
),
UINT64_C
(
0xb29105af61e814fe
),
UINT64_C
(
0xc849756751dd9d87
),
UINT64_C
(
0x2c31edf8f1d64ef6
),
UINT64_C
(
0x56e99d30c1e3c78f
),
UINT64_C
(
0xd9810c6891bd5c04
),
UINT64_C
(
0xa3597ca0a188d57d
),
UINT64_C
(
0xec09088b6997f879
),
UINT64_C
(
0x96d1784359a27100
),
UINT64_C
(
0x19b9e91b09fcea8b
),
UINT64_C
(
0x636199d339c963f2
),
UINT64_C
(
0xdf7adabd7a6e2d6f
),
UINT64_C
(
0xa5a2aa754a5ba416
),
UINT64_C
(
0x2aca3b2d1a053f9d
),
UINT64_C
(
0x50124be52a30b6e4
),
UINT64_C
(
0x1f423fcee22f9be0
),
UINT64_C
(
0x659a4f06d21a1299
),
UINT64_C
(
0xeaf2de5e82448912
),
UINT64_C
(
0x902aae96b271006b
),
UINT64_C
(
0x74523609127ad31a
),
UINT64_C
(
0x0e8a46c1224f5a63
),
UINT64_C
(
0x81e2d7997211c1e8
),
UINT64_C
(
0xfb3aa75142244891
),
UINT64_C
(
0xb46ad37a8a3b6595
),
UINT64_C
(
0xceb2a3b2ba0eecec
),
UINT64_C
(
0x41da32eaea507767
),
UINT64_C
(
0x3b024222da65fe1e
),
UINT64_C
(
0xa2722586f2d042ee
),
UINT64_C
(
0xd8aa554ec2e5cb97
),
UINT64_C
(
0x57c2c41692bb501c
),
UINT64_C
(
0x2d1ab4dea28ed965
),
UINT64_C
(
0x624ac0f56a91f461
),
UINT64_C
(
0x1892b03d5aa47d18
),
UINT64_C
(
0x97fa21650afae693
),
UINT64_C
(
0xed2251ad3acf6fea
),
UINT64_C
(
0x095ac9329ac4bc9b
),
UINT64_C
(
0x7382b9faaaf135e2
),
UINT64_C
(
0xfcea28a2faafae69
),
UINT64_C
(
0x8632586aca9a2710
),
UINT64_C
(
0xc9622c4102850a14
),
UINT64_C
(
0xb3ba5c8932b0836d
),
UINT64_C
(
0x3cd2cdd162ee18e6
),
UINT64_C
(
0x460abd1952db919f
),
UINT64_C
(
0x256b24ca6b12f26d
),
UINT64_C
(
0x5fb354025b277b14
),
UINT64_C
(
0xd0dbc55a0b79e09f
),
UINT64_C
(
0xaa03b5923b4c69e6
),
UINT64_C
(
0xe553c1b9f35344e2
),
UINT64_C
(
0x9f8bb171c366cd9b
),
UINT64_C
(
0x10e3202993385610
),
UINT64_C
(
0x6a3b50e1a30ddf69
),
UINT64_C
(
0x8e43c87e03060c18
),
UINT64_C
(
0xf49bb8b633338561
),
UINT64_C
(
0x7bf329ee636d1eea
),
UINT64_C
(
0x012b592653589793
),
UINT64_C
(
0x4e7b2d0d9b47ba97
),
UINT64_C
(
0x34a35dc5ab7233ee
),
UINT64_C
(
0xbbcbcc9dfb2ca865
),
UINT64_C
(
0xc113bc55cb19211c
),
UINT64_C
(
0x5863dbf1e3ac9dec
),
UINT64_C
(
0x22bbab39d3991495
),
UINT64_C
(
0xadd33a6183c78f1e
),
UINT64_C
(
0xd70b4aa9b3f20667
),
UINT64_C
(
0x985b3e827bed2b63
),
UINT64_C
(
0xe2834e4a4bd8a21a
),
UINT64_C
(
0x6debdf121b863991
),
UINT64_C
(
0x1733afda2bb3b0e8
),
UINT64_C
(
0xf34b37458bb86399
),
UINT64_C
(
0x8993478dbb8deae0
),
UINT64_C
(
0x06fbd6d5ebd3716b
),
UINT64_C
(
0x7c23a61ddbe6f812
),
UINT64_C
(
0x3373d23613f9d516
),
UINT64_C
(
0x49aba2fe23cc5c6f
),
UINT64_C
(
0xc6c333a67392c7e4
),
UINT64_C
(
0xbc1b436e43a74e9d
),
UINT64_C
(
0x95ac9329ac4bc9b5
),
UINT64_C
(
0xef74e3e19c7e40cc
),
UINT64_C
(
0x601c72b9cc20db47
),
UINT64_C
(
0x1ac40271fc15523e
),
UINT64_C
(
0x5594765a340a7f3a
),
UINT64_C
(
0x2f4c0692043ff643
),
UINT64_C
(
0xa02497ca54616dc8
),
UINT64_C
(
0xdafce7026454e4b1
),
UINT64_C
(
0x3e847f9dc45f37c0
),
UINT64_C
(
0x445c0f55f46abeb9
),
UINT64_C
(
0xcb349e0da4342532
),
UINT64_C
(
0xb1eceec59401ac4b
),
UINT64_C
(
0xfebc9aee5c1e814f
),
UINT64_C
(
0x8464ea266c2b0836
),
UINT64_C
(
0x0b0c7b7e3c7593bd
),
UINT64_C
(
0x71d40bb60c401ac4
),
UINT64_C
(
0xe8a46c1224f5a634
),
UINT64_C
(
0x927c1cda14c02f4d
),
UINT64_C
(
0x1d148d82449eb4c6
),
UINT64_C
(
0x67ccfd4a74ab3dbf
),
UINT64_C
(
0x289c8961bcb410bb
),
UINT64_C
(
0x5244f9a98c8199c2
),
UINT64_C
(
0xdd2c68f1dcdf0249
),
UINT64_C
(
0xa7f41839ecea8b30
),
UINT64_C
(
0x438c80a64ce15841
),
UINT64_C
(
0x3954f06e7cd4d138
),
UINT64_C
(
0xb63c61362c8a4ab3
),
UINT64_C
(
0xcce411fe1cbfc3ca
),
UINT64_C
(
0x83b465d5d4a0eece
),
UINT64_C
(
0xf96c151de49567b7
),
UINT64_C
(
0x76048445b4cbfc3c
),
UINT64_C
(
0x0cdcf48d84fe7545
),
UINT64_C
(
0x6fbd6d5ebd3716b7
),
UINT64_C
(
0x15651d968d029fce
),
UINT64_C
(
0x9a0d8ccedd5c0445
),
UINT64_C
(
0xe0d5fc06ed698d3c
),
UINT64_C
(
0xaf85882d2576a038
),
UINT64_C
(
0xd55df8e515432941
),
UINT64_C
(
0x5a3569bd451db2ca
),
UINT64_C
(
0x20ed197575283bb3
),
UINT64_C
(
0xc49581ead523e8c2
),
UINT64_C
(
0xbe4df122e51661bb
),
UINT64_C
(
0x3125607ab548fa30
),
UINT64_C
(
0x4bfd10b2857d7349
),
UINT64_C
(
0x04ad64994d625e4d
),
UINT64_C
(
0x7e7514517d57d734
),
UINT64_C
(
0xf11d85092d094cbf
),
UINT64_C
(
0x8bc5f5c11d3cc5c6
),
UINT64_C
(
0x12b5926535897936
),
UINT64_C
(
0x686de2ad05bcf04f
),
UINT64_C
(
0xe70573f555e26bc4
),
UINT64_C
(
0x9ddd033d65d7e2bd
),
UINT64_C
(
0xd28d7716adc8cfb9
),
UINT64_C
(
0xa85507de9dfd46c0
),
UINT64_C
(
0x273d9686cda3dd4b
),
UINT64_C
(
0x5de5e64efd965432
),
UINT64_C
(
0xb99d7ed15d9d8743
),
UINT64_C
(
0xc3450e196da80e3a
),
UINT64_C
(
0x4c2d9f413df695b1
),
UINT64_C
(
0x36f5ef890dc31cc8
),
UINT64_C
(
0x79a59ba2c5dc31cc
),
UINT64_C
(
0x037deb6af5e9b8b5
),
UINT64_C
(
0x8c157a32a5b7233e
),
UINT64_C
(
0xf6cd0afa9582aa47
),
UINT64_C
(
0x4ad64994d625e4da
),
UINT64_C
(
0x300e395ce6106da3
),
UINT64_C
(
0xbf66a804b64ef628
),
UINT64_C
(
0xc5bed8cc867b7f51
),
UINT64_C
(
0x8aeeace74e645255
),
UINT64_C
(
0xf036dc2f7e51db2c
),
UINT64_C
(
0x7f5e4d772e0f40a7
),
UINT64_C
(
0x05863dbf1e3ac9de
),
UINT64_C
(
0xe1fea520be311aaf
),
UINT64_C
(
0x9b26d5e88e0493d6
),
UINT64_C
(
0x144e44b0de5a085d
),
UINT64_C
(
0x6e963478ee6f8124
),
UINT64_C
(
0x21c640532670ac20
),
UINT64_C
(
0x5b1e309b16452559
),
UINT64_C
(
0xd476a1c3461bbed2
),
UINT64_C
(
0xaeaed10b762e37ab
),
UINT64_C
(
0x37deb6af5e9b8b5b
),
UINT64_C
(
0x4d06c6676eae0222
),
UINT64_C
(
0xc26e573f3ef099a9
),
UINT64_C
(
0xb8b627f70ec510d0
),
UINT64_C
(
0xf7e653dcc6da3dd4
),
UINT64_C
(
0x8d3e2314f6efb4ad
),
UINT64_C
(
0x0256b24ca6b12f26
),
UINT64_C
(
0x788ec2849684a65f
),
UINT64_C
(
0x9cf65a1b368f752e
),
UINT64_C
(
0xe62e2ad306bafc57
),
UINT64_C
(
0x6946bb8b56e467dc
),
UINT64_C
(
0x139ecb4366d1eea5
),
UINT64_C
(
0x5ccebf68aecec3a1
),
UINT64_C
(
0x2616cfa09efb4ad8
),
UINT64_C
(
0xa97e5ef8cea5d153
),
UINT64_C
(
0xd3a62e30fe90582a
),
UINT64_C
(
0xb0c7b7e3c7593bd8
),
UINT64_C
(
0xca1fc72bf76cb2a1
),
UINT64_C
(
0x45775673a732292a
),
UINT64_C
(
0x3faf26bb9707a053
),
UINT64_C
(
0x70ff52905f188d57
),
UINT64_C
(
0x0a2722586f2d042e
),
UINT64_C
(
0x854fb3003f739fa5
),
UINT64_C
(
0xff97c3c80f4616dc
),
UINT64_C
(
0x1bef5b57af4dc5ad
),
UINT64_C
(
0x61372b9f9f784cd4
),
UINT64_C
(
0xee5fbac7cf26d75f
),
UINT64_C
(
0x9487ca0fff135e26
),
UINT64_C
(
0xdbd7be24370c7322
),
UINT64_C
(
0xa10fceec0739fa5b
),
UINT64_C
(
0x2e675fb4576761d0
),
UINT64_C
(
0x54bf2f7c6752e8a9
),
UINT64_C
(
0xcdcf48d84fe75459
),
UINT64_C
(
0xb71738107fd2dd20
),
UINT64_C
(
0x387fa9482f8c46ab
),
UINT64_C
(
0x42a7d9801fb9cfd2
),
UINT64_C
(
0x0df7adabd7a6e2d6
),
UINT64_C
(
0x772fdd63e7936baf
),
UINT64_C
(
0xf8474c3bb7cdf024
),
UINT64_C
(
0x829f3cf387f8795d
),
UINT64_C
(
0x66e7a46c27f3aa2c
),
UINT64_C
(
0x1c3fd4a417c62355
),
UINT64_C
(
0x935745fc4798b8de
),
UINT64_C
(
0xe98f353477ad31a7
),
UINT64_C
(
0xa6df411fbfb21ca3
),
UINT64_C
(
0xdc0731d78f8795da
),
UINT64_C
(
0x536fa08fdfd90e51
),
UINT64_C
(
0x29b7d047efec8728
),
};
#include "crc64.h"
#include "crcspeed.h"
static
uint64_t
crc64_table
[
8
][
256
]
=
{{
0
}};
uint64_t
crc64
(
uint64_t
crc
,
const
unsigned
char
*
s
,
uint64_t
l
)
{
uint64_t
j
;
/******************** BEGIN GENERATED PYCRC FUNCTIONS ********************/
/**
* Generated on Sun Dec 21 14:14:07 2014,
* by pycrc v0.8.2, https://www.tty1.net/pycrc/
*
* LICENSE ON GENERATED CODE:
* ==========================
* As of version 0.6, pycrc is released under the terms of the MIT licence.
* The code generated by pycrc is not considered a substantial portion of the
* software, therefore the author of pycrc will not claim any copyright on
* the generated code.
* ==========================
*
* CRC configuration:
* Width = 64
* Poly = 0xad93d23594c935a9
* XorIn = 0xffffffffffffffff
* ReflectIn = True
* XorOut = 0x0000000000000000
* ReflectOut = True
* Algorithm = bit-by-bit-fast
*
* Modifications after generation (by matt):
* - included finalize step in-line with update for single-call generation
* - re-worked some inner variable architectures
* - adjusted function parameters to match expected prototypes.
*****************************************************************************/
/**
* Reflect all bits of a \a data word of \a data_len bytes.
*
* \param data The data word to be reflected.
* \param data_len The width of \a data expressed in number of bits.
* \return The reflected data.
*****************************************************************************/
static
inline
uint_fast64_t
crc_reflect
(
uint_fast64_t
data
,
size_t
data_len
)
{
uint_fast64_t
ret
=
data
&
0x01
;
for
(
size_t
i
=
1
;
i
<
data_len
;
i
++
)
{
data
>>=
1
;
ret
=
(
ret
<<
1
)
|
(
data
&
0x01
);
}
return
ret
;
}
/**
* Update the crc value with new data.
*
* \param crc The current crc value.
* \param data Pointer to a buffer of \a data_len bytes.
* \param data_len Number of bytes in the \a data buffer.
* \return The updated crc value.
******************************************************************************/
uint64_t
_crc64
(
uint_fast64_t
crc
,
const
void
*
in_data
,
const
uint64_t
len
)
{
const
uint8_t
*
data
=
in_data
;
unsigned
long
long
bit
;
for
(
j
=
0
;
j
<
l
;
j
++
)
{
uint8_t
byte
=
s
[
j
];
crc
=
crc64_tab
[(
uint8_t
)
crc
^
byte
]
^
(
crc
>>
8
);
for
(
uint64_t
offset
=
0
;
offset
<
len
;
offset
++
)
{
uint8_t
c
=
data
[
offset
];
for
(
uint_fast8_t
i
=
0x01
;
i
&
0xff
;
i
<<=
1
)
{
bit
=
crc
&
0x8000000000000000
;
if
(
c
&
i
)
{
bit
=
!
bit
;
}
crc
<<=
1
;
if
(
bit
)
{
crc
^=
POLY
;
}
}
crc
&=
0xffffffffffffffff
;
}
return
crc
;
crc
=
crc
&
0xffffffffffffffff
;
return
crc_reflect
(
crc
,
64
)
^
0x0000000000000000
;
}
/******************** END GENERATED PYCRC FUNCTIONS ********************/
/* Initializes the 16KB lookup tables. */
void
crc64_init
(
void
)
{
crcspeed64native_init
(
_crc64
,
crc64_table
);
}
/* Compute crc64 */
uint64_t
crc64
(
uint64_t
crc
,
const
unsigned
char
*
s
,
uint64_t
l
)
{
return
crcspeed64native
(
crc64_table
,
crc
,
(
void
*
)
s
,
l
);
}
/* Test main */
#ifdef
REDIS_TEST
#if
def
ined(REDIS_TEST) || defined(
REDIS_TEST
_MAIN)
#include <stdio.h>
#define UNUSED(x) (void)(x)
int
crc64Test
(
int
argc
,
char
*
argv
[])
{
UNUSED
(
argc
);
UNUSED
(
argv
);
printf
(
"e9c6d914c4b8d9ca == %016llx
\n
"
,
(
unsigned
long
long
)
crc64
(
0
,(
unsigned
char
*
)
"123456789"
,
9
));
crc64_init
();
printf
(
"[calcula]: e9c6d914c4b8d9ca == %016"
PRIx64
"
\n
"
,
(
uint64_t
)
_crc64
(
0
,
"123456789"
,
9
));
printf
(
"[64speed]: e9c6d914c4b8d9ca == %016"
PRIx64
"
\n
"
,
(
uint64_t
)
crc64speed
(
0
,
"123456789"
,
9
));
char
li
[]
=
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed "
"do eiusmod tempor incididunt ut labore et dolore magna "
"aliqua. Ut enim ad minim veniam, quis nostrud exercitation "
"ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis "
"aute irure dolor in reprehenderit in voluptate velit esse "
"cillum dolore eu fugiat nulla pariatur. Excepteur sint "
"occaecat cupidatat non proident, sunt in culpa qui officia "
"deserunt mollit anim id est laborum."
;
printf
(
"[calcula]: c7794709e69683b3 == %016"
PRIx64
"
\n
"
,
(
uint64_t
)
_crc64
(
0
,
li
,
sizeof
(
li
)));
printf
(
"[64speed]: c7794709e69683b3 == %016"
PRIx64
"
\n
"
,
(
uint64_t
)
crc64
(
0
,
li
,
sizeof
(
li
)));
return
0
;
}
#endif
#ifdef REDIS_TEST_MAIN
int
main
(
int
argc
,
char
*
argv
[])
{
return
crc64Test
(
argc
,
argv
);
}
#endif
src/crc64.h
View file @
486e45ff
...
...
@@ -3,6 +3,7 @@
#include <stdint.h>
void
crc64_init
(
void
);
uint64_t
crc64
(
uint64_t
crc
,
const
unsigned
char
*
s
,
uint64_t
l
);
#ifdef REDIS_TEST
...
...
src/rdb.c
View file @
486e45ff
...
...
@@ -2291,7 +2291,8 @@ int rdbLoadRio(rio *rdb, int rdbflags, rdbSaveInfo *rsi) {
if
(
cksum
==
0
)
{
serverLog
(
LL_WARNING
,
"RDB file was saved with checksum disabled: no check performed."
);
}
else
if
(
cksum
!=
expected
)
{
serverLog
(
LL_WARNING
,
"Wrong RDB checksum. Aborting now."
);
serverLog
(
LL_WARNING
,
"Wrong RDB checksum expected: (%llx) but "
"got (%llx). Aborting now."
,
expected
,
cksum
);
rdbExitReportCorruptRDB
(
"RDB CRC error"
);
}
}
...
...
src/server.c
View file @
486e45ff
...
...
@@ -2892,6 +2892,7 @@ void initServer(void) {
scriptingInit
(
1
);
slowlogInit
();
latencyMonitorInit
();
crc64_init
();
}
/* Some steps in server initialization need to be done last (after modules
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment