diff options
Diffstat (limited to 'src/blob.c')
-rw-r--r-- | src/blob.c | 22 |
1 files changed, 15 insertions, 7 deletions
@@ -139,23 +139,31 @@ int blob_icmp(blob_t a, blob_t b) return strncasecmp(a.ptr, b.ptr, a.len); } -unsigned long blob_inet_addr(blob_t b) +int blob_pull_inet_addr(blob_t *b, struct in_addr *saddr) { unsigned long ip = 0; int i; for (i = 0; i < 3; i++) { - ip += blob_pull_uint(&b, 10); + ip += blob_pull_uint(b, 10); ip <<= 8; - if (!blob_pull_matching(&b, BLOB_STR("."))) + if (!blob_pull_matching(b, BLOB_STR("."))) return 0; } - ip += blob_pull_uint(&b, 10); - if (b.len != 0) - return 0; - return htonl(ip); + ip += blob_pull_uint(b, 10); + saddr->s_addr = htonl(ip); + return 1; } +unsigned long blob_inet_addr(blob_t b) +{ + struct in_addr saddr; + + if (blob_pull_inet_addr(&b, &saddr) && b.len == 0) + return saddr.s_addr; + + return 0; +} blob_t blob_pushed(blob_t buffer, blob_t left) { |