增加mesa_fuzzy中对blocksize=0情况下的异常处理

This commit is contained in:
zhengchao
2015-11-30 16:44:23 +08:00
parent 5008b1de81
commit bda5c6f157

View File

@@ -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;
}