fprintf(stderr, "\t->value: %ld\n", node->value);
fprintf(stderr, "\t->is_start: %d\n", node->is_start);
fprintf(stderr, "\t->element: %p\n", node->element);
- fprintf(stderr, "\t->min: %lld\n->max: %lld\n", node->min, node->max);
+ fprintf(stderr, "\t->min: %d\n->max: %d\n", node->min, node->max);
fprintf(stderr, "\t->arg: %s\n", node->arg);
fprintf(stderr, "\t->refs: %d\n", node->refs);
fprintf(stderr, "\tnum children: %d\n", vector_active(node->children));
char* text; // for WORD_GN and VARIABLE_GN
long value; // for NUMBER_GN
- signed long long min, max;// for RANGE_GN
+ int min, max; // for RANGE_GN
/* cmd_element struct pointer, only valid for END_GN */
struct cmd_element *element;
extern void set_buffer_string(const char *);
%}
-WORD [-+a-z\*][-+_a-zA-Z0-9\*]*
+WORD [-|+]?[a-z\*][-+_a-zA-Z0-9\*]*
IPV4 A\.B\.C\.D
IPV4_PREFIX A\.B\.C\.D\/M
IPV6 X:X::X:X
IPV6_PREFIX X:X::X:X\/M
VARIABLE [A-Z][-_a-zA-Z:0-9]+
-NUMBER [0-9]{1,20}
+NUMBER [-|+]?[0-9]{1,20}
RANGE \({NUMBER}\-{NUMBER}\)
/* yytext shall be a pointer */
{VARIABLE} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return VARIABLE;}
{NUMBER} {
char *endptr;
- yylval.integer = strtoll(yytext, &endptr, 10);
+ yylval.integer = strtoimax(yytext, &endptr, 10);
return NUMBER;
}
{RANGE} {yylval.string = XSTRDUP(MTYPE_TMP, yytext); return RANGE;}
return no_match;
/* validate mask */
- nmask = strtol (mask, &endptr, 10);
+ nmask = strtoimax (mask, &endptr, 10);
if (*endptr != '\0' || nmask < 0 || nmask > 128)
return no_match;
match_range (struct graph_node *rangenode, const char *str)
{
char *endptr = NULL;
- signed long long val;
+ signed int val;
if (str == NULL)
return 1;
- val = strtoll (str, &endptr, 10);
+ val = strtoimax (str, &endptr, 10);
if (*endptr != '\0')
return 0;
- val = llabs(val);
if (val < rangenode->min || val > rangenode->max)
return no_match;
{
if (!strcmp("\0", word)) return no_match;
char *endptr;
- long num = strtol(word, &endptr, 10);
+ int num = strtoimax(word, &endptr, 10);
if (endptr != '\0') return no_match;
return num == numnode->value ? exact_match : no_match;
}
struct graph_node *
node_replace(struct graph_node *, struct graph_node *);
+#define DECIMAL_STRLEN_MAX 20
+
// compile with debugging facilities
#define YYDEBUG 1
%}
/* valid types for tokens */
%union{
- signed long long integer;
+ signed int integer;
char *string;
struct graph_node *node;
}
$$->text = XSTRDUP(MTYPE_CMD_TOKENS, $1);
// get the numbers out
- strsep(&yylval.string, "(-)");
- char *endptr;
- $$->min = strtoll( strsep(&yylval.string, "(-)"), &endptr, 10 );
- $$->max = strtoll( strsep(&yylval.string, "(-)"), &endptr, 10 );
+ $$->min = strtoimax( yylval.string+1, &yylval.string, 10 );
+ $$->max = strtoimax( yylval.string+1, &yylval.string, 10 );
free ($1);
}
void yyerror(char const *message) {
// fail on bad parse
fprintf(stderr, "Grammar error: %s\n", message);
- fprintf(stderr, "Token on error: ");
- if (yylval.string) fprintf(stderr, "%s\n", yylval.string);
- else if (yylval.node) fprintf(stderr, "%s\n", yylval.node->text);
- else fprintf(stderr, "%lld\n", yylval.integer);
-
+ exit(EXIT_FAILURE);
}
struct graph_node *