X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fcount.c;h=8988f3cb6e73e36f4e12fecaa9411fd41e310c6d;hb=6ac27d1da3fdebee275343fcf7b6625fc1f1da79;hp=a6e70616460cf7ce40583c0f858e5801095d75a7;hpb=06f9ee45954e5e71fa7f6262dbf37defa1dbf996;p=pspp-builds.git diff --git a/src/count.c b/src/count.c index a6e70616..8988f3cb 100644 --- a/src/count.c +++ b/src/count.c @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + 02110-1301, USA. */ #include #include "error.h" @@ -23,11 +23,15 @@ #include "alloc.h" #include "case.h" #include "command.h" +#include "dictionary.h" #include "error.h" #include "lexer.h" #include "str.h" #include "var.h" +#include "gettext.h" +#define _(msgid) gettext (msgid) + /* Implementation details: The S?SS manuals do not specify the order that COUNT subcommands are @@ -87,7 +91,7 @@ struct counting /* variables to count */ struct variable **v; - int n; + size_t n; /* values to count */ int missing; /* (numeric only) @@ -107,7 +111,7 @@ struct cnt_var_info struct cnt_var_info *next; struct variable *d; /* Destination variable. */ - char n[9]; /* Name of dest var. */ + char n[LONG_NAME_LEN + 1]; /* Name of dest var. */ struct counting *c; /* The counting specifications. */ }; @@ -144,7 +148,7 @@ cmd_count (void) cnt->d = NULL; cnt->c = NULL; - /* Get destination struct variable, or at least its name. */ + /* Get destination variable, or at least its name. */ if (!lex_force_id ()) goto fail; cnt->d = dict_lookup_var (default_dict, tokid); @@ -157,7 +161,7 @@ cmd_count (void) } } else - strcpy (cnt->n, tokid); + str_copy_trunc (cnt->n, sizeof cnt->n, tokid); lex_get (); if (!lex_force_match ('=')) @@ -228,28 +232,28 @@ fail: static int parse_numeric_criteria (struct counting * c) { - int n = 0; - int m = 0; + size_t n = 0; + size_t m = 0; c->crit.n = 0; c->missing = 0; for (;;) { struct cnt_num *cur; - if (n >= m - 1) + if (n + 1 >= m) { m += 16; c->crit.n = xrealloc (c->crit.n, m * sizeof (struct cnt_num)); } cur = &c->crit.n[n++]; - if (token == T_NUM) + if (lex_is_number ()) { cur->a = tokval; lex_get (); if (lex_match_id ("THRU")) { - if (token == T_NUM) + if (lex_is_number ()) { if (!lex_force_num ()) return 0; @@ -281,7 +285,7 @@ parse_numeric_criteria (struct counting * c) { if (!lex_force_match_id ("THRU")) return 0; - if (token == T_NUM) + if (lex_is_number ()) { cur->type = CNT_LOW; cur->a = tokval; @@ -324,10 +328,10 @@ parse_string_criteria (struct counting * c) { int len = 0; - int n = 0; - int m = 0; + size_t n = 0; + size_t m = 0; - int i; + size_t i; for (i = 0; i < c->n; i++) if (c->v[i]->width > len) @@ -337,7 +341,7 @@ parse_string_criteria (struct counting * c) for (;;) { struct cnt_str *cur; - if (n >= m - 1) + if (n + 1 >= m) { m += 16; c->crit.n = xrealloc (c->crit.n, m * sizeof (struct cnt_str)); @@ -348,7 +352,7 @@ parse_string_criteria (struct counting * c) cur = &c->crit.s[n++]; cur->type = CNT_SINGLE; cur->s = malloc (len + 1); - st_pad_copy (cur->s, ds_c_str (&tokstr), len + 1); + str_copy_rpad (cur->s, len + 1, ds_c_str (&tokstr)); lex_get (); lex_match (','); @@ -367,7 +371,7 @@ static inline int count_numeric (struct counting * cnt, struct ccase * c) { int counter = 0; - int i; + size_t i; for (i = 0; i < cnt->n; i++) { @@ -381,7 +385,7 @@ count_numeric (struct counting * cnt, struct ccase * c) counter++; continue; } - if (cnt->missing >= 2 && is_num_user_missing (cmp, cnt->v[i])) + if (cnt->missing >= 2 && mv_is_num_user_missing (&cnt->v[i]->miss, cmp)) { counter++; continue; @@ -432,7 +436,7 @@ static inline int count_string (struct counting * cnt, struct ccase * c) { int counter = 0; - int i; + size_t i; for (i = 0; i < cnt->n; i++) {