summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2005-01-24 21:00:03 (UTC)
committer zautrix <zautrix>2005-01-24 21:00:03 (UTC)
commit60733d98dff3ff5f8e95c514af258498aa7aa014 (patch) (unidiff)
tree751d6533a51790da2afa49c870ff2342d6e3b0bf
parentbb33b559609356149ae51cb50c081b3e82aecafb (diff)
downloadkdepimpi-60733d98dff3ff5f8e95c514af258498aa7aa014.zip
kdepimpi-60733d98dff3ff5f8e95c514af258498aa7aa014.tar.gz
kdepimpi-60733d98dff3ff5f8e95c514af258498aa7aa014.tar.bz2
memory leak fix
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--bin/kdepim/WhatsNew.txt4
-rw-r--r--kmicromail/libetpan/mh/mailmh.c3
2 files changed, 5 insertions, 2 deletions
diff --git a/bin/kdepim/WhatsNew.txt b/bin/kdepim/WhatsNew.txt
index 42b36f1..5864ce4 100644
--- a/bin/kdepim/WhatsNew.txt
+++ b/bin/kdepim/WhatsNew.txt
@@ -1,285 +1,285 @@
1Info about the changes in new versions of KDE-Pim/Pi 1Info about the changes in new versions of KDE-Pim/Pi
2 2
3********** VERSION 1.9.20 ************ 3********** VERSION 1.9.20 ************
4 4
5KO/Pi: 5KO/Pi:
6Added for the "dislplay one day" agenda mode 6Added for the "dislplay one day" agenda mode
7info in the caption and in the day lables: 7info in the caption and in the day lables:
8Now it is displayed, if the selected day is from "day before yesterday" 8Now it is displayed, if the selected day is from "day before yesterday"
9to "day after tomorrow". 9to "day after tomorrow".
10Made it possible to delete a Todo, which has sub-todos. 10Made it possible to delete a Todo, which has sub-todos.
11Fixed two small problems in the todo view. 11Fixed two small problems in the todo view.
12Added missing German translation for filter edit and print dialog. 12Added missing German translation for filter edit and print dialog.
13Made search dialog closeable by cancel key. 13Made search dialog closeable by cancel key.
14 14
15Made it possible to select in the date picker the (ligt grey ) 15Made it possible to select in the date picker the (ligt grey )
16dates of the prev./next month with the mouse. 16dates of the prev./next month with the mouse.
17 17
18OM/Pi: 18OM/Pi:
19"Delete mail" icon in main window now deletes all selected mails. 19"Delete mail" icon in main window now deletes all selected mails.
20Fixed the problem, that the state flag of imap mails was ignored. 20Fixed the problem, that the state flag of imap mails was ignored.
21Now mails with "FLAG_SEEN" on the imap server get no icon in the list view 21Now mails with "FLAG_SEEN" on the imap server get no icon in the list view
22to indecate that they are already seen. 22to indecate that they are already seen.
23Fixed the problem that the body of some mails was not displayed in the 23Fixed the problem that the body of some mails was not displayed in the
24mail viewer when fetching them from the imap server directly to read them. 24mail viewer when fetching them from the imap server directly to read them.
25Made it (configurable) possible to show the "To:" field in the list view. 25Made it (configurable) possible to show the "To:" field in the list view.
26Added to the mail viewer the option "View Source" to make it possible to see the raw mail data. 26Added to the mail viewer the option "View Source" to make it possible to see the raw mail data.
27Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the 27Added a "Download Mail" button to the mail viewer to quickly download the viewed mail to the
28local storage folder (specified in account setiings) of the account of the mail. 28local storage folder (specified in account settings) of the account of the mail.
29 29Removed some memory leaks in OM/Pi.
30 30
31 31
32********** VERSION 1.9.19 ************ 32********** VERSION 1.9.19 ************
33 33
34Added a lot of missing translations to KA/Pi, 34Added a lot of missing translations to KA/Pi,
35Added some missing translations to KO/Pi and OM/Pi. 35Added some missing translations to KO/Pi and OM/Pi.
36 36
37Fixed some minor problems in KA/Pi + KO/Pi. 37Fixed some minor problems in KA/Pi + KO/Pi.
38 38
39Fixed a crash when closing PwM/Pi. 39Fixed a crash when closing PwM/Pi.
40Added German translation for PwM/Pi. 40Added German translation for PwM/Pi.
41 41
42Made view change and Month View update faster in KO/Pi. 42Made view change and Month View update faster in KO/Pi.
43 43
44 44
45********** VERSION 1.9.18 ************ 45********** VERSION 1.9.18 ************
46 46
47FYI: The VERSION 1.9.17 was a testing release only. 47FYI: The VERSION 1.9.17 was a testing release only.
48Please read the changelog of VERSION 1.9.17 as well. 48Please read the changelog of VERSION 1.9.17 as well.
49 49
50Cleaned up the syncing config dialog. 50Cleaned up the syncing config dialog.
51Added sync config options for date range for events. 51Added sync config options for date range for events.
52Added sync config options for filters on incoming data. 52Added sync config options for filters on incoming data.
53Added sync config options for filters on outgoing data. 53Added sync config options for filters on outgoing data.
54Please read the updated SyncHowTo about the new filter settings. 54Please read the updated SyncHowTo about the new filter settings.
55These filter settings make it now possible to sync with shared 55These filter settings make it now possible to sync with shared
56calendars without writing back private or confidential data 56calendars without writing back private or confidential data
57(via the outgoing filters). 57(via the outgoing filters).
58To sync only with particular parts of a shared calendar, 58To sync only with particular parts of a shared calendar,
59the incoming filter settings can be used. 59the incoming filter settings can be used.
60An example can be found in the SyncHowTo. 60An example can be found in the SyncHowTo.
61Same for shared addressbooks. 61Same for shared addressbooks.
62 62
63Added a setting for the global kdepim data storage. 63Added a setting for the global kdepim data storage.
64Usually the data is stored in (yourhomedir/kdepim). 64Usually the data is stored in (yourhomedir/kdepim).
65Now you can set in the Global config dialog TAB, subTAB "Data storage path" 65Now you can set in the Global config dialog TAB, subTAB "Data storage path"
66a directory where all the kdepim data is stored. 66a directory where all the kdepim data is stored.
67That makes it easy to save all kdepim data on a SD card on the Z, for example. 67That makes it easy to save all kdepim data on a SD card on the Z, for example.
68 68
69KO/Pi: 69KO/Pi:
70The timeedit input has a pulldown list for times. 70The timeedit input has a pulldown list for times.
71If opened, this pulldown list should now has the right time highlighted. 71If opened, this pulldown list should now has the right time highlighted.
72Added the possibility to exclude events/todos/journals in a filter. 72Added the possibility to exclude events/todos/journals in a filter.
73You should exclude journals, if you do not want them to sync with a public calendar. 73You should exclude journals, if you do not want them to sync with a public calendar.
74 74
75KA/Pi: 75KA/Pi:
76Added the possibility to in/exclude public/private/confidential contacts to a filter. 76Added the possibility to in/exclude public/private/confidential contacts to a filter.
77If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ... 77If you have already defined filterrules in KA/Pi you have to adjust them all by setting the "include public/private/confidential" property manually. Sorry for that ...
78Added printing of card view and details view on desktop. 78Added printing of card view and details view on desktop.
79Printing of list view is not working... 79Printing of list view is not working...
80Added button for removing pictures in contact editor. 80Added button for removing pictures in contact editor.
81Parsing data fix of KA/Pi version 1.9.17. 81Parsing data fix of KA/Pi version 1.9.17.
82Fixed the "parse name automatically" problem of KA/Pi version 1.9.17. 82Fixed the "parse name automatically" problem of KA/Pi version 1.9.17.
83Fixed some syncing merging problems. 83Fixed some syncing merging problems.
84 84
85 85
86********** VERSION 1.9.17 ************ 86********** VERSION 1.9.17 ************
87 87
88KO/Pi: 88KO/Pi:
89Fixed that tooltips were not updated after moving an item in agenda view. 89Fixed that tooltips were not updated after moving an item in agenda view.
90Fixed a bug in sorting start date for recurring events in list view. 90Fixed a bug in sorting start date for recurring events in list view.
91Changed the left button in todo viewer from "Agenda" to "Set completed". 91Changed the left button in todo viewer from "Agenda" to "Set completed".
92This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View. 92This makes it possible to change a todo in the What's Next View quickly to the completed state without leaving the What's Next View.
93Added more info in the todo viewer: Startdate, parent/sub todos. 93Added more info in the todo viewer: Startdate, parent/sub todos.
94 94
95 95
96KA/Pi: 96KA/Pi:
97All fields search does now actually search all the (possible) fields, 97All fields search does now actually search all the (possible) fields,
98not only those listed in the contact list. 98not only those listed in the contact list.
99Made is possible to inline a picture in a vcard on the Z. 99Made is possible to inline a picture in a vcard on the Z.
100This was only possible on the desktop, now is it possible on the Z as well. 100This was only possible on the desktop, now is it possible on the Z as well.
101Fixed of missing save settings after filter configuration. 101Fixed of missing save settings after filter configuration.
102Made saving of addressbook much faster. 102Made saving of addressbook much faster.
103Fixed extension widget layout problem. 103Fixed extension widget layout problem.
104Fixed saving of default formatted name settings. 104Fixed saving of default formatted name settings.
105Fixed formatted name handling in edit dialog. 105Fixed formatted name handling in edit dialog.
106Added an option for changing formatted names of many contacts 106Added an option for changing formatted names of many contacts
107(menu: File - Change - Set formatted name). 107(menu: File - Change - Set formatted name).
108 108
109QWhatsThis was not working on the Z ( only black rectangle was shown). 109QWhatsThis was not working on the Z ( only black rectangle was shown).
110This is Fixed. 110This is Fixed.
111 111
112KDE-Sync: 112KDE-Sync:
113Now readonly KDE resources are synced as well. 113Now readonly KDE resources are synced as well.
114(They are not changed in KDE itself, of course). 114(They are not changed in KDE itself, of course).
115 115
116 116
117 117
118********** VERSION 1.9.16 ************ 118********** VERSION 1.9.16 ************
119 119
120KO/Pi: 120KO/Pi:
121Fixed search dialog size on Z 6000 (480x640 display). 121Fixed search dialog size on Z 6000 (480x640 display).
122Added setting to hide/show time in agenda items. 122Added setting to hide/show time in agenda items.
123Added setting to hide not running todos in todo view. 123Added setting to hide not running todos in todo view.
124Added columns for start date/time in todo view. 124Added columns for start date/time in todo view.
125Replaced the solid half-hour lines in agenda view by dot lines. 125Replaced the solid half-hour lines in agenda view by dot lines.
126Added possibility of printing the What's Next View on the desktop 126Added possibility of printing the What's Next View on the desktop
127(i.e. Windows and Linux). 127(i.e. Windows and Linux).
128Fixed a crash in KO/Pi when starting KO/Pi with What's Next view. 128Fixed a crash in KO/Pi when starting KO/Pi with What's Next view.
129Added tooltips in month view.(Tooltips only available on desktop) 129Added tooltips in month view.(Tooltips only available on desktop)
130 130
131Fixed a strange problem in KO/Pi alarm applet. 131Fixed a strange problem in KO/Pi alarm applet.
132Did not find the actual problem, 132Did not find the actual problem,
133such that now Qtopia reboots again if deinstalling the alarm applet. 133such that now Qtopia reboots again if deinstalling the alarm applet.
134But the alarm applet should work again. 134But the alarm applet should work again.
135 135
136KA/Pi: 136KA/Pi:
137Fixed the problem, that internal pictures were not saved. 137Fixed the problem, that internal pictures were not saved.
138 138
139Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes. 139Fixed a problem in the pi-sync mode by increasing the timeout for data transfer from 20 seconds to 5 minutes.
140 140
141Fixed some minor problems. (Like word wrap in help text windows). 141Fixed some minor problems. (Like word wrap in help text windows).
142 142
143Fixed a compiling problem in microkde/kresources. 143Fixed a compiling problem in microkde/kresources.
144 144
145KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM. 145KO/Pi is using zdbat (renamed to db2file) for syncing with Sharp DTM.
146This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9) 146This version now includes zdbat 1.0.0 (old version was zdbat 0.2.9)
147such that now syncing KO/Pi with Sharp DTM should work on the 147such that now syncing KO/Pi with Sharp DTM should work on the
148Zaurus C 3000 model. 148Zaurus C 3000 model.
149 149
150********** VERSION 1.9.15 ************ 150********** VERSION 1.9.15 ************
151 151
152Usebilty enhancements in KO/Pi: 152Usebilty enhancements in KO/Pi:
153When clicking on the date in a month view cell, the day view is shown. 153When clicking on the date in a month view cell, the day view is shown.
154Old behaviour was, that the "new event" dialog popped up. 154Old behaviour was, that the "new event" dialog popped up.
155 155
156Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu). 156Added a one step "undo delete" in KO/Pi (Accessable in the "Action" menu).
157That means, you can restore the latest 157That means, you can restore the latest
158event/todo/journal you have deleted. 158event/todo/journal you have deleted.
159A journal is deleted, if you clear all the text of the journal. 159A journal is deleted, if you clear all the text of the journal.
160 160
161Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14. 161Fixed the bug of the editor dialogs in KO/Pi of version 1.9.14.
162 162
163KA/Pi starting in 480x640 resolution: 163KA/Pi starting in 480x640 resolution:
164Hide the filter action in toolbar 164Hide the filter action in toolbar
165and added icons for undo/delete/redo in toolbar. 165and added icons for undo/delete/redo in toolbar.
166 166
167Change in OM/Pi ViewMail dialog: 167Change in OM/Pi ViewMail dialog:
168When clicking on the "delete" icon the mail is deleted after confirmation as usual. 168When clicking on the "delete" icon the mail is deleted after confirmation as usual.
169But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any). 169But the edit dialog is not closed as before, now the next mail in the folder is shown automatically (if there is any).
170 170
171Fixed a crash when deleting mail-accounts in OM/Pi. 171Fixed a crash when deleting mail-accounts in OM/Pi.
172 172
173 173
174********** VERSION 1.9.14 ************ 174********** VERSION 1.9.14 ************
175 175
176Fixed some problems with the dialog sizes when switching 176Fixed some problems with the dialog sizes when switching
177portrait/landscape mode on 640x480 PDA display. 177portrait/landscape mode on 640x480 PDA display.
178 178
179Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi. 179Fixed some other small bugs in KA/Pi KO/Pi and OM/Pi and PwM/Pi.
180 180
181Fixed an ugly bug in KOpieMail: 181Fixed an ugly bug in KOpieMail:
182KOpieMail was not able to write files (mails) to MSDOS file system, 182KOpieMail was not able to write files (mails) to MSDOS file system,
183like on an usual preformatted SD card. That should work now. 183like on an usual preformatted SD card. That should work now.
184To save your mail data on the Sd card do the following: 184To save your mail data on the Sd card do the following:
185Create a dir on the SD card: 185Create a dir on the SD card:
186mkdir /mnt/card/localmail 186mkdir /mnt/card/localmail
187Go to your home dir: 187Go to your home dir:
188cd 188cd
189Go to kopiemail data storage dir: 189Go to kopiemail data storage dir:
190cd kdepim/apps/kopiemail 190cd kdepim/apps/kopiemail
191Create a symlink to the SD card: 191Create a symlink to the SD card:
192ls -s /mnt/card/localmail 192ls -s /mnt/card/localmail
193Now KOpieMail will store all mails on the SD card. 193Now KOpieMail will store all mails on the SD card.
194 194
195KO/Pi Monthview: 195KO/Pi Monthview:
196Now "Go to Today" selects the current month from day 1-end, 196Now "Go to Today" selects the current month from day 1-end,
197not the current date + some days. 197not the current date + some days.
198I.e. "Go to Today" shows now always 198I.e. "Go to Today" shows now always
199the current month with first day of month in the first row. 199the current month with first day of month in the first row.
200 200
201Added missing German translation. 201Added missing German translation.
202 202
203Fixed icons of executeable on Wintendo. 203Fixed icons of executeable on Wintendo.
204 204
205Added a "Show next Mail" button to the OM/Pi 205Added a "Show next Mail" button to the OM/Pi
206mail viewer such that the mail below the current mail 206mail viewer such that the mail below the current mail
207in the mail list view of the current folder 207in the mail list view of the current folder
208can be read with a single click. 208can be read with a single click.
209 209
210 210
211********** VERSION 1.9.13 ************ 211********** VERSION 1.9.13 ************
212 212
213Fixed nasty PwM/Pi file reading bug, when 213Fixed nasty PwM/Pi file reading bug, when
214the used hash algo of file is different then the global 214the used hash algo of file is different then the global
215hash algo. 215hash algo.
216 216
217Added KA/Pi support for opie mailit mailapplication. 217Added KA/Pi support for opie mailit mailapplication.
218 218
219Fixed some bugs in OM/Pi. 219Fixed some bugs in OM/Pi.
220Now character conversion tables are available for the Zaurus 220Now character conversion tables are available for the Zaurus
221to make OM/Pi working properly. 221to make OM/Pi working properly.
222To get the character conversion in OM/Pi working, please download 222To get the character conversion in OM/Pi working, please download
223at the sourceforge project site the package 223at the sourceforge project site the package
224sr-character-conversion_SharpROM_arm.ipk.zip 224sr-character-conversion_SharpROM_arm.ipk.zip
225(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms) 225(or oz-character-conversion_OZ-gcc3xx_arm.ipk.zip for OZ roms)
226from the section "general files for KDE/Pim" 226from the section "general files for KDE/Pim"
227Instructions how to install this package are in a ReadMe in this file. 227Instructions how to install this package are in a ReadMe in this file.
228 228
229 229
230Fixed the orientation change problem in KA/Pi when switching 230Fixed the orientation change problem in KA/Pi when switching
231portrait/landscape mode. 231portrait/landscape mode.
232 232
233French translation available for KA/Pi and OM/Pi. 233French translation available for KA/Pi and OM/Pi.
234 234
235Fixed some problems with categories in KO/Pi in DTM sync. 235Fixed some problems with categories in KO/Pi in DTM sync.
236 236
237Added selection dialog for export to phone in KA/Pi. 237Added selection dialog for export to phone in KA/Pi.
238 238
239If in KO/Pi is an attendee selected to add to a meeting and this 239If in KO/Pi is an attendee selected to add to a meeting and this
240attendee is already in the list of attendees, this person is not added 240attendee is already in the list of attendees, this person is not added
241again. 241again.
242 242
243Some menu cleanup in KA/Pi. 243Some menu cleanup in KA/Pi.
244 244
245********** VERSION 1.9.12 ************ 245********** VERSION 1.9.12 ************
246 246
247Fix for the bug in KO/Pi What's Next view of version 1.9.11. 247Fix for the bug in KO/Pi What's Next view of version 1.9.11.
248 248
249Bugfix: Licence file is now shown again. 249Bugfix: Licence file is now shown again.
250 250
251OM/Pi now supports Unicode (utf8 charset). 251OM/Pi now supports Unicode (utf8 charset).
252Fixed some bugs in OM/Pi. 252Fixed some bugs in OM/Pi.
253 253
254KA/Pi has more German translation. 254KA/Pi has more German translation.
255 255
256 256
257********** VERSION 1.9.11 ************ 257********** VERSION 1.9.11 ************
258 258
259Fixed several problems in PWM/Pi, like 259Fixed several problems in PWM/Pi, like
260asking the user, if unsaved changed are pending 260asking the user, if unsaved changed are pending
261when closing the app. 261when closing the app.
262And PwM/Pi handles now different texts for the 262And PwM/Pi handles now different texts for the
263fields Description, Username, Password, configurable per category. 263fields Description, Username, Password, configurable per category.
264 264
265Fixed a crash in KO/Pi , when importing/loading vcs files 265Fixed a crash in KO/Pi , when importing/loading vcs files
266which have an entry with an attendee with state: 266which have an entry with an attendee with state:
267NEEDS ACTION 267NEEDS ACTION
268 268
269Fixed some problems in the German translation of OM/Pi, 269Fixed some problems in the German translation of OM/Pi,
270which makes some dialogs not fitting on the screen 270which makes some dialogs not fitting on the screen
271of the Z 5500. 271of the Z 5500.
272 272
273Fixed Qtopia crash, when disabling/deinstalling 273Fixed Qtopia crash, when disabling/deinstalling
274KO/Pi alarm applet. 274KO/Pi alarm applet.
275 275
276Implemented direct KDE<->KA/Pi sync for KA/Pi running 276Implemented direct KDE<->KA/Pi sync for KA/Pi running
277on Linux desktop. 277on Linux desktop.
278 278
279Added feature "remove sync info" to sync menu. 279Added feature "remove sync info" to sync menu.
280 280
281Tweaked the KO/Pi What's next view a bit, added 281Tweaked the KO/Pi What's next view a bit, added
282setting to hide events that are done. 282setting to hide events that are done.
283 283
284Disabled "beam receive enabled" on startup to 284Disabled "beam receive enabled" on startup to
285avoid problems if Fastload is enabled. 285avoid problems if Fastload is enabled.
diff --git a/kmicromail/libetpan/mh/mailmh.c b/kmicromail/libetpan/mh/mailmh.c
index 1087ce1..2d1f26d 100644
--- a/kmicromail/libetpan/mh/mailmh.c
+++ b/kmicromail/libetpan/mh/mailmh.c
@@ -668,323 +668,326 @@ int mailmh_folder_get_message_filename(struct mailmh_folder * folder,
668 r = mailmh_folder_update(folder); 668 r = mailmh_folder_update(folder);
669 if (r != MAILMH_NO_ERROR) 669 if (r != MAILMH_NO_ERROR)
670 return r; 670 return r;
671#endif 671#endif
672 672
673 len = strlen(folder->fl_filename) + 20; 673 len = strlen(folder->fl_filename) + 20;
674 filename = malloc(len); 674 filename = malloc(len);
675 if (filename == NULL) 675 if (filename == NULL)
676 return MAILMH_ERROR_MEMORY; 676 return MAILMH_ERROR_MEMORY;
677 677
678 snprintf(filename, len, "%s%c%lu", folder->fl_filename, MAIL_DIR_SEPARATOR, 678 snprintf(filename, len, "%s%c%lu", folder->fl_filename, MAIL_DIR_SEPARATOR,
679 (unsigned long) index); 679 (unsigned long) index);
680 680
681 * result = filename; 681 * result = filename;
682 682
683 return MAILMH_NO_ERROR;; 683 return MAILMH_NO_ERROR;;
684} 684}
685 685
686 686
687int mailmh_folder_get_message_fd(struct mailmh_folder * folder, 687int mailmh_folder_get_message_fd(struct mailmh_folder * folder,
688 uint32_t index, int flags, int * result) 688 uint32_t index, int flags, int * result)
689{ 689{
690 char * filename; 690 char * filename;
691 int fd; 691 int fd;
692 int r; 692 int r;
693 693
694#if 0 694#if 0
695 r = mailmh_folder_update(folder); 695 r = mailmh_folder_update(folder);
696 if (r != MAILMH_NO_ERROR) 696 if (r != MAILMH_NO_ERROR)
697 return r; 697 return r;
698#endif 698#endif
699 699
700 r = mailmh_folder_get_message_filename(folder, index, &filename); 700 r = mailmh_folder_get_message_filename(folder, index, &filename);
701 if (r != MAILMH_NO_ERROR) 701 if (r != MAILMH_NO_ERROR)
702 return r; 702 return r;
703 703
704 fd = open(filename, flags); 704 fd = open(filename, flags);
705 free(filename); 705 free(filename);
706 if (fd == -1) 706 if (fd == -1)
707 return MAILMH_ERROR_MSG_NOT_FOUND; 707 return MAILMH_ERROR_MSG_NOT_FOUND;
708 708
709 * result = fd; 709 * result = fd;
710 710
711 return MAILMH_NO_ERROR; 711 return MAILMH_NO_ERROR;
712} 712}
713 713
714int mailmh_folder_get_message_size(struct mailmh_folder * folder, 714int mailmh_folder_get_message_size(struct mailmh_folder * folder,
715 uint32_t index, size_t * result) 715 uint32_t index, size_t * result)
716{ 716{
717 int r; 717 int r;
718 char * filename; 718 char * filename;
719 struct stat buf; 719 struct stat buf;
720 720
721 r = mailmh_folder_get_message_filename(folder, index, &filename); 721 r = mailmh_folder_get_message_filename(folder, index, &filename);
722 if (r != MAILMH_NO_ERROR) 722 if (r != MAILMH_NO_ERROR)
723 return r; 723 return r;
724 724
725 r = stat(filename, &buf); 725 r = stat(filename, &buf);
726 free(filename); 726 free(filename);
727 if (r < 0) 727 if (r < 0)
728 return MAILMH_ERROR_FILE; 728 return MAILMH_ERROR_FILE;
729 729
730 * result = buf.st_size; 730 * result = buf.st_size;
731 731
732 return MAILMH_NO_ERROR; 732 return MAILMH_NO_ERROR;
733} 733}
734 734
735int mailmh_folder_add_message_uid(struct mailmh_folder * folder, 735int mailmh_folder_add_message_uid(struct mailmh_folder * folder,
736 const char * message, size_t size, 736 const char * message, size_t size,
737 uint32_t * pindex) 737 uint32_t * pindex)
738{ 738{
739 char * tmpname; 739 char * tmpname;
740 int fd; 740 int fd;
741 size_t namesize; 741 size_t namesize;
742 size_t left; 742 size_t left;
743 ssize_t res; 743 ssize_t res;
744 struct mailmh_msg_info * msg_info; 744 struct mailmh_msg_info * msg_info;
745 uint32_t index; 745 uint32_t index;
746 int error; 746 int error;
747 int r; 747 int r;
748 unsigned int array_index; 748 unsigned int array_index;
749 struct stat buf; 749 struct stat buf;
750 chashdatum key; 750 chashdatum key;
751 chashdatum data; 751 chashdatum data;
752 752
753#if 0 753#if 0
754 r = mailmh_folder_update(folder); 754 r = mailmh_folder_update(folder);
755 if (r != MAILMH_NO_ERROR) { 755 if (r != MAILMH_NO_ERROR) {
756 error = r; 756 error = r;
757 goto err; 757 goto err;
758 } 758 }
759#endif 759#endif
760 760
761 namesize = strlen(folder->fl_filename) + 20; 761 namesize = strlen(folder->fl_filename) + 20;
762 tmpname = malloc(namesize); 762 tmpname = malloc(namesize);
763 snprintf(tmpname, namesize, "%s%ctmpXXXXXX", 763 snprintf(tmpname, namesize, "%s%ctmpXXXXXX",
764 folder->fl_filename, MAIL_DIR_SEPARATOR); 764 folder->fl_filename, MAIL_DIR_SEPARATOR);
765 fd = mkstemp(tmpname); 765 fd = mkstemp(tmpname);
766 if (fd < 0) { 766 if (fd < 0) {
767 error = MAILMH_ERROR_FILE; 767 error = MAILMH_ERROR_FILE;
768 goto free; 768 goto free;
769 } 769 }
770 770
771 left = size; 771 left = size;
772 while (left > 0) { 772 while (left > 0) {
773 res = write(fd, message, left); 773 res = write(fd, message, left);
774 if (res == -1) { 774 if (res == -1) {
775 close(fd); 775 close(fd);
776 error = MAILMH_ERROR_FILE; 776 error = MAILMH_ERROR_FILE;
777 goto free; 777 goto free;
778 } 778 }
779 779
780 left -= res; 780 left -= res;
781 } 781 }
782 close(fd); 782 close(fd);
783 783
784 r = stat(tmpname, &buf); 784 r = stat(tmpname, &buf);
785 if (r < 0) { 785 if (r < 0) {
786 error = MAILMH_ERROR_FILE; 786 error = MAILMH_ERROR_FILE;
787 goto free; 787 goto free;
788 } 788 }
789 789
790 r = mailmh_folder_alloc_msg(folder, tmpname, &index); 790 r = mailmh_folder_alloc_msg(folder, tmpname, &index);
791 if (r != MAILMH_NO_ERROR) { 791 if (r != MAILMH_NO_ERROR) {
792 unlink(tmpname); 792 unlink(tmpname);
793 error = MAILMH_ERROR_COULD_NOT_ALLOC_MSG; 793 error = MAILMH_ERROR_COULD_NOT_ALLOC_MSG;
794 goto free; 794 goto free;
795 } 795 }
796 free(tmpname); 796 free(tmpname);
797 797
798 msg_info = mailmh_msg_info_new(index, size, buf.st_mtime); 798 msg_info = mailmh_msg_info_new(index, size, buf.st_mtime);
799 if (msg_info == NULL) { 799 if (msg_info == NULL) {
800 mailmh_folder_remove_message(folder, index); 800 mailmh_folder_remove_message(folder, index);
801 error = MAILMH_ERROR_MEMORY; 801 error = MAILMH_ERROR_MEMORY;
802 goto err; 802 goto err;
803 } 803 }
804 804
805 r = carray_add(folder->fl_msgs_tab, msg_info, &array_index); 805 r = carray_add(folder->fl_msgs_tab, msg_info, &array_index);
806 if (r < 0) { 806 if (r < 0) {
807 mailmh_folder_remove_message(folder, index); 807 mailmh_folder_remove_message(folder, index);
808 mailmh_msg_info_free(msg_info); 808 mailmh_msg_info_free(msg_info);
809 error = MAILMH_ERROR_MEMORY; 809 error = MAILMH_ERROR_MEMORY;
810 goto err; 810 goto err;
811 } 811 }
812 msg_info->msg_array_index = array_index; 812 msg_info->msg_array_index = array_index;
813 813
814#if 0 814#if 0
815 r = cinthash_add(folder->fl_msgs_hash, index, msg_info); 815 r = cinthash_add(folder->fl_msgs_hash, index, msg_info);
816#endif 816#endif
817 key.data = &index; 817 key.data = &index;
818 key.len = sizeof(index); 818 key.len = sizeof(index);
819 data.data = msg_info; 819 data.data = msg_info;
820 data.len = 0; 820 data.len = 0;
821 821
822 if (pindex != NULL) 822 if (pindex != NULL)
823 * pindex = index; 823 * pindex = index;
824 824
825 r = chash_set(folder->fl_msgs_hash, &key, &data, NULL); 825 r = chash_set(folder->fl_msgs_hash, &key, &data, NULL);
826 if (r < 0) { 826 if (r < 0) {
827 carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); 827 carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index);
828 mailmh_msg_info_free(msg_info); 828 mailmh_msg_info_free(msg_info);
829 error = MAILMH_ERROR_MEMORY; 829 error = MAILMH_ERROR_MEMORY;
830 goto err; 830 goto err;
831 } 831 }
832 832
833 return MAILMH_NO_ERROR; 833 return MAILMH_NO_ERROR;
834 834
835 free: 835 free:
836 free(tmpname); 836 free(tmpname);
837 err: 837 err:
838 return error; 838 return error;
839} 839}
840 840
841int mailmh_folder_add_message(struct mailmh_folder * folder, 841int mailmh_folder_add_message(struct mailmh_folder * folder,
842 const char * message, size_t size) 842 const char * message, size_t size)
843{ 843{
844 return mailmh_folder_add_message_uid(folder, message, size, NULL); 844 return mailmh_folder_add_message_uid(folder, message, size, NULL);
845} 845}
846 846
847int mailmh_folder_add_message_file_uid(struct mailmh_folder * folder, 847int mailmh_folder_add_message_file_uid(struct mailmh_folder * folder,
848 int fd, uint32_t * pindex) 848 int fd, uint32_t * pindex)
849{ 849{
850 char * message; 850 char * message;
851 struct stat buf; 851 struct stat buf;
852 int r; 852 int r;
853 853
854#if 0 854#if 0
855 r = mailmh_folder_update(folder); 855 r = mailmh_folder_update(folder);
856 if (r != MAILMH_NO_ERROR) 856 if (r != MAILMH_NO_ERROR)
857 return r; 857 return r;
858#endif 858#endif
859 859
860 if (fstat(fd, &buf) == -1) 860 if (fstat(fd, &buf) == -1)
861 return MAILMH_ERROR_FILE; 861 return MAILMH_ERROR_FILE;
862 862
863 message = mmap(NULL, buf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); 863 message = mmap(NULL, buf.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
864 if (message == MAP_FAILED) 864 if (message == MAP_FAILED)
865 return MAILMH_ERROR_FILE; 865 return MAILMH_ERROR_FILE;
866 866
867 r = mailmh_folder_add_message_uid(folder, message, buf.st_size, pindex); 867 r = mailmh_folder_add_message_uid(folder, message, buf.st_size, pindex);
868 868
869 munmap(message, buf.st_size); 869 munmap(message, buf.st_size);
870 870
871 return r; 871 return r;
872} 872}
873 873
874int mailmh_folder_add_message_file(struct mailmh_folder * folder, 874int mailmh_folder_add_message_file(struct mailmh_folder * folder,
875 int fd) 875 int fd)
876{ 876{
877 return mailmh_folder_add_message_file_uid(folder, fd, NULL); 877 return mailmh_folder_add_message_file_uid(folder, fd, NULL);
878} 878}
879 879
880int mailmh_folder_remove_message(struct mailmh_folder * folder, 880int mailmh_folder_remove_message(struct mailmh_folder * folder,
881 uint32_t index) 881 uint32_t index)
882{ 882{
883 char * filename; 883 char * filename;
884 struct mailmh_msg_info * msg_info; 884 struct mailmh_msg_info * msg_info;
885 int res; 885 int res;
886 int r; 886 int r;
887 chashdatum key; 887 chashdatum key;
888 chashdatum data; 888 chashdatum data;
889 889
890#if 0 890#if 0
891 r = mailmh_folder_update(folder); 891 r = mailmh_folder_update(folder);
892 if (r != MAILMH_NO_ERROR) { 892 if (r != MAILMH_NO_ERROR) {
893 res = r; 893 res = r;
894 goto err; 894 goto err;
895 } 895 }
896#endif 896#endif
897 897
898 r = mailmh_folder_get_message_filename(folder, index, &filename); 898 r = mailmh_folder_get_message_filename(folder, index, &filename);
899 if (filename == NULL) { 899 if (filename == NULL) {
900 res = r; 900 res = r;
901 goto err; 901 goto err;
902 } 902 }
903 903
904 if (unlink(filename) == -1) { 904 if (unlink(filename) == -1) {
905 res = MAILMH_ERROR_FILE; 905 res = MAILMH_ERROR_FILE;
906 goto free; 906 goto free;
907 } 907 }
908 908
909 key.data = &index; 909 key.data = &index;
910 key.len = sizeof(index); 910 key.len = sizeof(index);
911 r = chash_get(folder->fl_msgs_hash, &key, &data); 911 r = chash_get(folder->fl_msgs_hash, &key, &data);
912#if 0 912#if 0
913 msg_info = cinthash_find(folder->fl_msgs_hash, index); 913 msg_info = cinthash_find(folder->fl_msgs_hash, index);
914#endif 914#endif
915 if (r == 0) { 915 if (r == 0) {
916 msg_info = data.data; 916 msg_info = data.data;
917 917
918 carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index); 918 carray_delete_fast(folder->fl_msgs_tab, msg_info->msg_array_index);
919#if 0 919#if 0
920 cinthash_remove(folder->fl_msgs_hash, index); 920 cinthash_remove(folder->fl_msgs_hash, index);
921#endif 921#endif
922 chash_delete(folder->fl_msgs_hash, &key, NULL); 922 chash_delete(folder->fl_msgs_hash, &key, NULL);
923 } 923 }
924 // LR
925 mailmh_msg_info_free( msg_info );
926 free(filename);
924 927
925 return MAILMH_NO_ERROR; 928 return MAILMH_NO_ERROR;
926 929
927 free: 930 free:
928 free(filename); 931 free(filename);
929 err: 932 err:
930 return res; 933 return res;
931} 934}
932 935
933 936
934int mailmh_folder_move_message(struct mailmh_folder * dest_folder, 937int mailmh_folder_move_message(struct mailmh_folder * dest_folder,
935 struct mailmh_folder * src_folder, 938 struct mailmh_folder * src_folder,
936 uint32_t index) 939 uint32_t index)
937{ 940{
938 int fd; 941 int fd;
939 char * filename; 942 char * filename;
940 int r; 943 int r;
941 944
942#if 0 945#if 0
943 r = mailmh_folder_update(dest_folder); 946 r = mailmh_folder_update(dest_folder);
944 if (r != MAILMH_NO_ERROR) 947 if (r != MAILMH_NO_ERROR)
945 return r; 948 return r;
946 r = mailmh_folder_update(src_folder); 949 r = mailmh_folder_update(src_folder);
947 if (r != MAILMH_NO_ERROR) 950 if (r != MAILMH_NO_ERROR)
948 return r; 951 return r;
949#endif 952#endif
950 953
951 /* move on the same filesystem */ 954 /* move on the same filesystem */
952 r = mailmh_folder_get_message_filename(src_folder, index, &filename); 955 r = mailmh_folder_get_message_filename(src_folder, index, &filename);
953 if (r != MAILMH_NO_ERROR) 956 if (r != MAILMH_NO_ERROR)
954 return r; 957 return r;
955 958
956 r = mailmh_folder_alloc_msg(dest_folder, filename, &index); 959 r = mailmh_folder_alloc_msg(dest_folder, filename, &index);
957 free(filename); 960 free(filename);
958 if (r == MAILMH_NO_ERROR) 961 if (r == MAILMH_NO_ERROR)
959 return MAILMH_NO_ERROR; 962 return MAILMH_NO_ERROR;
960 963
961 /* move on the different filesystems */ 964 /* move on the different filesystems */
962 r = mailmh_folder_get_message_fd(src_folder, index, O_RDONLY, &fd); 965 r = mailmh_folder_get_message_fd(src_folder, index, O_RDONLY, &fd);
963 if (r != MAILMH_NO_ERROR) 966 if (r != MAILMH_NO_ERROR)
964 return r; 967 return r;
965 968
966 r = mailmh_folder_add_message_file(dest_folder, fd); 969 r = mailmh_folder_add_message_file(dest_folder, fd);
967 if (r != MAILMH_NO_ERROR) { 970 if (r != MAILMH_NO_ERROR) {
968 close(fd); 971 close(fd);
969 return r; 972 return r;
970 } 973 }
971 974
972 close(fd); 975 close(fd);
973 976
974 r = mailmh_folder_remove_message(src_folder, index); 977 r = mailmh_folder_remove_message(src_folder, index);
975 978
976 return MAILMH_NO_ERROR; 979 return MAILMH_NO_ERROR;
977} 980}
978 981
979unsigned int mailmh_folder_get_message_number(struct mailmh_folder * folder) 982unsigned int mailmh_folder_get_message_number(struct mailmh_folder * folder)
980{ 983{
981 unsigned int i; 984 unsigned int i;
982 unsigned int count; 985 unsigned int count;
983 986
984 count = 0; 987 count = 0;
985 for(i = 0 ; i < carray_count(folder->fl_msgs_tab) ; i ++) 988 for(i = 0 ; i < carray_count(folder->fl_msgs_tab) ; i ++)
986 if (carray_get(folder->fl_msgs_tab, i) != NULL) 989 if (carray_get(folder->fl_msgs_tab, i) != NULL)
987 count ++; 990 count ++;
988 991
989 return count; 992 return count;
990} 993}