From b4088cb04f47178e8059cd4a0fb0aa66939ddc28 Mon Sep 17 00:00:00 2001 From: Bastian Kummer Date: Mon, 22 Apr 2019 19:29:18 +0200 Subject: [PATCH 2/3] Fix mailmime_write(): add handler for MAILMIME_FIELD_LOCATION (#329) --- src/low-level/mime/mailmime_write_generic.c | 34 +++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/low-level/mime/mailmime_write_generic.c b/src/low-level/mime/mailmime_write_generic.c index bb63ab0..ff44e0d 100644 --- a/src/low-level/mime/mailmime_write_generic.c +++ b/src/low-level/mime/mailmime_write_generic.c @@ -81,6 +81,9 @@ static int mailmime_version_write_driver(int (* do_write)(void *, const char *, static int mailmime_encoding_write_driver(int (* do_write)(void *, const char *, size_t), void * data, int * col, struct mailmime_mechanism * encoding); +static int mailmime_location_write_driver(int (* do_write)(void *, const char *, size_t), void *data, int *col, + char *location); + static int mailmime_language_write_driver(int (* do_write)(void *, const char *, size_t), void * data, int * col, struct mailmime_language * language); @@ -169,6 +172,10 @@ static int mailmime_field_write_driver(int (* do_write)(void *, const char *, si r = mailmime_language_write_driver(do_write, data, col, field->fld_data.fld_language); break; + case MAILMIME_FIELD_LOCATION: + r = mailmime_location_write_driver(do_write, data, col, field->fld_data.fld_location); + break; + default: r = MAILIMF_ERROR_INVAL; break; @@ -310,6 +317,33 @@ static int mailmime_encoding_write_driver(int (* do_write)(void *, const char *, return MAILIMF_NO_ERROR; } +static int mailmime_location_write_driver(int (* do_write)(void *, const char *, size_t), void *data, int *col, + char *location) +{ + int r; + int len = strlen(location); + + r = mailimf_string_write_driver(do_write, data, col, "Content-Location: ", 18); + if (r != MAILIMF_NO_ERROR) + return r; + + if (*col > 1 && *col + len > MAX_MAIL_COL) { + r = mailimf_string_write_driver(do_write, data, col, "\r\n ", 3); + if (r != MAILIMF_NO_ERROR) + return r; + } + + r = mailimf_string_write_driver(do_write, data, col, location, len); + if (r != MAILIMF_NO_ERROR) + return r; + + r = mailimf_string_write_driver(do_write, data, col, "\r\n", 2); + if (r != MAILIMF_NO_ERROR) + return r; + + return MAILIMF_NO_ERROR; +} + static int mailmime_language_write_driver(int (* do_write)(void *, const char *, size_t), void * data, int * col, struct mailmime_language * language) { -- 2.21.0