Mercurial > hg > nginx
diff src/core/ngx_inet.c @ 3272:98f49b2bcae8
change ngx_parse_addr() interface
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 02 Nov 2009 16:11:06 +0000 |
parents | 7d1a04259e3f |
children | beaf94f2f265 |
line wrap: on
line diff
--- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -416,66 +416,57 @@ ngx_ptocidr(ngx_str_t *text, ngx_cidr_t } -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; - } - - a = ngx_palloc(pool, sizeof(ngx_addr_t)); - if (a == NULL) { - return NULL; + return NGX_DECLINED; } - a->sockaddr = ngx_pcalloc(pool, len); - if (a->sockaddr == NULL) { - return NULL; + addr->sockaddr = ngx_pcalloc(pool, len); + if (addr->sockaddr == NULL) { + return NGX_ERROR; } - 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; }