X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=src%2Flib%2Fcmdline_parse_etheraddr.c;h=7a50e021d4ad08a07cb1906ffdb6f248b63c32ef;hb=b1d5b169352e57df3fc14c51ffad4b83f3e5613f;hp=d718081242e276f74b14e95924fba1d8e89645f1;hpb=767419072cd4dfb52541b7fe2715bbb01bc8d561;p=libcmdline.git diff --git a/src/lib/cmdline_parse_etheraddr.c b/src/lib/cmdline_parse_etheraddr.c index d718081..7a50e02 100644 --- a/src/lib/cmdline_parse_etheraddr.c +++ b/src/lib/cmdline_parse_etheraddr.c @@ -98,37 +98,33 @@ my_ether_aton(const char *a) if (i != ETHER_ADDR_LEN) return NULL; - ether_addr.ea_oct[0] = o0; - ether_addr.ea_oct[1] = o1; - ether_addr.ea_oct[2] = o2; - ether_addr.ea_oct[3] = o3; - ether_addr.ea_oct[4] = o4; - ether_addr.ea_oct[5] = o5; + ether_addr.ea_oct[0] = (uint8_t)o0; + ether_addr.ea_oct[1] = (uint8_t)o1; + ether_addr.ea_oct[2] = (uint8_t)o2; + ether_addr.ea_oct[3] = (uint8_t)o3; + ether_addr.ea_oct[4] = (uint8_t)o4; + ether_addr.ea_oct[5] = (uint8_t)o5; return (struct ether_addr *)ðer_addr; } 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;