diff options
author | Eric Lambert <eric_lambert@xyratex.com> | 2014-07-29 23:14:46 -0700 |
---|---|---|
committer | Eric Lambert <eric_lambert@xyratex.com> | 2014-07-29 23:14:46 -0700 |
commit | e39aaa3dd93d178c70c8c2d11a86a882c22c4fa1 (patch) | |
tree | 8ea6001ac24791e8ce9a787d3721c2684df14128 /src/erasurecode_helpers.c | |
parent | d6613f4e909749a878fe5c9b190f9935c8c0738c (diff) | |
download | liberasurecode-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.c | 20 |
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); |