*: remove check for errors on getsockaddr in cases we know they can't happen

libbb: make get_sock_lsa use only one getsockaddr syscall, not two

function                                             old     new   delta
get_sock_lsa                                          72     101     +29
do_iplink                                           1151    1137     -14
arping_main                                         1585    1569     -16
dolisten                                             789     755     -34
xrtnl_open                                           161      94     -67
This commit is contained in:
Denis Vlasenko
2009-04-21 23:48:38 +00:00
parent e6b10ef0a7
commit a771e7c005
6 changed files with 37 additions and 31 deletions

View File

@ -37,16 +37,21 @@ int FAST_FUNC setsockopt_bindtodevice(int fd, const char *iface)
len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd)
{
len_and_sockaddr *lsa;
socklen_t len = 0;
len_and_sockaddr lsa;
len_and_sockaddr *lsa_ptr;
/* Can be optimized to do only one getsockname() */
if (getsockname(fd, NULL, &len) != 0)
lsa.len = LSA_SIZEOF_SA;
if (getsockname(fd, &lsa.u.sa, &lsa.len) != 0)
return NULL;
lsa = xzalloc(LSA_LEN_SIZE + len);
lsa->len = len;
getsockname(fd, &lsa->u.sa, &lsa->len);
return lsa;
lsa_ptr = xzalloc(LSA_LEN_SIZE + lsa.len);
if (lsa.len > LSA_SIZEOF_SA) { /* rarely (if ever) happens */
lsa_ptr->len = lsa.len;
getsockname(fd, &lsa_ptr->u.sa, &lsa_ptr->len);
} else {
memcpy(lsa_ptr, &lsa, LSA_LEN_SIZE + lsa.len);
}
return lsa_ptr;
}
void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen)