diff options
author | Igor Sysoev <igor@sysoev.ru> | 2009-11-02 16:11:06 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2009-11-02 16:11:06 +0000 |
commit | 8b816d88a93bf98e0557ef4568e5ee9ab6f44bd3 (patch) | |
tree | efbd320ffa1cfa5bd0c37526baaa80b5939d535d /src/core/ngx_inet.c | |
parent | 72e928755ba63b803c0b2478f6d8d1e792e95b86 (diff) | |
download | nginx-8b816d88a93bf98e0557ef4568e5ee9ab6f44bd3.tar.gz nginx-8b816d88a93bf98e0557ef4568e5ee9ab6f44bd3.zip |
change ngx_parse_addr() interface
Diffstat (limited to 'src/core/ngx_inet.c')
-rw-r--r-- | src/core/ngx_inet.c | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c index e051f7f0f..c54db0e1f 100644 --- 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 *cidr) } -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; } |