*: gethostname-related fixes
authorDenys Vlasenko <vda.linux@googlemail.com>
Sat, 27 Feb 2010 18:38:19 +0000 (19:38 +0100)
committerDenys Vlasenko <vda.linux@googlemail.com>
Sat, 27 Feb 2010 18:38:19 +0000 (19:38 +0100)
function                                             old     new   delta
hostname_main                                        218     231     +13
nfsmount                                            3541    3474     -67

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
libbb/xconnect.c
networking/hostname.c
util-linux/mount.c

index 8a1e1c1..97751eb 100644 (file)
@@ -96,28 +96,6 @@ unsigned FAST_FUNC bb_lookup_port(const char *port, const char *protocol, unsign
 }
 
 
-/* "Old" networking API - only IPv4 */
-
-/*
-void FAST_FUNC bb_lookup_host(struct sockaddr_in *s_in, const char *host)
-{
-       struct hostent *he;
-
-       memset(s_in, 0, sizeof(struct sockaddr_in));
-       s_in->sin_family = AF_INET;
-       he = xgethostbyname(host);
-       memcpy(&(s_in->sin_addr), he->h_addr_list[0], he->h_length);
-}
-
-
-int FAST_FUNC 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;
-}
-*/
-
 /* "New" networking API */
 
 
index 579eff7..121ad40 100644 (file)
@@ -132,10 +132,14 @@ int hostname_main(int argc UNUSED_PARAM, char **argv)
                        if (*p)
                                puts(p + 1);
                } else /*if (opts & OPT_i)*/ {
-                       while (hp->h_addr_list[0]) {
-                               printf("%s ", inet_ntoa(*(struct in_addr *) (*hp->h_addr_list++)));
+                       if (hp->h_length == sizeof(struct in_addr)) {
+                               struct in_addr **h_addr_list = (struct in_addr **)hp->h_addr_list;
+                               while (*h_addr_list) {
+                                       printf("%s ", inet_ntoa(**h_addr_list));
+                                       h_addr_list++;
+                               }
+                               bb_putchar('\n');
                        }
-                       bb_putchar('\n');
                }
        } else if (opts & OPT_F) {
                /* Set the hostname */
index 4392363..620b146 100644 (file)
@@ -1043,12 +1043,10 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
                        bb_herror_msg("%s", hostname);
                        goto fail;
                }
-               if ((size_t)hp->h_length > sizeof(struct in_addr)) {
-                       bb_error_msg("got bad hp->h_length");
-                       hp->h_length = sizeof(struct in_addr);
+               if (hp->h_length != (int)sizeof(struct in_addr)) {
+                       bb_error_msg_and_die("only IPv4 is supported");
                }
-               memcpy(&server_addr.sin_addr,
-                               hp->h_addr, hp->h_length);
+               memcpy(&server_addr.sin_addr, hp->h_addr_list[0], sizeof(struct in_addr));
        }
 
        memcpy(&mount_server_addr, &server_addr, sizeof(mount_server_addr));
@@ -1331,13 +1329,11 @@ static NOINLINE int nfsmount(struct mntent *mp, long vfsflags, char *filteropts)
                                bb_herror_msg("%s", mounthost);
                                goto fail;
                        }
-                       if ((size_t)hp->h_length > sizeof(struct in_addr)) {
-                               bb_error_msg("got bad hp->h_length");
-                               hp->h_length = sizeof(struct in_addr);
+                       if (hp->h_length != (int)sizeof(struct in_addr)) {
+                               bb_error_msg_and_die("only IPv4 is supported");
                        }
                        mount_server_addr.sin_family = AF_INET;
-                       memcpy(&mount_server_addr.sin_addr,
-                                               hp->h_addr, hp->h_length);
+                       memcpy(&mount_server_addr.sin_addr, hp->h_addr_list[0], sizeof(struct in_addr));
                }
        }