projects
/
pspp-builds.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix double-free bug.
[pspp-builds.git]
/
src
/
aggregate.c
diff --git
a/src/aggregate.c
b/src/aggregate.c
index fb955330a4102e0aea3f13156573f4d9414a2438..47c60f344c53fbbd660d28903695c2f2170dfad2 100644
(file)
--- a/
src/aggregate.c
+++ b/
src/aggregate.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
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., 5
9 Temple Place - Suite 330
, Boston, MA
- 0211
1-1307
, USA. */
+ Foundation, Inc., 5
1 Franklin Street, Fifth Floor
, Boston, MA
+ 0211
0-1301
, USA. */
#include <config.h>
#include "error.h"
#include <config.h>
#include "error.h"
@@
-213,13
+213,8
@@
cmd_aggregate (void)
goto error;
for (i = 0; i < agr.break_var_cnt; i++)
goto error;
for (i = 0; i < agr.break_var_cnt; i++)
- {
- struct variable *v = dict_clone_var (agr.dict, agr.break_vars[i],
- agr.break_vars[i]->name,
- agr.break_vars[i]->longname
- );
- assert (v != NULL);
- }
+ dict_clone_var_assert (agr.dict, agr.break_vars[i],
+ agr.break_vars[i]->name);
/* BREAK must follow the options. */
break;
/* BREAK must follow the options. */
break;
@@
-455,7
+450,8
@@
parse_aggregate_functions (struct agr_proc *agr)
arg[i].f = tokval;
type = NUMERIC;
} else {
arg[i].f = tokval;
type = NUMERIC;
} else {
- msg (SE, _("Missing argument %d to %s."), i + 1, function->name);
+ msg (SE, _("Missing argument %d to %s."), i + 1,
+ function->name);
goto error;
}
goto error;
}
@@
-495,8
+491,7
@@
parse_aggregate_functions (struct agr_proc *agr)
|| func_index == FIN || func_index == FOUT)
&& ((src[0]->type == NUMERIC && arg[0].f > arg[1].f)
|| (src[0]->type == ALPHA
|| func_index == FIN || func_index == FOUT)
&& ((src[0]->type == NUMERIC && arg[0].f > arg[1].f)
|| (src[0]->type == ALPHA
- && st_compare_pad (arg[0].c, strlen (arg[0].c),
- arg[1].c, strlen (arg[1].c)) > 0)))
+ && str_compare_rpad (arg[0].c, arg[1].c) > 0)))
{
union value t = arg[0];
arg[0] = arg[1];
{
union value t = arg[0];
arg[0] = arg[1];
@@
-527,7
+522,6
@@
parse_aggregate_functions (struct agr_proc *agr)
/* Create the target variable in the aggregate
dictionary. */
{
/* Create the target variable in the aggregate
dictionary. */
{
- static const struct fmt_spec f8_2 = {FMT_F, 8, 2};
struct variable *destvar;
v->function = func_index;
struct variable *destvar;
v->function = func_index;
@@
-543,10
+537,11
@@
parse_aggregate_functions (struct agr_proc *agr)
}
if (function->alpha_type == ALPHA)
}
if (function->alpha_type == ALPHA)
- destvar = dict_clone_var (agr->dict, v->src, 0, dest[i] );
- else if (v->src->type == NUMERIC
- || function->alpha_type == NUMERIC)
+ destvar = dict_clone_var (agr->dict, v->src, dest[i]);
+ else
{
{
+ assert (v->src->type == NUMERIC
+ || function->alpha_type == NUMERIC);
destvar = dict_create_var (agr->dict, dest[i], 0);
if (destvar != NULL)
{
destvar = dict_create_var (agr->dict, dest[i], 0);
if (destvar != NULL)
{