aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--networking/nameif.c44
1 files changed, 16 insertions, 28 deletions
diff --git a/networking/nameif.c b/networking/nameif.c
index 12c08f13b..75829fac3 100644
--- a/networking/nameif.c
+++ b/networking/nameif.c
@@ -136,13 +136,11 @@ int nameif_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
int nameif_main(int argc, char **argv)
{
ethtable_t *clist = NULL;
- FILE *ifh;
const char *fname = "/etc/mactab";
- char *line;
- char *line_ptr;
- int linenum;
int ctl_sk;
ethtable_t *ch;
+ parser_t *parser;
+ char *token[2];
if (1 & getopt32(argv, "sc:", &fname)) {
openlog(applet_name, 0, LOG_LOCAL0);
@@ -160,35 +158,26 @@ int nameif_main(int argc, char **argv)
prepend_new_eth_table(&clist, ifname, *argv++);
}
} else {
- char *tokens[2];
- struct parser_t *parser = config_open(fname);
- while (config_read(parser, tokens, 2, 2, "# \t", PARSE_NORMAL))
- prepend_new_eth_table(&clist, tokens[0], tokens[1]);
+ parser = config_open(fname);
+ while (config_read(parser, token, 2, 2, "# \t", PARSE_NORMAL))
+ prepend_new_eth_table(&clist, token[0], token[1]);
config_close(parser);
}
ctl_sk = xsocket(PF_INET, SOCK_DGRAM, 0);
- ifh = xfopen_for_read("/proc/net/dev");
+ parser = config_open2("/proc/net/dev", xfopen_for_read);
- linenum = 0;
- while (clist) {
+ while (clist && config_read(parser, token, 2, 2, "\0: \t", PARSE_NORMAL)) {
struct ifreq ifr;
#if ENABLE_FEATURE_NAMEIF_EXTENDED
struct ethtool_drvinfo drvinfo;
#endif
-
- line = xmalloc_fgets(ifh);
- if (line == NULL)
- break; /* Seems like we're done */
- if (linenum++ < 2 )
- goto next_line; /* Skip the first two lines */
+ if (parser->lineno < 2)
+ continue; /* Skip the first two lines */
/* Find the current interface name and copy it to ifr.ifr_name */
- line_ptr = skip_whitespace(line);
- *strpbrk(line_ptr, " \t\n:") = '\0';
-
memset(&ifr, 0, sizeof(struct ifreq));
- strncpy(ifr.ifr_name, line_ptr, sizeof(ifr.ifr_name));
+ strncpy(ifr.ifr_name, token[0], sizeof(ifr.ifr_name));
#if ENABLE_FEATURE_NAMEIF_EXTENDED
/* Check for driver etc. */
@@ -211,11 +200,12 @@ int nameif_main(int argc, char **argv)
if (ch->mac && memcmp(ch->mac, ifr.ifr_hwaddr.sa_data, ETH_ALEN) != 0)
continue;
/* if we came here, all selectors have matched */
- goto found;
+ break;
}
/* Nothing found for current interface */
- goto next_line;
- found:
+ if (!ch)
+ continue;
+
if (strcmp(ifr.ifr_name, ch->ifname) != 0) {
strcpy(ifr.ifr_newname, ch->ifname);
ioctl_or_perror_and_die(ctl_sk, SIOCSIFNAME, &ifr,
@@ -228,16 +218,14 @@ int nameif_main(int argc, char **argv)
else
clist = ch->next;
if (ch->next != NULL)
- ch->next->prev = ch->prev;
+ ch->next->prev = ch->prev;
if (ENABLE_FEATURE_CLEAN_UP)
delete_eth_table(ch);
- next_line:
- free(line);
}
if (ENABLE_FEATURE_CLEAN_UP) {
for (ch = clist; ch; ch = ch->next)
delete_eth_table(ch);
- fclose(ifh);
+ config_close(parser);
};
return 0;