summaryrefslogtreecommitdiffstats
path: root/src/datatype.c
diff options
context:
space:
mode:
authorPhil Sutter <phil@nwl.cc>2023-12-22 16:53:14 +0100
committerPhil Sutter <phil@nwl.cc>2024-01-02 18:29:51 +0100
commitd9badd39deb7e2f9509be75e83477ab0a0bf2740 (patch)
tree0ff4d3a48aef907917394d0a744a31efc2381872 /src/datatype.c
parentd0f70a1739b8e512986fb460a7fa7ff8a9300b68 (diff)
datatype: Initialize rt_symbol_tables' base field
It is unconditionally accessed in symbol_table_print() so make sure it is initialized to either BASE_DECIMAL (arbitrary) for empty or non-existent source files or a proper value depending on entry number format. Signed-off-by: Phil Sutter <phil@nwl.cc>
Diffstat (limited to 'src/datatype.c')
-rw-r--r--src/datatype.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/src/datatype.c b/src/datatype.c
index 9ca05167..4d867798 100644
--- a/src/datatype.c
+++ b/src/datatype.c
@@ -893,6 +893,7 @@ struct symbol_table *rt_symbol_table_init(const char *filename)
size = RT_SYM_TAB_INITIAL_SIZE;
tbl = xmalloc(sizeof(*tbl) + size * sizeof(s));
+ tbl->base = BASE_DECIMAL;
nelems = 0;
f = open_iproute2_db(filename, &path);
@@ -905,10 +906,13 @@ struct symbol_table *rt_symbol_table_init(const char *filename)
p++;
if (*p == '#' || *p == '\n' || *p == '\0')
continue;
- if (sscanf(p, "0x%x %511s\n", &val, namebuf) != 2 &&
- sscanf(p, "0x%x %511s #", &val, namebuf) != 2 &&
- sscanf(p, "%u %511s\n", &val, namebuf) != 2 &&
- sscanf(p, "%u %511s #", &val, namebuf) != 2) {
+ if (sscanf(p, "0x%x %511s\n", &val, namebuf) == 2 ||
+ sscanf(p, "0x%x %511s #", &val, namebuf) == 2) {
+ tbl->base = BASE_HEXADECIMAL;
+ } else if (sscanf(p, "%u %511s\n", &val, namebuf) == 2 ||
+ sscanf(p, "%u %511s #", &val, namebuf) == 2) {
+ tbl->base = BASE_DECIMAL;
+ } else {
fprintf(stderr, "iproute database '%s' corrupted\n",
path ?: filename);
break;