diff options
author | Igor Sysoev <igor@sysoev.ru> | 2004-05-25 15:28:46 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2004-05-25 15:28:46 +0000 |
commit | 822834e2274e6b2946ee758981ba0c261cedc69e (patch) | |
tree | e23bc338faf7188d8ec8fea941d812fa312af20f /src/core/ngx_inet.c | |
parent | 01b5eab38147e84a1cde453059279c5ad7ad2293 (diff) | |
download | nginx-822834e2274e6b2946ee758981ba0c261cedc69e.tar.gz nginx-822834e2274e6b2946ee758981ba0c261cedc69e.zip |
nginx-0.0.3-2004-05-25-19:28:46 import
Diffstat (limited to 'src/core/ngx_inet.c')
-rw-r--r-- | src/core/ngx_inet.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/core/ngx_inet.c b/src/core/ngx_inet.c index fd67b7642..5c032a2d0 100644 --- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -164,3 +164,38 @@ size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len) "%u.%u.%u.%u", p[0], p[1], p[2], p[3]); #endif } + + +/* AF_INET only */ + +ngx_int_t ngx_ptocidr(ngx_str_t *text, void *cidr) +{ + ngx_uint_t i; + ngx_inet_cidr_t *in_cidr; + + in_cidr = cidr; + + for (i = 0; i < text->len; i++) { + if (text->data[i] == '/') { + break; + } + } + + if (i == text->len) { + return NGX_ERROR; + } + + text->data[i] = '\0'; + in_cidr->addr = inet_addr((char *) text->data); + text->data[i] = '/'; + if (in_cidr->addr == INADDR_NONE) { + return NGX_ERROR; + } + + in_cidr->mask = ngx_atoi(&text->data[i + 1], text->len - (i + 1)); + if (in_cidr->mask == (in_addr_t) NGX_ERROR) { + return NGX_ERROR; + } + + return NGX_OK; +} |