int rtnl_group_a2n(int *id, char *arg) { static char *cache = NULL; static unsigned long res; struct rtnl_hash_entry *entry; char *end; int i; if (cache && strcmp(cache, arg) == 0) { *id = res; return 0; } if (!rtnl_group_init) rtnl_group_initialize(); for (i=0; i<256; i++) { entry = rtnl_group_hash[i]; while (entry && strcmp(entry->name, arg)) entry = entry->next; if (entry) { cache = entry->name; res = entry->id; *id = res; return 0; } } i = strtol(arg, &end, 0); if (!end || end == arg || *end || i < 0) return -1; *id = i; return 0; }
const char *rtnl_group_n2a(int id, char *buf, int len) { struct rtnl_hash_entry *entry; int i; if (!rtnl_group_init) rtnl_group_initialize(); for (i = 0; i < 256; i++) { entry = rtnl_group_hash[i]; if (entry && entry->id == id) return entry->name; } snprintf(buf, len, "%d", id); return buf; }