Closed memory leak.
This commit is contained in:
parent
1471aac6b2
commit
a6517ea488
|
|
@ -337,35 +337,25 @@ trcopy(struct pnode *tree, char *args, struct pnode *nn)
|
||||||
} else
|
} else
|
||||||
return (tree);
|
return (tree);
|
||||||
} else if (tree->pn_func) {
|
} else if (tree->pn_func) {
|
||||||
struct func *func;
|
|
||||||
|
|
||||||
func = alloc(struct func);
|
|
||||||
func->fu_name = copy(tree->pn_func->fu_name);
|
|
||||||
func->fu_func = tree->pn_func->fu_func;
|
|
||||||
|
|
||||||
pn = alloc(struct pnode);
|
pn = alloc(struct pnode);
|
||||||
pn->pn_value = NULL;
|
pn->pn_value = NULL;
|
||||||
pn->pn_func = func;
|
/* pn_func are pointers to a global constant struct */
|
||||||
|
pn->pn_func = tree->pn_func;
|
||||||
pn->pn_op = NULL;
|
pn->pn_op = NULL;
|
||||||
pn->pn_left = trcopy(tree->pn_left, args, nn);
|
pn->pn_left = trcopy(tree->pn_left, args, nn);
|
||||||
pn->pn_right = NULL;
|
pn->pn_right = NULL;
|
||||||
pn->pn_next = NULL;
|
pn->pn_next = NULL;
|
||||||
|
|
||||||
} else if (tree->pn_op) {
|
} else if (tree->pn_op) {
|
||||||
struct op *op;
|
|
||||||
|
|
||||||
op = alloc(struct op);
|
|
||||||
op->op_num = tree->pn_op->op_num;
|
|
||||||
op->op_arity = tree->pn_op->op_arity;
|
|
||||||
op->op_func = tree->pn_op->op_func;
|
|
||||||
op->op_name = copy(tree->pn_op->op_name);
|
|
||||||
|
|
||||||
pn = alloc(struct pnode);
|
pn = alloc(struct pnode);
|
||||||
pn->pn_value = NULL;
|
pn->pn_value = NULL;
|
||||||
pn->pn_func = NULL;
|
pn->pn_func = NULL;
|
||||||
pn->pn_op = op;
|
/* pn_op are pointers to a global constant struct */
|
||||||
|
pn->pn_op = tree->pn_op;
|
||||||
pn->pn_left = trcopy(tree->pn_left, args, nn);
|
pn->pn_left = trcopy(tree->pn_left, args, nn);
|
||||||
if (op->op_arity == 2)
|
if (pn->pn_op->op_arity == 2)
|
||||||
pn->pn_right = trcopy(tree->pn_right, args, nn);
|
pn->pn_right = trcopy(tree->pn_right, args, nn);
|
||||||
else
|
else
|
||||||
pn->pn_right = NULL;
|
pn->pn_right = NULL;
|
||||||
|
|
|
||||||
|
|
@ -863,14 +863,9 @@ free_pnode(struct pnode *t)
|
||||||
free_pnode(t->pn_left);
|
free_pnode(t->pn_left);
|
||||||
free_pnode(t->pn_right);
|
free_pnode(t->pn_right);
|
||||||
free_pnode(t->pn_next);
|
free_pnode(t->pn_next);
|
||||||
tfree(t->pn_name); /* va: it is a copy() of original string, can be free'd */
|
tfree(t->pn_name);
|
||||||
/* va: tfree struct func, allocated within parser */
|
|
||||||
// if (t->pn_func!=NULL) {
|
|
||||||
// tfree(t->pn_func->fu_name); /* va: name is a copy of original string */
|
|
||||||
// tfree(t->pn_func); /* va: t->pn_func->fu_func must not tfree'd */
|
|
||||||
// }
|
|
||||||
if (t->pn_value)
|
if (t->pn_value)
|
||||||
vec_free(t->pn_value); /* patch by Stefan Jones */
|
vec_free(t->pn_value);
|
||||||
tfree(t);
|
tfree(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue