diff --git a/include/ll_map.h b/include/ll_map.h index c4d5c6d1..752b8279 100644 --- a/include/ll_map.h +++ b/include/ll_map.h @@ -9,5 +9,7 @@ extern const char *ll_index_to_name(unsigned idx); extern const char *ll_idx_n2a(unsigned idx, char *buf); extern int ll_index_to_type(unsigned idx); extern unsigned ll_index_to_flags(unsigned idx); +extern unsigned ll_index_to_addr(unsigned idx, unsigned char *addr, + unsigned alen); #endif /* __LL_MAP_H__ */ diff --git a/lib/ll_map.c b/lib/ll_map.c index a96c59ea..5addf4a4 100644 --- a/lib/ll_map.c +++ b/lib/ll_map.c @@ -134,6 +134,27 @@ unsigned ll_index_to_flags(unsigned idx) return 0; } +unsigned ll_index_to_addr(unsigned idx, unsigned char *addr, + unsigned alen) +{ + struct idxmap *im; + + if (idx == 0) + return 0; + + for (im = idxmap[idx&0xF]; im; im = im->next) { + if (im->index == idx) { + if (alen > sizeof(im->addr)) + alen = sizeof(im->addr); + if (alen > im->alen) + alen = im->alen; + memcpy(addr, im->addr, alen); + return alen; + } + } + return 0; +} + unsigned ll_name_to_index(const char *name) { static char ncache[16];