summaryrefslogtreecommitdiffabout
path: root/kmicromail/libetpan/mbox
Unidiff
Diffstat (limited to 'kmicromail/libetpan/mbox') (more/less context) (ignore whitespace changes)
-rw-r--r--kmicromail/libetpan/mbox/mailmbox.c21
-rw-r--r--kmicromail/libetpan/mbox/mailmbox.h4
-rw-r--r--kmicromail/libetpan/mbox/mailmbox_types.c3
-rw-r--r--kmicromail/libetpan/mbox/mailmbox_types.h1
4 files changed, 25 insertions, 4 deletions
diff --git a/kmicromail/libetpan/mbox/mailmbox.c b/kmicromail/libetpan/mbox/mailmbox.c
index 280c313..b3fce02 100644
--- a/kmicromail/libetpan/mbox/mailmbox.c
+++ b/kmicromail/libetpan/mbox/mailmbox.c
@@ -194,12 +194,15 @@ void mailmbox_timestamp(struct mailmbox_folder * folder)
194 194
195int mailmbox_open(struct mailmbox_folder * folder) 195int mailmbox_open(struct mailmbox_folder * folder)
196{ 196{
197 int fd; 197 int fd;
198 int read_only; 198 int read_only;
199 199
200 fd = -1;
201 read_only = TRUE;
202
200 if (!folder->mb_read_only) { 203 if (!folder->mb_read_only) {
201 read_only = FALSE; 204 read_only = FALSE;
202 fd = open(folder->mb_filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR); 205 fd = open(folder->mb_filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR);
203 } 206 }
204 207
205 if (folder->mb_read_only || (fd < 0)) { 208 if (folder->mb_read_only || (fd < 0)) {
@@ -614,12 +617,14 @@ mailmbox_append_message_list_no_lock(struct mailmbox_folder * folder,
614 info = carray_get(append_tab, i); 617 info = carray_get(append_tab, i);
615 extra_size += from_size; 618 extra_size += from_size;
616 extra_size += get_fixed_message_size(info->ai_message, info->ai_size, 619 extra_size += get_fixed_message_size(info->ai_message, info->ai_size,
617 folder->mb_max_uid + i + 1, 620 folder->mb_max_uid + i + 1,
618 folder->mb_no_uid); 621 folder->mb_no_uid);
619 extra_size += 2; /* CR LF */ 622 extra_size += 2; /* CR LF */
623
624 info->ai_uid = folder->mb_max_uid + i + 1;
620 } 625 }
621 626
622 left = folder->mb_mapping_size; 627 left = folder->mb_mapping_size;
623 crlf_count = 0; 628 crlf_count = 0;
624 while (left >= 1) { 629 while (left >= 1) {
625 if (folder->mb_mapping[left - 1] == '\n') { 630 if (folder->mb_mapping[left - 1] == '\n') {
@@ -741,14 +746,14 @@ mailmbox_append_message_list(struct mailmbox_folder * folder,
741 mailmbox_write_unlock(folder); 746 mailmbox_write_unlock(folder);
742 err: 747 err:
743 return res; 748 return res;
744} 749}
745 750
746int 751int
747mailmbox_append_message(struct mailmbox_folder * folder, 752mailmbox_append_message_uid(struct mailmbox_folder * folder,
748 const char * data, size_t len) 753 const char * data, size_t len, unsigned int * puid)
749{ 754{
750 carray * tab; 755 carray * tab;
751 struct mailmbox_append_info * append_info; 756 struct mailmbox_append_info * append_info;
752 int res; 757 int res;
753 int r; 758 int r;
754 759
@@ -768,13 +773,16 @@ mailmbox_append_message(struct mailmbox_folder * folder,
768 if (r < 0) { 773 if (r < 0) {
769 res = MAILMBOX_ERROR_MEMORY; 774 res = MAILMBOX_ERROR_MEMORY;
770 goto free_append_info; 775 goto free_append_info;
771 } 776 }
772 777
773 r = mailmbox_append_message_list(folder, tab); 778 r = mailmbox_append_message_list(folder, tab);
774 779
780 if (puid != NULL)
781 * puid = append_info->ai_uid;
782
775 mailmbox_append_info_free(append_info); 783 mailmbox_append_info_free(append_info);
776 carray_free(tab); 784 carray_free(tab);
777 785
778 return r; 786 return r;
779 787
780 free_append_info: 788 free_append_info:
@@ -782,12 +790,19 @@ mailmbox_append_message(struct mailmbox_folder * folder,
782 free_list: 790 free_list:
783 carray_free(tab); 791 carray_free(tab);
784 err: 792 err:
785 return res; 793 return res;
786} 794}
787 795
796int
797mailmbox_append_message(struct mailmbox_folder * folder,
798 const char * data, size_t len)
799{
800 return mailmbox_append_message_uid(folder, data, len, NULL);
801}
802
788/* ********************************************************************** */ 803/* ********************************************************************** */
789 804
790int mailmbox_fetch_msg_no_lock(struct mailmbox_folder * folder, 805int mailmbox_fetch_msg_no_lock(struct mailmbox_folder * folder,
791 uint32_t num, char ** result, 806 uint32_t num, char ** result,
792 size_t * result_len) 807 size_t * result_len)
793{ 808{
diff --git a/kmicromail/libetpan/mbox/mailmbox.h b/kmicromail/libetpan/mbox/mailmbox.h
index 8be086c..0427f1f 100644
--- a/kmicromail/libetpan/mbox/mailmbox.h
+++ b/kmicromail/libetpan/mbox/mailmbox.h
@@ -48,12 +48,16 @@ mailmbox_append_message_list(struct mailmbox_folder * folder,
48 carray * append_tab); 48 carray * append_tab);
49 49
50int 50int
51mailmbox_append_message(struct mailmbox_folder * folder, 51mailmbox_append_message(struct mailmbox_folder * folder,
52 const char * data, size_t len); 52 const char * data, size_t len);
53 53
54int
55mailmbox_append_message_uid(struct mailmbox_folder * folder,
56 const char * data, size_t len, unsigned int * puid);
57
54int mailmbox_fetch_msg(struct mailmbox_folder * folder, 58int mailmbox_fetch_msg(struct mailmbox_folder * folder,
55 uint32_t num, char ** result, 59 uint32_t num, char ** result,
56 size_t * result_len); 60 size_t * result_len);
57 61
58int mailmbox_fetch_msg_headers(struct mailmbox_folder * folder, 62int mailmbox_fetch_msg_headers(struct mailmbox_folder * folder,
59 uint32_t num, char ** result, 63 uint32_t num, char ** result,
diff --git a/kmicromail/libetpan/mbox/mailmbox_types.c b/kmicromail/libetpan/mbox/mailmbox_types.c
index 1986182..4e3e521 100644
--- a/kmicromail/libetpan/mbox/mailmbox_types.c
+++ b/kmicromail/libetpan/mbox/mailmbox_types.c
@@ -175,13 +175,14 @@ mailmbox_append_info_new(const char * ai_message, size_t ai_size)
175 info = malloc(sizeof(* info)); 175 info = malloc(sizeof(* info));
176 if (info == NULL) 176 if (info == NULL)
177 return NULL; 177 return NULL;
178 178
179 info->ai_message = ai_message; 179 info->ai_message = ai_message;
180 info->ai_size = ai_size; 180 info->ai_size = ai_size;
181 181 info->ai_uid = 0;
182
182 return info; 183 return info;
183} 184}
184 185
185void mailmbox_append_info_free(struct mailmbox_append_info * info) 186void mailmbox_append_info_free(struct mailmbox_append_info * info)
186{ 187{
187 free(info); 188 free(info);
diff --git a/kmicromail/libetpan/mbox/mailmbox_types.h b/kmicromail/libetpan/mbox/mailmbox_types.h
index dd6758c..bd6ee30 100644
--- a/kmicromail/libetpan/mbox/mailmbox_types.h
+++ b/kmicromail/libetpan/mbox/mailmbox_types.h
@@ -125,12 +125,13 @@ mailmbox_msg_info_new(size_t msg_start, size_t msg_start_len,
125 125
126void mailmbox_msg_info_free(struct mailmbox_msg_info * info); 126void mailmbox_msg_info_free(struct mailmbox_msg_info * info);
127 127
128struct mailmbox_append_info { 128struct mailmbox_append_info {
129 const char * ai_message; 129 const char * ai_message;
130 size_t ai_size; 130 size_t ai_size;
131 unsigned int ai_uid;
131}; 132};
132 133
133struct mailmbox_append_info * 134struct mailmbox_append_info *
134mailmbox_append_info_new(const char * ai_message, size_t ai_size); 135mailmbox_append_info_new(const char * ai_message, size_t ai_size);
135 136
136void mailmbox_append_info_free(struct mailmbox_append_info * info); 137void mailmbox_append_info_free(struct mailmbox_append_info * info);