X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Frecode.c;h=394e9be14fbd0ef45b249d65c6de6d52a84c3d16;hb=ad01fea350354a7df11790a561e935a8bffd3636;hp=b364a1ac3ef2422f06d8ffad0086cbf5f5ad7c8a;hpb=8cf495e615e4feca5777f3592de98321d4fcdc0b;p=pspp diff --git a/src/recode.c b/src/recode.c index b364a1ac3e..394e9be14f 100644 --- a/src/recode.c +++ b/src/recode.c @@ -81,7 +81,6 @@ struct rcd_var /* RECODE transformation. */ struct recode_trns { - struct trns_header h; struct rcd_var *codings; }; @@ -105,9 +104,9 @@ struct recode_trns #define RCD_MISC_MISSING 0100u /* Encountered MISSING or SYSMIS in this input spec. */ -static int parse_dest_spec (struct rcd_var * rcd, union value *v, +static int parse_dest_spec (struct rcd_var *rcd, union value *v, size_t *max_dst_width); -static int parse_src_spec (struct rcd_var * rcd, int type, size_t max_src_width); +static int parse_src_spec (struct rcd_var *rcd, int type, size_t max_src_width); static trns_proc_func recode_trns_proc; static trns_free_func recode_trns_free; static double convert_to_double (const char *, int); @@ -425,10 +424,8 @@ cmd_recode (void) } trns = xmalloc (sizeof *trns); - trns->h.proc = recode_trns_proc; - trns->h.free = recode_trns_free; trns->codings = head; - add_transformation ((struct trns_header *) trns); + add_transformation (recode_trns_proc, recode_trns_free, trns); return CMD_SUCCESS; @@ -438,13 +435,13 @@ cmd_recode (void) struct recode_trns t; t.codings = head; - recode_trns_free ((struct trns_header *) &t); + recode_trns_free (&t); return CMD_FAILURE; } } static int -parse_dest_spec (struct rcd_var * rcd, union value * v, size_t *max_dst_width) +parse_dest_spec (struct rcd_var *rcd, union value *v, size_t *max_dst_width) { int flags; @@ -515,7 +512,7 @@ parse_dest_spec (struct rcd_var * rcd, union value * v, size_t *max_dst_width) but with CONVERT as the keyword; 3 for success but with ELSE as the keyword. */ static int -parse_src_spec (struct rcd_var * rcd, int type, size_t max_src_width) +parse_src_spec (struct rcd_var *rcd, int type, size_t max_src_width) { struct coding *c; @@ -649,12 +646,13 @@ parse_src_spec (struct rcd_var * rcd, int type, size_t max_src_width) /* Data transformation. */ static void -recode_trns_free (struct trns_header * t) +recode_trns_free (void *t_) { + struct recode_trns *t = t_; size_t i; struct rcd_var *head, *next; - head = ((struct recode_trns *) t)->codings; + head = t->codings; while (head) { if (head->map && !(head->flags & RCD_MISC_DUPLICATE)) @@ -689,10 +687,11 @@ recode_trns_free (struct trns_header * t) free (head); head = next; } + free (t); } static inline struct coding * -find_src_numeric (struct rcd_var * v, struct ccase * c) +find_src_numeric (struct rcd_var *v, struct ccase *c) { double cmp = case_num (c, v->src->fv); struct coding *cp; @@ -743,7 +742,7 @@ find_src_numeric (struct rcd_var * v, struct ccase * c) } static inline struct coding * -find_src_string (struct rcd_var * v, struct ccase * c) +find_src_string (struct rcd_var *v, struct ccase *c) { const char *cmp = case_str (c, v->src->fv); int w = v->src->width; @@ -776,12 +775,13 @@ find_src_string (struct rcd_var * v, struct ccase * c) } static int -recode_trns_proc (struct trns_header * t, struct ccase * c, +recode_trns_proc (void *t_, struct ccase *c, int case_idx UNUSED) { + struct recode_trns *t = t_; struct rcd_var *v; - for (v = ((struct recode_trns *) t)->codings; v; v = v->next) + for (v = t->codings; v; v = v->next) { struct coding *cp;