correct CRC32
parent
63978b63ed
commit
530c17aaa1
3
HISTORY
3
HISTORY
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
Version 1.38 2018-06-01
|
Version 1.38 2018-06-07
|
||||||
* connection_pool.c: set err_no to 0 when success
|
* connection_pool.c: set err_no to 0 when success
|
||||||
* shared_func.h: add functions float2buff / buff2float, double2buff / buff2double
|
* shared_func.h: add functions float2buff / buff2float, double2buff / buff2double
|
||||||
* logger.h: add function log_get_level_caption
|
* logger.h: add function log_get_level_caption
|
||||||
|
|
@ -7,6 +7,7 @@ Version 1.38 2018-06-01
|
||||||
* add files: multi_socket_client.[hc]
|
* add files: multi_socket_client.[hc]
|
||||||
* ioevent.[hc]: remove care_events in FreeBSD or MacOS
|
* ioevent.[hc]: remove care_events in FreeBSD or MacOS
|
||||||
* add skiplist_set.[hc] and skiplist bug fixed
|
* add skiplist_set.[hc] and skiplist bug fixed
|
||||||
|
* correct CRC32
|
||||||
|
|
||||||
Version 1.37 2018-02-24
|
Version 1.37 2018-02-24
|
||||||
* ini_file_reader.c function annotations LOCAL_IP_GET support index, such as:
|
* ini_file_reader.c function annotations LOCAL_IP_GET support index, such as:
|
||||||
|
|
|
||||||
|
|
@ -1370,7 +1370,7 @@ static unsigned int crc_table[256] = {
|
||||||
#define CRC32_BODY(init_value) \
|
#define CRC32_BODY(init_value) \
|
||||||
unsigned char *pKey; \
|
unsigned char *pKey; \
|
||||||
unsigned char *pEnd; \
|
unsigned char *pEnd; \
|
||||||
int crc; \
|
int64_t crc; \
|
||||||
\
|
\
|
||||||
crc = init_value; \
|
crc = init_value; \
|
||||||
pEnd = (unsigned char *)key + key_len; \
|
pEnd = (unsigned char *)key + key_len; \
|
||||||
|
|
@ -1383,14 +1383,13 @@ int CRC32(const void *key, const int key_len)
|
||||||
{
|
{
|
||||||
CRC32_BODY(CRC32_XINIT)
|
CRC32_BODY(CRC32_XINIT)
|
||||||
|
|
||||||
return crc ^ CRC32_XOROT;
|
return (int)(crc ^ CRC32_XOROT);
|
||||||
}
|
}
|
||||||
|
|
||||||
int CRC32_ex(const void *key, const int key_len, \
|
int64_t CRC32_ex(const void *key, const int key_len, \
|
||||||
const int init_value)
|
const int64_t init_value)
|
||||||
{
|
{
|
||||||
CRC32_BODY(init_value)
|
CRC32_BODY(init_value)
|
||||||
|
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -351,8 +351,8 @@ int simple_hash_ex(const void* key, const int key_len, \
|
||||||
const int init_value);
|
const int init_value);
|
||||||
|
|
||||||
int CRC32(const void *key, const int key_len);
|
int CRC32(const void *key, const int key_len);
|
||||||
int CRC32_ex(const void *key, const int key_len, \
|
int64_t CRC32_ex(const void *key, const int key_len, \
|
||||||
const int init_value);
|
const int64_t init_value);
|
||||||
|
|
||||||
#define CRC32_FINAL(crc) (crc ^ CRC32_XOROT)
|
#define CRC32_FINAL(crc) (crc ^ CRC32_XOROT)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ LIB_PATH = -lfastcommon -lpthread
|
||||||
|
|
||||||
ALL_PRGS = test_allocator test_skiplist test_multi_skiplist test_mblock test_blocked_queue \
|
ALL_PRGS = test_allocator test_skiplist test_multi_skiplist test_mblock test_blocked_queue \
|
||||||
test_id_generator test_ini_parser test_char_convert test_char_convert_loader \
|
test_id_generator test_ini_parser test_char_convert test_char_convert_loader \
|
||||||
test_logger test_skiplist_set
|
test_logger test_skiplist_set test_crc32
|
||||||
|
|
||||||
all: $(ALL_PRGS)
|
all: $(ALL_PRGS)
|
||||||
.c:
|
.c:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,46 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
#include "fastcommon/logger.h"
|
||||||
|
#include "fastcommon/shared_func.h"
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
int result;
|
||||||
|
char *filename;
|
||||||
|
char *content;
|
||||||
|
int64_t file_size;
|
||||||
|
int64_t crc32;
|
||||||
|
int byte1, byte2;
|
||||||
|
|
||||||
|
if (argc < 2) {
|
||||||
|
fprintf(stderr, "Usage: %s <filename>\n", argv[0]);
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
filename = argv[1];
|
||||||
|
|
||||||
|
log_init();
|
||||||
|
result = getFileContent(filename, &content, &file_size);
|
||||||
|
if (result != 0) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
printf("file_size: %"PRId64"\n", file_size);
|
||||||
|
|
||||||
|
crc32 = CRC32(content, (int)file_size);
|
||||||
|
printf("crc32: %x\n", (int)crc32);
|
||||||
|
|
||||||
|
byte1 = (int)(file_size / 2);
|
||||||
|
byte2 = (int)(file_size - byte1);
|
||||||
|
crc32 = CRC32_XINIT;
|
||||||
|
crc32 = CRC32_ex(content, byte1, crc32);
|
||||||
|
crc32 = CRC32_ex(content + byte1, byte2, crc32);
|
||||||
|
crc32 = CRC32_FINAL(crc32);
|
||||||
|
printf("crc32: %x\n", (int)crc32);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue