增加mesa_fuzzy中对blocksize=0情况下的异常处理
This commit is contained in:
@@ -44,9 +44,10 @@ typedef struct
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned long long orilen;
|
||||
IVI_t * ivi; //ÿһ<C3BF><D2BB>handle<6C><65><EFBFBD>汣<EFBFBD><E6B1A3>һ<EFBFBD><D2BB>IVIָ<49>룬һ<EBA3AC><D2BB>IVI<56><49><EFBFBD>汣<EFBFBD><E6B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ƭ
|
||||
unsigned long long effective_length;
|
||||
unsigned long long orilen;
|
||||
IVI_t * ivi; //ÿһ<C3BF><D2BB>handle<6C><65><EFBFBD>汣<EFBFBD><E6B1A3>һ<EFBFBD><D2BB>IVIָ<49>룬һ<EBA3AC><D2BB>IVI<56><49><EFBFBD>汣<EFBFBD><E6B1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>Ƭ
|
||||
unsigned long long effective_length;
|
||||
unsigned long long blocksize;
|
||||
}fuzzy_handle_inner_t;
|
||||
|
||||
|
||||
@@ -78,6 +79,7 @@ void fuzzy_hash_merge(IVI_seg_t * seg, void * user_para);
|
||||
void fuzzy_hash_merge_new(IVI_seg_t * seg, void * user_para);
|
||||
void fuzzy_hash_length(IVI_seg_t * seg, void * user_para);
|
||||
unsigned long long fuzzy_status(fuzzy_handle_t * handle, int type);
|
||||
unsigned long long get_blocksize(unsigned long long orilen);
|
||||
|
||||
char * b64 =
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
|
||||
@@ -136,11 +138,18 @@ static unsigned int sum_hash(unsigned char c, unsigned int h)
|
||||
*/
|
||||
fuzzy_handle_t * fuzzy_create_handle(unsigned long long origin_len)
|
||||
{
|
||||
fuzzy_handle_inner_t * handle = (fuzzy_handle_inner_t *)malloc(sizeof(fuzzy_handle_inner_t));
|
||||
fuzzy_handle_inner_t * handle = NULL;
|
||||
unsigned long long tmp_blksize=get_blocksize(origin_len);
|
||||
if(tmp_blksize==0)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
handle = (fuzzy_handle_inner_t *)malloc(sizeof(fuzzy_handle_inner_t));
|
||||
handle->orilen = origin_len;
|
||||
handle->ivi = IVI_create();
|
||||
handle->effective_length = 0;
|
||||
return (fuzzy_handle_t *)handle;
|
||||
handle->ivi = IVI_create();
|
||||
handle->effective_length = 0;
|
||||
handle->blocksize=tmp_blksize;
|
||||
return (fuzzy_handle_t *)handle;
|
||||
}
|
||||
|
||||
|
||||
@@ -223,12 +232,12 @@ unsigned long long get_blocksize(unsigned long long orilen)
|
||||
*/
|
||||
unsigned int segment_overlap(fuzzy_handle_t * handle, fuzzy_node * fnode, unsigned int size, unsigned long long offset, const char * data)
|
||||
{
|
||||
IVI_seg_t ** overlap_segs = NULL;
|
||||
IVI_seg_t * seg = IVI_seg_malloc(offset, offset + size -1, (void *)fnode);
|
||||
int overlap_segnum = 0;
|
||||
unsigned int effective_length = 0;
|
||||
unsigned int total_length = 0;
|
||||
unsigned long long blocksize = get_blocksize(((fuzzy_handle_inner_t *)handle)->orilen);
|
||||
IVI_seg_t ** overlap_segs = NULL;
|
||||
IVI_seg_t * seg = IVI_seg_malloc(offset, offset + size -1, (void *)fnode);
|
||||
int overlap_segnum = 0;
|
||||
unsigned int effective_length = 0;
|
||||
unsigned int total_length = 0;
|
||||
unsigned long long blocksize = ((fuzzy_handle_inner_t *)handle)->blocksize;
|
||||
|
||||
/*<2A><>ѯ<EFBFBD>Ƿ<EFBFBD><C7B7>и<EFBFBD><D0B8>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8>ǵ<EFBFBD>segment<6E><74>Ƭ<EFBFBD><C6AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>и<EFBFBD><D0B8>ǣ<EFBFBD><C7A3><EFBFBD><EFBFBD><EFBFBD>0*/
|
||||
overlap_segnum = IVI_query(((fuzzy_handle_inner_t *)handle)->ivi, offset, offset + size - 1, &overlap_segs);
|
||||
@@ -383,7 +392,7 @@ void fuzzy_calculate_self(IVI_seg_t * seg, const char * data, unsigned long long
|
||||
unsigned int FNV_hash_value = HASH_INIT;
|
||||
|
||||
char * FNV_hash = (char *)malloc(sizeof(char)*size);
|
||||
unsigned long long fnv_index = 0, i, last_slice_index;
|
||||
unsigned long long fnv_index = 0, i=0, last_slice_index=0;
|
||||
unsigned int roll_hash_value;
|
||||
for(i = 0; i < size; i++)
|
||||
{
|
||||
@@ -461,7 +470,7 @@ void fuzzy_calculate_self_with_prev(IVI_seg_t * prev_seg, IVI_seg_t * seg, const
|
||||
|
||||
|
||||
char * FNV_hash = (char *)malloc(sizeof(char)*size);
|
||||
unsigned long long fnv_index = 0, i, last_slice_index;
|
||||
unsigned long long fnv_index = 0, i=0, last_slice_index=0;
|
||||
unsigned int roll_hash_value;
|
||||
unsigned long long prev_len = get_prev_continous_length(prev_seg);
|
||||
|
||||
@@ -525,7 +534,7 @@ void fuzzy_modify_self_with_prev(IVI_seg_t * prev_seg, IVI_seg_t * seg, char * d
|
||||
|
||||
|
||||
char * FNV_hash = (char *)malloc(sizeof(char)*size);
|
||||
unsigned long long fnv_index = 0, i, last_slice_index;
|
||||
unsigned long long fnv_index = 0, i=0, last_slice_index=0;
|
||||
unsigned int roll_hash_value;
|
||||
unsigned long long prev_len = get_prev_continous_length(prev_seg);
|
||||
for(i = 0; i < size; i++)
|
||||
@@ -757,34 +766,28 @@ void fuzzy_hash_merge_new(IVI_seg_t * seg, void * user_para)
|
||||
*/
|
||||
unsigned long long fuzzy_status(fuzzy_handle_t * handle, int type)
|
||||
{
|
||||
unsigned long long length;
|
||||
fuzzy_handle_inner_t * _handle = (fuzzy_handle_inner_t *)(handle);
|
||||
switch(type)
|
||||
{
|
||||
case TOTAL_LENGTH: //<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>hashֵ<68><D6B5>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
{
|
||||
length = IVI_seg_length(_handle->ivi);
|
||||
break;
|
||||
}
|
||||
case EFFECTIVE_LENGTH: //<2F><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>hashֵ<68><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
||||
{
|
||||
length = _handle->effective_length;
|
||||
break;
|
||||
}
|
||||
case HASH_LENGTH: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
{
|
||||
final_length tmp_length;
|
||||
tmp_length.hash_length = 0;
|
||||
tmp_length.first_FNV_offset = 0;
|
||||
tmp_length.last_FNV_offset = 0;
|
||||
IVI_traverse(_handle->ivi, fuzzy_hash_length, (void *)&tmp_length);
|
||||
length = tmp_length.hash_length + 1;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return length;
|
||||
unsigned long long length;
|
||||
final_length tmp_length;
|
||||
fuzzy_handle_inner_t * _handle = (fuzzy_handle_inner_t *)(handle);
|
||||
switch(type)
|
||||
{
|
||||
case TOTAL_LENGTH: //<2F>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>hashֵ<68><D6B5>ȫ<EFBFBD><C8AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
length = IVI_seg_length(_handle->ivi);
|
||||
break;
|
||||
case EFFECTIVE_LENGTH: //<2F><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>hashֵ<68><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7><EFBFBD><EFBFBD>
|
||||
length = _handle->effective_length;
|
||||
break;
|
||||
case HASH_LENGTH: //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
|
||||
tmp_length.hash_length = 0;
|
||||
tmp_length.first_FNV_offset = 0;
|
||||
tmp_length.last_FNV_offset = 0;
|
||||
IVI_traverse(_handle->ivi, fuzzy_hash_length, (void *)&tmp_length);
|
||||
length = tmp_length.hash_length + 1;
|
||||
break;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return length;
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user