]>
git.proxmox.com Git - mirror_iproute2.git/blob - lib/dnet_ntop.c
1 /* SPDX-License-Identifier: GPL-2.0 */
5 #include <netinet/in.h>
9 static __inline__ u_int16_t
dn_ntohs(u_int16_t addr
)
17 return ((u_int16_t
)u
.byte
[0]) | (((u_int16_t
)u
.byte
[1]) << 8);
20 static __inline__
int do_digit(char *str
, u_int16_t
*addr
, u_int16_t scale
, size_t *pos
, size_t len
, int *started
)
22 u_int16_t tmp
= *addr
/ scale
;
27 if (((tmp
) > 0) || *started
|| (scale
== 1)) {
31 *addr
-= (tmp
* scale
);
38 static const char *dnet_ntop1(const struct dn_naddr
*dna
, char *str
, size_t len
)
44 memcpy(&addr
, dna
->a_addr
, sizeof(addr
));
45 addr
= dn_ntohs(addr
);
56 if (do_digit(str
+ pos
, &area
, 10, &pos
, len
, &started
))
59 if (do_digit(str
+ pos
, &area
, 1, &pos
, len
, &started
))
69 if (do_digit(str
+ pos
, &addr
, 1000, &pos
, len
, &started
))
72 if (do_digit(str
+ pos
, &addr
, 100, &pos
, len
, &started
))
75 if (do_digit(str
+ pos
, &addr
, 10, &pos
, len
, &started
))
78 if (do_digit(str
+ pos
, &addr
, 1, &pos
, len
, &started
))
90 const char *dnet_ntop(int af
, const void *addr
, char *str
, size_t len
)
95 return dnet_ntop1((struct dn_naddr
*)addr
, str
, len
);