diff options
Diffstat (limited to '')
-rw-r--r-- | concat.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/concat.c b/concat.c index 2c58d8a..eeab073 100644 --- a/concat.c +++ b/concat.c @@ -119,14 +119,36 @@ void concatData(struct List threads, struct List items) { if (error || file.st_mtime < uidNewest(flat, "mbox")) { FILE *mbox = fopen(path, "w"); if (!mbox) err(EX_CANTCREAT, "%s", path); + for (size_t i = 0; i < flat.len; ++i) { uint32_t uid = dataCheck(flat.ptr[i], Number).number; error = concatFile(mbox, uidPath(uid, "mbox")); if (error) err(EX_IOERR, "%s", path); } + error = fclose(mbox); if (error) err(EX_IOERR, "%s", path); } + path = threadPath(envelope.messageID, "atom"); + error = stat(path, &file); + if (error || file.st_mtime < uidNewest(flat, "atom")) { + FILE *atom = fopen(path, "w"); + if (!atom) err(EX_CANTCREAT, "%s", path); + + error = atomFeedHead(atom, &envelope); + if (error) err(EX_IOERR, "%s", path); + + for (size_t i = 0; i < flat.len; ++i) { + uint32_t uid = dataCheck(flat.ptr[i], Number).number; + error = concatFile(atom, uidPath(uid, "atom")); + if (error) err(EX_IOERR, "%s", path); + } + + error = atomFeedTail(atom) + || fclose(atom); + if (error) err(EX_IOERR, "%s", path); + } + listFree(flat); } |