mirror of
https://git.kernel.org/pub/scm/network/iproute2/iproute2.git
synced 2024-11-15 05:55:11 +08:00
lib names: Add helper func for parse id and name from file
Signed-off-by: Vadim Kochan <vadim4j@gmail.com>
This commit is contained in:
parent
4e5615b34c
commit
f00073e8b9
@ -27,43 +27,63 @@
|
||||
#define CONFDIR "/etc/iproute2"
|
||||
#endif
|
||||
|
||||
#define NAME_MAX_LEN 512
|
||||
|
||||
struct rtnl_hash_entry {
|
||||
struct rtnl_hash_entry *next;
|
||||
const char * name;
|
||||
unsigned int id;
|
||||
};
|
||||
|
||||
static int fread_id_name(FILE *fp, int *id, char *namebuf)
|
||||
{
|
||||
char buf[NAME_MAX_LEN];
|
||||
|
||||
while (fgets(buf, sizeof(buf), fp)) {
|
||||
char *p = buf;
|
||||
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
|
||||
if (*p == '#' || *p == '\n' || *p == 0)
|
||||
continue;
|
||||
|
||||
if (sscanf(p, "0x%x %s\n", id, namebuf) != 2 &&
|
||||
sscanf(p, "0x%x %s #", id, namebuf) != 2 &&
|
||||
sscanf(p, "%d %s\n", id, namebuf) != 2 &&
|
||||
sscanf(p, "%d %s #", id, namebuf) != 2) {
|
||||
strcpy(namebuf, p);
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
rtnl_hash_initialize(const char *file, struct rtnl_hash_entry **hash, int size)
|
||||
{
|
||||
struct rtnl_hash_entry *entry;
|
||||
char buf[512];
|
||||
FILE *fp;
|
||||
int id;
|
||||
char namebuf[NAME_MAX_LEN] = {0};
|
||||
int ret;
|
||||
|
||||
fp = fopen(file, "r");
|
||||
if (!fp)
|
||||
return;
|
||||
while (fgets(buf, sizeof(buf), fp)) {
|
||||
char *p = buf;
|
||||
int id;
|
||||
char namebuf[512];
|
||||
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
if (*p == '#' || *p == '\n' || *p == 0)
|
||||
continue;
|
||||
if (sscanf(p, "0x%x %s\n", &id, namebuf) != 2 &&
|
||||
sscanf(p, "0x%x %s #", &id, namebuf) != 2 &&
|
||||
sscanf(p, "%d %s\n", &id, namebuf) != 2 &&
|
||||
sscanf(p, "%d %s #", &id, namebuf) != 2) {
|
||||
while ((ret = fread_id_name(fp, &id, &namebuf[0]))) {
|
||||
if (ret == -1) {
|
||||
fprintf(stderr, "Database %s is corrupted at %s\n",
|
||||
file, p);
|
||||
file, namebuf);
|
||||
fclose(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (id<0)
|
||||
continue;
|
||||
|
||||
entry = malloc(sizeof(*entry));
|
||||
entry->id = id;
|
||||
entry->name = strdup(namebuf);
|
||||
@ -75,31 +95,22 @@ rtnl_hash_initialize(const char *file, struct rtnl_hash_entry **hash, int size)
|
||||
|
||||
static void rtnl_tab_initialize(const char *file, char **tab, int size)
|
||||
{
|
||||
char buf[512];
|
||||
FILE *fp;
|
||||
int id;
|
||||
char namebuf[NAME_MAX_LEN] = {0};
|
||||
int ret;
|
||||
|
||||
fp = fopen(file, "r");
|
||||
if (!fp)
|
||||
return;
|
||||
while (fgets(buf, sizeof(buf), fp)) {
|
||||
char *p = buf;
|
||||
int id;
|
||||
char namebuf[512];
|
||||
|
||||
while (*p == ' ' || *p == '\t')
|
||||
p++;
|
||||
if (*p == '#' || *p == '\n' || *p == 0)
|
||||
continue;
|
||||
if (sscanf(p, "0x%x %s\n", &id, namebuf) != 2 &&
|
||||
sscanf(p, "0x%x %s #", &id, namebuf) != 2 &&
|
||||
sscanf(p, "%d %s\n", &id, namebuf) != 2 &&
|
||||
sscanf(p, "%d %s #", &id, namebuf) != 2) {
|
||||
while ((ret = fread_id_name(fp, &id, &namebuf[0]))) {
|
||||
if (ret == -1) {
|
||||
fprintf(stderr, "Database %s is corrupted at %s\n",
|
||||
file, p);
|
||||
file, namebuf);
|
||||
fclose(fp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (id<0 || id>size)
|
||||
continue;
|
||||
|
||||
@ -185,8 +196,7 @@ int rtnl_rtprot_a2n(__u32 *id, const char *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static char * rtnl_rtscope_tab[256] = {
|
||||
static const char * rtnl_rtscope_tab[256] = {
|
||||
"global",
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user