Lines Matching refs:iter

196 static bool mailbox_log_iter_open_next(struct mailbox_log_iter *iter)
198 i_close_fd_path(&iter->fd, iter->filepath);
199 if (iter->filepath == NULL)
200 iter->filepath = iter->log->filepath2;
201 else if (iter->filepath == iter->log->filepath2)
202 iter->filepath = iter->log->filepath;
206 iter->fd = open(iter->filepath, O_RDONLY | O_APPEND);
207 if (iter->fd != -1)
210 if (iter->filepath == iter->log->filepath2)
211 return mailbox_log_iter_open_next(iter);
213 i_error("open(%s) failed: %m", iter->filepath);
214 iter->failed = TRUE;
221 struct mailbox_log_iter *iter;
223 iter = i_new(struct mailbox_log_iter, 1);
224 iter->log = log;
225 iter->fd = -1;
226 (void)mailbox_log_iter_open_next(iter);
227 return iter;
231 mailbox_log_iter_next(struct mailbox_log_iter *iter)
237 if (iter->idx == iter->count) {
238 if (iter->fd == -1)
241 ret = pread(iter->fd, iter->buf, sizeof(iter->buf),
242 iter->offset);
244 i_error("pread(%s) failed: %m", iter->filepath);
245 iter->failed = TRUE;
249 if (!mailbox_log_iter_open_next(iter))
251 iter->idx = iter->count = 0;
252 iter->offset = 0;
253 return mailbox_log_iter_next(iter);
255 iter->idx = 0;
256 iter->count = ret / sizeof(iter->buf[0]);
257 iter->offset += iter->count * sizeof(iter->buf[0]);
259 rec = &iter->buf[iter->idx++];
262 offset = iter->offset -
263 (iter->count - iter->idx) * sizeof(iter->buf[0]);
265 "type=%d", iter->filepath, offset, rec->type);
266 i_unlink(iter->filepath);
274 struct mailbox_log_iter *iter = *_iter;
275 int ret = iter->failed ? -1 : 0;
279 i_close_fd_path(&iter->fd, iter->filepath);
280 i_free(iter);