From: Laurent Mazet Date: Tue, 24 Jan 2023 22:48:48 +0000 (+0100) Subject: remove limitation on max number of operands X-Git-Tag: v0.8~22 X-Git-Url: https://secure.softndesign.org/git/?a=commitdiff_plain;h=0c95a3d31691b710e5f58b32a7bbc3f344c44ecd;p=calc.git remove limitation on max number of operands --- 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;