bitmaps should be unsigned otherwise bit shifting may not behave

as expected.
This commit is contained in:
Eric Lambert
2014-06-10 11:23:56 -07:00
parent 1ebd010a48
commit 727eb99a3c
4 changed files with 13 additions and 14 deletions

View File

@@ -61,9 +61,9 @@ typedef struct xor_code_s
int (*fragments_needed)(struct xor_code_s *code_desc, int *missing_idxs, int *fragments_needed);
} 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);

View File

@@ -365,7 +365,7 @@ int run_aligned_malloc_test() {
if (!tmem) {
return -1;
}
if (memset(tmem,'0',actual_amount) != tmem) {
if (memset(tmem,0,actual_amount) != tmem) {
return -1;
}
aligned_free(tmem);
@@ -379,7 +379,6 @@ int main()
{
int ret = 0;
int i;
ret = run_aligned_malloc_test();
if (ret != 0) {
return ret;
@@ -405,12 +404,12 @@ int main()
return ret;
}
}
for (i=5; i < 11; i++) {
ret = run_test(i, 5, 4);
if (ret != 0) {
return ret;
}
}
exit(0);
}

View File

@@ -38,12 +38,12 @@ const int g_bit_lookup[] = {0x1, 0x2, 0x4, 0x8,
0x1000000, 0x2000000, 0x4000000, 0x8000000,
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]);
}
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]);
}

View File

@@ -31,7 +31,7 @@
/*
* 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 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
*/
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?
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
*/
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 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)
{
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 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_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);
// OR all parities
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_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);
// OR all parities
i=0;
@@ -384,7 +384,7 @@ static void decode_three_data(xor_code_t *code_desc, char **data, char **parity,
int i = 0;
int parity_index = -1;
int data_index = -1;
int parity_bm = -1;
unsigned int parity_bm = -1;
char *parity_buffer = NULL;
/*