Mercurial > dovecot > original-hg > dovecot-1.2
annotate src/lib-index/mbox/mbox-append.c @ 82:438d5f258b01 HEAD
maybe now?
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 28 Aug 2002 23:59:40 +0300 |
parents | 1dfa3c9d60ef |
children | a6d7ed739926 |
rev | line source |
---|---|
0 | 1 /* Copyright (C) 2002 Timo Sirainen */ |
2 | |
3 #include "lib.h" | |
4 #include "ioloop.h" | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
5 #include "iobuffer.h" |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
6 #include "hex-binary.h" |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
7 #include "md5.h" |
0 | 8 #include "mbox-index.h" |
9 #include "mail-index-util.h" | |
10 | |
11 static MailIndexRecord * | |
12 mail_index_record_append(MailIndex *index, time_t internal_date, | |
13 size_t full_virtual_size) | |
14 { | |
15 MailIndexRecord trec, *rec; | |
16 | |
17 memset(&trec, 0, sizeof(MailIndexRecord)); | |
18 trec.internal_date = internal_date; | |
19 trec.full_virtual_size = full_virtual_size; | |
20 | |
21 rec = &trec; | |
22 if (!index->append(index, &rec)) | |
23 return NULL; | |
24 | |
25 return rec; | |
26 } | |
27 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
28 static void mbox_read_message(IOBuffer *inbuf, unsigned int *virtual_size) |
0 | 29 { |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
30 unsigned char *msg; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
31 unsigned int i, size, startpos, vsize; |
78 | 32 int lastmsg; |
0 | 33 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
34 /* read until "[\r]\nFrom " is found */ |
78 | 35 startpos = i = vsize = 0; lastmsg = TRUE; |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
36 while (io_buffer_read_data(inbuf, &msg, &size, startpos) >= 0) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
37 for (i = startpos; i < size; i++) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
38 if (msg[i] == '\n') { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
39 if (i == 0 || msg[i-1] != '\r') { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
40 /* missing CR */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
41 vsize++; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
42 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
43 } else if (msg[i] == ' ' && i >= 5) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
44 /* See if it's space after "From" */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
45 if (msg[i-5] == '\n' && msg[i-4] == 'F' && |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
46 msg[i-3] == 'r' && msg[i-2] == 'o' && |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
47 msg[i-1] == 'm') { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
48 /* yes, see if we had \r too */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
49 i -= 5; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
50 if (i > 0 && msg[i-1] == '\r') |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
51 i--; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
52 else |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
53 vsize--; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
54 break; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
55 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
56 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
57 } |
0 | 58 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
59 if (i < size) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
60 startpos = i; |
78 | 61 lastmsg = FALSE; |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
62 break; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
63 } |
0 | 64 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
65 if (i > 0) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
66 startpos = i < 7 ? i : 7; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
67 i -= startpos; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
68 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
69 io_buffer_skip(inbuf, i); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
70 vsize += i; |
0 | 71 } |
72 } | |
73 | |
78 | 74 if (lastmsg && startpos > 0) { |
76 | 75 /* end of file, remove the last [\r]\n */ |
79
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
76 msg = io_buffer_get_data(inbuf, &size); |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
77 if (size == startpos) { |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
78 if (msg[startpos-1] == '\n') |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
79 startpos--; |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
80 if (startpos > 0 && msg[startpos-1] == '\r') |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
81 startpos--; |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
82 else |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
83 vsize--; |
d1407cb2b39b
more fix fixes (maybe i should test these before committing :)
Timo Sirainen <tss@iki.fi>
parents:
78
diff
changeset
|
84 } |
76 | 85 } |
86 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
87 io_buffer_skip(inbuf, startpos); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
88 vsize += startpos; |
0 | 89 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
90 *virtual_size = vsize; |
0 | 91 } |
92 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
93 static int mbox_index_append_next(MailIndex *index, IOBuffer *inbuf) |
0 | 94 { |
95 MailIndexRecord *rec; | |
96 MailIndexUpdate *update; | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
97 MboxHeaderContext ctx; |
0 | 98 time_t internal_date; |
82 | 99 uoff_t abs_start_offset, stop_offset, old_size; |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
100 unsigned char *data, md5_digest[16]; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
101 unsigned int size, pos, virtual_size; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
102 const char *location; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
103 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
104 /* get the From-line */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
105 pos = 0; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
106 while (io_buffer_read_data(inbuf, &data, &size, pos) >= 0) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
107 for (; pos < size; pos++) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
108 if (data[pos] == '\n') |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
109 break; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
110 } |
0 | 111 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
112 if (pos < size) |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
113 break; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
114 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
115 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
116 if (pos == size || size <= 5 || strncmp(data, "From ", 5) != 0) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
117 /* a) no \n found, or line too long |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
118 b) not a From-line */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
119 index_set_error(index, "Error indexing mbox file %s: " |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
120 "From-line not found where expected", |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
121 index->mbox_path); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
122 index->set_flags |= MAIL_INDEX_FLAG_FSCK; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
123 return FALSE; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
124 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
125 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
126 /* parse the From-line */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
127 internal_date = mbox_from_parse_date(data, size); |
0 | 128 if (internal_date <= 0) |
129 internal_date = ioloop_time; | |
130 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
131 io_buffer_skip(inbuf, pos+1); |
82 | 132 abs_start_offset = inbuf->start_offset + inbuf->offset; |
0 | 133 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
134 /* now, find the ending "[\r]\nFrom " */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
135 mbox_read_message(inbuf, &virtual_size); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
136 stop_offset = inbuf->offset; |
0 | 137 |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
138 /* add message to index */ |
0 | 139 rec = mail_index_record_append(index, internal_date, virtual_size); |
140 if (rec == NULL) | |
141 return FALSE; | |
142 | |
143 update = index->update_begin(index, rec); | |
144 | |
145 /* location = offset to beginning of message */ | |
82 | 146 location = binary_to_hex((unsigned char *) &abs_start_offset, |
147 sizeof(abs_start_offset)); | |
0 | 148 index->update_field(update, FIELD_TYPE_LOCATION, location, 0); |
149 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
150 /* parse the header and cache wanted fields. get the message flags |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
151 from Status and X-Status fields. temporarily limit the buffer size |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
152 so the message body is parsed properly (FIXME: does this have |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
153 side effects?) */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
154 mbox_header_init_context(&ctx); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
155 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
156 old_size = inbuf->size; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
157 inbuf->size = stop_offset; |
82 | 158 io_buffer_seek(inbuf, abs_start_offset - inbuf->start_offset); |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
159 |
25
55e09f36d23d
after a few times of trying to access uncached fields, they're cached the
Timo Sirainen <tss@iki.fi>
parents:
22
diff
changeset
|
160 mail_index_update_headers(update, inbuf, 0, mbox_header_func, &ctx); |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
161 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
162 inbuf->size = old_size; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
163 io_buffer_seek(inbuf, stop_offset); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
164 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
165 /* save message flags */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
166 rec->msg_flags |= ctx.flags; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
167 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
168 /* save MD5 */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
169 md5_final(&ctx.md5, md5_digest); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
170 index->update_field(update, FIELD_TYPE_MD5, |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
171 binary_to_hex(md5_digest, sizeof(md5_digest)), 0); |
0 | 172 |
173 if (!index->update_end(update)) { | |
174 /* failed - delete the record */ | |
175 (void)index->expunge(index, rec, 0, FALSE); | |
176 return FALSE; | |
177 } | |
178 | |
179 return TRUE; | |
180 } | |
181 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
182 int mbox_index_append(MailIndex *index, IOBuffer *inbuf) |
0 | 183 { |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
184 if (inbuf->offset == inbuf->size) { |
0 | 185 /* no new data */ |
186 return TRUE; | |
187 } | |
188 | |
189 if (!index->set_lock(index, MAIL_LOCK_EXCLUSIVE)) | |
190 return FALSE; | |
191 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
192 for (;;) { |
80 | 193 if (inbuf->start_offset + inbuf->offset != 0) { |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
194 /* we're at the [\r]\n before the From-line, |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
195 skip it */ |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
196 if (!mbox_skip_crlf(inbuf)) { |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
197 index_set_error(index, |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
198 "Error indexing mbox file %s: " |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
199 "LF not found where expected", |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
200 index->mbox_path); |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
201 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
202 index->set_flags |= MAIL_INDEX_FLAG_FSCK; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
203 return FALSE; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
204 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
205 } |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
206 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
207 if (inbuf->offset == inbuf->size) |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
208 break; |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
209 |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
210 if (!mbox_index_append_next(index, inbuf)) |
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
211 return FALSE; |
0 | 212 } |
213 | |
22
a946ce1f09b7
mbox fixes, not fully working yet but almost :)
Timo Sirainen <tss@iki.fi>
parents:
10
diff
changeset
|
214 return TRUE; |
0 | 215 } |