|
@@ -209,7 +209,16 @@ static void free_arg(struct filter_arg *arg)
|
|
|
switch (arg->type) {
|
|
|
case FILTER_ARG_NONE:
|
|
|
case FILTER_ARG_BOOLEAN:
|
|
|
+ break;
|
|
|
+
|
|
|
case FILTER_ARG_NUM:
|
|
|
+ free_arg(arg->num.left);
|
|
|
+ free_arg(arg->num.right);
|
|
|
+ break;
|
|
|
+
|
|
|
+ case FILTER_ARG_EXP:
|
|
|
+ free_arg(arg->exp.left);
|
|
|
+ free_arg(arg->exp.right);
|
|
|
break;
|
|
|
|
|
|
case FILTER_ARG_STR:
|
|
@@ -218,6 +227,12 @@ static void free_arg(struct filter_arg *arg)
|
|
|
free(arg->str.buffer);
|
|
|
break;
|
|
|
|
|
|
+ case FILTER_ARG_VALUE:
|
|
|
+ if (arg->value.type == FILTER_STRING ||
|
|
|
+ arg->value.type == FILTER_CHAR)
|
|
|
+ free(arg->value.str);
|
|
|
+ break;
|
|
|
+
|
|
|
case FILTER_ARG_OP:
|
|
|
free_arg(arg->op.left);
|
|
|
free_arg(arg->op.right);
|