*
* Heavily modified by Manuel Novoa III Mar 12, 2001
*
- *
+ * Licensed under GPLv2, see file LICENSE in this source tree.
*/
#include "libbb.h"
#include "inet_common.h"
-int INET_resolve(const char *name, struct sockaddr_in *s_in, int hostfirst)
+int FAST_FUNC INET_resolve(const char *name, struct sockaddr_in *s_in, int hostfirst)
{
struct hostent *hp;
+#if ENABLE_FEATURE_ETC_NETWORKS
struct netent *np;
+#endif
/* Grmpf. -FvK */
s_in->sin_family = AF_INET;
s_in->sin_port = 0;
/* Default is special, meaning 0.0.0.0. */
- if (!strcmp(name, bb_str_default)) {
+ if (strcmp(name, "default") == 0) {
s_in->sin_addr.s_addr = INADDR_ANY;
return 1;
}
return 0;
}
}
+#if ENABLE_FEATURE_ETC_NETWORKS
/* Try the NETWORKS database to see if this is a known network. */
#ifdef DEBUG
bb_error_msg("getnetbyname(%s)", name);
s_in->sin_addr.s_addr = htonl(np->n_net);
return 1;
}
+#endif
if (hostfirst) {
/* Don't try again */
return -1;
#ifdef DEBUG
res_init();
_res.options |= RES_DEBUG;
-#endif
-
-#ifdef DEBUG
bb_error_msg("gethostbyname(%s)", name);
#endif
hp = gethostbyname(name);
* & 0x4000: host instead of net,
* & 0x0fff: don't resolve
*/
-char *INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t netmask)
+char* FAST_FUNC INET_rresolve(struct sockaddr_in *s_in, int numeric, uint32_t netmask)
{
/* addr-to-name cache */
struct addr {
uint32_t ad, host_ad;
int host = 0;
- /* Grmpf. -FvK */
if (s_in->sin_family != AF_INET) {
#ifdef DEBUG
bb_error_msg("rresolve: unsupported address family %d!",
if (ad == INADDR_ANY) {
if ((numeric & 0x0FFF) == 0) {
if (numeric & 0x8000)
- return xstrdup(bb_str_default);
+ return xstrdup("default");
return xstrdup("*");
}
}
ent = gethostbyaddr((char *) &ad, 4, AF_INET);
if (ent)
name = xstrdup(ent->h_name);
- } else {
- /* Hmmm... this is very rare to have named nets,
- * and this getnetbyaddr() call is the only one in bbox.
- * Maybe get rid of or make configurable? */
+ } else if (ENABLE_FEATURE_ETC_NETWORKS) {
struct netent *np;
#ifdef DEBUG
bb_error_msg("getnetbyaddr (%08x)", (unsigned)host_ad);
return name;
}
-#ifdef CONFIG_FEATURE_IPV6
+#if ENABLE_FEATURE_IPV6
-int INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
+int FAST_FUNC INET6_resolve(const char *name, struct sockaddr_in6 *sin6)
{
struct addrinfo req, *ai;
int s;
#endif
-char *INET6_rresolve(struct sockaddr_in6 *sin6, int numeric)
+char* FAST_FUNC INET6_rresolve(struct sockaddr_in6 *sin6, int numeric)
{
char name[128];
int s;
- /* Grmpf. -FvK */
if (sin6->sin6_family != AF_INET6) {
#ifdef DEBUG
- bb_error_msg("rresolve: unsupport address family %d!",
+ bb_error_msg("rresolve: unsupported address family %d!",
sin6->sin6_family);
#endif
errno = EAFNOSUPPORT;
}
if (IN6_IS_ADDR_UNSPECIFIED(&sin6->sin6_addr)) {
if (numeric & 0x8000)
- return xstrdup(bb_str_default);
+ return xstrdup("default");
return xstrdup("*");
}
return xstrdup(name);
}
-#endif /* CONFIG_FEATURE_IPV6 */
+#endif /* CONFIG_FEATURE_IPV6 */