change ngx_parse_addr() interface
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index e051f7f..c54db0e 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -416,66 +416,57 @@
}
-ngx_addr_t *
-ngx_parse_addr(ngx_pool_t *pool, ngx_str_t *addr)
+ngx_int_t
+ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, size_t len)
{
- size_t len;
in_addr_t inaddr;
ngx_uint_t family;
- ngx_addr_t *a;
struct sockaddr_in *sin;
#if (NGX_HAVE_INET6)
struct in6_addr inaddr6;
struct sockaddr_in6 *sin6;
#endif
- inaddr = ngx_inet_addr(addr->data, addr->len);
+ inaddr = ngx_inet_addr(text, len);
if (inaddr != INADDR_NONE) {
family = AF_INET;
len = sizeof(struct sockaddr_in);
#if (NGX_HAVE_INET6)
- } else if (ngx_inet6_addr(addr->data, addr->len, inaddr6.s6_addr) == NGX_OK)
- {
+ } else if (ngx_inet6_addr(text, len, inaddr6.s6_addr) == NGX_OK) {
family = AF_INET6;
len = sizeof(struct sockaddr_in6);
#endif
} else {
- return NULL;
+ return NGX_DECLINED;
}
- a = ngx_palloc(pool, sizeof(ngx_addr_t));
- if (a == NULL) {
- return NULL;
+ addr->sockaddr = ngx_pcalloc(pool, len);
+ if (addr->sockaddr == NULL) {
+ return NGX_ERROR;
}
- a->sockaddr = ngx_pcalloc(pool, len);
- if (a->sockaddr == NULL) {
- return NULL;
- }
-
- a->sockaddr->sa_family = family;
- a->socklen = len;
- a->name = *addr;
+ addr->sockaddr->sa_family = (u_char) family;
+ addr->socklen = len;
switch (family) {
#if (NGX_HAVE_INET6)
case AF_INET6:
- sin6 = (struct sockaddr_in6 *) a->sockaddr;
+ sin6 = (struct sockaddr_in6 *) addr->sockaddr;
ngx_memcpy(sin6->sin6_addr.s6_addr, inaddr6.s6_addr, 16);
break;
#endif
default: /* AF_INET */
- sin = (struct sockaddr_in *) a->sockaddr;
+ sin = (struct sockaddr_in *) addr->sockaddr;
sin->sin_addr.s_addr = inaddr;
break;
}
- return a;
+ return NGX_OK;
}