Fix error copying cubic data

This commit is contained in:
Campbell Barton 2016-05-07 19:15:27 +10:00
parent 65dd1d7d08
commit d2296cd5ec

@ -119,6 +119,11 @@ static Cubic *cubic_alloc(const uint dims)
return malloc(cubic_alloc_size(dims)); return malloc(cubic_alloc_size(dims));
} }
static void cubic_copy(Cubic *cubic_dst, const Cubic *cubic_src, const uint dims)
{
memcpy(cubic_dst, cubic_src, cubic_alloc_size(dims));
}
static void cubic_init( static void cubic_init(
Cubic *cubic, Cubic *cubic,
const double p0[], const double p1[], const double p2[], const double p3[], const double p0[], const double p1[], const double p2[], const double p3[],
@ -766,7 +771,7 @@ static bool fit_cubic_to_points(
} }
else { else {
Cubic *cubic_test = alloca(cubic_alloc_size(dims)); Cubic *cubic_test = alloca(cubic_alloc_size(dims));
*cubic_test = *r_cubic; cubic_copy(cubic_test, r_cubic, dims);
/* If error not too large, try some reparameterization and iteration */ /* If error not too large, try some reparameterization and iteration */
double *u_prime = malloc(sizeof(double) * points_offset_len); double *u_prime = malloc(sizeof(double) * points_offset_len);
@ -788,13 +793,13 @@ static bool fit_cubic_to_points(
free(u_prime); free(u_prime);
free(u); free(u);
*r_cubic = *cubic_test; cubic_copy(r_cubic, cubic_test, dims);
*r_error_max_sq = error_max_sq; *r_error_max_sq = error_max_sq;
*r_split_index = split_index; *r_split_index = split_index;
return true; return true;
} }
else if (error_max_sq < *r_error_max_sq) { else if (error_max_sq < *r_error_max_sq) {
*r_cubic = *cubic_test; cubic_copy(r_cubic, cubic_test, dims);
*r_error_max_sq = error_max_sq; *r_error_max_sq = error_max_sq;
*r_split_index = split_index; *r_split_index = split_index;
} }