From 826df5e80bc6c8e33dfb37b50873620a836c60da Mon Sep 17 00:00:00 2001
From: Timo Sirainen <timo.sirainen@open-xchange.com>
Date: Fri, 10 Apr 2020 20:03:18 +0300
Subject: [PATCH] global: Adjust to str_begins() API changes

---
 src/lib-sieve-tool/sieve-tool.c               |  4 ++--
 .../environment/ext-environment-common.c      | 21 +++++++------------
 .../plugins/notify/ext-notify-common.c        |  2 +-
 src/lib-sieve/plugins/vacation/cmd-vacation.c |  2 +-
 .../storage/file/sieve-file-storage-save.c    |  4 ++--
 src/lib-sieve/storage/ldap/sieve-ldap-db.c    |  2 +-
 .../doveadm-sieve/doveadm-sieve-sync.c        | 10 ++++-----
 7 files changed, 19 insertions(+), 26 deletions(-)

diff --git a/src/lib-sieve-tool/sieve-tool.c b/src/lib-sieve-tool/sieve-tool.c
index 435f97380..b034b1657 100644
--- a/src/lib-sieve-tool/sieve-tool.c
+++ b/src/lib-sieve-tool/sieve-tool.c
@@ -644,9 +644,9 @@ void sieve_tool_dump_binary_to(struct sieve_binary *sbin,
 void sieve_tool_parse_trace_option(struct sieve_trace_config *tr_config,
 				   const char *tr_option)
 {
-	if (str_begins(tr_option, "level=")) {
-		const char *lvl = &tr_option[6];
+	const char *lvl;
 
+	if (str_begins(tr_option, "level=", &lvl)) {
 		if (strcmp(lvl, "none") == 0) {
 			tr_config->level = SIEVE_TRLVL_NONE;
 		} else if (strcmp(lvl, "actions") == 0) {
diff --git a/src/lib-sieve/plugins/environment/ext-environment-common.c b/src/lib-sieve/plugins/environment/ext-environment-common.c
index d145b0e60..663fabddb 100644
--- a/src/lib-sieve/plugins/environment/ext-environment-common.c
+++ b/src/lib-sieve/plugins/environment/ext-environment-common.c
@@ -158,26 +158,21 @@ ext_environment_item_lookup(struct ext_environment_interpreter_context *ctx,
 			    const char **_name)
 {
 	const struct sieve_environment_item *item;
-	const char *name = *_name;
+	const char *suffix, *name = *_name;
 
 	item = hash_table_lookup(ctx->name_items, name);
 	if (item != NULL)
 		return item;
 
 	array_foreach_elem(&ctx->prefix_items, item) {
-		size_t prefix_len;
-
 		i_assert(item->prefix);
-		prefix_len = strlen(item->name);
-
-		if (str_begins(name, item->name)) {
-			if (name[prefix_len] == '.') {
-				*_name = &name[prefix_len+1];
-				return item;
-			} else if (name[prefix_len] == '\0') {
-				*_name = &name[prefix_len];
-				return item;
-			}
+
+		if (str_begins(name, item->name, &suffix)) {
+			if (*suffix == '.')
+				++suffix;
+
+			*_name = suffix;
+			return item;
 		}
 	}
 	return NULL;
diff --git a/src/lib-sieve/plugins/notify/ext-notify-common.c b/src/lib-sieve/plugins/notify/ext-notify-common.c
index 589b21bfd..cda0ff9d8 100644
--- a/src/lib-sieve/plugins/notify/ext-notify-common.c
+++ b/src/lib-sieve/plugins/notify/ext-notify-common.c
@@ -145,7 +145,7 @@ static bool _is_text_content(const struct message_header_line *hdr)
 
 	/* Success */
 	data = str_c(content_type);
-	if (str_begins(data, "text/"))
+	if (str_begins_with(data, "text/"))
 		return TRUE;
 	return FALSE;
 }
diff --git a/src/lib-sieve/plugins/vacation/cmd-vacation.c b/src/lib-sieve/plugins/vacation/cmd-vacation.c
index ddc14be3b..b8999ab7c 100644
--- a/src/lib-sieve/plugins/vacation/cmd-vacation.c
+++ b/src/lib-sieve/plugins/vacation/cmd-vacation.c
@@ -877,7 +877,7 @@ static inline bool _is_system_address(const struct smtp_address *address)
 		return TRUE;
 	if (strstr(address->localpart, "-request") != NULL)
 		return TRUE;
-	if (str_begins(address->localpart, "owner-"))
+	if (str_begins_with(address->localpart, "owner-"))
 		return TRUE;
 	return FALSE;
 }
diff --git a/src/lib-sieve/storage/file/sieve-file-storage-save.c b/src/lib-sieve/storage/file/sieve-file-storage-save.c
index dd2306696..3c0f6e55a 100644
--- a/src/lib-sieve/storage/file/sieve-file-storage-save.c
+++ b/src/lib-sieve/storage/file/sieve-file-storage-save.c
@@ -222,9 +222,9 @@ int sieve_file_storage_save_init(struct sieve_storage_save_context *sctx,
 
 			svext = strrchr(fstorage->active_fname, '.');
 			namelen = svext - fstorage->active_fname;
-			if ( svext != NULL && str_begins(svext+1, "sieve") &&
+			if ( svext != NULL && str_begins_with(svext+1, "sieve") &&
 			     strlen(scriptname) == namelen &&
-			     str_begins(fstorage->active_fname, scriptname) )
+			     str_begins_with(fstorage->active_fname, scriptname) )
 			{
 				sieve_storage_set_error(storage,
 					SIEVE_ERROR_BAD_PARAMS,
diff --git a/src/lib-sieve/storage/ldap/sieve-ldap-db.c b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
index 8da710f2e..2fb16d674 100644
--- a/src/lib-sieve/storage/ldap/sieve-ldap-db.c
+++ b/src/lib-sieve/storage/ldap/sieve-ldap-db.c
@@ -836,7 +836,7 @@ int sieve_ldap_db_connect(struct ldap_connection *conn)
 		if (ret != LDAP_SUCCESS) {
 			if (ret == LDAP_OPERATIONS_ERROR &&
 			    set->uris != NULL &&
-			    str_begins(set->uris, "ldaps:")) {
+			    str_begins_with(set->uris, "ldaps:")) {
 				e_error(storage->event, "db: "
 					"Don't use both tls=yes and ldaps URI");
 			}
diff --git a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
index 236638239..86a706ef6 100644
--- a/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
+++ b/src/plugins/doveadm-sieve/doveadm-sieve-sync.c
@@ -292,12 +292,11 @@ sieve_attribute_set_sieve(struct mail_storage *storage,
 
 	if (strcmp(key, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT) == 0)
 		return sieve_attribute_set_default(storage, svstorage, value);
-	if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES)) {
+	if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES, &scriptname)) {
 		mail_storage_set_error(storage, MAIL_ERROR_NOTFOUND,
 				       "Nonexistent sieve attribute");
 		return -1;
 	}
-	scriptname = key + strlen(MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES);
 
 	if (value->value != NULL) {
 		input = i_stream_create_from_data(value->value,
@@ -370,7 +369,7 @@ sieve_attribute_set(struct mailbox_transaction_context *t,
 
 	if (t->box->storage->user->dsyncing &&
 	    type == MAIL_ATTRIBUTE_TYPE_PRIVATE &&
-	    str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) {
+	    str_begins_with(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) {
 		time_t ts =
 			(value->last_change != 0 ? value->last_change : ioloop_time);
 
@@ -516,14 +515,13 @@ sieve_attribute_get_sieve(struct mail_storage *storage, const char *key,
 
 	if (strcmp(key, MAILBOX_ATTRIBUTE_SIEVE_DEFAULT) == 0)
 		return sieve_attribute_get_default(storage, svstorage, value_r);
-	if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES))
+	if (!str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES, &scriptname))
 		return 0;
 	if ((value_r->flags & MAIL_ATTRIBUTE_VALUE_FLAG_INT_STREAMS) == 0) {
 		mail_storage_set_error(storage, MAIL_ERROR_PARAMS,
 			"Sieve attributes are available only as streams");
 		return -1;
 	}
-	scriptname = key + strlen(MAILBOX_ATTRIBUTE_PREFIX_SIEVE_FILES);
 	script = sieve_storage_open_script(svstorage, scriptname, NULL);
 	if ((ret=sieve_attribute_retrieve_script
 		(storage, svstorage, script, FALSE, value_r, &errstr)) < 0) {
@@ -545,7 +543,7 @@ sieve_attribute_get(struct mailbox *box,
 
 	if (box->storage->user->dsyncing &&
 	    type == MAIL_ATTRIBUTE_TYPE_PRIVATE &&
-	    str_begins(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) {
+	    str_begins_with(key, MAILBOX_ATTRIBUTE_PREFIX_SIEVE)) {
 
 		ret = sieve_attribute_get_sieve(box->storage, key, value_r);
 		if (ret >= 0 && user->mail_debug) {
-- 
GitLab