bitmaps should be unsigned otherwise bit shifting may not behave
as expected.
This commit is contained in:
@@ -61,9 +61,9 @@ typedef struct xor_code_s
|
|||||||
int (*fragments_needed)(struct xor_code_s *code_desc, int *missing_idxs, int *fragments_needed);
|
int (*fragments_needed)(struct xor_code_s *code_desc, int *missing_idxs, int *fragments_needed);
|
||||||
} xor_code_t;
|
} xor_code_t;
|
||||||
|
|
||||||
int is_data_in_parity(int data_idx, int parity_bm);
|
int is_data_in_parity(int data_idx, unsigned int parity_bm);
|
||||||
|
|
||||||
int does_parity_have_data(int parity_idx, int data_bm);
|
int does_parity_have_data(int parity_idx, unsigned int data_bm);
|
||||||
|
|
||||||
int parity_bit_lookup(xor_code_t *code_desc, int index);
|
int parity_bit_lookup(xor_code_t *code_desc, int index);
|
||||||
|
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ int run_aligned_malloc_test() {
|
|||||||
if (!tmem) {
|
if (!tmem) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (memset(tmem,'0',actual_amount) != tmem) {
|
if (memset(tmem,0,actual_amount) != tmem) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
aligned_free(tmem);
|
aligned_free(tmem);
|
||||||
@@ -379,7 +379,6 @@ int main()
|
|||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ret = run_aligned_malloc_test();
|
ret = run_aligned_malloc_test();
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
return ret;
|
return ret;
|
||||||
@@ -405,12 +404,12 @@ int main()
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=5; i < 11; i++) {
|
for (i=5; i < 11; i++) {
|
||||||
ret = run_test(i, 5, 4);
|
ret = run_test(i, 5, 4);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,12 +38,12 @@ const int g_bit_lookup[] = {0x1, 0x2, 0x4, 0x8,
|
|||||||
0x1000000, 0x2000000, 0x4000000, 0x8000000,
|
0x1000000, 0x2000000, 0x4000000, 0x8000000,
|
||||||
0x10000000, 0x20000000, 0x40000000, 0x80000000};
|
0x10000000, 0x20000000, 0x40000000, 0x80000000};
|
||||||
|
|
||||||
int is_data_in_parity(int data_idx, int parity_bm)
|
int is_data_in_parity(int data_idx, unsigned int parity_bm)
|
||||||
{
|
{
|
||||||
return ((g_bit_lookup[data_idx] & parity_bm) == g_bit_lookup[data_idx]);
|
return ((g_bit_lookup[data_idx] & parity_bm) == g_bit_lookup[data_idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
int does_parity_have_data(int parity_idx, int data_bm)
|
int does_parity_have_data(int parity_idx, unsigned int data_bm)
|
||||||
{
|
{
|
||||||
return ((g_bit_lookup[parity_idx] & data_bm) == g_bit_lookup[parity_idx]);
|
return ((g_bit_lookup[parity_idx] & data_bm) == g_bit_lookup[parity_idx]);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,7 +31,7 @@
|
|||||||
/*
|
/*
|
||||||
* Returns -1 if not possible
|
* Returns -1 if not possible
|
||||||
*/
|
*/
|
||||||
static int fragments_needed_one_data(xor_code_t *code_desc, int *missing_data, int *missing_parity, int *data_bm, int *parity_bm)
|
static int fragments_needed_one_data(xor_code_t *code_desc, int *missing_data, int *missing_parity, unsigned int *data_bm, unsigned int *parity_bm)
|
||||||
{
|
{
|
||||||
int data_index = missing_data[0];
|
int data_index = missing_data[0];
|
||||||
int parity_index = index_of_connected_parity(code_desc, data_index, missing_parity, missing_data);
|
int parity_index = index_of_connected_parity(code_desc, data_index, missing_parity, missing_data);
|
||||||
@@ -53,7 +53,7 @@ static int fragments_needed_one_data(xor_code_t *code_desc, int *missing_data, i
|
|||||||
/*
|
/*
|
||||||
* Returns -1 if not possible
|
* Returns -1 if not possible
|
||||||
*/
|
*/
|
||||||
static int fragments_needed_two_data(xor_code_t *code_desc, int *missing_data, int *missing_parity, int *data_bm, int *parity_bm)
|
static int fragments_needed_two_data(xor_code_t *code_desc, int *missing_data, int *missing_parity, unsigned int *data_bm, unsigned int *parity_bm)
|
||||||
{
|
{
|
||||||
// Verify that missing_data[2] == -1?
|
// Verify that missing_data[2] == -1?
|
||||||
int data_index = missing_data[0];
|
int data_index = missing_data[0];
|
||||||
@@ -89,7 +89,7 @@ static int fragments_needed_two_data(xor_code_t *code_desc, int *missing_data, i
|
|||||||
/*
|
/*
|
||||||
* Returns -1 if not possible
|
* Returns -1 if not possible
|
||||||
*/
|
*/
|
||||||
static int fragments_needed_three_data(xor_code_t *code_desc, int *missing_data, int *missing_parity, int *data_bm, int *parity_bm)
|
static int fragments_needed_three_data(xor_code_t *code_desc, int *missing_data, int *missing_parity, unsigned int *data_bm, unsigned int *parity_bm)
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
int parity_index = -1;
|
int parity_index = -1;
|
||||||
@@ -179,7 +179,7 @@ static int fragments_needed_three_data(xor_code_t *code_desc, int *missing_data,
|
|||||||
int xor_hd_fragments_needed(xor_code_t *code_desc, int *missing_idxs, int *fragments_needed)
|
int xor_hd_fragments_needed(xor_code_t *code_desc, int *missing_idxs, int *fragments_needed)
|
||||||
{
|
{
|
||||||
failure_pattern_t pattern = get_failure_pattern(code_desc, missing_idxs);
|
failure_pattern_t pattern = get_failure_pattern(code_desc, missing_idxs);
|
||||||
int data_bm = 0, parity_bm = 0;
|
unsigned int data_bm = 0, parity_bm = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
@@ -211,7 +211,7 @@ int xor_hd_fragments_needed(xor_code_t *code_desc, int *missing_idxs, int *fragm
|
|||||||
{
|
{
|
||||||
int *missing_data = get_missing_data(code_desc, missing_idxs);
|
int *missing_data = get_missing_data(code_desc, missing_idxs);
|
||||||
int *missing_parity = get_missing_parity(code_desc, missing_idxs);
|
int *missing_parity = get_missing_parity(code_desc, missing_idxs);
|
||||||
int missing_data_bm = missing_elements_bm(code_desc, missing_data, data_bit_lookup);
|
unsigned int missing_data_bm = missing_elements_bm(code_desc, missing_data, data_bit_lookup);
|
||||||
ret = fragments_needed_one_data(code_desc, missing_data, missing_parity, &data_bm, &parity_bm);
|
ret = fragments_needed_one_data(code_desc, missing_data, missing_parity, &data_bm, &parity_bm);
|
||||||
// OR all parities
|
// OR all parities
|
||||||
i=0;
|
i=0;
|
||||||
@@ -245,7 +245,7 @@ int xor_hd_fragments_needed(xor_code_t *code_desc, int *missing_idxs, int *fragm
|
|||||||
{
|
{
|
||||||
int *missing_data = get_missing_data(code_desc, missing_idxs);
|
int *missing_data = get_missing_data(code_desc, missing_idxs);
|
||||||
int *missing_parity = get_missing_parity(code_desc, missing_idxs);
|
int *missing_parity = get_missing_parity(code_desc, missing_idxs);
|
||||||
int missing_data_bm = missing_elements_bm(code_desc, missing_data, data_bit_lookup);
|
unsigned int missing_data_bm = missing_elements_bm(code_desc, missing_data, data_bit_lookup);
|
||||||
ret = fragments_needed_two_data(code_desc, missing_data, missing_parity, &data_bm, &parity_bm);
|
ret = fragments_needed_two_data(code_desc, missing_data, missing_parity, &data_bm, &parity_bm);
|
||||||
// OR all parities
|
// OR all parities
|
||||||
i=0;
|
i=0;
|
||||||
@@ -384,7 +384,7 @@ static void decode_three_data(xor_code_t *code_desc, char **data, char **parity,
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
int parity_index = -1;
|
int parity_index = -1;
|
||||||
int data_index = -1;
|
int data_index = -1;
|
||||||
int parity_bm = -1;
|
unsigned int parity_bm = -1;
|
||||||
char *parity_buffer = NULL;
|
char *parity_buffer = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
Reference in New Issue
Block a user