diff options
-rw-r--r-- | include/erasurecode/erasurecode_backend.h | 4 | ||||
-rw-r--r-- | src/backends/xor/flat_xor_hd.c | 6 | ||||
-rw-r--r-- | src/erasurecode.c | 14 | ||||
-rw-r--r-- | test/liberasurecode_test.c | 12 |
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; } |