summaryrefslogtreecommitdiffhomepage
path: root/src/core/ngx_inet.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-02-24 14:01:40 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-02-24 14:01:40 +0000
commit36860101ec7a3de1d337ecb6f8f3e2bfd0fb63cb (patch)
tree51e1a9c70379dc2ba60ad3638d4cecfdde21a7e5 /src/core/ngx_inet.c
parent1f4220ee869152938d9140c471c37be628532344 (diff)
downloadnginx-36860101ec7a3de1d337ecb6f8f3e2bfd0fb63cb.tar.gz
nginx-36860101ec7a3de1d337ecb6f8f3e2bfd0fb63cb.tar.bz2
prepare ngx_ptocidr() for IPv6
Diffstat (limited to 'src/core/ngx_inet.c')
-rw-r--r--src/core/ngx_inet.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c
index 497d84a3c..a5b137d94 100644
--- a/src/core/ngx_inet.c
+++ b/src/core/ngx_inet.c
@@ -226,26 +226,25 @@ ngx_inet6_ntop(u_char *p, u_char *text, size_t len)
/* AF_INET only */
ngx_int_t
-ngx_ptocidr(ngx_str_t *text, void *cidr)
+ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr)
{
- u_char *addr, *mask, *last;
- ngx_int_t shift;
- ngx_inet_cidr_t *in_cidr;
+ u_char *addr, *mask, *last;
+ ngx_int_t shift;
- in_cidr = cidr;
addr = text->data;
last = addr + text->len;
mask = ngx_strlchr(addr, last, '/');
- in_cidr->addr = ngx_inet_addr(addr, (mask ? mask : last) - addr);
+ cidr->u.in.addr = ngx_inet_addr(addr, (mask ? mask : last) - addr);
- if (in_cidr->addr == INADDR_NONE) {
+ if (cidr->u.in.addr == INADDR_NONE) {
return NGX_ERROR;
}
if (mask == NULL) {
- in_cidr->mask = 0xffffffff;
+ cidr->family = AF_INET;
+ cidr->u.in.mask = 0xffffffff;
return NGX_OK;
}
@@ -256,26 +255,28 @@ ngx_ptocidr(ngx_str_t *text, void *cidr)
return NGX_ERROR;
}
+ cidr->family = AF_INET;
+
if (shift == 0) {
/* the x86 compilers use the shl instruction that shifts by modulo 32 */
- in_cidr->mask = 0;
+ cidr->u.in.mask = 0;
- if (in_cidr->addr == 0) {
+ if (cidr->u.in.addr == 0) {
return NGX_OK;
}
return NGX_DONE;
}
- in_cidr->mask = htonl((ngx_uint_t) (0 - (1 << (32 - shift))));
+ cidr->u.in.mask = htonl((ngx_uint_t) (0 - (1 << (32 - shift))));
- if (in_cidr->addr == (in_cidr->addr & in_cidr->mask)) {
+ if (cidr->u.in.addr == (cidr->u.in.addr & cidr->u.in.mask)) {
return NGX_OK;
}
- in_cidr->addr &= in_cidr->mask;
+ cidr->u.in.addr &= cidr->u.in.mask;
return NGX_DONE;
}