X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvariable.c;h=fc81c01e1499dd443795271c7ff13a40fdac9891;hb=f43378497b8400e9c22a3485c534693dc1bc9554;hp=3c170c842c943fddd2039d8932543fb1849eebee;hpb=985c40f2a83588b25f0e6fe7f7d82863c5d34d43;p=pspp diff --git a/src/data/variable.c b/src/data/variable.c index 3c170c842c..fc81c01e14 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -19,6 +19,7 @@ #include #include "variable.h" +#include #include #include #include @@ -131,6 +132,7 @@ hash_value(const union value *v, int width) bool var_is_valid_name (const char *name, bool issue_error) { + bool plausible; size_t length, i; assert (name != NULL); @@ -139,7 +141,7 @@ var_is_valid_name (const char *name, bool issue_error) CHARACTERS */ length = strlen (name); - bool plausible = var_is_plausible_name(name, issue_error); + plausible = var_is_plausible_name(name, issue_error); if ( ! plausible ) return false; @@ -214,7 +216,7 @@ var_is_plausible_name (const char *name, bool issue_error) /* A hsh_compare_func that orders variables A and B by their names. */ int -compare_var_names (const void *a_, const void *b_, void *foo UNUSED) +compare_var_names (const void *a_, const void *b_, const void *aux UNUSED) { const struct variable *a = a_; const struct variable *b = b_; @@ -224,7 +226,7 @@ compare_var_names (const void *a_, const void *b_, void *foo UNUSED) /* A hsh_hash_func that hashes variable V based on its name. */ unsigned -hash_var_name (const void *v_, void *foo UNUSED) +hash_var_name (const void *v_, const void *aux UNUSED) { const struct variable *v = v_; @@ -234,7 +236,7 @@ hash_var_name (const void *v_, void *foo UNUSED) /* A hsh_compare_func that orders pointers to variables A and B by their names. */ int -compare_var_ptr_names (const void *a_, const void *b_, void *foo UNUSED) +compare_var_ptr_names (const void *a_, const void *b_, const void *aux UNUSED) { struct variable *const *a = a_; struct variable *const *b = b_; @@ -245,7 +247,7 @@ compare_var_ptr_names (const void *a_, const void *b_, void *foo UNUSED) /* A hsh_hash_func that hashes pointer to variable V based on its name. */ unsigned -hash_var_ptr_name (const void *v_, void *foo UNUSED) +hash_var_ptr_name (const void *v_, const void *aux UNUSED) { struct variable *const *v = v_; @@ -345,7 +347,28 @@ dict_class_to_name (enum dict_class dict_class) case DC_SCRATCH: return _("scratch"); default: - assert (0); - abort (); + NOT_REACHED (); } } + +/* Return the number of bytes used when writing case_data for a variable + of WIDTH */ +int +width_to_bytes(int width) +{ + assert (width >= 0); + + if ( width == 0 ) + return MAX_SHORT_STRING ; + else if (width <= MAX_LONG_STRING) + return ROUND_UP (width, MAX_SHORT_STRING); + else + { + int chunks = width / EFFECTIVE_LONG_STRING_LENGTH ; + int remainder = width % EFFECTIVE_LONG_STRING_LENGTH ; + int bytes = remainder + (chunks * (MAX_LONG_STRING + 1) ); + return ROUND_UP (bytes, MAX_SHORT_STRING); + } +} + +