]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Feature] Use XXH64 on 64 bits platforms only
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 31 Mar 2016 08:33:02 +0000 (09:33 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Thu, 31 Mar 2016 08:33:02 +0000 (09:33 +0100)
src/libutil/logger.c
src/libutil/str_util.c
src/libutil/str_util.h
src/libutil/util.c
src/libutil/util.h

index c146198b3e4047e5eb77037cf4ec502c424bed66..8204efb10dd718a732189e21656f40bb2eb76dac 100644 (file)
@@ -82,6 +82,11 @@ static rspamd_logger_t *default_logger = NULL;
        }                                                                                       \
 } while (0)
 
+#if defined(__LP64__) || defined(_LP64)
+#define XXH_ONESHOT XXH64
+#else
+#define XXH_ONESHOT XXH32
+#endif
 
 static void
                syslog_log_function (const gchar *log_domain, const gchar *module,
@@ -101,7 +106,7 @@ static void
 static inline guint64
 rspamd_log_calculate_cksum (const gchar *message, size_t mlen)
 {
-       return XXH64 (message, mlen, rspamd_hash_seed ());
+       return XXH_ONESHOT (message, mlen, rspamd_hash_seed ());
 }
 
 /*
index b114e3a90ccca9345fa63d3fc1f3a9f91cf9faca..601a3248797e220f29335fa6bfa518cea6f4e2d4 100644 (file)
@@ -16,6 +16,7 @@
 #include "config.h"
 #include "util.h"
 #include "xxhash.h"
+#include "url.h"
 #include <math.h>
 
 static const guchar lc_map[256] = {
@@ -181,6 +182,20 @@ rspamd_strcase_equal (gconstpointer v, gconstpointer v2)
        return FALSE;
 }
 
+#if defined(__LP64__) || defined(_LP64)
+#define XXH_STATE XXH64_state_t
+#define XXH_RESET XXH64_reset
+#define XXH_UPDATE XXH64_update
+#define XXH_DIGEST XXH64_digest
+#define XXH_ONESHOT XXH64
+#else
+#define XXH_STATE XXH32_state_t
+#define XXH_RESET XXH32_reset
+#define XXH_UPDATE XXH32_update
+#define XXH_DIGEST XXH32_digest
+#define XXH_ONESHOT XXH32
+#endif
+
 static guint
 rspamd_icase_hash (const gchar *in, gsize len)
 {
@@ -193,10 +208,10 @@ rspamd_icase_hash (const gchar *in, gsize len)
                } c;
                guint32 pp;
        } u;
-       XXH64_state_t st;
+       XXH_STATE st;
 
        fp = len - leftover;
-       XXH64_reset (&st, rspamd_hash_seed ());
+       XXH_RESET (&st, rspamd_hash_seed ());
 
        for (i = 0; i != fp; i += 4) {
                u.c.c1 = s[i], u.c.c2 = s[i + 1], u.c.c3 = s[i + 2], u.c.c4 = s[i + 3];
@@ -204,7 +219,7 @@ rspamd_icase_hash (const gchar *in, gsize len)
                u.c.c2 = lc_map[u.c.c2];
                u.c.c3 = lc_map[u.c.c3];
                u.c.c4 = lc_map[u.c.c4];
-               XXH64_update (&st, &u.pp, sizeof (u));
+               XXH_UPDATE (&st, &u.pp, sizeof (u));
        }
 
        u.pp = 0;
@@ -215,11 +230,11 @@ rspamd_icase_hash (const gchar *in, gsize len)
                u.c.c2 = lc_map[(guchar)s[i++]];
        case 1:
                u.c.c1 = lc_map[(guchar)s[i]];
-               XXH64_update (&st, &u.pp, leftover);
+               XXH_UPDATE (&st, &u.pp, leftover);
                break;
        }
 
-       return XXH64_digest (&st);
+       return XXH_DIGEST (&st);
 }
 
 guint
@@ -240,7 +255,7 @@ rspamd_str_hash (gconstpointer key)
 
        len = strlen ((const gchar *)key);
 
-       return XXH64 (key, len, rspamd_hash_seed ());
+       return XXH_ONESHOT (key, len, rspamd_hash_seed ());
 }
 
 gboolean
@@ -1597,3 +1612,68 @@ rspamd_ucl_emit_fstring_comments (const ucl_object_t *obj,
        func.ud = buf;
        ucl_object_emit_full (obj, emit_type, &func, comments);
 }
+
+guint
+rspamd_url_hash (gconstpointer u)
+{
+       const struct rspamd_url *url = u;
+       XXH_STATE st;
+
+       XXH_RESET (&st, rspamd_hash_seed ());
+
+       if (url->urllen > 0) {
+               XXH_UPDATE (&st, url->string, url->urllen);
+       }
+
+       XXH_UPDATE (&st, &url->flags, sizeof (url->flags));
+
+       return XXH_DIGEST (&st);
+}
+
+/* Compare two emails for building emails tree */
+gboolean
+rspamd_emails_cmp (gconstpointer a, gconstpointer b)
+{
+       const struct rspamd_url *u1 = a, *u2 = b;
+       gint r;
+
+       if (u1->hostlen != u2->hostlen || u1->hostlen == 0) {
+               return FALSE;
+       }
+       else {
+               if ((r = rspamd_lc_cmp (u1->host, u2->host, u1->hostlen)) == 0) {
+                       if (u1->userlen != u2->userlen || u1->userlen == 0) {
+                               return FALSE;
+                       }
+                       else {
+                               return rspamd_lc_cmp (u1->user, u2->user, u1->userlen) ==
+                                               0;
+                       }
+               }
+               else {
+                       return r == 0;
+               }
+       }
+
+       return FALSE;
+}
+
+gboolean
+rspamd_urls_cmp (gconstpointer a, gconstpointer b)
+{
+       const struct rspamd_url *u1 = a, *u2 = b;
+       int r;
+
+       if (u1->urllen != u2->urllen) {
+               return FALSE;
+       }
+       else {
+               r = memcmp (u1->string, u2->string, u1->urllen);
+               if (r == 0 && u1->flags != u2->flags) {
+                       /* Always insert phished urls to the tree */
+                       return FALSE;
+               }
+       }
+
+       return r == 0;
+}
index 75cc6fb0a516740c45b4bc5bab73520bea0c6db3..04132a4d373e96f0bf65f80623fe1ff89d723d48 100644 (file)
@@ -289,4 +289,12 @@ void rspamd_ucl_emit_fstring_comments (const ucl_object_t *obj,
                rspamd_fstring_t **target,
                const ucl_object_t *comments);
 
+guint rspamd_url_hash (gconstpointer u);
+
+/* Compare two emails for building emails hash */
+gboolean rspamd_emails_cmp (gconstpointer a, gconstpointer b);
+
+/* Compare two urls for building emails hash */
+gboolean rspamd_urls_cmp (gconstpointer a, gconstpointer b);
+
 #endif /* SRC_LIBUTIL_STR_UTIL_H_ */
index 15aaac8831042713d9a1cf2d9c52e5d3479a7ebe..0ea4f4df90fb344d5b04fd17e5a2e4fe85c812ee 100644 (file)
@@ -1391,70 +1391,6 @@ g_queue_free_full (GQueue *queue, GDestroyNotify free_func)
 }
 #endif
 
-guint
-rspamd_url_hash (gconstpointer u)
-{
-       const struct rspamd_url *url = u;
-       XXH64_state_t st;
-
-       XXH64_reset (&st, rspamd_hash_seed ());
-
-       if (url->urllen > 0) {
-               XXH64_update (&st, url->string, url->urllen);
-       }
-
-       XXH64_update (&st, &url->flags, sizeof (url->flags));
-
-       return XXH64_digest (&st);
-}
-
-/* Compare two emails for building emails tree */
-gboolean
-rspamd_emails_cmp (gconstpointer a, gconstpointer b)
-{
-       const struct rspamd_url *u1 = a, *u2 = b;
-       gint r;
-
-       if (u1->hostlen != u2->hostlen || u1->hostlen == 0) {
-               return FALSE;
-       }
-       else {
-               if ((r = g_ascii_strncasecmp (u1->host, u2->host, u1->hostlen)) == 0) {
-                       if (u1->userlen != u2->userlen || u1->userlen == 0) {
-                               return FALSE;
-                       }
-                       else {
-                               return g_ascii_strncasecmp (u1->user, u2->user, u1->userlen) == 0;
-                       }
-               }
-               else {
-                       return r == 0;
-               }
-       }
-
-       return FALSE;
-}
-
-gboolean
-rspamd_urls_cmp (gconstpointer a, gconstpointer b)
-{
-       const struct rspamd_url *u1 = a, *u2 = b;
-       int r;
-
-       if (u1->urllen != u2->urllen) {
-               return FALSE;
-       }
-       else {
-               r = memcmp (u1->string, u2->string, u1->urllen);
-               if (r == 0 && u1->flags != u2->flags) {
-                       /* Always insert phished urls to the tree */
-                       return FALSE;
-               }
-       }
-
-       return r == 0;
-}
-
 gint
 rspamd_fallocate (gint fd, off_t offset, off_t len)
 {
index 43b0eb01bf7b6386a934f75593342cf275d91761..ec8150faec491408efc196f2244a4bfaac678fb7 100644 (file)
@@ -204,14 +204,6 @@ void g_queue_free_full (GQueue *queue, GDestroyNotify free_func);
 #define ts_to_usec(ts) ((ts)->tv_sec * 1000000LLU +                                                    \
        (ts)->tv_nsec / 1000LLU)
 
-guint rspamd_url_hash (gconstpointer u);
-
-/* Compare two emails for building emails hash */
-gboolean rspamd_emails_cmp (gconstpointer a, gconstpointer b);
-
-/* Compare two urls for building emails hash */
-gboolean rspamd_urls_cmp (gconstpointer a, gconstpointer b);
-
 /**
  * Try to allocate a file on filesystem (using fallocate or posix_fallocate)
  * @param fd descriptor