diff options
author | Denis Vlasenko | 2007-02-04 02:41:57 +0000 |
---|---|---|
committer | Denis Vlasenko | 2007-02-04 02:41:57 +0000 |
commit | e99130340610a09de7581abe5c127c024347bc32 (patch) | |
tree | 85f96b893cc174965b65d8691901da659468ed97 | |
parent | 10944524238532ad35aaefec89cf7cc950745d6b (diff) | |
download | busybox-e99130340610a09de7581abe5c127c024347bc32.zip busybox-e99130340610a09de7581abe5c127c024347bc32.tar.gz |
udhcp: use improved gethostbyname replacement from IPv6 code
-rw-r--r-- | console-tools/setlogcons.c | 3 | ||||
-rw-r--r-- | include/libbb.h | 8 | ||||
-rw-r--r-- | libbb/xconnect.c | 5 | ||||
-rw-r--r-- | networking/udhcp/files.c | 17 |
4 files changed, 21 insertions, 12 deletions
diff --git a/console-tools/setlogcons.c b/console-tools/setlogcons.c index ae15b9b..7b5addc 100644 --- a/console-tools/setlogcons.c +++ b/console-tools/setlogcons.c @@ -11,7 +11,8 @@ #include "busybox.h" -extern int setlogcons_main(int argc, char **argv) +int setlogcons_main(int argc, char **argv); +int setlogcons_main(int argc, char **argv) { struct { char fn; diff --git a/include/libbb.h b/include/libbb.h index d22efe0..7342f89 100644 --- a/include/libbb.h +++ b/include/libbb.h @@ -319,13 +319,15 @@ int xconnect_stream(const len_and_sockaddr *lsa); * UNIX socket address being returned, IPX sockaddr etc... * On error does bb_error_msg and returns NULL */ len_and_sockaddr* host2sockaddr(const char *host, int port); -/* Versions which die on error */ +/* Version which dies on error */ len_and_sockaddr* xhost2sockaddr(const char *host, int port); #if ENABLE_FEATURE_IPV6 /* Same, useful if you want to force family (e.g. IPv6) */ +len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af); len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af); #else -/* [we evaluate af: think about "xhost_and_af2sockaddr(..., af++)"] */ +/* [we evaluate af: think about "host_and_af2sockaddr(..., af++)"] */ +#define host_and_af2sockaddr(host, port, af) ((void)(af), host2sockaddr((host), (port))) #define xhost_and_af2sockaddr(host, port, af) ((void)(af), xhost2sockaddr((host), (port))) #endif /* Assign sin[6]_port member if the socket is of corresponding type, @@ -346,6 +348,8 @@ char* xmalloc_sockaddr2dotted_noport(const struct sockaddr *sa, socklen_t salen) // "old" (ipv4 only) API // users: traceroute.c hostname.c struct hostent *xgethostbyname(const char *name); +// Also inetd.c and inetd.c are using gethostbyname(), +// + inet_common.c has additional IPv4-only stuff extern char *xstrdup(const char *s); diff --git a/libbb/xconnect.c b/libbb/xconnect.c index c3ccc47..22f98dc 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c @@ -182,6 +182,11 @@ USE_FEATURE_IPV6(sa_family_t af,) #endif #if ENABLE_FEATURE_IPV6 +len_and_sockaddr* host_and_af2sockaddr(const char *host, int port, sa_family_t af) +{ + return str2sockaddr(host, port, af, 0); +} + len_and_sockaddr* xhost_and_af2sockaddr(const char *host, int port, sa_family_t af) { return str2sockaddr(host, port, af, DIE_ON_ERROR); diff --git a/networking/udhcp/files.c b/networking/udhcp/files.c index c3ab17d..e35f50a 100644 --- a/networking/udhcp/files.c +++ b/networking/udhcp/files.c @@ -21,15 +21,14 @@ /* on these functions, make sure you datatype matches */ static int read_ip(const char *line, void *arg) { - struct in_addr *addr = arg; - struct hostent *host; - int retval = 1; - - if (!inet_aton(line, addr)) { - host = gethostbyname(line); - if (host) - addr->s_addr = *((unsigned long *) host->h_addr_list[0]); - else retval = 0; + len_and_sockaddr *lsa; + int retval = 0; + + lsa = host_and_af2sockaddr(line, 0, AF_INET); + if (lsa) { + *(struct in_addr*)arg = lsa->sin.sin_addr; + free(lsa); + retval = 1; } return retval; } |