Merged in dachary/jerasure/wip-galois-init (pull request #22)
add galois_init_default_field error codemaster
commit
4b62ab21e1
|
@ -46,7 +46,7 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
extern void galois_init_default_field(int w);
|
extern int galois_init_default_field(int w);
|
||||||
extern void galois_change_technique(gf_t *gf, int w);
|
extern void galois_change_technique(gf_t *gf, int w);
|
||||||
|
|
||||||
extern int galois_single_multiply(int a, int b, int w);
|
extern int galois_single_multiply(int a, int b, int w);
|
||||||
|
|
47
src/galois.c
47
src/galois.c
|
@ -47,6 +47,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
#include "galois.h"
|
#include "galois.h"
|
||||||
|
|
||||||
|
@ -168,24 +169,34 @@ gf_t* galois_init_composite_field(int w,
|
||||||
return gfp;
|
return gfp;
|
||||||
}
|
}
|
||||||
|
|
||||||
void galois_init_default_field(int w)
|
int galois_init_default_field(int w)
|
||||||
|
{
|
||||||
|
if (gfp_array[w] == NULL) {
|
||||||
|
gfp_array[w] = (gf_t*)malloc(sizeof(gf_t));
|
||||||
|
if(gfp_array[w] == NULL)
|
||||||
|
return ENOMEM;
|
||||||
|
if (!gf_init_easy(gfp_array[w], w))
|
||||||
|
return EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void galois_init(int w)
|
||||||
{
|
{
|
||||||
if (w <= 0 || w > 32) {
|
if (w <= 0 || w > 32) {
|
||||||
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
|
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gfp_array[w] == NULL) {
|
switch (galois_init_default_field(w)) {
|
||||||
gfp_array[w] = (gf_t*)malloc(sizeof(gf_t));
|
case ENOMEM:
|
||||||
if (gfp_array[w] == NULL) {
|
fprintf(stderr, "ERROR -- cannot allocate memory for Galois field w=%d\n", w);
|
||||||
fprintf(stderr, "ERROR -- cannot allocate memory for Galois field w=%d\n", w);
|
exit(1);
|
||||||
exit(1);
|
break;
|
||||||
}
|
case EINVAL:
|
||||||
}
|
|
||||||
|
|
||||||
if (!gf_init_easy(gfp_array[w], w)) {
|
|
||||||
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
|
fprintf(stderr, "ERROR -- cannot init default Galois field for w=%d\n", w);
|
||||||
exit(1);
|
exit(1);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +254,7 @@ int galois_single_multiply(int x, int y, int w)
|
||||||
if (x == 0 || y == 0) return 0;
|
if (x == 0 || y == 0) return 0;
|
||||||
|
|
||||||
if (gfp_array[w] == NULL) {
|
if (gfp_array[w] == NULL) {
|
||||||
galois_init_default_field(w);
|
galois_init(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w <= 32) {
|
if (w <= 32) {
|
||||||
|
@ -260,7 +271,7 @@ int galois_single_divide(int x, int y, int w)
|
||||||
if (y == 0) return -1;
|
if (y == 0) return -1;
|
||||||
|
|
||||||
if (gfp_array[w] == NULL) {
|
if (gfp_array[w] == NULL) {
|
||||||
galois_init_default_field(w);
|
galois_init(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (w <= 32) {
|
if (w <= 32) {
|
||||||
|
@ -278,7 +289,7 @@ void galois_w08_region_multiply(char *region, /* Region to multiply */
|
||||||
int add)
|
int add)
|
||||||
{
|
{
|
||||||
if (gfp_array[8] == NULL) {
|
if (gfp_array[8] == NULL) {
|
||||||
galois_init_default_field(8);
|
galois_init(8);
|
||||||
}
|
}
|
||||||
gfp_array[8]->multiply_region.w32(gfp_array[8], region, r2, multby, nbytes, add);
|
gfp_array[8]->multiply_region.w32(gfp_array[8], region, r2, multby, nbytes, add);
|
||||||
}
|
}
|
||||||
|
@ -290,7 +301,7 @@ void galois_w16_region_multiply(char *region, /* Region to multiply */
|
||||||
int add)
|
int add)
|
||||||
{
|
{
|
||||||
if (gfp_array[16] == NULL) {
|
if (gfp_array[16] == NULL) {
|
||||||
galois_init_default_field(16);
|
galois_init(16);
|
||||||
}
|
}
|
||||||
gfp_array[16]->multiply_region.w32(gfp_array[16], region, r2, multby, nbytes, add);
|
gfp_array[16]->multiply_region.w32(gfp_array[16], region, r2, multby, nbytes, add);
|
||||||
}
|
}
|
||||||
|
@ -303,7 +314,7 @@ void galois_w32_region_multiply(char *region, /* Region to multiply */
|
||||||
int add)
|
int add)
|
||||||
{
|
{
|
||||||
if (gfp_array[32] == NULL) {
|
if (gfp_array[32] == NULL) {
|
||||||
galois_init_default_field(32);
|
galois_init(32);
|
||||||
}
|
}
|
||||||
gfp_array[32]->multiply_region.w32(gfp_array[32], region, r2, multby, nbytes, add);
|
gfp_array[32]->multiply_region.w32(gfp_array[32], region, r2, multby, nbytes, add);
|
||||||
}
|
}
|
||||||
|
@ -311,7 +322,7 @@ void galois_w32_region_multiply(char *region, /* Region to multiply */
|
||||||
void galois_w8_region_xor(void *src, void *dest, int nbytes)
|
void galois_w8_region_xor(void *src, void *dest, int nbytes)
|
||||||
{
|
{
|
||||||
if (gfp_array[8] == NULL) {
|
if (gfp_array[8] == NULL) {
|
||||||
galois_init_default_field(8);
|
galois_init(8);
|
||||||
}
|
}
|
||||||
gfp_array[8]->multiply_region.w32(gfp_array[32], src, dest, 1, nbytes, 1);
|
gfp_array[8]->multiply_region.w32(gfp_array[32], src, dest, 1, nbytes, 1);
|
||||||
}
|
}
|
||||||
|
@ -319,7 +330,7 @@ void galois_w8_region_xor(void *src, void *dest, int nbytes)
|
||||||
void galois_w16_region_xor(void *src, void *dest, int nbytes)
|
void galois_w16_region_xor(void *src, void *dest, int nbytes)
|
||||||
{
|
{
|
||||||
if (gfp_array[16] == NULL) {
|
if (gfp_array[16] == NULL) {
|
||||||
galois_init_default_field(16);
|
galois_init(16);
|
||||||
}
|
}
|
||||||
gfp_array[16]->multiply_region.w32(gfp_array[16], src, dest, 1, nbytes, 1);
|
gfp_array[16]->multiply_region.w32(gfp_array[16], src, dest, 1, nbytes, 1);
|
||||||
}
|
}
|
||||||
|
@ -327,7 +338,7 @@ void galois_w16_region_xor(void *src, void *dest, int nbytes)
|
||||||
void galois_w32_region_xor(void *src, void *dest, int nbytes)
|
void galois_w32_region_xor(void *src, void *dest, int nbytes)
|
||||||
{
|
{
|
||||||
if (gfp_array[32] == NULL) {
|
if (gfp_array[32] == NULL) {
|
||||||
galois_init_default_field(32);
|
galois_init(32);
|
||||||
}
|
}
|
||||||
gfp_array[32]->multiply_region.w32(gfp_array[32], src, dest, 1, nbytes, 1);
|
gfp_array[32]->multiply_region.w32(gfp_array[32], src, dest, 1, nbytes, 1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue