From 0c95a3d31691b710e5f58b32a7bbc3f344c44ecd Mon Sep 17 00:00:00 2001 From: Laurent Mazet Date: Tue, 24 Jan 2023 23:48:48 +0100 Subject: [PATCH] remove limitation on max number of operands --- parser.c | 11 ++++++++++- parser.h | 3 +-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/parser.c b/parser.c index 20f507d..7a9f988 100644 --- a/parser.c +++ b/parser.c @@ -45,6 +45,12 @@ element_t *newelement (func_t function, int nbops, int prio) VERBOSE (ERROR, fprintf (stderr, "can't allocate memory\n")); return NULL; } + new->ops = (element_t **) calloc (1, sizeof (element_t *)); + if (new->ops == NULL) { + free (new); + VERBOSE (ERROR, fprintf (stderr, "can't allocate memory\n")); + return NULL; + } new->func = function; new->nbops = nbops; new->prio = prio; @@ -56,13 +62,16 @@ element_t *newelement (func_t function, int nbops, int prio) void delelement (element_t *root) { - int i; if ((root != NULL) && (root != ERROR_OP)) { + int i; for (i = 0; i < root->nbops; i++) { if ((root->ops[i] != NULL) && (root->ops[i] != ERROR_OP)) { delelement (root->ops[i]); } } + if (root->nbops) { + free (root->ops); + } free (root); } } diff --git a/parser.h b/parser.h index 49acc20..67dd9ab 100644 --- a/parser.h +++ b/parser.h @@ -34,11 +34,10 @@ typedef struct _keyword_t { /* calculus element type */ -#define MAX_OPERANDS 10 typedef struct _element_t { func_t func; int nbops; - struct _element_t *ops[MAX_OPERANDS]; + struct _element_t **ops; double value; int prio; } element_t; -- 2.30.2