Commit d9a9b601 d9a9b601ddbfa36443aa6482c892c5587986dbff by Alain Magloire

attribute.c auth.c header.c io.c locker.c mailbox.c mbx_imap.c

 	mbx_mbox.c mbx_mdir.c mbx_mh.c mbx_mmdf.c mbx_pop.c mbx_unix.c
 	message.c mime.c registrar.c url.c url_file.c url_imap.c
 	url_mail.c url_mbox.c url_mdir.c url_mh.c url_mmdf.c url_pop.c
 	url_unix.c include/private/mailbox0.h
 	include/private/mbx_imap.h include/private/mbx_mbox.h
 	include/private/mbx_mdir.h include/private/mbx_mmdf.h
 	include/private/mbx_pop.h include/private/mbx_unix.h
 	include/private/message0.h include/private/mime0.h
 	include/private/url0.h include/public/attribute.h
 	include/public/auth.h include/public/event.h
 	include/public/header.h include/public/io.h
 	include/public/locker.h include/public/mailbox.h
 	include/public/message.h include/public/mime.h
 	include/public/registrar.h include/public/transcode.h
 	include/public/url.h

changed all the *_init to *_create().
added *_lines() functions
optimisation of the parsing.
1 parent edadcf90
...@@ -15,29 +15,15 @@ ...@@ -15,29 +15,15 @@
15 along with this program; if not, write to the Free Software 15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ 16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
17 17
18 #include <attribute.h> 18 #include <attribute0.h>
19 19
20 #include <sys/types.h> 20 #include <sys/types.h>
21 #include <stdlib.h> 21 #include <stdlib.h>
22 #include <string.h> 22 #include <string.h>
23 #include <errno.h> 23 #include <errno.h>
24 24
25 #define MU_ATTRIBUTE_SEEN ((int)1)
26 #define MU_ATTRIBUTE_ANSWERED (MU_ATTRIBUTE_SEEN << 1)
27 #define MU_ATTRIBUTE_FLAGGED (MU_ATTRIBUTE_ANSWERED << 1)
28 #define MU_ATTRIBUTE_DELETED (MU_ATTRIBUTE_FLAGGED << 1)
29 #define MU_ATTRIBUTE_DRAFT (MU_ATTRIBUTE_DELETED << 1)
30 #define MU_ATTRIBUTE_RECENT (MU_ATTRIBUTE_DRAFT << 1)
31 #define MU_ATTRIBUTE_READ (MU_ATTRIBUTE_RECENT << 1)
32
33 struct _attribute
34 {
35 size_t flag;
36 void *owner;
37 };
38
39 int 25 int
40 attribute_init (attribute_t *pattr, void *owner) 26 attribute_create (attribute_t *pattr, void *owner)
41 { 27 {
42 attribute_t attr; 28 attribute_t attr;
43 if (pattr == NULL || owner == NULL) 29 if (pattr == NULL || owner == NULL)
...@@ -274,7 +260,7 @@ string_to_attribute (const char *buffer, size_t len, ...@@ -274,7 +260,7 @@ string_to_attribute (const char *buffer, size_t len,
274 char *sep; 260 char *sep;
275 int status; 261 int status;
276 262
277 status = attribute_init (pattr, owner); 263 status = attribute_create (pattr, owner);
278 if (status != 0) 264 if (status != 0)
279 return status; 265 return status;
280 266
......
...@@ -32,7 +32,7 @@ struct _auth ...@@ -32,7 +32,7 @@ struct _auth
32 }; 32 };
33 33
34 int 34 int
35 auth_init (auth_t *pauth, void *owner) 35 auth_create (auth_t *pauth, void *owner)
36 { 36 {
37 auth_t auth; 37 auth_t auth;
38 if (pauth == NULL) 38 if (pauth == NULL)
......
...@@ -57,7 +57,7 @@ struct _header ...@@ -57,7 +57,7 @@ struct _header
57 }; 57 };
58 58
59 int 59 int
60 header_init (header_t *ph, const char *blurb, size_t len, void *owner) 60 header_create (header_t *ph, const char *blurb, size_t len, void *owner)
61 { 61 {
62 header_t h; 62 header_t h;
63 int status; 63 int status;
...@@ -66,14 +66,9 @@ header_init (header_t *ph, const char *blurb, size_t len, void *owner) ...@@ -66,14 +66,9 @@ header_init (header_t *ph, const char *blurb, size_t len, void *owner)
66 return ENOMEM; 66 return ENOMEM;
67 h->owner = owner; 67 h->owner = owner;
68 68
69 status = header_parse (h, (char *)blurb, len); 69 header_parse (h, (char *)blurb, len);
70 if (status != 0)
71 {
72 free (h);
73 return status;
74 }
75 70
76 status = stream_init (&(h->stream), h); 71 status = stream_create (&(h->stream), h);
77 if (status != 0) 72 if (status != 0)
78 return status; 73 return status;
79 74
...@@ -132,7 +127,7 @@ header_parse (header_t header, char *blurb, int len) ...@@ -132,7 +127,7 @@ header_parse (header_t header, char *blurb, int len)
132 return 0; 127 return 0;
133 128
134 header->blurb_len = len; 129 header->blurb_len = len;
135 header->blurb = calloc (1, header->blurb_len); 130 header->blurb = calloc (1, header->blurb_len + 1);
136 if (header->blurb == NULL) 131 if (header->blurb == NULL)
137 return ENOMEM; 132 return ENOMEM;
138 memcpy (header->blurb, blurb, header->blurb_len); 133 memcpy (header->blurb, blurb, header->blurb_len);
...@@ -214,6 +209,7 @@ header_parse (header_t header, char *blurb, int len) ...@@ -214,6 +209,7 @@ header_parse (header_t header, char *blurb, int len)
214 header->hdr_count++; 209 header->hdr_count++;
215 } /* for (header_start ...) */ 210 } /* for (header_start ...) */
216 211
212 #if 0
217 header->blurb_len -= len; 213 header->blurb_len -= len;
218 if (header->blurb_len <= 0) 214 if (header->blurb_len <= 0)
219 { 215 {
...@@ -221,6 +217,10 @@ header_parse (header_t header, char *blurb, int len) ...@@ -221,6 +217,10 @@ header_parse (header_t header, char *blurb, int len)
221 free (header->hdr); 217 free (header->hdr);
222 return EINVAL; 218 return EINVAL;
223 } 219 }
220 /* always add the separtor LF */
221 header->blurb [header->blurb_len] = '\n';
222 header->blurb_len++;
223 #endif
224 return 0; 224 return 0;
225 } 225 }
226 226
...@@ -305,7 +305,24 @@ header_entry_count (header_t header, size_t *pnum) ...@@ -305,7 +305,24 @@ header_entry_count (header_t header, size_t *pnum)
305 } 305 }
306 306
307 int 307 int
308 header_get_size (header_t header, size_t *pnum) 308 header_lines (header_t header, size_t *plines)
309 {
310 int n;
311 size_t t = 0;
312 if (header == NULL)
313 return EINVAL;
314 for (n = header->blurb_len - 1; n >= 0; n--)
315 {
316 if (header->blurb[n] == '\n')
317 t++;
318 }
319 if (plines)
320 *plines = t;
321 return 0;
322 }
323
324 int
325 header_size (header_t header, size_t *pnum)
309 { 326 {
310 if (header == NULL) 327 if (header == NULL)
311 return EINVAL; 328 return EINVAL;
......
...@@ -42,6 +42,7 @@ struct _mailbox ...@@ -42,6 +42,7 @@ struct _mailbox
42 char *name; 42 char *name;
43 auth_t auth; 43 auth_t auth;
44 locker_t locker; 44 locker_t locker;
45 netinstance_t netinstance;
45 url_t url; 46 url_t url;
46 47
47 /* register events */ 48 /* register events */
...@@ -53,7 +54,7 @@ struct _mailbox ...@@ -53,7 +54,7 @@ struct _mailbox
53 54
54 /* Public methods */ 55 /* Public methods */
55 56
56 int (*_init) __P ((mailbox_t *, const char *)); 57 int (*_create) __P ((mailbox_t *, const char *));
57 void (*_destroy) __P ((mailbox_t *)); 58 void (*_destroy) __P ((mailbox_t *));
58 59
59 int (*_open) __P ((mailbox_t, int flag)); 60 int (*_open) __P ((mailbox_t, int flag));
...@@ -75,19 +76,8 @@ struct _mailbox ...@@ -75,19 +76,8 @@ struct _mailbox
75 }; 76 };
76 77
77 /* private */ 78 /* private */
78 extern int mailbox_delete __P ((mailbox_t, size_t msgno));
79 extern int mailbox_undelete __P ((mailbox_t, size_t msgno));
80 extern int mailbox_is_deleted __P ((mailbox_t, size_t msgno));
81 extern int mailbox_num_deleted __P ((mailbox_t, size_t *)); 79 extern int mailbox_num_deleted __P ((mailbox_t, size_t *));
82 80
83 extern int mailbox_get_auth __P ((mailbox_t mbox, auth_t *auth));
84 extern int mailbox_set_auth __P ((mailbox_t mbox, auth_t auth));
85 extern int mailbox_get_locker __P ((mailbox_t mbox, locker_t *locker));
86 extern int mailbox_set_locker __P ((mailbox_t mbox, locker_t locker));
87 extern int mailbox_get_attribute __P ((mailbox_t mbox, size_t msgno,
88 attribute_t *attr));
89 extern int mailbox_set_attribute __P ((mailbox_t mbox, size_t msgno,
90 attribute_t attr));
91 extern int mailbox_notification __P ((mailbox_t mbox, size_t type)); 81 extern int mailbox_notification __P ((mailbox_t mbox, size_t type));
92 82
93 83
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
20 20
21 #include <mailbox0.h> 21 #include <mailbox0.h>
22 22
23 extern int mailbox_imap_init __P ((mailbox_t *mbox, const char *name)); 23 extern int mailbox_imap_create __P ((mailbox_t *mbox, const char *name));
24 extern void mailbox_imap_destroy __P ((mailbox_t *mbox)); 24 extern void mailbox_imap_destroy __P ((mailbox_t *mbox));
25 25
26 extern struct mailbox_type _mailbox_imap_type; 26 extern struct mailbox_type _mailbox_imap_type;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
20 20
21 #include <mailbox.h> 21 #include <mailbox.h>
22 22
23 extern int mailbox_mbox_init __P ((mailbox_t *mbox, const char *name)); 23 extern int mailbox_mbox_create __P ((mailbox_t *mbox, const char *name));
24 extern void mailbox_mbox_destroy __P ((mailbox_t *mbox)); 24 extern void mailbox_mbox_destroy __P ((mailbox_t *mbox));
25 25
26 extern struct mailbox_type _mailbox_mbox_type; 26 extern struct mailbox_type _mailbox_mbox_type;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
20 20
21 #include <mailbox0.h> 21 #include <mailbox0.h>
22 22
23 extern int mailbox_maildir_init __P ((mailbox_t *mbox, const char *name)); 23 extern int mailbox_maildir_create __P ((mailbox_t *mbox, const char *name));
24 extern void mailbox_maildir_destroy __P ((mailbox_t *mbox)); 24 extern void mailbox_maildir_destroy __P ((mailbox_t *mbox));
25 25
26 extern struct mailbox_type _mailbox_maildir_type; 26 extern struct mailbox_type _mailbox_maildir_type;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
20 20
21 #include <mailbox0.h> 21 #include <mailbox0.h>
22 22
23 extern int mailbox_mmdf_init __P ((mailbox_t *mbox, const char *name)); 23 extern int mailbox_mmdf_create __P ((mailbox_t *mbox, const char *name));
24 extern void mailbox_mmdf_destroy __P ((mailbox_t *mbox)); 24 extern void mailbox_mmdf_destroy __P ((mailbox_t *mbox));
25 25
26 extern struct mailbox_type _mailbox_mmdf_type; 26 extern struct mailbox_type _mailbox_mmdf_type;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
20 20
21 #include <mailbox0.h> 21 #include <mailbox0.h>
22 22
23 extern int mailbox_pop_init __P ((mailbox_t *mbox, const char *name)); 23 extern int mailbox_pop_create __P ((mailbox_t *mbox, const char *name));
24 extern void mailbox_pop_destroy __P ((mailbox_t *mbox)); 24 extern void mailbox_pop_destroy __P ((mailbox_t *mbox));
25 25
26 extern struct mailbox_type _mailbox_pop_type; 26 extern struct mailbox_type _mailbox_pop_type;
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
24 extern "C" { 24 extern "C" {
25 #endif 25 #endif
26 26
27 extern int mailbox_unix_init __P ((mailbox_t *mbox, const char *name)); 27 extern int mailbox_unix_create __P ((mailbox_t *mbox, const char *name));
28 extern void mailbox_unix_destroy __P ((mailbox_t *mbox)); 28 extern void mailbox_unix_destroy __P ((mailbox_t *mbox));
29 29
30 extern struct mailbox_type _mailbox_unix_type; 30 extern struct mailbox_type _mailbox_unix_type;
......
...@@ -39,20 +39,6 @@ extern "C" { ...@@ -39,20 +39,6 @@ extern "C" {
39 # endif 39 # endif
40 #endif /*__P */ 40 #endif /*__P */
41 41
42 /* The notion of body_t is not exported outside,
43 * there was no need for yet another object.
44 * since only floating messages need them. The functions
45 * that manipulate those objects are static to message.c
46 *
47 */
48 struct _body
49 {
50 FILE *file;
51 void *owner;
52 };
53
54 typedef struct _body * body_t;
55
56 /* forward declaration */ 42 /* forward declaration */
57 struct _message 43 struct _message
58 { 44 {
...@@ -79,9 +65,9 @@ struct _message ...@@ -79,9 +65,9 @@ struct _message
79 int (*_get_stream) __P ((message_t msg, stream_t *)); 65 int (*_get_stream) __P ((message_t msg, stream_t *));
80 int (*_set_stream) __P ((message_t msg, stream_t, void *owner)); 66 int (*_set_stream) __P ((message_t msg, stream_t, void *owner));
81 67
82 int (*_size) __P ((message_t msg, size_t *size)); 68 int (*_from) __P ((message_t msg, char *, size_t, size_t *));
69 int (*_received) __P ((message_t msg, char *, size_t, size_t *));
83 70
84 int (*_clone) __P ((message_t msg, message_t *cmsg));
85 }; 71 };
86 72
87 #ifdef _cplusplus 73 #ifdef _cplusplus
......
...@@ -81,6 +81,7 @@ struct _mime ...@@ -81,6 +81,7 @@ struct _mime
81 81
82 struct _mime_part 82 struct _mime_part
83 { 83 {
84 char sig[4];
84 mime_t mime; 85 mime_t mime;
85 header_t hdr; 86 header_t hdr;
86 message_t msg; 87 message_t msg;
......
...@@ -47,7 +47,7 @@ struct _url ...@@ -47,7 +47,7 @@ struct _url
47 47
48 void *data; 48 void *data;
49 49
50 int (*_init) __P ((url_t *url, const char *name)); 50 int (*_create) __P ((url_t *url, const char *name));
51 void (*_destroy) __P ((url_t *url)); 51 void (*_destroy) __P ((url_t *url));
52 52
53 /* Methods */ 53 /* Methods */
......
...@@ -35,7 +35,7 @@ extern "C" { ...@@ -35,7 +35,7 @@ extern "C" {
35 struct _attribute; 35 struct _attribute;
36 typedef struct _attribute * attribute_t; 36 typedef struct _attribute * attribute_t;
37 37
38 extern int attribute_init __P ((attribute_t *, void *owner)); 38 extern int attribute_create __P ((attribute_t *, void *owner));
39 extern void attribute_destroy __P ((attribute_t *, void *owner)); 39 extern void attribute_destroy __P ((attribute_t *, void *owner));
40 40
41 extern int attribute_is_seen __P ((attribute_t)); 41 extern int attribute_is_seen __P ((attribute_t));
......
...@@ -36,7 +36,7 @@ extern "C" { ...@@ -36,7 +36,7 @@ extern "C" {
36 struct _auth; 36 struct _auth;
37 typedef struct _auth *auth_t; 37 typedef struct _auth *auth_t;
38 38
39 extern int auth_init __P ((auth_t *, void *owner)); 39 extern int auth_create __P ((auth_t *, void *owner));
40 extern void auth_destroy __P ((auth_t *, void *owner)); 40 extern void auth_destroy __P ((auth_t *, void *owner));
41 41
42 extern int auth_prologue __P ((auth_t)); 42 extern int auth_prologue __P ((auth_t));
......
...@@ -67,7 +67,7 @@ extern "C" { ...@@ -67,7 +67,7 @@ extern "C" {
67 struct _header; 67 struct _header;
68 typedef struct _header * header_t; 68 typedef struct _header * header_t;
69 69
70 extern int header_init __P ((header_t *, const char *blurb, 70 extern int header_create __P ((header_t *, const char *blurb,
71 size_t ln, void *owner)); 71 size_t ln, void *owner));
72 extern void header_destroy __P ((header_t *, void *owner)); 72 extern void header_destroy __P ((header_t *, void *owner));
73 73
...@@ -81,7 +81,8 @@ extern int header_entry_name __P ((header_t, size_t num, char *buf, ...@@ -81,7 +81,8 @@ extern int header_entry_name __P ((header_t, size_t num, char *buf,
81 extern int header_entry_value __P ((header_t, size_t num, char *buf, 81 extern int header_entry_value __P ((header_t, size_t num, char *buf,
82 size_t buflen, size_t *total)); 82 size_t buflen, size_t *total));
83 extern int header_get_stream __P ((header_t, stream_t *stream)); 83 extern int header_get_stream __P ((header_t, stream_t *stream));
84 extern int header_get_size __P ((header_t, size_t *size)); 84 extern int header_size __P ((header_t, size_t *size));
85 extern int header_lines __P ((header_t, size_t *lines));
85 86
86 #ifdef _cplusplus 87 #ifdef _cplusplus
87 } 88 }
......
...@@ -35,7 +35,7 @@ extern "C" { /*}*/ ...@@ -35,7 +35,7 @@ extern "C" { /*}*/
35 struct _stream; 35 struct _stream;
36 typedef struct _stream *stream_t; 36 typedef struct _stream *stream_t;
37 37
38 extern int stream_init __P ((stream_t *, void *owner)); 38 extern int stream_create __P ((stream_t *, void *owner));
39 extern void stream_destroy __P ((stream_t *, void *owner)); 39 extern void stream_destroy __P ((stream_t *, void *owner));
40 40
41 extern int stream_set_fd __P ((stream_t, 41 extern int stream_set_fd __P ((stream_t,
......
...@@ -35,7 +35,7 @@ extern "C" { ...@@ -35,7 +35,7 @@ extern "C" {
35 struct _locker; 35 struct _locker;
36 typedef struct _locker *locker_t; 36 typedef struct _locker *locker_t;
37 37
38 extern int locker_init __P ((locker_t *, char *filename, 38 extern int locker_create __P ((locker_t *, char *filename,
39 size_t len, int flags)); 39 size_t len, int flags));
40 extern void locker_destroy __P ((locker_t *)); 40 extern void locker_destroy __P ((locker_t *));
41 41
......
...@@ -18,13 +18,14 @@ ...@@ -18,13 +18,14 @@
18 #ifndef _MAILBOX_H 18 #ifndef _MAILBOX_H
19 # define _MAILBOX_H 19 # define _MAILBOX_H
20 20
21 #include <sys/types.h>
22
23 #include <url.h> 21 #include <url.h>
24 #include <message.h> 22 #include <message.h>
25 #include <attribute.h> 23 #include <attribute.h>
26 #include <auth.h> 24 #include <auth.h>
27 #include <locker.h> 25 #include <locker.h>
26 #include <net.h>
27
28 #include <sys/types.h>
28 29
29 #ifdef __cplusplus 30 #ifdef __cplusplus
30 extern "C" { 31 extern "C" {
...@@ -43,7 +44,7 @@ struct _mailbox; ...@@ -43,7 +44,7 @@ struct _mailbox;
43 typedef struct _mailbox *mailbox_t; 44 typedef struct _mailbox *mailbox_t;
44 45
45 /* constructor/destructor and possible types */ 46 /* constructor/destructor and possible types */
46 extern int mailbox_init __P ((mailbox_t *, const char *, int id)); 47 extern int mailbox_create __P ((mailbox_t *, const char *, int id));
47 extern void mailbox_destroy __P ((mailbox_t *)); 48 extern void mailbox_destroy __P ((mailbox_t *));
48 49
49 /* flags for mailbox_open () */ 50 /* flags for mailbox_open () */
...@@ -63,6 +64,10 @@ extern int mailbox_append_message __P ((mailbox_t, message_t msg)); ...@@ -63,6 +64,10 @@ extern int mailbox_append_message __P ((mailbox_t, message_t msg));
63 extern int mailbox_messages_count __P ((mailbox_t, size_t *num)); 64 extern int mailbox_messages_count __P ((mailbox_t, size_t *num));
64 extern int mailbox_expunge __P ((mailbox_t)); 65 extern int mailbox_expunge __P ((mailbox_t));
65 66
67 /* netinstance settings */
68 extern int mailbox_get_netinstance __P ((mailbox_t, netinstance_t *net));
69 extern int mailbox_set_netinstance __P ((mailbox_t, netinstance_t net));
70
66 /* Lock settings */ 71 /* Lock settings */
67 extern int mailbox_get_locker __P ((mailbox_t, locker_t *locker)); 72 extern int mailbox_get_locker __P ((mailbox_t, locker_t *locker));
68 extern int mailbox_set_locker __P ((mailbox_t, locker_t locker)); 73 extern int mailbox_set_locker __P ((mailbox_t, locker_t locker));
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
19 #define _MESSAGE_H 19 #define _MESSAGE_H
20 20
21 #include <header.h> 21 #include <header.h>
22 #include <body.h>
22 #include <attribute.h> 23 #include <attribute.h>
23 #include <io.h> 24 #include <io.h>
24 25
...@@ -48,24 +49,38 @@ typedef struct _message *message_t; ...@@ -48,24 +49,38 @@ typedef struct _message *message_t;
48 * was enough. 49 * was enough.
49 */ 50 */
50 51
51 extern int message_init __P ((message_t *, void *owner)); 52 extern int message_create __P ((message_t *, void *owner));
52 extern void message_destroy __P ((message_t *, void *owner)); 53 extern void message_destroy __P ((message_t *, void *owner));
53 54
54 extern int message_get_header __P ((message_t, header_t *)); 55 extern int message_get_header __P ((message_t, header_t *));
55 extern int message_set_header __P ((message_t, header_t, void *owner)); 56 extern int message_set_header __P ((message_t, header_t, void *owner));
56 57
58 extern int message_get_body __P ((message_t, body_t *));
59 extern int message_set_body __P ((message_t, body_t, void *owner));
60
57 extern int message_get_stream __P ((message_t, stream_t *)); 61 extern int message_get_stream __P ((message_t, stream_t *));
58 extern int message_set_stream __P ((message_t, stream_t, void *owner));
59 62
60 extern int message_is_multipart __P ((message_t)); 63 extern int message_is_multipart __P ((message_t));
61 64
62 extern int message_get_size __P ((message_t, size_t *)); 65 extern int message_size __P ((message_t, size_t *));
63 extern int message_set_size __P ((message_t, size_t, void *owner)); 66 extern int message_lines __P ((message_t, size_t *));
67
68 extern int message_from __P ((message_t, char *, size_t, size_t *));
69 extern int message_set_from __P ((message_t,
70 int (*_from) __P ((message_t, char *,
71 size_t, size_t *)),
72 void *owner));
73 extern int message_received __P ((message_t, char *, size_t, size_t *));
74 extern int message_set_received __P ((message_t,
75 int (*_received) __P ((message_t,
76 char *, size_t,
77 size_t *)),
78 void *owner));
64 79
65 extern int message_get_attribute __P ((message_t, attribute_t *)); 80 extern int message_get_attribute __P ((message_t, attribute_t *));
66 extern int message_set_attribute __P ((message_t, attribute_t, void *owner)); 81 extern int message_set_attribute __P ((message_t, attribute_t, void *owner));
67 82
68 extern int message_clone __P ((message_t)); 83 //extern int message_clone __P ((message_t));
69 84
70 /* events */ 85 /* events */
71 #define MU_EVT_MSG_DESTROY 32 86 #define MU_EVT_MSG_DESTROY 32
......
...@@ -41,7 +41,7 @@ extern "C" { ...@@ -41,7 +41,7 @@ extern "C" {
41 struct _mime; 41 struct _mime;
42 typedef struct _mime *mime_t; 42 typedef struct _mime *mime_t;
43 43
44 int mime_init __P ((mime_t *pmime, message_t msg, int flags)); 44 int mime_create __P ((mime_t *pmime, message_t msg, int flags));
45 void mime_destroy __P ((mime_t *pmime)); 45 void mime_destroy __P ((mime_t *pmime));
46 int mime_is_multi_part __P ((mime_t mime)); 46 int mime_is_multi_part __P ((mime_t mime));
47 int mime_get_part __P ((mime_t mime, int part, message_t *msg)); 47 int mime_get_part __P ((mime_t mime, int part, message_t *msg));
......
...@@ -38,14 +38,14 @@ extern "C" { ...@@ -38,14 +38,14 @@ extern "C" {
38 struct url_registrar 38 struct url_registrar
39 { 39 {
40 const char *scheme; 40 const char *scheme;
41 int (*_init) __P ((url_t *, const char * name)); 41 int (*_create) __P ((url_t *, const char * name));
42 void (*_destroy) __P ((url_t *)); 42 void (*_destroy) __P ((url_t *));
43 }; 43 };
44 44
45 struct mailbox_registrar 45 struct mailbox_registrar
46 { 46 {
47 const char *name; 47 const char *name;
48 int (*_init) __P ((mailbox_t *, const char *name)); 48 int (*_create) __P ((mailbox_t *, const char *name));
49 void (*_destroy) __P ((mailbox_t *)); 49 void (*_destroy) __P ((mailbox_t *));
50 }; 50 };
51 51
......
...@@ -44,7 +44,7 @@ struct _transcoder ...@@ -44,7 +44,7 @@ struct _transcoder
44 void *tcdata; 44 void *tcdata;
45 }; 45 };
46 46
47 extern int transcode_init __P ((transcoder_t *, char *encoding)); 47 extern int transcode_create __P ((transcoder_t *, char *encoding));
48 extern void transcode_destroy __P ((transcoder_t *)); 48 extern void transcode_destroy __P ((transcoder_t *));
49 extern int transcode_get_stream __P ((transcoder_t tc, stream_t *pis)); 49 extern int transcode_get_stream __P ((transcoder_t tc, stream_t *pis));
50 extern int transcode_set_stream __P ((transcoder_t tc, stream_t is)); 50 extern int transcode_set_stream __P ((transcoder_t tc, stream_t is));
......
...@@ -36,7 +36,7 @@ extern "C" { ...@@ -36,7 +36,7 @@ extern "C" {
36 struct _url; 36 struct _url;
37 typedef struct _url * url_t; 37 typedef struct _url * url_t;
38 38
39 extern int url_init __P ((url_t *, const char *name)); 39 extern int url_create __P ((url_t *, const char *name));
40 extern void url_destroy __P ((url_t *)); 40 extern void url_destroy __P ((url_t *));
41 41
42 extern int url_get_id __P ((const url_t, int *id)); 42 extern int url_get_id __P ((const url_t, int *id));
......
...@@ -22,7 +22,7 @@ ...@@ -22,7 +22,7 @@
22 #include <stdio.h> 22 #include <stdio.h>
23 23
24 int 24 int
25 stream_init (stream_t *pstream, void *owner) 25 stream_create (stream_t *pstream, void *owner)
26 { 26 {
27 stream_t stream; 27 stream_t stream;
28 if (pstream == NULL || owner == NULL) 28 if (pstream == NULL || owner == NULL)
......
...@@ -45,7 +45,7 @@ struct _locker ...@@ -45,7 +45,7 @@ struct _locker
45 }; 45 };
46 46
47 int 47 int
48 locker_init (locker_t *plocker, char *filename, size_t len, int flags) 48 locker_create (locker_t *plocker, char *filename, size_t len, int flags)
49 { 49 {
50 locker_t l; 50 locker_t l;
51 51
......
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
23 #include <message0.h> 23 #include <message0.h>
24 #include <registrar.h> 24 #include <registrar.h>
25 #include <locker.h> 25 #include <locker.h>
26 #include <net.h>
26 27
27 #include <stdlib.h> 28 #include <stdlib.h>
28 #include <string.h> 29 #include <string.h>
...@@ -32,23 +33,23 @@ ...@@ -32,23 +33,23 @@
32 * Point of entry. 33 * Point of entry.
33 * Simple, first check if they ask for something specific; with the ID. 34 * Simple, first check if they ask for something specific; with the ID.
34 * Then try to discover the type of mailbox with the url(name). 35 * Then try to discover the type of mailbox with the url(name).
35 * Then we call the appropriate mailbox_*type*_init() function. 36 * Then we call the appropriate mailbox_*type*_create() function.
36 */ 37 */
37 int 38 int
38 mailbox_init (mailbox_t *pmbox, const char *name, int id) 39 mailbox_create (mailbox_t *pmbox, const char *name, int id)
39 { 40 {
40 int status = EINVAL; 41 int status = EINVAL;
41 struct mailbox_registrar *mreg; 42 struct mailbox_registrar *mreg;
42 url_t url = NULL; 43 url_t url = NULL;
43 44
44 url_init (&url, name); 45 url_create (&url, name);
45 46
46 /* 1st guest: if an ID is specify, shortcut */ 47 /* 1st guest: if an ID is specify, shortcut */
47 if (id) 48 if (id)
48 { 49 {
49 status = registrar_get (id, NULL, &mreg); 50 status = registrar_get (id, NULL, &mreg);
50 if (status == 0) 51 if (status == 0)
51 status = mreg->_init (pmbox, name); 52 status = mreg->_create (pmbox, name);
52 } 53 }
53 /* 2nd fallback: Use the URL */ 54 /* 2nd fallback: Use the URL */
54 else if (url != NULL) 55 else if (url != NULL)
...@@ -56,7 +57,7 @@ mailbox_init (mailbox_t *pmbox, const char *name, int id) ...@@ -56,7 +57,7 @@ mailbox_init (mailbox_t *pmbox, const char *name, int id)
56 url_get_id (url, &id); 57 url_get_id (url, &id);
57 status = registrar_get (id, NULL, &mreg); 58 status = registrar_get (id, NULL, &mreg);
58 if (status == 0) 59 if (status == 0)
59 status = mreg->_init (pmbox, name); 60 status = mreg->_create (pmbox, name);
60 } 61 }
61 62
62 /* set the URL */ 63 /* set the URL */
...@@ -189,6 +190,24 @@ mailbox_get_auth (mailbox_t mbox, auth_t *pauth) ...@@ -189,6 +190,24 @@ mailbox_get_auth (mailbox_t mbox, auth_t *pauth)
189 } 190 }
190 191
191 int 192 int
193 mailbox_set_netinstance (mailbox_t mbox, netinstance_t netinstance)
194 {
195 if (mbox == NULL)
196 return EINVAL;
197 mbox->netinstance = netinstance;
198 return 0;
199 }
200
201 int
202 mailbox_get_netinstance (mailbox_t mbox, netinstance_t *pnetinstance)
203 {
204 if (mbox == NULL || pnetinstance == NULL)
205 return EINVAL;
206 *pnetinstance = mbox->netinstance;
207 return 0;
208 }
209
210 int
192 mailbox_register (mailbox_t mbox, size_t type, 211 mailbox_register (mailbox_t mbox, size_t type,
193 int (*action) (size_t type, void *arg), 212 int (*action) (size_t type, void *arg),
194 void *arg) 213 void *arg)
......
...@@ -20,13 +20,13 @@ ...@@ -20,13 +20,13 @@
20 #include <errno.h> 20 #include <errno.h>
21 21
22 22
23 static int mailbox_imap_init (mailbox_t *mbox, const char *name); 23 static int mailbox_imap_create (mailbox_t *mbox, const char *name);
24 static void mailbox_imap_destroy (mailbox_t *mbox); 24 static void mailbox_imap_destroy (mailbox_t *mbox);
25 25
26 struct mailbox_registrar _mailbox_imap_registrar = 26 struct mailbox_registrar _mailbox_imap_registrar =
27 { 27 {
28 "IMAP4", 28 "IMAP4",
29 mailbox_imap_init, mailbox_imap_destroy 29 mailbox_imap_create, mailbox_imap_destroy
30 }; 30 };
31 31
32 void 32 void
...@@ -37,7 +37,7 @@ mailbox_imap_destroy (mailbox_t *mbox) ...@@ -37,7 +37,7 @@ mailbox_imap_destroy (mailbox_t *mbox)
37 } 37 }
38 38
39 int 39 int
40 mailbox_imap_init (mailbox_t *mbox, const char *name) 40 mailbox_imap_create (mailbox_t *mbox, const char *name)
41 { 41 {
42 (void)mbox; (void)name; 42 (void)mbox; (void)name;
43 return ENOSYS; 43 return ENOSYS;
......
...@@ -22,13 +22,13 @@ ...@@ -22,13 +22,13 @@
22 #include <errno.h> 22 #include <errno.h>
23 #include <sys/stat.h> 23 #include <sys/stat.h>
24 24
25 static int mailbox_mbox_init (mailbox_t *mbox, const char *name); 25 static int mailbox_mbox_create (mailbox_t *mbox, const char *name);
26 static void mailbox_mbox_destroy (mailbox_t *mbox); 26 static void mailbox_mbox_destroy (mailbox_t *mbox);
27 27
28 struct mailbox_registrar _mailbox_mbox_registrar = 28 struct mailbox_registrar _mailbox_mbox_registrar =
29 { 29 {
30 "UNIX_MBOX/Maildir/MMDF", 30 "UNIX_MBOX/Maildir/MMDF",
31 mailbox_mbox_init, mailbox_mbox_destroy 31 mailbox_mbox_create, mailbox_mbox_destroy
32 }; 32 };
33 33
34 /* 34 /*
...@@ -45,7 +45,7 @@ struct mailbox_registrar _mailbox_mbox_registrar = ...@@ -45,7 +45,7 @@ struct mailbox_registrar _mailbox_mbox_registrar =
45 */ 45 */
46 46
47 static int 47 static int
48 mailbox_mbox_init (mailbox_t *mbox, const char *name) 48 mailbox_mbox_create (mailbox_t *mbox, const char *name)
49 { 49 {
50 struct stat st; 50 struct stat st;
51 size_t len; 51 size_t len;
...@@ -69,7 +69,7 @@ mailbox_mbox_init (mailbox_t *mbox, const char *name) ...@@ -69,7 +69,7 @@ mailbox_mbox_init (mailbox_t *mbox, const char *name)
69 * For the default is unix if the file does not exist. 69 * For the default is unix if the file does not exist.
70 */ 70 */
71 if (stat (name, &st) < 0) 71 if (stat (name, &st) < 0)
72 return _mailbox_unix_registrar._init (mbox, name); 72 return _mailbox_unix_registrar._create (mbox, name);
73 73
74 if (S_ISREG (st.st_mode)) 74 if (S_ISREG (st.st_mode))
75 { 75 {
...@@ -101,7 +101,7 @@ mailbox_mbox_init (mailbox_t *mbox, const char *name) ...@@ -101,7 +101,7 @@ mailbox_mbox_init (mailbox_t *mbox, const char *name)
101 if (count == 0) /*empty file*/ 101 if (count == 0) /*empty file*/
102 { 102 {
103 close (fd); 103 close (fd);
104 return _mailbox_unix_registrar._init (mbox, name); 104 return _mailbox_unix_registrar._create (mbox, name);
105 } 105 }
106 106
107 if (count >= 5) 107 if (count >= 5)
...@@ -110,18 +110,18 @@ mailbox_mbox_init (mailbox_t *mbox, const char *name) ...@@ -110,18 +110,18 @@ mailbox_mbox_init (mailbox_t *mbox, const char *name)
110 { 110 {
111 /* This is a Unix Mbox */ 111 /* This is a Unix Mbox */
112 close (fd); 112 close (fd);
113 return _mailbox_unix_registrar._init (mbox, name); 113 return _mailbox_unix_registrar._create (mbox, name);
114 } 114 }
115 } 115 }
116 116
117 /* Try MMDF */ 117 /* Try MMDF */
118 close (fd); 118 close (fd);
119 #endif 119 #endif
120 return _mailbox_unix_registrar._init (mbox, name); 120 return _mailbox_unix_registrar._create (mbox, name);
121 } 121 }
122 /* Is that true ? Are all directories Maildir ?? */ 122 /* Is that true ? Are all directories Maildir ?? */
123 else if (S_ISDIR (st.st_mode)) 123 else if (S_ISDIR (st.st_mode))
124 return _mailbox_maildir_registrar._init (mbox, name); 124 return _mailbox_maildir_registrar._create (mbox, name);
125 125
126 /* Why can't a mailbox be FIFO ? or a DOOR/Portal ??? */ 126 /* Why can't a mailbox be FIFO ? or a DOOR/Portal ??? */
127 return EINVAL; 127 return EINVAL;
......
...@@ -19,17 +19,17 @@ ...@@ -19,17 +19,17 @@
19 #include <registrar0.h> 19 #include <registrar0.h>
20 #include <errno.h> 20 #include <errno.h>
21 21
22 static int mailbox_maildir_init (mailbox_t *mbox, const char *name); 22 static int mailbox_maildir_create (mailbox_t *mbox, const char *name);
23 static void mailbox_maildir_destroy (mailbox_t *mbox); 23 static void mailbox_maildir_destroy (mailbox_t *mbox);
24 24
25 struct mailbox_registrar _mailbox_maildir_registrar = 25 struct mailbox_registrar _mailbox_maildir_registrar =
26 { 26 {
27 "MAILDIR", 27 "MAILDIR",
28 mailbox_maildir_init, mailbox_maildir_destroy 28 mailbox_maildir_create, mailbox_maildir_destroy
29 }; 29 };
30 30
31 int 31 int
32 mailbox_maildir_init (mailbox_t *mbox, const char *name) 32 mailbox_maildir_create (mailbox_t *mbox, const char *name)
33 { 33 {
34 (void)mbox; (void)name; 34 (void)mbox; (void)name;
35 return ENOSYS; 35 return ENOSYS;
......
...@@ -27,13 +27,13 @@ ...@@ -27,13 +27,13 @@
27 #include <stdlib.h> 27 #include <stdlib.h>
28 #include <ctype.h> 28 #include <ctype.h>
29 29
30 static int mailbox_mh_init (mailbox_t *pmbox, const char *name); 30 static int mailbox_mh_create (mailbox_t *pmbox, const char *name);
31 static void mailbox_mh_destroy (mailbox_t *pmbox); 31 static void mailbox_mh_destroy (mailbox_t *pmbox);
32 32
33 struct mailbox_registrar _mailbox_mh_registrar = 33 struct mailbox_registrar _mailbox_mh_registrar =
34 { 34 {
35 "MH", 35 "MH",
36 mailbox_mh_init, mailbox_mh_destroy 36 mailbox_mh_create, mailbox_mh_destroy
37 }; 37 };
38 38
39 typedef struct _mh_data 39 typedef struct _mh_data
...@@ -43,11 +43,11 @@ typedef struct _mh_data ...@@ -43,11 +43,11 @@ typedef struct _mh_data
43 43
44 static int mh_open (mailbox_t mbox, int flags); 44 static int mh_open (mailbox_t mbox, int flags);
45 static int mh_close (mailbox_t mbox); 45 static int mh_close (mailbox_t mbox);
46 static int mh_scan (mailbox_t mbox, size_t *msgs); 46 static int mh_scan (mailbox_t mbox, size_t msgno, size_t *msgs);
47 static int mh_sequence(const char *name); 47 static int mh_sequence(const char *name);
48 48
49 static int 49 static int
50 mailbox_mh_init (mailbox_t *pmbox, const char *name) 50 mailbox_mh_create (mailbox_t *pmbox, const char *name)
51 { 51 {
52 mailbox_t mbox; 52 mailbox_t mbox;
53 mh_data *data; 53 mh_data *data;
...@@ -57,10 +57,11 @@ mailbox_mh_init (mailbox_t *pmbox, const char *name) ...@@ -57,10 +57,11 @@ mailbox_mh_init (mailbox_t *pmbox, const char *name)
57 mbox->name = malloc(strlen(name) + 1); 57 mbox->name = malloc(strlen(name) + 1);
58 strcpy(mbox->name, name); 58 strcpy(mbox->name, name);
59 mbox->data = data; 59 mbox->data = data;
60 mbox->_init = mailbox_mh_init; 60 mbox->_create = mailbox_mh_create;
61 mbox->_destroy = mailbox_mh_destroy; 61 mbox->_destroy = mailbox_mh_destroy;
62 mbox->_open = mh_open; 62 mbox->_open = mh_open;
63 mbox->_close = mh_close; 63 mbox->_close = mh_close;
64 mbox->_scan = mh_scan;
64 *pmbox = mbox; 65 *pmbox = mbox;
65 66
66 return 0; 67 return 0;
...@@ -110,7 +111,7 @@ mh_close (mailbox_t mbox) ...@@ -110,7 +111,7 @@ mh_close (mailbox_t mbox)
110 } 111 }
111 112
112 static int 113 static int
113 mh_scan (mailbox_t mbox, size_t *msgs) 114 mh_scan (mailbox_t mbox, size_t msgno, size_t *msgs)
114 { 115 {
115 struct stat st; 116 struct stat st;
116 DIR *maildir; 117 DIR *maildir;
...@@ -119,6 +120,8 @@ mh_scan (mailbox_t mbox, size_t *msgs) ...@@ -119,6 +120,8 @@ mh_scan (mailbox_t mbox, size_t *msgs)
119 unsigned int count = 0; 120 unsigned int count = 0;
120 int parse_sequence_file = 0; 121 int parse_sequence_file = 0;
121 122
123 (void)msgno;
124
122 data = mbox->data; 125 data = mbox->data;
123 126
124 maildir = opendir(mbox->name); 127 maildir = opendir(mbox->name);
......
...@@ -20,17 +20,17 @@ ...@@ -20,17 +20,17 @@
20 20
21 #include <errno.h> 21 #include <errno.h>
22 22
23 static int mailbox_mmdf_init (mailbox_t *mbox, const char *name); 23 static int mailbox_mmdf_create (mailbox_t *mbox, const char *name);
24 static void mailbox_mmdf_destroy (mailbox_t *mbox); 24 static void mailbox_mmdf_destroy (mailbox_t *mbox);
25 25
26 struct mailbox_registrar _mailbox_mmdf_registrar = 26 struct mailbox_registrar _mailbox_mmdf_registrar =
27 { 27 {
28 "MMDF", 28 "MMDF",
29 mailbox_mmdf_init, mailbox_mmdf_destroy 29 mailbox_mmdf_create, mailbox_mmdf_destroy
30 }; 30 };
31 31
32 static int 32 static int
33 mailbox_mmdf_init (mailbox_t *mbox, const char *name) 33 mailbox_mmdf_create (mailbox_t *mbox, const char *name)
34 { 34 {
35 (void)mbox; (void)name; 35 (void)mbox; (void)name;
36 return ENOSYS; 36 return ENOSYS;
......
...@@ -20,13 +20,13 @@ ...@@ -20,13 +20,13 @@
20 20
21 #include <errno.h> 21 #include <errno.h>
22 22
23 static int mailbox_pop_init (mailbox_t *mbox, const char *name); 23 static int mailbox_pop_create (mailbox_t *mbox, const char *name);
24 static void mailbox_pop_destroy (mailbox_t *mbox); 24 static void mailbox_pop_destroy (mailbox_t *mbox);
25 25
26 struct mailbox_registrar _mailbox_pop_registrar = 26 struct mailbox_registrar _mailbox_pop_registrar =
27 { 27 {
28 "POP3", 28 "POP3",
29 mailbox_pop_init, mailbox_pop_destroy 29 mailbox_pop_create, mailbox_pop_destroy
30 }; 30 };
31 31
32 static void 32 static void
...@@ -37,7 +37,7 @@ mailbox_pop_destroy (mailbox_t *mbox) ...@@ -37,7 +37,7 @@ mailbox_pop_destroy (mailbox_t *mbox)
37 } 37 }
38 38
39 static int 39 static int
40 mailbox_pop_init (mailbox_t *mbox, const char *name) 40 mailbox_pop_create (mailbox_t *mbox, const char *name)
41 { 41 {
42 (void)mbox; (void)name; 42 (void)mbox; (void)name;
43 return ENOSYS; 43 return ENOSYS;
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
19 #include <message0.h> 19 #include <message0.h>
20 #include <mime0.h> 20 #include <mime0.h>
21 #include <io0.h> 21 #include <io0.h>
22 #include <body0.h>
22 #include <mime.h> 23 #include <mime.h>
23 24
24 #include <errno.h> 25 #include <errno.h>
...@@ -37,17 +38,15 @@ ...@@ -37,17 +38,15 @@
37 * Define mbx i/f for protocols that support mime parsing (IMAP). 38 * Define mbx i/f for protocols that support mime parsing (IMAP).
38 */ 39 */
39 40
40 static int _mime_append_part( mime_t mime, int body_offset, int body_len, int encap_msg ) 41 static int _mime_append_part(mime_t mime, message_t msg, int body_offset, int body_len, int encap_msg)
41 { 42 {
42 struct _mime_part *mime_part, **part_arr; 43 struct _mime_part *mime_part, **part_arr;
43 int ret; 44 int ret;
44 45
45 if ( ( mime_part = calloc(1, sizeof(*mime_part)) ) == NULL ) 46 if ( ( mime_part = calloc(1, sizeof(*mime_part)) ) == NULL )
46 return ENOMEM; 47 return ENOMEM;
47 if ( ( ret = header_init(&mime_part->hdr, mime->header_buf, mime->header_length, mime_part) ) != 0 ) { 48
48 free(mime_part); 49 memcpy(mime_part->sig,"MIME", 4);
49 return ret;
50 }
51 if ( encap_msg ) { 50 if ( encap_msg ) {
52 if ( mime->ncap_msgs >= mime->tmsgs ) { 51 if ( mime->ncap_msgs >= mime->tmsgs ) {
53 if ( ( part_arr = realloc(mime->cap_msgs, ( mime->tmsgs + 2 ) * sizeof(mime_part)) ) == NULL ) { 52 if ( ( part_arr = realloc(mime->cap_msgs, ( mime->tmsgs + 2 ) * sizeof(mime_part)) ) == NULL ) {
...@@ -70,10 +69,17 @@ static int _mime_append_part( mime_t mime, int body_offset, int body_len, int en ...@@ -70,10 +69,17 @@ static int _mime_append_part( mime_t mime, int body_offset, int body_len, int en
70 } 69 }
71 mime->mtp_parts[mime->nmtp_parts++] = mime_part; 70 mime->mtp_parts[mime->nmtp_parts++] = mime_part;
72 } 71 }
72 if ( msg == NULL ) {
73 if ( ( ret = header_create(&mime_part->hdr, mime->header_buf, mime->header_length, mime_part) ) != 0 ) {
74 free(mime_part);
75 return ret;
76 }
77 mime->header_length = 0;
78 }
73 mime_part->body_len = body_len; 79 mime_part->body_len = body_len;
74 mime_part->body_offset = body_offset; 80 mime_part->body_offset = body_offset;
81 mime_part->msg = msg;
75 mime_part->mime = mime; 82 mime_part->mime = mime;
76 mime->header_length = 0;
77 return 0; 83 return 0;
78 } 84 }
79 85
...@@ -247,7 +253,7 @@ static int _mime_parse_mpart_message(mime_t mime) ...@@ -247,7 +253,7 @@ static int _mime_parse_mpart_message(mime_t mime)
247 mime->flags &= ~MIME_PARSER_HAVE_CR; 253 mime->flags &= ~MIME_PARSER_HAVE_CR;
248 body_length = mime->cur_offset - body_offset - mime->line_ndx + 1; 254 body_length = mime->cur_offset - body_offset - mime->line_ndx + 1;
249 if ( mime->header_length ) /* this skips the preamble */ 255 if ( mime->header_length ) /* this skips the preamble */
250 _mime_append_part(mime, body_offset, body_length, FALSE ); 256 _mime_append_part(mime, NULL, body_offset, body_length, FALSE );
251 if ( ( cp2 + blength + 2 < cp && !strncasecmp(cp2+2+blength, "--",2) ) || 257 if ( ( cp2 + blength + 2 < cp && !strncasecmp(cp2+2+blength, "--",2) ) ||
252 !strncasecmp(cp2+blength, "--",2) ) { /* very last boundary */ 258 !strncasecmp(cp2+blength, "--",2) ) { /* very last boundary */
253 break; 259 break;
...@@ -310,7 +316,26 @@ static int _mime_message_read(stream_t stream, char *buf, size_t buflen, off_t o ...@@ -310,7 +316,26 @@ static int _mime_message_read(stream_t stream, char *buf, size_t buflen, off_t o
310 return stream_read(mime_part->mime->stream, buf, read_len, mime_part->body_offset + off, nbytes ); 316 return stream_read(mime_part->mime->stream, buf, read_len, mime_part->body_offset + off, nbytes );
311 } 317 }
312 318
313 int mime_init(mime_t *pmime, message_t msg, int flags) 319 static int _mime_new_message_read(stream_t stream, char *buf, size_t buflen, off_t off, size_t *nbytes)
320 {
321 (void)stream; (void)buf; (void)buflen; (void)off;
322 if ( nbytes == NULL )
323 return(EINVAL);
324
325 return 0;
326 }
327
328 static int _mime_body_size (body_t body, size_t *psize)
329 {
330 struct _mime_part *mime_part = body->owner;
331 if (mime_part == NULL)
332 return EINVAL;
333 if (psize)
334 *psize = mime_part->body_len;
335 return 0;
336 }
337
338 int mime_create(mime_t *pmime, message_t msg, int flags)
314 { 339 {
315 mime_t mime = NULL; 340 mime_t mime = NULL;
316 int ret = 0; 341 int ret = 0;
...@@ -339,14 +364,11 @@ int mime_init(mime_t *pmime, message_t msg, int flags) ...@@ -339,14 +364,11 @@ int mime_init(mime_t *pmime, message_t msg, int flags)
339 } 364 }
340 } 365 }
341 } 366 }
342 else { /* create a floating message to contain this new mime message */ 367 else {
343 if ( ( ret = message_init( &msg, NULL ) ) == 0 ) { 368 if ( ( ret = message_create( &msg, mime ) ) == 0 ) {
344 if ( ( ret = message_get_stream(msg, &(mime->stream)) ) == 0 ) {
345 msg->owner = mime;
346 mime->flags |= MIME_NEW_MESSAGE; 369 mime->flags |= MIME_NEW_MESSAGE;
347 } 370 }
348 } 371 }
349 }
350 if ( ret != 0 ) { 372 if ( ret != 0 ) {
351 if ( mime->content_type ) 373 if ( mime->content_type )
352 free(mime->content_type); 374 free(mime->content_type);
...@@ -413,6 +435,7 @@ int mime_get_part(mime_t mime, int part, message_t *msg) ...@@ -413,6 +435,7 @@ int mime_get_part(mime_t mime, int part, message_t *msg)
413 int nmtp_parts, ret = 0; 435 int nmtp_parts, ret = 0;
414 size_t hsize = 0; 436 size_t hsize = 0;
415 stream_t stream; 437 stream_t stream;
438 body_t body;
416 struct _mime_part *mime_part; 439 struct _mime_part *mime_part;
417 440
418 if ( ( ret = mime_get_num_parts(mime, &nmtp_parts ) ) == 0 ) { 441 if ( ( ret = mime_get_num_parts(mime, &nmtp_parts ) ) == 0 ) {
...@@ -422,19 +445,18 @@ int mime_get_part(mime_t mime, int part, message_t *msg) ...@@ -422,19 +445,18 @@ int mime_get_part(mime_t mime, int part, message_t *msg)
422 *msg = mime->msg; 445 *msg = mime->msg;
423 else { 446 else {
424 mime_part = mime->mtp_parts[part-1]; 447 mime_part = mime->mtp_parts[part-1];
425 if ( ( ret = message_init(&(mime_part->msg), mime_part) ) == 0 ) { 448 if ( ( ret = message_create(&(mime_part->msg), mime_part) ) == 0 ) {
426 message_set_header(mime_part->msg, mime_part->hdr, mime_part); 449 message_set_header(mime_part->msg, mime_part->hdr, mime_part);
427 header_get_size(mime_part->hdr, &hsize); 450 header_size(mime_part->hdr, &hsize);
428 message_set_size (mime_part->msg, mime_part->body_len + hsize, mime_part); 451 if ( ( ret = body_create(&body, mime_part) ) == 0 ) {
429 if ( ( ret = stream_init(&stream, mime_part) ) == 0 ) { 452 if ( ( ret = stream_create(&stream, mime_part) ) == 0 ) {
430 if ( ( ret = stream_set_read(stream, _mime_message_read, mime_part) ) == 0 ) { 453 body_set_size (body, _mime_body_size, mime_part);
431 if ( ( ret = message_set_stream( mime_part->msg, stream, mime_part) ) == 0 ) { 454 stream_set_read(stream, _mime_message_read, mime_part);
455 body_set_stream(body, stream, mime_part);
432 *msg = mime_part->msg; 456 *msg = mime_part->msg;
433 return 0; 457 return 0;
434 } 458 }
435 } 459 }
436 stream_destroy(&stream, mime_part);
437 }
438 message_destroy(&mime_part->msg, mime_part); 460 message_destroy(&mime_part->msg, mime_part);
439 } 461 }
440 } 462 }
...@@ -449,6 +471,7 @@ int mime_unencapsulate(mime_t mime, message_t msg, message_t *newmsg) ...@@ -449,6 +471,7 @@ int mime_unencapsulate(mime_t mime, message_t msg, message_t *newmsg)
449 char *content_type, *cp; 471 char *content_type, *cp;
450 header_t hdr; 472 header_t hdr;
451 stream_t stream; 473 stream_t stream;
474 body_t body;
452 struct _mime_part *mime_part; 475 struct _mime_part *mime_part;
453 476
454 if ( mime == NULL || msg == NULL || newmsg == NULL || mime->flags & MIME_NEW_MESSAGE ) 477 if ( mime == NULL || msg == NULL || newmsg == NULL || mime->flags & MIME_NEW_MESSAGE )
...@@ -493,20 +516,18 @@ int mime_unencapsulate(mime_t mime, message_t msg, message_t *newmsg) ...@@ -493,20 +516,18 @@ int mime_unencapsulate(mime_t mime, message_t msg, message_t *newmsg)
493 } 516 }
494 body_length -= mime->cur_offset - body_offset; 517 body_length -= mime->cur_offset - body_offset;
495 body_offset = mime->cur_offset + 1; 518 body_offset = mime->cur_offset + 1;
496 if ( ( ret = _mime_append_part( mime, body_offset, body_length, TRUE ) ) == 0 ) { 519 if ( ( ret = _mime_append_part( mime, NULL, body_offset, body_length, TRUE ) ) == 0 ) {
497 mime_part = mime->cap_msgs[mime->ncap_msgs - 1]; 520 mime_part = mime->cap_msgs[mime->ncap_msgs - 1];
498 if ( ( ret = message_init(&(mime_part->msg), mime_part) ) == 0) { 521 if ( ( ret = message_create(&(mime_part->msg), mime_part) ) == 0) {
499 message_set_header(mime_part->msg, mime_part->hdr, mime_part); 522 message_set_header(mime_part->msg, mime_part->hdr, mime_part);
500 message_set_size (mime_part->msg, mime_part->body_len, mime_part); 523 if ( ( ret = body_create(&body, mime_part) ) == 0 ) {
501 if ( ( ret = stream_init(&stream, mime_part) ) == 0 ) { 524 if ( ( ret = stream_create(&stream, mime_part) ) == 0 ) {
502 if ( ( ret = stream_set_read(stream, _mime_message_read, mime_part) ) == 0 ) { 525 stream_set_read(stream, _mime_message_read, mime_part);
503 if ( ( ret = message_set_stream( mime_part->msg, stream, mime_part) ) == 0 ) { 526 body_set_size (body, _mime_body_size, mime_part);
527 body_set_stream( body, stream, mime_part);
504 *newmsg = mime_part->msg; 528 *newmsg = mime_part->msg;
505 return 0; 529 return 0;
506 } 530 }
507 }
508 stream_destroy(&stream, mime_part);
509 }
510 message_destroy(&mime_part->msg, mime_part); 531 message_destroy(&mime_part->msg, mime_part);
511 } 532 }
512 } 533 }
...@@ -515,6 +536,7 @@ int mime_unencapsulate(mime_t mime, message_t msg, message_t *newmsg) ...@@ -515,6 +536,7 @@ int mime_unencapsulate(mime_t mime, message_t msg, message_t *newmsg)
515 } 536 }
516 } 537 }
517 } 538 }
539 }
518 return ret; 540 return ret;
519 } 541 }
520 542
...@@ -538,7 +560,7 @@ int mime_add_part(mime_t mime, message_t msg) ...@@ -538,7 +560,7 @@ int mime_add_part(mime_t mime, message_t msg)
538 { 560 {
539 if ( mime == NULL || msg == NULL || ( mime->flags & MIME_NEW_MESSAGE ) == 0 ) 561 if ( mime == NULL || msg == NULL || ( mime->flags & MIME_NEW_MESSAGE ) == 0 )
540 return EINVAL; 562 return EINVAL;
541 return ENOTSUP; 563 return _mime_append_part(mime, msg, 0, 0, FALSE);
542 } 564 }
543 565
544 int mime_get_message(mime_t mime, message_t *msg) 566 int mime_get_message(mime_t mime, message_t *msg)
...@@ -548,3 +570,4 @@ int mime_get_message(mime_t mime, message_t *msg) ...@@ -548,3 +570,4 @@ int mime_get_message(mime_t mime, message_t *msg)
548 *msg = mime->msg; 570 *msg = mime->msg;
549 return 0; 571 return 0;
550 } 572 }
573
......
...@@ -88,7 +88,7 @@ registrar_add (struct url_registrar *new_ureg, ...@@ -88,7 +88,7 @@ registrar_add (struct url_registrar *new_ureg,
88 return ENOMEM; 88 return ENOMEM;
89 } 89 }
90 } 90 }
91 mreg->_init = new_mreg->_init; 91 mreg->_create = new_mreg->_create;
92 mreg->_destroy = new_mreg->_destroy; 92 mreg->_destroy = new_mreg->_destroy;
93 93
94 /* URL */ 94 /* URL */
...@@ -110,7 +110,7 @@ registrar_add (struct url_registrar *new_ureg, ...@@ -110,7 +110,7 @@ registrar_add (struct url_registrar *new_ureg,
110 return ENOMEM; 110 return ENOMEM;
111 } 111 }
112 } 112 }
113 ureg->_init = new_ureg->_init; 113 ureg->_create = new_ureg->_create;
114 ureg->_destroy = new_ureg->_destroy; 114 ureg->_destroy = new_ureg->_destroy;
115 } 115 }
116 116
......
...@@ -39,7 +39,7 @@ static int get_query (const url_t, char *, size_t, size_t *); ...@@ -39,7 +39,7 @@ static int get_query (const url_t, char *, size_t, size_t *);
39 static int get_id (const url_t, int *); 39 static int get_id (const url_t, int *);
40 40
41 int 41 int
42 url_init (url_t * purl, const char *name) 42 url_create (url_t * purl, const char *name)
43 { 43 {
44 int status = EINVAL; 44 int status = EINVAL;
45 struct url_registrar *ureg; 45 struct url_registrar *ureg;
...@@ -87,7 +87,7 @@ url_init (url_t * purl, const char *name) ...@@ -87,7 +87,7 @@ url_init (url_t * purl, const char *name)
87 /* Found one initialize it */ 87 /* Found one initialize it */
88 if (status == 0) 88 if (status == 0)
89 { 89 {
90 status = ureg->_init (purl, name); 90 status = ureg->_create (purl, name);
91 if (status == 0) 91 if (status == 0)
92 { 92 {
93 url_t url = *purl; 93 url_t url = *purl;
......
...@@ -23,12 +23,12 @@ ...@@ -23,12 +23,12 @@
23 #include <string.h> 23 #include <string.h>
24 24
25 static void url_file_destroy (url_t *purl); 25 static void url_file_destroy (url_t *purl);
26 static int url_file_init (url_t *purl, const char *name); 26 static int url_file_create (url_t *purl, const char *name);
27 27
28 struct url_registrar _url_file_registrar = 28 struct url_registrar _url_file_registrar =
29 { 29 {
30 "file:", 30 "file:",
31 url_file_init, url_file_destroy 31 url_file_create, url_file_destroy
32 }; 32 };
33 33
34 static void 34 static void
...@@ -48,7 +48,7 @@ url_file_destroy (url_t *purl) ...@@ -48,7 +48,7 @@ url_file_destroy (url_t *purl)
48 UNIX box 48 UNIX box
49 */ 49 */
50 static int 50 static int
51 url_file_init (url_t *purl, const char *name) 51 url_file_create (url_t *purl, const char *name)
52 { 52 {
53 url_t url; 53 url_t url;
54 struct url_registrar *ureg = &_url_mbox_registrar; 54 struct url_registrar *ureg = &_url_mbox_registrar;
...@@ -64,7 +64,7 @@ url_file_init (url_t *purl, const char *name) ...@@ -64,7 +64,7 @@ url_file_init (url_t *purl, const char *name)
64 return ENOMEM; 64 return ENOMEM;
65 65
66 /* TYPE */ 66 /* TYPE */
67 url->_init = ureg->_init; 67 url->_create = ureg->_create;
68 url->_destroy = ureg->_destroy; 68 url->_destroy = ureg->_destroy;
69 69
70 /* SCHEME */ 70 /* SCHEME */
......
...@@ -19,13 +19,13 @@ ...@@ -19,13 +19,13 @@
19 #include <registrar.h> 19 #include <registrar.h>
20 #include <errno.h> 20 #include <errno.h>
21 21
22 static int url_imap_init (url_t *purl, const char *name); 22 static int url_imap_create (url_t *purl, const char *name);
23 static void url_imap_destroy (url_t *purl); 23 static void url_imap_destroy (url_t *purl);
24 24
25 struct url_registrar _url_imap_registrar = 25 struct url_registrar _url_imap_registrar =
26 { 26 {
27 "imap://", 27 "imap://",
28 url_imap_init, url_imap_destroy 28 url_imap_create, url_imap_destroy
29 }; 29 };
30 30
31 static void 31 static void
...@@ -36,7 +36,7 @@ url_imap_destroy (url_t *purl) ...@@ -36,7 +36,7 @@ url_imap_destroy (url_t *purl)
36 } 36 }
37 37
38 static int 38 static int
39 url_imap_init (url_t *purl, const char *name) 39 url_imap_create (url_t *purl, const char *name)
40 { 40 {
41 (void)purl; (void)name; 41 (void)purl; (void)name;
42 return ENOSYS; 42 return ENOSYS;
......
...@@ -19,13 +19,13 @@ ...@@ -19,13 +19,13 @@
19 #include <registrar.h> 19 #include <registrar.h>
20 #include <errno.h> 20 #include <errno.h>
21 21
22 static int url_mailto_init (url_t *purl, const char *name); 22 static int url_mailto_create (url_t *purl, const char *name);
23 static void url_mailto_destroy (url_t *purl); 23 static void url_mailto_destroy (url_t *purl);
24 24
25 struct url_registrar _url_mailto_registrar = 25 struct url_registrar _url_mailto_registrar =
26 { 26 {
27 "mailto:", 27 "mailto:",
28 url_mailto_init, url_mailto_destroy 28 url_mailto_create, url_mailto_destroy
29 }; 29 };
30 30
31 static void 31 static void
...@@ -36,7 +36,7 @@ url_mailto_destroy (url_t *purl) ...@@ -36,7 +36,7 @@ url_mailto_destroy (url_t *purl)
36 } 36 }
37 37
38 static int 38 static int
39 url_mailto_init (url_t *purl, const char *name) 39 url_mailto_create (url_t *purl, const char *name)
40 { 40 {
41 (void)purl; (void)name; 41 (void)purl; (void)name;
42 return ENOSYS; 42 return ENOSYS;
......
...@@ -23,12 +23,12 @@ ...@@ -23,12 +23,12 @@
23 #include <string.h> 23 #include <string.h>
24 24
25 static void url_mbox_destroy (url_t *purl); 25 static void url_mbox_destroy (url_t *purl);
26 static int url_mbox_init (url_t *purl, const char *name); 26 static int url_mbox_create (url_t *purl, const char *name);
27 27
28 struct url_registrar _url_mbox_registrar = 28 struct url_registrar _url_mbox_registrar =
29 { 29 {
30 "/", 30 "/",
31 url_mbox_init, url_mbox_destroy 31 url_mbox_create, url_mbox_destroy
32 }; 32 };
33 33
34 static void 34 static void
...@@ -48,7 +48,7 @@ url_mbox_destroy (url_t *purl) ...@@ -48,7 +48,7 @@ url_mbox_destroy (url_t *purl)
48 UNIX box 48 UNIX box
49 */ 49 */
50 static int 50 static int
51 url_mbox_init (url_t *purl, const char *name) 51 url_mbox_create (url_t *purl, const char *name)
52 { 52 {
53 url_t url; 53 url_t url;
54 struct url_registrar *ureg = &_url_mbox_registrar; 54 struct url_registrar *ureg = &_url_mbox_registrar;
...@@ -64,7 +64,7 @@ url_mbox_init (url_t *purl, const char *name) ...@@ -64,7 +64,7 @@ url_mbox_init (url_t *purl, const char *name)
64 return ENOMEM; 64 return ENOMEM;
65 65
66 /* TYPE */ 66 /* TYPE */
67 url->_init = ureg->_init; 67 url->_create = ureg->_create;
68 url->_destroy = ureg->_destroy; 68 url->_destroy = ureg->_destroy;
69 69
70 /* SCHEME */ 70 /* SCHEME */
......
...@@ -23,12 +23,12 @@ ...@@ -23,12 +23,12 @@
23 #include <string.h> 23 #include <string.h>
24 24
25 static void url_maildir_destroy (url_t *purl); 25 static void url_maildir_destroy (url_t *purl);
26 static int url_maildir_init (url_t *purl, const char *name); 26 static int url_maildir_create (url_t *purl, const char *name);
27 27
28 struct url_registrar _url_maildir_registrar = 28 struct url_registrar _url_maildir_registrar =
29 { 29 {
30 "maildir:", 30 "maildir:",
31 url_maildir_init, url_maildir_destroy 31 url_maildir_create, url_maildir_destroy
32 }; 32 };
33 33
34 static void 34 static void
...@@ -49,7 +49,7 @@ url_maildir_destroy (url_t *purl) ...@@ -49,7 +49,7 @@ url_maildir_destroy (url_t *purl)
49 maildir: 49 maildir:
50 */ 50 */
51 static int 51 static int
52 url_maildir_init (url_t *purl, const char *name) 52 url_maildir_create (url_t *purl, const char *name)
53 { 53 {
54 url_t url; 54 url_t url;
55 struct url_registrar *ureg = &_url_maildir_registrar; 55 struct url_registrar *ureg = &_url_maildir_registrar;
...@@ -67,7 +67,7 @@ url_maildir_init (url_t *purl, const char *name) ...@@ -67,7 +67,7 @@ url_maildir_init (url_t *purl, const char *name)
67 return EINVAL; 67 return EINVAL;
68 68
69 /* TYPE */ 69 /* TYPE */
70 url->_init = ureg->_init; 70 url->_create = ureg->_create;
71 url->_destroy = ureg->_destroy; 71 url->_destroy = ureg->_destroy;
72 72
73 /* SCHEME */ 73 /* SCHEME */
......
...@@ -23,12 +23,12 @@ ...@@ -23,12 +23,12 @@
23 #include <string.h> 23 #include <string.h>
24 24
25 static void url_mh_destroy (url_t *purl); 25 static void url_mh_destroy (url_t *purl);
26 static int url_mh_init (url_t *purl, const char *name); 26 static int url_mh_create (url_t *purl, const char *name);
27 27
28 struct url_registrar _url_mh_registrar = 28 struct url_registrar _url_mh_registrar =
29 { 29 {
30 "mh:", 30 "mh:",
31 url_mh_init, url_mh_destroy 31 url_mh_create, url_mh_destroy
32 }; 32 };
33 33
34 static void 34 static void
...@@ -49,7 +49,7 @@ url_mh_destroy (url_t *purl) ...@@ -49,7 +49,7 @@ url_mh_destroy (url_t *purl)
49 mh: 49 mh:
50 */ 50 */
51 static int 51 static int
52 url_mh_init (url_t *purl, const char *name) 52 url_mh_create (url_t *purl, const char *name)
53 { 53 {
54 url_t url; 54 url_t url;
55 struct url_registrar *ureg = &_url_mh_registrar; 55 struct url_registrar *ureg = &_url_mh_registrar;
...@@ -67,7 +67,7 @@ url_mh_init (url_t *purl, const char *name) ...@@ -67,7 +67,7 @@ url_mh_init (url_t *purl, const char *name)
67 return ENOMEM; 67 return ENOMEM;
68 68
69 /* TYPE */ 69 /* TYPE */
70 url->_init = ureg->_init; 70 url->_create = ureg->_create;
71 url->_destroy = ureg->_destroy; 71 url->_destroy = ureg->_destroy;
72 72
73 /* SCHEME */ 73 /* SCHEME */
......
...@@ -23,12 +23,12 @@ ...@@ -23,12 +23,12 @@
23 #include <string.h> 23 #include <string.h>
24 24
25 static void url_mmdf_destroy (url_t *purl); 25 static void url_mmdf_destroy (url_t *purl);
26 static int url_mmdf_init (url_t *purl, const char *name); 26 static int url_mmdf_create (url_t *purl, const char *name);
27 27
28 struct url_registrar _url_mmdf_registrar = 28 struct url_registrar _url_mmdf_registrar =
29 { 29 {
30 "mmdf:", 30 "mmdf:",
31 url_mmdf_init, url_mmdf_destroy 31 url_mmdf_create, url_mmdf_destroy
32 }; 32 };
33 33
34 static void 34 static void
...@@ -49,7 +49,7 @@ url_mmdf_destroy (url_t *purl) ...@@ -49,7 +49,7 @@ url_mmdf_destroy (url_t *purl)
49 mmdf: 49 mmdf:
50 */ 50 */
51 static int 51 static int
52 url_mmdf_init (url_t *purl, const char *name) 52 url_mmdf_create (url_t *purl, const char *name)
53 { 53 {
54 url_t url; 54 url_t url;
55 struct url_registrar *ureg = &_url_mmdf_registrar; 55 struct url_registrar *ureg = &_url_mmdf_registrar;
...@@ -67,7 +67,7 @@ url_mmdf_init (url_t *purl, const char *name) ...@@ -67,7 +67,7 @@ url_mmdf_init (url_t *purl, const char *name)
67 return ENOMEM; 67 return ENOMEM;
68 68
69 /* TYPE */ 69 /* TYPE */
70 url->_init = ureg->_init; 70 url->_create = ureg->_create;
71 url->_destroy = ureg->_destroy; 71 url->_destroy = ureg->_destroy;
72 72
73 /* SCHEME */ 73 /* SCHEME */
......
...@@ -25,12 +25,12 @@ ...@@ -25,12 +25,12 @@
25 #include <errno.h> 25 #include <errno.h>
26 26
27 static void url_pop_destroy (url_t *purl); 27 static void url_pop_destroy (url_t *purl);
28 static int url_pop_init (url_t *purl, const char *name); 28 static int url_pop_create (url_t *purl, const char *name);
29 29
30 struct url_registrar _url_pop_registrar = 30 struct url_registrar _url_pop_registrar =
31 { 31 {
32 "pop://", 32 "pop://",
33 url_pop_init, url_pop_destroy 33 url_pop_create, url_pop_destroy
34 }; 34 };
35 35
36 static int get_auth (const url_pop_t up, char *s, size_t len, size_t *); 36 static int get_auth (const url_pop_t up, char *s, size_t len, size_t *);
...@@ -80,7 +80,7 @@ url_pop_destroy (url_t *purl) ...@@ -80,7 +80,7 @@ url_pop_destroy (url_t *purl)
80 pop://<user>;AUTH=<auth>@<host>:<port> 80 pop://<user>;AUTH=<auth>@<host>:<port>
81 */ 81 */
82 static int 82 static int
83 url_pop_init (url_t *purl, const char *name) 83 url_pop_create (url_t *purl, const char *name)
84 { 84 {
85 const char *host_port, *indexe; 85 const char *host_port, *indexe;
86 struct url_registrar *ureg = &_url_pop_registrar; 86 struct url_registrar *ureg = &_url_pop_registrar;
...@@ -101,7 +101,7 @@ url_pop_init (url_t *purl, const char *name) ...@@ -101,7 +101,7 @@ url_pop_init (url_t *purl, const char *name)
101 up->_get_auth = get_auth; 101 up->_get_auth = get_auth;
102 102
103 /* TYPE */ 103 /* TYPE */
104 url->_init = _url_pop_registrar._init; 104 url->_create = _url_pop_registrar._create;
105 url->_destroy = _url_pop_registrar._destroy; 105 url->_destroy = _url_pop_registrar._destroy;
106 106
107 /* SCHEME */ 107 /* SCHEME */
......
...@@ -23,12 +23,12 @@ ...@@ -23,12 +23,12 @@
23 #include <string.h> 23 #include <string.h>
24 24
25 static void url_unix_destroy (url_t *purl); 25 static void url_unix_destroy (url_t *purl);
26 static int url_unix_init (url_t *purl, const char *name); 26 static int url_unix_create (url_t *purl, const char *name);
27 27
28 struct url_registrar _url_unix_registrar = 28 struct url_registrar _url_unix_registrar =
29 { 29 {
30 "unix:", 30 "unix:",
31 url_unix_init, url_unix_destroy 31 url_unix_create, url_unix_destroy
32 }; 32 };
33 33
34 static void 34 static void
...@@ -49,7 +49,7 @@ url_unix_destroy (url_t *purl) ...@@ -49,7 +49,7 @@ url_unix_destroy (url_t *purl)
49 unix:/path 49 unix:/path
50 */ 50 */
51 static int 51 static int
52 url_unix_init (url_t *purl, const char *name) 52 url_unix_create (url_t *purl, const char *name)
53 { 53 {
54 url_t url; 54 url_t url;
55 struct url_registrar *ureg = &_url_unix_registrar; 55 struct url_registrar *ureg = &_url_unix_registrar;
...@@ -67,7 +67,7 @@ url_unix_init (url_t *purl, const char *name) ...@@ -67,7 +67,7 @@ url_unix_init (url_t *purl, const char *name)
67 return ENOMEM; 67 return ENOMEM;
68 68
69 /* TYPE */ 69 /* TYPE */
70 url->_init = ureg->_init; 70 url->_create = ureg->_create;
71 url->_destroy = ureg->_destroy; 71 url->_destroy = ureg->_destroy;
72 72
73 /* SCHEME */ 73 /* SCHEME */
......