~vcs-imports/busybox/main

« back to all changes in this revision

Viewing changes to libbb/xconnect.c

  • Committer: vda
  • Date: 2009-04-21 23:48:38 UTC
  • Revision ID: vcs-imports@canonical.com-20090421234838-00iy8q2ind54zttx
*: 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

Show diffs side-by-side

added added

removed removed

Lines of Context:
37
37
 
38
38
len_and_sockaddr* FAST_FUNC get_sock_lsa(int fd)
39
39
{
40
 
        len_and_sockaddr *lsa;
41
 
        socklen_t len = 0;
 
40
        len_and_sockaddr lsa;
 
41
        len_and_sockaddr *lsa_ptr;
42
42
 
43
 
        /* Can be optimized to do only one getsockname() */
44
 
        if (getsockname(fd, NULL, &len) != 0)
 
43
        lsa.len = LSA_SIZEOF_SA;
 
44
        if (getsockname(fd, &lsa.u.sa, &lsa.len) != 0)
45
45
                return NULL;
46
 
        lsa = xzalloc(LSA_LEN_SIZE + len);
47
 
        lsa->len = len;
48
 
        getsockname(fd, &lsa->u.sa, &lsa->len);
49
 
        return lsa;
 
46
 
 
47
        lsa_ptr = xzalloc(LSA_LEN_SIZE + lsa.len);
 
48
        if (lsa.len > LSA_SIZEOF_SA) { /* rarely (if ever) happens */
 
49
                lsa_ptr->len = lsa.len;
 
50
                getsockname(fd, &lsa_ptr->u.sa, &lsa_ptr->len);
 
51
        } else {
 
52
                memcpy(lsa_ptr, &lsa, LSA_LEN_SIZE + lsa.len);
 
53
        }
 
54
        return lsa_ptr;
50
55
}
51
56
 
52
57
void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen)