diff options
author | Kota Tsuyuzaki <bloodeagle40234@gmail.com> | 2015-02-20 10:47:07 +0900 |
---|---|---|
committer | Kota Tsuyuzaki <bloodeagle40234@gmail.com> | 2015-02-26 02:15:29 -0800 |
commit | 289099c43d63f049c75c2e9bfd49eaa545a12847 (patch) | |
tree | 309ee70b5fb9082043c3d72f80114a1f4ededf35 /src/backends | |
parent | ac36408e5035664df62878fe0c7dda4a3950526d (diff) | |
download | liberasurecode-289099c43d63f049c75c2e9bfd49eaa545a12847.tar.gz |
Fix shss to instantiate backend discriptor
Diffstat (limited to 'src/backends')
-rw-r--r-- | src/backends/shss/shss.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/src/backends/shss/shss.c b/src/backends/shss/shss.c index f8ba53a..8eb269b 100644 --- a/src/backends/shss/shss.c +++ b/src/backends/shss/shss.c @@ -31,7 +31,6 @@ #include <stdio.h> #include <stdlib.h> -#include <alloca.h> #include "erasurecode.h" #include "erasurecode_helpers.h" @@ -224,18 +223,24 @@ static int shss_element_size(void* desc) static void * shss_init(struct ec_backend_args *args, void *backend_sohandle) { - static struct shss_descriptor xdesc; + struct shss_descriptor *desc = NULL; - xdesc.k = args->uargs.k; - xdesc.m = args->uargs.m; - xdesc.n = args->uargs.k + args->uargs.m; - xdesc.w = DEFAULT_W; + desc = (struct shss_descriptor *) + malloc(sizeof(struct shss_descriptor)); + if (NULL == desc) { + return NULL; + } + + desc->k = args->uargs.k; + desc->m = args->uargs.m; + desc->n = args->uargs.k + args->uargs.m; + desc->w = DEFAULT_W; args->uargs.w = DEFAULT_W; /* Sample on how to pass extra args to the backend */ // TODO: Need discussion how to pass extra args. int *priv = (int *)args->uargs.priv_args2; - xdesc.aes_bit_length = priv[0]; // AES bit number + desc->aes_bit_length = priv[0]; // AES bit number union { shss_encode_func encodep; @@ -246,33 +251,38 @@ static void * shss_init(struct ec_backend_args *args, void *backend_sohandle) func_handle.vptr = NULL; func_handle.vptr = dlsym(backend_sohandle, "ssencode"); - xdesc.ssencode = func_handle.encodep; - if (NULL == xdesc.ssencode) { + desc->ssencode = func_handle.encodep; + if (NULL == desc->ssencode) { goto error; } func_handle.vptr = NULL; func_handle.vptr = dlsym(backend_sohandle, "ssdecode"); - xdesc.ssdecode = func_handle.decodep; - if (NULL == xdesc.ssdecode) { + desc->ssdecode = func_handle.decodep; + if (NULL == desc->ssdecode) { goto error; } func_handle.vptr = NULL; func_handle.vptr = dlsym(backend_sohandle, "ssreconst"); - xdesc.ssreconst = func_handle.reconp; - if (NULL == xdesc.ssreconst) { + desc->ssreconst = func_handle.reconp; + if (NULL == desc->ssreconst) { goto error; } - return (void *)&xdesc; + return desc; error: + free(desc); + return NULL; } static int shss_exit(void *desc) { + if (desc != NULL) { + free(desc); + } return 0; } |