xconnect is non-conforming to "xfunc like libc" rule. Fixing
authorDenis Vlasenko <vda.linux@googlemail.com>
Thu, 26 Oct 2006 01:09:46 +0000 (01:09 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Thu, 26 Oct 2006 01:09:46 +0000 (01:09 -0000)
include/libbb.h
libbb/xconnect.c
networking/ftpgetput.c
networking/telnet.c
networking/wget.c
util-linux/rdate.c

index 7b8327ff51f6e2603f5b9b3ea99cea4dd4051f03..a2267f942f6f106a49ea0488ad88739357f2fa70 100644 (file)
@@ -452,7 +452,9 @@ extern struct hostent *xgethostbyname(const char *name);
 extern struct hostent *xgethostbyname2(const char *name, int af);
 extern int create_icmp_socket(void);
 extern int create_icmp6_socket(void);
-extern int xconnect(struct sockaddr_in *s_addr);
+extern void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen);
+extern int xconnect_tcp_v4(struct sockaddr_in *s_addr);
+
 extern unsigned short bb_lookup_port(const char *port, const char *protocol, unsigned short default_port);
 extern void bb_lookup_host(struct sockaddr_in *s_in, const char *host);
 
index f88136a1a0eb92b9fc5187779725082a2f65288c..7cf9d00e930e07b53c1c1124be6790160b7781df 100644 (file)
@@ -49,14 +49,20 @@ void bb_lookup_host(struct sockaddr_in *s_in, const char *host)
        memcpy(&(s_in->sin_addr), he->h_addr_list[0], he->h_length);
 }
 
-int xconnect(struct sockaddr_in *s_addr)
+void xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen)
 {
-       int s = xsocket(AF_INET, SOCK_STREAM, 0);
-       if (connect(s, (struct sockaddr *)s_addr, sizeof(struct sockaddr_in)) < 0)
-       {
+       if (connect(s, s_addr, addrlen) < 0) {
                if (ENABLE_FEATURE_CLEAN_UP) close(s);
-               bb_perror_msg_and_die("unable to connect to remote host (%s)",
-                               inet_ntoa(s_addr->sin_addr));
+               if (s_addr->sa_family == AF_INET)
+                       bb_perror_msg_and_die("unable to connect to remote host (%s)",
+                               inet_ntoa(((struct sockaddr_in *)s_addr)->sin_addr));
+               bb_perror_msg_and_die("unable to connect to remote host");
        }
+}
+
+int xconnect_tcp_v4(struct sockaddr_in *s_addr)
+{
+       int s = xsocket(AF_INET, SOCK_STREAM, 0);
+       xconnect(s, (struct sockaddr*) s_addr, sizeof(*s_addr));
        return s;
 }
index aafeaf6e926fc2d7b4f52b5cf66b26f2b914456b..6608e683041a52dd8c751484b4b10f88f841e33d 100644 (file)
@@ -67,7 +67,7 @@ static int xconnect_ftpdata(ftp_host_info_t *server, const char *buf)
        port_num += xatoul_range(buf_ptr + 1, 0, 255) * 256;
 
        server->s_in->sin_port = htons(port_num);
-       return xconnect(server->s_in);
+       return xconnect_tcp_v4(server->s_in);
 }
 
 static FILE *ftp_login(ftp_host_info_t *server)
@@ -76,7 +76,7 @@ static FILE *ftp_login(ftp_host_info_t *server)
        char buf[512];
 
        /* Connect to the command socket */
-       control_stream = fdopen(xconnect(server->s_in), "r+");
+       control_stream = fdopen(xconnect_tcp_v4(server->s_in), "r+");
        if (control_stream == NULL) {
                bb_perror_msg_and_die("cannot open control stream");
        }
index cd4c33a863ae3dbc6b6f0588127451ea1c33c7e9..5b8c885e243f1ec0211c8326318a541681f477f5 100644 (file)
@@ -639,7 +639,7 @@ int telnet_main(int argc, char** argv)
        s_in.sin_port = bb_lookup_port((argc == 3) ? argv[2] : "telnet", "tcp", 23);
 #endif
 
-       G.netfd = xconnect(&s_in);
+       G.netfd = xconnect_tcp_v4(&s_in);
 
        setsockopt(G.netfd, SOL_SOCKET, SO_KEEPALIVE, &one, sizeof one);
 
index 090b58d9a3df3cf7550d1c8ef6e5d455f3784097..425abc13f96f6f463fe5c3416446e2ab5f25510e 100644 (file)
@@ -585,7 +585,7 @@ static FILE *open_socket(struct sockaddr_in *s_in)
 {
        FILE *fp;
 
-       fp = fdopen(xconnect(s_in), "r+");
+       fp = fdopen(xconnect_tcp_v4(s_in), "r+");
        if (fp == NULL)
                bb_perror_msg_and_die("fdopen");
 
index 6ad0554344c5c80e4236ba16f232eb50e0fdcad0..645b0b9291ae12af1be793e431ab02c431b30e52 100644 (file)
@@ -42,7 +42,7 @@ static time_t askremotedate(const char *host)
        alarm(10);
        signal(SIGALRM, socket_timeout);
 
-       fd = xconnect(&s_in);
+       fd = xconnect_tcp_v4(&s_in);
 
        if (safe_read(fd, (void *)&nett, 4) != 4)    /* read time from server */
                bb_error_msg_and_die("%s did not send the complete time", host);