#include "cmdline_parse.h"
#include "cmdline_parse_etheraddr.h"
-struct cmdline_token_ops cmdline_token_etheraddr_ops = {
- .parse = cmdline_parse_etheraddr,
- .complete_get_nb = NULL,
- .complete_get_elt = NULL,
- .get_help = cmdline_get_help_etheraddr,
-};
-
-
#define ETHER_ADDRSTRLEN 18
#ifdef __linux__
return (struct ether_addr *)ðer_addr;
}
-int
+static int
cmdline_parse_etheraddr(__attribute__((unused)) cmdline_parse_token_hdr_t *tk,
- const char *buf, void *res)
+ const char *buf, void *res, unsigned ressize)
{
unsigned int token_len = 0;
char ether_str[ETHER_ADDRSTRLEN];
struct ether_addr *etheraddr = res;
struct ether_addr *tmp;
- if (! *buf)
+ if (res && ressize < sizeof(struct ether_addr))
return -1;
- while (!cmdline_isendoftoken(buf[token_len]))
- token_len++;
-
/* if token is too big... */
- if (token_len >= ETHER_ADDRSTRLEN)
+ token_len = snprintf(ether_str, sizeof(ether_str), "%s", buf);
+ if (token_len >= sizeof(ether_str))
return -1;
- snprintf(ether_str, token_len+1, "%s", buf);
-
tmp = my_ether_aton(ether_str);
if (tmp == NULL)
return -1;
return token_len;
}
-int cmdline_get_help_etheraddr(__attribute__((unused)) cmdline_parse_token_hdr_t *tk,
- char *dstbuf, unsigned int size)
+static int
+cmdline_help_etheraddr(__attribute__((unused)) cmdline_parse_token_hdr_t *tk,
+ char *dstbuf, unsigned int size)
{
snprintf(dstbuf, size, "Ethernet address");
return 0;
}
+
+struct cmdline_token_ops cmdline_token_etheraddr_ops = {
+ .parse = cmdline_parse_etheraddr,
+ .complete_start = NULL,
+ .complete_iterate = NULL,
+ .complete_end = NULL,
+ .help = cmdline_help_etheraddr,
+};