diff options
author | Phil Sutter <phil@nwl.cc> | 2023-12-22 16:53:14 +0100 |
---|---|---|
committer | Phil Sutter <phil@nwl.cc> | 2024-01-02 18:29:51 +0100 |
commit | d9badd39deb7e2f9509be75e83477ab0a0bf2740 (patch) | |
tree | 0ff4d3a48aef907917394d0a744a31efc2381872 /src/datatype.c | |
parent | d0f70a1739b8e512986fb460a7fa7ff8a9300b68 (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.c | 12 |
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; |