diff options
author | June McEnroe <june@causal.agency> | 2020-04-26 19:33:35 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2020-04-26 19:34:25 -0400 |
commit | 1af3e4b0d325565abcb3dc3dac1fcaf960f6e9d6 (patch) | |
tree | 5d222cde61b1d2552da0167ecf27de7fa935d8de | |
parent | Include Cc address in reply mailtos (diff) | |
download | bubger-1af3e4b0d325565abcb3dc3dac1fcaf960f6e9d6.tar.gz bubger-1af3e4b0d325565abcb3dc3dac1fcaf960f6e9d6.zip |
Iterate through nested multiparts to find content for Atom
Also fixes content for multipart/signed.
Diffstat (limited to '')
-rw-r--r-- | export.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/export.c b/export.c index ab77587..fb26e74 100644 --- a/export.c +++ b/export.c @@ -120,16 +120,17 @@ static void exportAtom( if (error) err(EX_IOERR, "%s", path); const struct BodyPart *part = structure; - if (bodyPartType(part, "multipart", "mixed")) { - part = &part->parts.ptr[0]; - body = dataCheck(body, List).list.ptr[0]; - } - if (bodyPartType(part, "multipart", "alternative")) { - for (size_t i = part->parts.len - 1; i < part->parts.len; --i) { - if (!isInline(&part->parts.ptr[i])) continue; - part = &part->parts.ptr[i]; - body = dataCheck(body, List).list.ptr[i]; - break; + while (part->multipart) { + if (bodyPartType(part, "multipart", "alternative")) { + for (size_t i = part->parts.len - 1; i < part->parts.len; --i) { + if (!isInline(&part->parts.ptr[i])) continue; + part = &part->parts.ptr[i]; + body = dataCheck(body, List).list.ptr[i]; + break; + } + } else { + part = &part->parts.ptr[0]; + body = dataCheck(body, List).list.ptr[0]; } } if (isInline(part)) { |