about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRichard Nyberg <rnyberg@murmeldjur.se>2009-01-11 00:30:39 +0100
committerRichard Nyberg <rnyberg@murmeldjur.se>2009-01-11 00:30:39 +0100
commit186113e4ee392535aa5de02c209fd8f4996545af (patch)
treed6c9508aaa0ec1721cd74b7db786a50204fbb2e3
parentb4be0683e64a0778a00acb28da136b9f65bdb6c3 (diff)
downloadbtpd-186113e4ee392535aa5de02c209fd8f4996545af.tar.gz
btpd-186113e4ee392535aa5de02c209fd8f4996545af.zip
Add the function memfind. It'll be used by iobuf.
-rw-r--r--misc/subr.c15
-rw-r--r--misc/subr.h2
2 files changed, 17 insertions, 0 deletions
diff --git a/misc/subr.c b/misc/subr.c
index 0ca41c7..c7392c1 100644
--- a/misc/subr.c
+++ b/misc/subr.c
@@ -13,6 +13,21 @@
 #include <string.h>
 #include <unistd.h>
 
+void *
+memfind(const void *sub, size_t sublen, const void *mem, size_t memlen)
+{
+    size_t i, j;
+    const uint8_t *s = sub, *m = mem;
+    for (i = 0; i < memlen - sublen + 1; i++) {
+        for (j = 0; j < sublen; j++)
+            if (m[i+j] != s[j])
+                break;
+        if (j == sublen)
+            return (void *)(m + i);
+    }
+    return NULL;
+}
+
 void
 enc_be32(void *buf, uint32_t num)
 {
diff --git a/misc/subr.h b/misc/subr.h
index d0bf831..73465b0 100644
--- a/misc/subr.h
+++ b/misc/subr.h
@@ -9,6 +9,8 @@
 
 #define SHAHEXSIZE 41
 
+void *memfind(const void *sub, size_t sublen, const void *mem, size_t memlen);
+
 uint32_t dec_be32(const void *buf);
 uint64_t dec_be64(const void *buf);
 void enc_be32(void *buf, uint32_t num);