mirror of https://git.musl-libc.org/git/musl
add ether_aton[_r] and ether_ntoa[_r] functions
based on patch by Strake with minor stylistic changes, and combined into a single file. this patch remained open for a long time due to some question as to whether ether_aton would be better implemented in terms of sscanf, and it's time something was committed, so here it is.
This commit is contained in:
parent
ef5507867b
commit
83966b369d
|
@ -0,0 +1,14 @@
|
|||
#ifndef _NETINET_ETHER_H
|
||||
#define _NETINET_ETHER_H
|
||||
|
||||
#include <netinet/if_ether.h>
|
||||
|
||||
char *ether_ntoa (const struct ether_addr *);
|
||||
|
||||
struct ether_addr *ether_aton (const char *);
|
||||
|
||||
char *ether_ntoa_r (const struct ether_addr *, char *);
|
||||
|
||||
struct ether_addr *ether_aton_r (const char *, struct ether_addr *);
|
||||
|
||||
#endif
|
|
@ -0,0 +1,43 @@
|
|||
#include <stdlib.h>
|
||||
#include <netinet/ether.h>
|
||||
#include <stdio.h>
|
||||
|
||||
struct ether_addr *ether_aton_r (const char *x, struct ether_addr *p_a)
|
||||
{
|
||||
struct ether_addr a;
|
||||
char *y;
|
||||
for (int ii = 0; ii < 6; ii++) {
|
||||
unsigned long int n;
|
||||
if (ii != 0) {
|
||||
if (x[0] != ':') return 0; /* bad format */
|
||||
else x++;
|
||||
}
|
||||
n = strtoul (x, &y, 16);
|
||||
x = y;
|
||||
if (n > 0xFF) return 0; /* bad byte */
|
||||
a.ether_addr_octet[ii] = n;
|
||||
}
|
||||
if (x[0] != 0) return 0; /* bad format */
|
||||
*p_a = a;
|
||||
return p_a;
|
||||
}
|
||||
|
||||
struct ether_addr *ether_aton (const char *x)
|
||||
{
|
||||
static struct ether_addr a;
|
||||
return ether_aton_r (x, &a);
|
||||
}
|
||||
|
||||
char *ether_ntoa_r (const struct ether_addr *p_a, char *x) {
|
||||
char *y;
|
||||
y = x;
|
||||
for (int ii = 0; ii < 6; ii++) {
|
||||
x += sprintf (x, ii == 0 ? "%.2X" : ":%.2X", p_a->ether_addr_octet[ii]);
|
||||
}
|
||||
return y;
|
||||
}
|
||||
|
||||
char *ether_ntoa (const struct ether_addr *p_a) {
|
||||
static char x[18];
|
||||
return ether_ntoa_r (p_a, x);
|
||||
}
|
Loading…
Reference in New Issue