summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/erasurecode/erasurecode_backend.h4
-rw-r--r--src/backends/xor/flat_xor_hd.c6
-rw-r--r--src/erasurecode.c14
-rw-r--r--test/liberasurecode_test.c12
4 files changed, 23 insertions, 13 deletions
diff --git a/include/erasurecode/erasurecode_backend.h b/include/erasurecode/erasurecode_backend.h
index 4e155d0..122a4e4 100644
--- a/include/erasurecode/erasurecode_backend.h
+++ b/include/erasurecode/erasurecode_backend.h
@@ -45,7 +45,7 @@ extern "C" {
/* Arguments passed to the backend */
#define MAX_PRIV_ARGS 4
struct ec_backend_args {
- struct ec_args *uargs; /* common args passed in by the user */
+ struct ec_args uargs; /* common args passed in by the user */
void *pargs[MAX_PRIV_ARGS]; /* used for private backend args */
};
@@ -121,7 +121,7 @@ struct ec_backend_common {
/* EC backend definition */
typedef struct ec_backend {
struct ec_backend_common common; /* EC backend common attributes */
- struct ec_backend_args *args; /* EC backend instance data (private) */
+ struct ec_backend_args args; /* EC backend instance data (private) */
void *backend_desc; /* EC backend instance handle */
void *backend_sohandle; /* EC backend shared library handle */
diff --git a/src/backends/xor/flat_xor_hd.c b/src/backends/xor/flat_xor_hd.c
index 90d4b7b..6236ec6 100644
--- a/src/backends/xor/flat_xor_hd.c
+++ b/src/backends/xor/flat_xor_hd.c
@@ -69,9 +69,9 @@ static int flat_xor_hd_min_fragments(void *desc, int (*fptr)(),
static void * flat_xor_hd_init(struct ec_backend_args *args)
{
- int k = args->uargs->k;
- int m = args->uargs->m;
- int hd = args->uargs->priv_args1.flat_xor_hd_args.hd;
+ int k = args->uargs.k;
+ int m = args->uargs.m;
+ int hd = args->uargs.priv_args1.flat_xor_hd_args.hd;
void *desc = (void *) init_xor_hd_code(k, m, hd);
return desc;
diff --git a/src/erasurecode.c b/src/erasurecode.c
index 3991acc..91ee17b 100644
--- a/src/erasurecode.c
+++ b/src/erasurecode.c
@@ -213,6 +213,7 @@ int liberasurecode_instance_create(const char *backend_name,
{
int err = 0;
ec_backend_t instance = NULL;
+ struct ec_backend_args bargs;
ec_backend_id_t id = liberasurecode_backend_lookup_id(backend_name);
if (-1 == id)
@@ -225,7 +226,8 @@ int liberasurecode_instance_create(const char *backend_name,
/* Copy common backend, args struct */
instance->common = ec_backends_supported[id]->common;
- instance->args = (struct ec_backend_args *) args;
+ memcpy(&(bargs.uargs), args, sizeof (struct ec_args));
+ instance->args = bargs;
/* Open backend .so if not already open */
/* .so handle is returned in instance->backend_sohandle */
@@ -237,7 +239,7 @@ int liberasurecode_instance_create(const char *backend_name,
}
/* Call private init() for the backend */
- instance->backend_desc = instance->common.ops->init(instance->args);
+ instance->backend_desc = instance->common.ops->init(&instance->args);
/* Register instance and return a descriptor/instance id */
instance->instance_desc = liberasurecode_backend_instance_register(instance);
@@ -356,7 +358,7 @@ int liberasurecode_encode(int desc,
/* call the backend encode function passing it fptr */
ret = instance->common.ops->encode(
- instance->backend_desc, fptr, instance->args,
+ instance->backend_desc, fptr, &instance->args,
encoded_data, encoded_parity, blocksize);
out_error:
@@ -399,7 +401,7 @@ int liberasurecode_decode(int desc,
/* call the backend encode function passing it fptr */
ret = instance->common.ops->decode(
- instance->backend_desc, fptr, instance->args,
+ instance->backend_desc, fptr, &instance->args,
data, parity, missing_idxs, blocksize);
out_error:
@@ -444,7 +446,7 @@ int liberasurecode_reconstruct_fragment(int desc,
/* call the backend encode function passing it fptr */
ret = instance->common.ops->reconstruct(
- instance->backend_desc, fptr, instance->args,
+ instance->backend_desc, fptr, &instance->args,
data, parity, missing_idxs, destination_idx, blocksize);
out_error:
@@ -481,7 +483,7 @@ int liberasurecode_fragments_needed(int desc, int *missing_idxs,
/* call the backend encode function passing it fptr */
ret = instance->common.ops->fragments_needed(
- instance->backend_desc, fptr, instance->args,
+ instance->backend_desc, fptr, &instance->args,
missing_idxs, fragments_needed);
out_error:
diff --git a/test/liberasurecode_test.c b/test/liberasurecode_test.c
index 197e927..bcb3ca0 100644
--- a/test/liberasurecode_test.c
+++ b/test/liberasurecode_test.c
@@ -4,8 +4,16 @@ int main()
{
int blocksize = 4096;
char **data = NULL, **parity = NULL;
- int desc = liberasurecode_instance_create("flat_xor_hd", 10, 4, 0, NULL);
- liberasurecode_encode(desc, data, parity, blocksize);
+
+ struct ec_args args = {
+ .k = 10,
+ .m = 4,
+ .priv_args1.flat_xor_hd_args.hd = 3,
+ };
+
+ int desc = liberasurecode_instance_create("flat_xor_hd", &args);
+
+ // liberasurecode_encode(desc, (const char *) *data, 0, data, parity);
liberasurecode_instance_destroy(desc);
return 0;
}