str_append_c(str, '(');
while (addr != NULL) {
str_append_c(str, '(');
- str_append(str, imap_quote_str_nil(addr->name));
+ imap_quote_append_string(str, addr->name);
str_append_c(str, ' ');
- str_append(str, imap_quote_str_nil(addr->route));
+ imap_quote_append_string(str, addr->route);
str_append_c(str, ' ');
- str_append(str, imap_quote_str_nil(addr->mailbox));
+ imap_quote_append_string(str, addr->mailbox);
str_append_c(str, ' ');
- str_append(str, imap_quote_str_nil(addr->domain));
+ imap_quote_append_string(str, addr->domain);
str_append_c(str, ')');
addr = addr->next;
str_append(str, NVL(data->message_id, "NIL"));
}
-const char *
-imap_envelope_get_part_data(struct message_part_envelope_data *data)
-{
- string_t *str;
-
- str = t_str_new(2048);
- imap_envelope_write_part_data(data, str);
- return str_c(str);
-}
-
static int imap_address_arg_append(struct imap_arg *arg, string_t *str,
int *in_group)
{
/* Write envelope to given string */
void imap_envelope_write_part_data(struct message_part_envelope_data *data,
string_t *str);
-/* Return envelope. */
-const char *
-imap_envelope_get_part_data(struct message_part_envelope_data *data);
/* Parse envelope and store specified field to result. NIL is stored as NULL.
Returns TRUE if successful. */
size_t i, linefeeds = 0;
int literal = FALSE;
+ if (value == NULL) {
+ str_append(str, "NIL");
+ return;
+ }
+
for (i = 0; i < value_len; i++) {
if (value[i] == 0) {
value_len = i;
str_append_c(str, '"');
}
-const char *imap_quote_str_nil(const char *value)
+char *imap_quote(pool_t pool, const unsigned char *value, size_t value_len)
{
string_t *str;
if (value == NULL)
return "NIL";
- str = t_str_new(512);
- imap_quote_append(str, (const unsigned char *) value, (size_t)-1);
- return str_c(str);
-}
-
-char *imap_quote(pool_t pool, const unsigned char *value, size_t value_len)
-{
- string_t *str;
-
str = t_str_new(value_len + MAX_INT_STRLEN + 5);
imap_quote_append(str, value, value_len);
return p_strndup(pool, str_data(str), str_len(str));
void imap_quote_append(string_t *str, const unsigned char *value,
size_t value_len);
-/* If value is NULL, return NIL. */
-const char *imap_quote_str_nil(const char *value);
+#define imap_quote_append_string(str, value) \
+ imap_quote_append(str, (const unsigned char *) value, (size_t)-1)
#endif
#include "buffer.h"
#include "istream.h"
#include "ioloop.h"
+#include "str.h"
#include "message-date.h"
#include "message-parser.h"
#include "message-part-serialize.h"
}
if (ctx.envelope != NULL) {
+ string_t *str;
+
t_push();
- value = imap_envelope_get_part_data(ctx.envelope);
+ str = str_new(data_stack_pool, 2048);
+ imap_envelope_write_part_data(ctx.envelope, str);
update->index->update_field(update, DATA_FIELD_ENVELOPE,
- value, 0);
+ str_c(str), 0);
t_pop();
pool_unref(ctx.envelope_pool);
/* finalize the envelope */
string_t *str;
- t_push();
str = str_new(mail->pool, 256);
imap_envelope_write_part_data(data->envelope_data, str);
data->envelope = str_c(str);
- t_pop();
}
}
int index_mail_next(struct index_mail *mail, struct mail_index_record *rec)
{
struct index_mail_data *data = &mail->data;
- int open_mail, parse_header;
+ int ret, open_mail, parse_header;
+
+ t_push();
/* close the old one */
if (data->stream != NULL)
open_mail(mail->ibox->index, data->rec,
&data->received_date, &deleted);
if (data->stream == NULL)
- return deleted ? 0 : -1;
- }
-
- if ((mail->wanted_fields & MAIL_FETCH_RECEIVED_DATE) &&
- data->received_date == (time_t)-1) {
- /* check this only after open_mail() */
- data->received_date = get_cached_received_date(mail);
- }
+ ret = deleted ? 0 : -1;
+ else
+ ret = 1;
+ } else {
+ if ((mail->wanted_fields & MAIL_FETCH_RECEIVED_DATE) &&
+ data->received_date == (time_t)-1) {
+ /* check this only after open_mail() */
+ data->received_date = get_cached_received_date(mail);
+ }
- if (mail->wanted_fields & MAIL_FETCH_DATE)
- data->save_sent_time = TRUE;
- if (mail->wanted_fields & MAIL_FETCH_IMAP_ENVELOPE)
- data->save_envelope = TRUE;
+ if (mail->wanted_fields & MAIL_FETCH_DATE)
+ data->save_sent_time = TRUE;
+ if (mail->wanted_fields & MAIL_FETCH_IMAP_ENVELOPE)
+ data->save_envelope = TRUE;
- data->parse_header = parse_header;
- return 1;
+ data->parse_header = parse_header;
+ ret = 1;
+ }
+ t_pop();
+ return ret;
}
void index_mail_deinit(struct index_mail *mail)