X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fdata%2Fvariable.c;h=fc81c01e1499dd443795271c7ff13a40fdac9891;hb=a1a4228b112a6aca97fef5aaaf9ffa21271a1f72;hp=56993e461c5d43998105123767037bba1a9be16d;hpb=393668423c1c9456fd82db6b30f25de078915da5;p=pspp-builds.git diff --git a/src/data/variable.c b/src/data/variable.c index 56993e46..fc81c01e 100644 --- a/src/data/variable.c +++ b/src/data/variable.c @@ -19,6 +19,7 @@ #include #include "variable.h" +#include #include #include #include @@ -215,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_; @@ -225,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_; @@ -235,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_; @@ -246,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_; @@ -346,84 +347,7 @@ dict_class_to_name (enum dict_class dict_class) case DC_SCRATCH: return _("scratch"); default: - assert (0); - abort (); - } -} - - -/* Copies buffer SRC, of SRC_SIZE bytes, to DST, of DST_SIZE bytes. - Each 256th byte, which is expected to be a ' ', is deleted. - DST is then truncated to DST_SIZE bytes or padded on the right with - spaces as needed. */ -void -copy_demangle (char *dst, size_t dst_size, - const char *src, size_t src_size) -{ - int src_bytes_left = src_size; - int dst_bytes_left = dst_size; - const char *s = src; - char *d = dst; - - - while( src_bytes_left > 0 ) - { - const size_t s_chunk = min(MAX_LONG_STRING, src_bytes_left); - const size_t d_chunk = min(MAX_LONG_STRING, dst_bytes_left); - - assert ( d < dst + dst_size); - - buf_copy_rpad (d, d_chunk, - s, s_chunk); - - d += d_chunk; - s += s_chunk; - src_bytes_left -= s_chunk; - dst_bytes_left -= d_chunk; - - if ( src_bytes_left > 0 && ! (++s - src) % (MAX_LONG_STRING+1) ) - { - if ( *s != ' ') - msg(MW, _("Expected a space in very long string")); - src_bytes_left--; - } - } -} - -/* Copies buffer SRC, of SRC_SIZE bytes, to DST, of DST_SIZE bytes. - DST is rounded up to the nearest 8 byte boundary. - A space is inserted at each 256th byte. - DST is then truncated to DST_SIZE bytes or padded on the right with - spaces as needed. */ -void -copy_mangle (char *dst, size_t dst_size, - const char *src, size_t src_size) -{ - int src_bytes_left = src_size; - int dst_bytes_left = dst_size; - const char *s = src; - char *d = dst; - - memset(dst, ' ', dst_size); - - while( src_bytes_left > 0 ) - { - const size_t s_chunk = min(MAX_LONG_STRING, src_bytes_left); - const size_t d_chunk = min(MAX_LONG_STRING, dst_bytes_left); - - buf_copy_rpad (d, d_chunk, s, s_chunk); - - d += d_chunk; - s += s_chunk; - src_bytes_left -= s_chunk; - dst_bytes_left -= d_chunk; - - if ( dst_bytes_left > 0 && 0 == ( d + 1 - dst ) % (MAX_LONG_STRING + 1) ) - { - memset(d, ' ', 1); - d++; - dst_bytes_left--; - } + NOT_REACHED (); } } @@ -432,30 +356,19 @@ copy_mangle (char *dst, size_t dst_size, int width_to_bytes(int width) { - int bytes, mod8; - assert (width >= 0); if ( width == 0 ) return MAX_SHORT_STRING ; - - if ( width <= MAX_LONG_STRING) - return MAX_SHORT_STRING * DIV_RND_UP(width, MAX_SHORT_STRING); - - const int chunks = width / EFFECTIVE_LONG_STRING_LENGTH ; - - const int remainder = width - (chunks * EFFECTIVE_LONG_STRING_LENGTH) ; - - bytes = remainder + (chunks * (MAX_LONG_STRING + 1) ); - - /* Round up to the nearest 8 */ - mod8 = bytes % MAX_SHORT_STRING; - - if ( mod8 ) - bytes += MAX_SHORT_STRING - mod8; - - assert( bytes % MAX_SHORT_STRING == 0 ); - - return bytes; + 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); + } } +