snprintf(buffer, bufsize, node->text);
break;
case NUMBER_GN:
- snprintf(buffer, bufsize, "%ld", node->value);
+ snprintf(buffer, bufsize, "%lld", node->value);
break;
case SELECTOR_GN:
snprintf(buffer, bufsize, "<>");
describe_node(node, buf, 50);
fprintf(stderr, "%s[%d]\n", buf, node->type);
fprintf(stderr, "\t->text: %s\n", node->text);
- fprintf(stderr, "\t->value: %ld\n", node->value);
+ fprintf(stderr, "\t->value: %lld\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: %d\n->max: %d\n", node->min, node->max);
+ fprintf(stderr, "\t->min: %lld\n->max: %lld\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));
struct graph_node
{
enum graph_node_type type;// data type this node matches or holds
- int is_start; // whether this node is a start node
+ unsigned int is_start; // whether this node is a start node
vector children; // this node's children
struct graph_node * end; // pointer to end for SELECTOR_GN & OPTION_GN
char* text; // for WORD_GN and VARIABLE_GN
- long value; // for NUMBER_GN
- int min, max; // for RANGE_GN
+ long long value; // for NUMBER_GN
+ long long min, max; // for RANGE_GN
/* cmd_element struct pointer, only valid for END_GN */
struct cmd_element *element;
char *arg;
/* refcount for node parents */
- int refs;
+ unsigned int refs;
};
/*
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 */
match_range (struct graph_node *rangenode, const char *str)
{
char *endptr = NULL;
- signed int val;
+ long long val;
if (str == NULL)
return 1;
- val = strtoimax (str, &endptr, 10);
+ val = strtoll (str, &endptr, 10);
if (*endptr != '\0')
return 0;
{
if (!strcmp("\0", word)) return no_match;
char *endptr;
- int num = strtoimax(word, &endptr, 10);
+ long long num = strtoll (word, &endptr, 10);
if (endptr != '\0') return no_match;
return num == numnode->value ? exact_match : no_match;
}
/* valid types for tokens */
%union{
- signed int integer;
+ long long integer;
char *string;
struct graph_node *node;
}
$$->text = XSTRDUP(MTYPE_CMD_TOKENS, $1);
// get the numbers out
- $$->min = strtoimax( yylval.string+1, &yylval.string, 10 );
+ yylval.string++;
+ $$->min = strtoll( yylval.string, &yylval.string, 10 );
strsep (&yylval.string, "-");
- $$->max = strtoimax( yylval.string, &yylval.string, 10 );
+ $$->max = strtoll( yylval.string, &yylval.string, 10 );
// validate range
if ($$->min >= $$->max) yyerror("Invalid range.");
optnode_start = optnode_end = NULL;
// trace parser
- yydebug = 1;
+ yydebug = 0;
// command string
command = cmd;
// make flex read from a string
{
if (!nodegraph)
fprintf(stderr, "!nodegraph\n");
- fprintf(stderr, "trying to print nodegraph->type\n");
- fprintf(stderr, "%d\n", nodegraph->type);
- walk_graph(nodegraph, 0);
+ else
+ walk_graph(nodegraph, 0);
return CMD_SUCCESS;
}