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