summaryrefslogtreecommitdiff
path: root/src/erasurecode_helpers.c
diff options
context:
space:
mode:
authorEric Lambert <eric_lambert@xyratex.com>2014-07-29 23:14:46 -0700
committerEric Lambert <eric_lambert@xyratex.com>2014-07-29 23:14:46 -0700
commite39aaa3dd93d178c70c8c2d11a86a882c22c4fa1 (patch)
tree8ea6001ac24791e8ce9a787d3721c2684df14128 /src/erasurecode_helpers.c
parentd6613f4e909749a878fe5c9b190f9935c8c0738c (diff)
downloadliberasurecode-e39aaa3dd93d178c70c8c2d11a86a882c22c4fa1.tar.gz
Created helper function to iterate over a set of data/parity fragments
and create an array of pointers to the data segments for each fragment (this array can then be passed to backend decode functions).
Diffstat (limited to 'src/erasurecode_helpers.c')
-rw-r--r--src/erasurecode_helpers.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/src/erasurecode_helpers.c b/src/erasurecode_helpers.c
index 8ba2578..af44837 100644
--- a/src/erasurecode_helpers.c
+++ b/src/erasurecode_helpers.c
@@ -52,7 +52,7 @@ void *get_aligned_buffer16(int size)
return NULL;
}
- bzero(buf, size);
+ memset(buf, 0, size);
return buf;
}
@@ -82,7 +82,7 @@ void * alloc_and_set_buffer(int size, int value) {
/* Allocate and zero the buffer, or set the appropriate error */
buf = malloc((size_t) size);
if (buf) {
- buf = memset(buf, 0, (size_t) size);
+ buf = memset(buf, value, (size_t) size);
}
return buf;
}
@@ -200,6 +200,22 @@ char *get_data_ptr_from_fragment(char *buf)
return buf;
}
+int get_data_ptr_array_from_fragments(char **data_array, char **fragments,
+ int num_fragments)
+{
+ int i = 0, num = 0;
+ for (i = 0; i < num_fragments; i++) {
+ char *frag = fragments[i];
+ if (frag == NULL) {
+ data_array[i] = NULL;
+ continue;
+ }
+ data_array[i] = get_data_ptr_from_fragment(frag);
+ num++;
+ }
+ return num;
+}
+
char *get_fragment_ptr_from_data_novalidate(char *buf)
{
buf -= sizeof(fragment_header_t);