dovecot-2.2-pigeonhole: lib-sieve: Added our own string trimming...
pigeonhole at rename-it.nl
pigeonhole at rename-it.nl
Sat Jan 2 17:27:18 UTC 2016
details: http://hg.rename-it.nl/dovecot-2.2-pigeonhole/rev/6c58f65dcb3f
changeset: 2189:6c58f65dcb3f
user: Stephan Bosch <stephan at rename-it.nl>
date: Sat Jan 02 18:27:14 2016 +0100
description:
lib-sieve: Added our own string trimming functions for until equivalents get added in Dovecot.
diffstat:
src/lib-sieve/sieve-settings.c | 33 ++----------
src/lib-sieve/util/Makefile.am | 6 +-
src/lib-sieve/util/strtrim.c | 104 +++++++++++++++++++++++++++++++++++++++++
src/lib-sieve/util/strtrim.h | 13 +++++
4 files changed, 127 insertions(+), 29 deletions(-)
diffs (225 lines):
diff -r 70a1773bd1cf -r 6c58f65dcb3f src/lib-sieve/sieve-settings.c
--- a/src/lib-sieve/sieve-settings.c Sat Jan 02 17:13:00 2016 +0100
+++ b/src/lib-sieve/sieve-settings.c Sat Jan 02 18:27:14 2016 +0100
@@ -3,6 +3,8 @@
#include "lib.h"
+#include "strtrim.h"
+
#include "sieve-common.h"
#include "sieve-limits.h"
#include "sieve-error.h"
@@ -10,29 +12,6 @@
#include <ctype.h>
-// FIXME: move to Dovecot
-static const char *pg_t_str_trim(const char *str, const char *chars)
-{
- const char *p, *pend, *begin;
-
- pend = str + strlen(str);
- if (pend == str)
- return "";
-
- p = str;
- while (p < pend && strchr(chars, *p) != NULL)
- p++;
- begin = p;
-
- p = pend - 1;
- while (p > begin && strchr(chars, *p) != NULL)
- p--;
-
- if (p <= begin)
- return "";
- return t_strdup_until(begin, p+1);
-}
-
/*
* Access to settings
*/
@@ -143,7 +122,7 @@
if ( str_value == NULL )
return FALSE;
- str_value = pg_t_str_trim(str_value, "\t ");
+ str_value = ph_t_str_trim(str_value, "\t ");
if ( *str_value == '\0' )
return FALSE;
@@ -175,7 +154,7 @@
if ( str_value == NULL )
return FALSE;
- str_value = pg_t_str_trim(str_value, "\t ");
+ str_value = ph_t_str_trim(str_value, "\t ");
if ( *str_value == '\0' )
return FALSE;
@@ -228,7 +207,7 @@
if ( str_value == NULL )
return FALSE;
- str_value = pg_t_str_trim(str_value, "\t ");
+ str_value = ph_t_str_trim(str_value, "\t ");
str_value = t_str_lcase(str_value);
set_len = strlen(str_value);
if ( set_len > 0 ) {
@@ -245,7 +224,7 @@
} else if ( str_value[0] == '<' && str_value[set_len-1] == '>') {
sender->source = SIEVE_MAIL_SENDER_SOURCE_EXPLICIT;
- str_value = pg_t_str_trim(t_strndup(str_value+1, set_len-2), "\t ");
+ str_value = ph_t_str_trim(t_strndup(str_value+1, set_len-2), "\t ");
sender->address = NULL;
if ( *str_value != '\0' )
sender->address = p_strdup(pool, str_value);
diff -r 70a1773bd1cf -r 6c58f65dcb3f src/lib-sieve/util/Makefile.am
--- a/src/lib-sieve/util/Makefile.am Sat Jan 02 17:13:00 2016 +0100
+++ b/src/lib-sieve/util/Makefile.am Sat Jan 02 18:27:14 2016 +0100
@@ -13,14 +13,16 @@
program-client-local.c \
program-client-remote.c \
program-client.c \
- realpath.c
+ realpath.c \
+ strtrim.c
headers = \
edit-mail.h \
rfc2822.h \
program-client-private.h \
program-client.h \
- realpath.h
+ realpath.h \
+ strtrim.h
pkginc_libdir=$(dovecot_pkgincludedir)/sieve
pkginc_lib_HEADERS = $(headers)
diff -r 70a1773bd1cf -r 6c58f65dcb3f src/lib-sieve/util/strtrim.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-sieve/util/strtrim.c Sat Jan 02 18:27:14 2016 +0100
@@ -0,0 +1,104 @@
+/* Copyright (c) 2002-2015 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "strtrim.h"
+
+enum _str_trim_sides {
+ STR_TRIM_LEFT = BIT(0),
+ STR_TRIM_RIGHT = BIT(1),
+};
+
+static void ph_str_trim_parse(const char *str,
+ const char *chars, enum _str_trim_sides sides,
+ const char **begin_r, const char **end_r)
+{
+ const char *p, *pend, *begin, *end;
+
+ *begin_r = *end_r = NULL;
+
+ pend = str + strlen(str);
+ if (pend == str)
+ return;
+
+ p = str;
+ if ((sides & STR_TRIM_LEFT) != 0) {
+ while (p < pend && strchr(chars, *p) != NULL)
+ p++;
+ }
+ begin = p;
+
+ p = pend - 1;
+ if ((sides & STR_TRIM_RIGHT) != 0) {
+ while (p > begin && strchr(chars, *p) != NULL)
+ p--;
+ }
+ if (p <= begin)
+ return;
+ end = p + 1;
+
+ *begin_r = begin;
+ *end_r = end;
+}
+
+const char *ph_t_str_trim(const char *str, const char *chars)
+{
+ const char *begin, *end;
+
+ ph_str_trim_parse(str, chars,
+ STR_TRIM_LEFT | STR_TRIM_RIGHT, &begin, &end);
+ if (begin == NULL)
+ return "";
+ return t_strdup_until(begin, end);
+}
+
+const char *ph_p_str_trim(pool_t pool, const char *str, const char *chars)
+{
+ const char *begin, *end;
+
+ ph_str_trim_parse(str, chars,
+ STR_TRIM_LEFT | STR_TRIM_RIGHT, &begin, &end);
+ if (begin == NULL)
+ return "";
+ return p_strdup_until(pool, begin, end);
+}
+
+const char *ph_str_ltrim(const char *str, const char *chars)
+{
+ const char *begin, *end;
+
+ ph_str_trim_parse(str, chars, STR_TRIM_LEFT, &begin, &end);
+ if (begin == NULL)
+ return "";
+ return begin;
+}
+
+const char *ph_t_str_ltrim(const char *str, const char *chars)
+{
+ return t_strdup(str_ltrim(str, chars));
+}
+
+const char *ph_p_str_ltrim(pool_t pool, const char *str, const char *chars)
+{
+ return p_strdup(pool, str_ltrim(str, chars));
+}
+
+const char *ph_t_str_rtrim(const char *str, const char *chars)
+{
+ const char *begin, *end;
+
+ ph_str_trim_parse(str, chars, STR_TRIM_RIGHT, &begin, &end);
+ if (begin == NULL)
+ return "";
+ return t_strdup_until(begin, end);
+}
+
+const char *ph_p_str_rtrim(pool_t pool, const char *str, const char *chars)
+{
+ const char *begin, *end;
+
+ ph_str_trim_parse(str, chars, STR_TRIM_RIGHT, &begin, &end);
+ if (begin == NULL)
+ return "";
+ return p_strdup_until(pool, begin, end);
+}
+
diff -r 70a1773bd1cf -r 6c58f65dcb3f src/lib-sieve/util/strtrim.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/lib-sieve/util/strtrim.h Sat Jan 02 18:27:14 2016 +0100
@@ -0,0 +1,13 @@
+#ifndef STRTRIM_H
+#define STRTRIM_H
+
+/* Trim matching chars from either side of the string */
+const char *ph_t_str_trim(const char *str, const char *chars);
+const char *ph_p_str_trim(pool_t pool, const char *str, const char *chars);
+const char *ph_str_ltrim(const char *str, const char *chars);
+const char *ph_t_str_ltrim(const char *str, const char *chars);
+const char *ph_p_str_ltrim(pool_t pool, const char *str, const char *chars);
+const char *ph_t_str_rtrim(const char *str, const char *chars);
+const char *ph_p_str_rtrim(pool_t pool, const char *str, const char *chars);
+
+#endif
More information about the dovecot-cvs
mailing list