mbox-save.c revision fddb56b3956545011dafec8d20b1222002a9df00
2454dfa32c93c20a8522c6ed42fe057baaac9f9aStephan Bosch/* Copyright (C) 2002 Timo Sirainen */
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainenstatic int write_error(MailStorage *storage, const char *mbox_path)
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen mail_storage_set_error(storage, "Not enough disk space");
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen "Error writing to mbox file %s: %m", mbox_path);
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainenstatic int mbox_seek_to_end(MailStorage *storage, int fd,
6135260095e1704ed6edff9d00bdfc043c11429cTimo Sirainen "fstat() failed for mbox file %s: %m", mbox_path);
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen "lseek() failed for mbox file %s: %m", mbox_path);
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainen "read() failed for mbox file %s: %m", mbox_path);
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainenstatic int mbox_append_lf(MailStorage *storage, OBuffer *outbuf,
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainenstatic int write_from_line(MailStorage *storage, OBuffer *outbuf,
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen /* failed, use just the hostname */
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen sender = t_strconcat(storage->user, "@", my_hostdomain, NULL);
e15f1d736c225c7ce6f3d08a37c1b2ae66b57c50Timo Sirainen /* save in local timezone, no matter what it was given with */
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainen line = mbox_from_create(sender, internal_date);
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainenstatic int write_flags(MailStorage *storage, OBuffer *outbuf,
6fabfb7bbfd88d0c1de66981e52850f26067623bTimo Sirainen const char *str;
22535a9e685e29214082878e37a267157044618eTimo Sirainen unsigned int field;
22535a9e685e29214082878e37a267157044618eTimo Sirainen if (o_buffer_send(outbuf, "Status: R\n", 10) < 0)
6fabfb7bbfd88d0c1de66981e52850f26067623bTimo Sirainen if (flags & (MAIL_ANSWERED|MAIL_DRAFT|MAIL_FLAGGED|MAIL_DELETED)) {
6fabfb7bbfd88d0c1de66981e52850f26067623bTimo Sirainen if (o_buffer_send(outbuf, str, strlen(str)) < 0)
25757faf029c369a8318349dafe952e2358df1d8Timo Sirainen if (o_buffer_send(outbuf, "X-Keywords:", 11) < 0)
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainen for (i = 0; i < MAIL_CUSTOM_FLAGS_COUNT; i++, field <<= 1) {
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainen if ((flags & field) && custom_flags[i] != NULL) {
806cb455553b71934314da98f1b4a694a3aa152eTimo Sirainenint mbox_storage_save(Mailbox *box, MailFlags flags, const char *custom_flags[],
c64e714193097f841691dcfa2902c270cb47bff8Timo Sirainen time_t internal_date, int timezone_offset __attr_unused__,
c5383a0ed56a188a7d5efaaa4c6f8243af432d65Timo Sirainen mail_storage_set_error(box->storage, "Mailbox is read-only");
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen /* we don't need the real flags, easier to keep using our own.
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen they need to be checked/added though. */
43d3ea2780b5f8557ede7b4c039e8f56cb8d357dTimo Sirainen if (!index_mailbox_fix_custom_flags(ibox, &real_flags, custom_flags))
d5abbb932a0a598f002da39a8b3326643b1b5efcTimo Sirainen if (!index_storage_sync_and_lock(ibox, FALSE, MAIL_LOCK_EXCLUSIVE))
t_push();
0, FALSE);
internal_date) ||
custom_flags) ||
t_pop();
return !failed;