]> source.dussan.org Git - rspamd.git/commitdiff
Add lowercase utility for utf8 strings.
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 23 Feb 2015 13:45:44 +0000 (13:45 +0000)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 2 Mar 2015 14:20:41 +0000 (14:20 +0000)
src/libutil/util.c
src/libutil/util.h

index 932246542ac880fc6609991f86d73281ef326f66..f0d9e0eb6033860fc9854fe7927d4c42acb947c3 100644 (file)
@@ -657,6 +657,37 @@ rspamd_str_lc (gchar *str, guint size)
        }
 }
 
+/*
+ * The purpose of this function is fast and in place conversion of a unicode
+ * string to lower case, so some locale peculiarities are simply ignored
+ * If the target string is longer than initial one, then we just trim it
+ */
+void
+rspamd_str_lc_utf8 (gchar *str, guint size)
+{
+       const gchar *s = str, *p;
+       gchar *d = str;
+       guint remain = size;
+       gint r;
+       gunichar uc;
+
+       while (remain > 0) {
+               uc = g_utf8_get_char_validated (s, remain);
+               uc = g_unichar_tolower (uc);
+               p = g_utf8_next_char (s);
+
+               if (p - s == 0) {
+                       return;
+               }
+
+               r = g_unichar_to_utf8 (uc, d);
+               g_assert (r > 0);
+               remain -= r;
+               s = p;
+               d += r;
+       }
+}
+
 #ifndef HAVE_SETPROCTITLE
 
 static gchar *title_buffer = 0;
index bd2d069a17db06d005dc8f01c7d0d8af8113d5ba..153f1c16bf6267d1f042e09c522393d4bb6e59c8 100644 (file)
@@ -112,6 +112,7 @@ void rspamd_pass_signal (GHashTable *, gint );
  * Convert string to lowercase
  */
 void rspamd_str_lc (gchar *str, guint size);
+void rspamd_str_lc_utf8 (gchar *str, guint size);
 
 #ifndef HAVE_SETPROCTITLE
 /*