Mercurial > dovecot > core-2.2
view src/lib-index/maildir/maildir-open.c @ 903:fd8888f6f037 HEAD
Naming style changes, finally got tired of most of the typedefs. Also the
previous enum -> macro change reverted so that we don't use the highest bit
anymore, that's incompatible with old indexes so they will be rebuilt.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 05 Jan 2003 15:09:51 +0200 |
parents | 86cf24da85f1 |
children | 359334706e65 |
line wrap: on
line source
/* Copyright (C) 2002 Timo Sirainen */ #include "lib.h" #include "istream.h" #include "maildir-index.h" #include "mail-index-data.h" #include "mail-index-util.h" #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> struct istream *maildir_open_mail(struct mail_index *index, struct mail_index_record *rec, time_t *internal_date, int *deleted) { struct stat st; const char *fname, *path; int fd; i_assert(index->lock_type != MAIL_LOCK_UNLOCK); *deleted = FALSE; /* check for inconsistency here, to avoid extra error messages */ if (index->inconsistent) return NULL; fname = index->lookup_field(index, rec, DATA_FIELD_LOCATION); if (fname == NULL) { index_data_set_corrupted(index->data, "Missing location field for record %u", rec->uid); return NULL; } path = t_strconcat(index->mailbox_path, "/cur/", fname, NULL); fd = open(path, O_RDONLY); if (fd == -1) { if (errno == ENOENT) { *deleted = TRUE; return NULL; } index_set_error(index, "Error opening mail file %s: %m", path); return NULL; } if (internal_date != NULL) { *internal_date = mail_get_internal_date(index, rec); if (*internal_date == (time_t)-1) { if (fstat(fd, &st) == 0) *internal_date = st.st_mtime; } } if (index->mail_read_mmaped) { return i_stream_create_mmap(fd, default_pool, MAIL_MMAP_BLOCK_SIZE, 0, 0, TRUE); } else { return i_stream_create_file(fd, default_pool, MAIL_READ_BLOCK_SIZE, TRUE); } }