const unsigned char *data;
char *sender = NULL;
size_t i, size;
- int ret;
+ int ret, tz;
*mtime_r = (time_t)-1;
fd_set_nonblock(fd, FALSE);
break;
}
if (i != size) {
- (void)mbox_from_parse(data, i, mtime_r,
+ (void)mbox_from_parse(data, i, mtime_r, &tz,
&sender);
i_stream_skip(input, i + 1);
break;
/* Copyright (c) 2002-2008 Dovecot authors, see the included COPYING file */
#include "lib.h"
+#include "ioloop.h"
#include "str.h"
#include "utc-mktime.h"
#include "mbox-from.h"
}
int mbox_from_parse(const unsigned char *msg, size_t size,
- time_t *time_r, char **sender_r)
+ time_t *time_r, int *tz_offset_r, char **sender_r)
{
const unsigned char *msg_start, *sender_end, *msg_end;
struct tm tm;
t -= timezone_secs;
*time_r = t;
+ *tz_offset_r = timezone_secs/60;
} else {
/* assume local timezone */
*time_r = mktime(&tm);
+ *tz_offset_r = -ioloop_timezone.tz_minuteswest;
}
*sender_r = i_strdup_until(msg_start, sender_end);
/* Parse time and sender from mbox-compatible From_-line. msg points to the
data after "From ". */
int mbox_from_parse(const unsigned char *msg, size_t size,
- time_t *time_r, char **sender_r);
+ time_t *time_r, int *tz_offset_r, char **sender_r);
/* Return a mbox-compatible From_-line using given sender and time.
The returned string begins with "From ". */
const char *mbox_from_create(const char *sender, time_t timestamp);
char *sender;
time_t received_time;
size_t pos, line_pos;
- int skip;
+ int skip, tz;
buf = i_stream_get_data(rstream->istream.parent, &pos);
i_assert(pos > 0);
/* beginning of mbox */
if (memcmp(buf, "From ", 5) != 0 ||
- mbox_from_parse(buf+5, pos-5, &received_time, &sender) < 0) {
+ mbox_from_parse(buf+5, pos-5, &received_time, &tz, &sender) < 0) {
/* broken From - should happen only at beginning of
file if this isn't a mbox.. */
return -1;
time_t received_time;
size_t i, pos, new_pos, from_start_pos, from_after_pos;
ssize_t ret = 0;
- int eoh_char;
+ int eoh_char, tz;
bool crlf_ending = FALSE;
i_assert(stream->istream.v_offset >= rstream->from_offset);
See if it's a valid one. */
if (mbox_from_parse(buf + from_after_pos,
pos - from_after_pos,
- &received_time,
+ &received_time, &tz,
&sender) == 0) {
/* yep, we stop here. */
rstream->next_received_time =
size_t size;
time_t received_time;
char *sender;
+ int tz;
/* minimal: "From x Thu Nov 29 22:33:52 2001" = 31 chars */
(void)i_stream_read_data(rstream->istream.parent, &data, &size, 30);
break;
}
- if (mbox_from_parse(data, size, &received_time, &sender) < 0)
+ if (mbox_from_parse(data, size, &received_time, &tz, &sender) < 0)
return 0;
rstream->next_received_time = received_time;