From: Timo Sirainen Date: Fri, 17 Aug 2018 11:33:50 +0000 (+0300) Subject: lib-mail: Make message_header_strdup() public X-Git-Tag: 2.3.9~1550 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5bd249d40b2a2853a83a918b15f1ce4a2fb44091;p=thirdparty%2Fdovecot%2Fcore.git lib-mail: Make message_header_strdup() public Also move it to a better file. --- diff --git a/src/lib-mail/message-header-parser.c b/src/lib-mail/message-header-parser.c index e6ea377458..f8f9974762 100644 --- a/src/lib-mail/message-header-parser.c +++ b/src/lib-mail/message-header-parser.c @@ -4,6 +4,7 @@ #include "buffer.h" #include "istream.h" #include "str.h" +#include "unichar.h" #include "message-size.h" #include "message-header-parser.h" @@ -411,3 +412,25 @@ void message_header_line_write(buffer_t *output, buffer_append_c(output, '\n'); } } + +const char * +message_header_strdup(pool_t pool, const unsigned char *data, size_t size) +{ + if (memchr(data, '\0', size) == NULL) { + /* fast path */ + char *dest = p_malloc(pool, size+1); + memcpy(dest, data, size); + return dest; + } + + /* slow path - this could be made faster, but it should be + rare so keep it simple */ + string_t *str = str_new(pool, size+2); + for (size_t i = 0; i < size; i++) { + if (data[i] != '\0') + str_append_c(str, data[i]); + else + str_append(str, UNICODE_REPLACEMENT_CHAR_UTF8); + } + return str_c(str); +} diff --git a/src/lib-mail/message-header-parser.h b/src/lib-mail/message-header-parser.h index d6863524aa..3f3d24d44c 100644 --- a/src/lib-mail/message-header-parser.h +++ b/src/lib-mail/message-header-parser.h @@ -74,4 +74,9 @@ void message_parse_header(struct istream *input, struct message_size *hdr_size, void message_header_line_write(buffer_t *output, const struct message_header_line *hdr); +/* Duplicate the given header value data and return it. Replaces any NULs with + UNICODE_REPLACEMENT_CHAR_UTF8. */ +const char * +message_header_strdup(pool_t pool, const unsigned char *data, size_t size); + #endif diff --git a/src/lib-mail/message-part-data.c b/src/lib-mail/message-part-data.c index 57a0f3e36d..1263ab30dd 100644 --- a/src/lib-mail/message-part-data.c +++ b/src/lib-mail/message-part-data.c @@ -170,28 +170,6 @@ envelope_get_field(const char *name) return ENVELOPE_FIELD_UNKNOWN; } -static const char * -message_header_strdup(pool_t pool, const unsigned char *data, size_t size) -{ - if (memchr(data, '\0', size) == NULL) { - /* fast path */ - char *dest = p_malloc(pool, size+1); - memcpy(dest, data, size); - return dest; - } - - /* slow path - this could be made faster, but it should be - rare so keep it simple */ - string_t *str = str_new(pool, size+2); - for (size_t i = 0; i < size; i++) { - if (data[i] != '\0') - str_append_c(str, data[i]); - else - str_append(str, UNICODE_REPLACEMENT_CHAR_UTF8); - } - return str_c(str); -} - void message_part_envelope_parse_from_header(pool_t pool, struct message_part_envelope **data, struct message_header_line *hdr)