]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
Replace memcpy() in MpmAddSids with copy loop
authorKen Steele <ken@tilera.com>
Fri, 10 Oct 2014 17:55:55 +0000 (13:55 -0400)
committerVictor Julien <victor@inliniac.net>
Thu, 15 Jan 2015 10:52:03 +0000 (11:52 +0100)
For the short size of most sids lists, a straight copy loop is faster.

src/util-mpm.h

index b94e0499185c592b3c57319c9499faec2f9c3dc0..ca1fb4348a207dd55084223ddc260612984c0ab2 100644 (file)
@@ -285,6 +285,9 @@ int MpmAddSidsResize(PatternMatcherQueue *pmq, uint32_t new_size);
 static inline void
 MpmAddSids(PatternMatcherQueue *pmq, uint32_t *sids, uint32_t sids_size)
 {
+    if (sids_size == 0)
+        return;
+
     uint32_t new_size = pmq->rule_id_array_cnt + sids_size;
     if (new_size > pmq->rule_id_array_size) {
         if (MpmAddSidsResize(pmq, new_size) == 0) {
@@ -295,8 +298,11 @@ MpmAddSids(PatternMatcherQueue *pmq, uint32_t *sids, uint32_t sids_size)
     }
     SCLogDebug("Adding %u sids", sids_size);
     // Add SIDs for this pattern to the end of the array
-    memcpy(pmq->rule_id_array + pmq->rule_id_array_cnt,
-           sids, sids_size * sizeof(uint32_t));
+    uint32_t *ptr = pmq->rule_id_array + pmq->rule_id_array_cnt;
+    uint32_t *end = ptr + sids_size;
+    do {
+        *ptr++ = *sids++;
+    } while (ptr != end);
     pmq->rule_id_array_cnt += sids_size;
 }