summaryrefslogtreecommitdiffstats
path: root/src/blob.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/blob.c')
-rw-r--r--src/blob.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/src/blob.c b/src/blob.c
index ea02ea4..a6ccc62 100644
--- a/src/blob.c
+++ b/src/blob.c
@@ -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)
{