X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fcase.c;h=6e65af975a1d77150c7cbaaeb49d6d278457c433;hb=93d4e1865e8e3e2c62bddad822869eedf2e457e0;hp=8613eca6f1b9944da0ffd2269f4dd8bf0691f429;hpb=5fd22ca7771c8175ef05e91e1194c3c4096337f4;p=pspp diff --git a/src/data/case.c b/src/data/case.c index 8613eca6f1..6e65af975a 100644 --- a/src/data/case.c +++ b/src/data/case.c @@ -22,8 +22,8 @@ #include #include #include "value.h" -#include "alloc.h" -#include "str.h" +#include +#include #include "variable.h" #ifdef DEBUGGING @@ -126,10 +126,13 @@ case_move (struct ccase *dst, struct ccase *src) assert (src->case_data != NULL); assert (src->case_data->ref_cnt > 0); assert (dst != NULL); - - *dst = *src; - dst->this = dst; - case_nullify (src); + + if (dst != src) + { + *dst = *src; + dst->this = dst; + case_nullify (src); + } } #endif /* DEBUGGING */ @@ -180,23 +183,18 @@ case_swap (struct ccase *a, struct ccase *b) int case_try_create (struct ccase *c, size_t value_cnt) { +#ifdef DEBUGGING + c->this = c; +#endif c->case_data = malloc (case_size (value_cnt)); if (c->case_data != NULL) { -#ifdef DEBUGGING - c->this = c; -#endif c->case_data->value_cnt = value_cnt; c->case_data->ref_cnt = 1; return 1; } else - { -#ifdef DEBUGGING - c->this = c; -#endif - return 0; - } + return 0; } /* Tries to initialize CLONE as a copy of ORIG. @@ -229,12 +227,14 @@ case_copy (struct ccase *dst, size_t dst_idx, assert (src->case_data->ref_cnt > 0); assert (src_idx + value_cnt <= dst->case_data->value_cnt); - if (dst->case_data->ref_cnt > 1) - case_unshare (dst); if (dst->case_data != src->case_data || dst_idx != src_idx) - memmove (dst->case_data->values + dst_idx, - src->case_data->values + src_idx, - sizeof *dst->case_data->values * value_cnt); + { + if (dst->case_data->ref_cnt > 1) + case_unshare (dst); + memmove (dst->case_data->values + dst_idx, + src->case_data->values + src_idx, + sizeof *dst->case_data->values * value_cnt); + } } #endif /* DEBUGGING */