]> git.ipfire.org Git - people/ms/dnsmasq.git/commitdiff
Helper function to walk through keydata chained blocks.
authorGiovanni Bajo <rasky@develer.com>
Fri, 27 Apr 2012 01:11:03 +0000 (03:11 +0200)
committerSimon Kelley <simon@thekelleys.org.uk>
Tue, 20 Aug 2013 14:41:21 +0000 (15:41 +0100)
src/cache.c
src/dnsmasq.h

index 55dd2b9b54216efc4185f69d538e23b19f8ad02b..9fd1cf205aab0ddae28b58f8a9486fd6365cc992 100644 (file)
@@ -1364,6 +1364,23 @@ struct keydata *keydata_alloc(char *data, size_t len)
   return ret;
 }
 
+size_t keydata_walk(struct keydata **key, unsigned char **p, size_t cnt)
+{
+  size_t ret;
+
+  if (*p == NULL)
+    *p = (*key)->key;
+  else if (*p == (*key)->key + KEYBLOCK_LEN)
+    {
+      *key = (*key)->next;
+      if (*key == NULL)
+        return 0;
+      *p = (*key)->key;
+    }
+
+  return MIN(cnt, (*key)->key + KEYBLOCK_LEN - (*p));
+}
+
 void keydata_free(struct keydata *blocks)
 {
   struct keydata *tmp;
index 6c62a524489c7faa8502edec43e82c7b0f22ffe7..4331066766ea091c090b7ab38fba8153841f33ce 100644 (file)
@@ -925,6 +925,7 @@ char *cache_get_name(struct crec *crecp);
 struct crec *cache_enumerate(int init);
 #ifdef HAVE_DNSSEC
 struct keydata *keydata_alloc(char *data, size_t len);
+size_t keydata_walk(struct keydata **key, unsigned char **p, size_t cnt);
 void keydata_free(struct keydata *blocks);
 #endif