-rw-r--r-- | libical/src/libical/sspm.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/libical/src/libical/sspm.c b/libical/src/libical/sspm.c index 2df581b..17f12ee 100644 --- a/libical/src/libical/sspm.c +++ b/libical/src/libical/sspm.c | |||
@@ -32,36 +32,33 @@ | |||
32 | 32 | ||
33 | (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org | 33 | (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org |
34 | ======================================================================*/ | 34 | ======================================================================*/ |
35 | 35 | ||
36 | #include <stdio.h> | 36 | #include <stdio.h> |
37 | #include <string.h> | 37 | #include <string.h> |
38 | #include "sspm.h" | 38 | #include "sspm.h" |
39 | #include <assert.h> | 39 | #include <assert.h> |
40 | #include <ctype.h> /* for tolower */ | 40 | #include <ctype.h> /* for tolower */ |
41 | #include <stdlib.h> /* for malloc, free */ | 41 | #include <stdlib.h> /* for malloc, free */ |
42 | #include <string.h> /* for strcasecmp */ | 42 | #include <string.h> /* for strcasecmp */ |
43 | 43 | ||
44 | // Eugen C. <eug@thekompany.com> | ||
45 | #ifdef _WIN32 | ||
46 | #define strcasecmp _stricmp | ||
47 | #endif | ||
48 | // Eugen C. <eug@thekompany.com> | ||
49 | |||
50 | int snprintf(char *str, size_t n, char const *fmt, ...); | ||
51 | |||
52 | #ifdef DMALLOC | 44 | #ifdef DMALLOC |
53 | #include "dmalloc.h" | 45 | #include "dmalloc.h" |
54 | #endif | 46 | #endif |
55 | 47 | ||
48 | #ifdef WIN32 | ||
49 | #define snprintf _snprintf | ||
50 | #define strcasecmp stricmp | ||
51 | #endif | ||
52 | |||
56 | #define TMP_BUF_SIZE 1024 | 53 | #define TMP_BUF_SIZE 1024 |
57 | 54 | ||
58 | 55 | ||
59 | enum mime_state { | 56 | enum mime_state { |
60 | UNKNOWN_STATE, | 57 | UNKNOWN_STATE, |
61 | IN_HEADER, | 58 | IN_HEADER, |
62 | END_OF_HEADER, | 59 | END_OF_HEADER, |
63 | IN_BODY, | 60 | IN_BODY, |
64 | OPENING_PART, | 61 | OPENING_PART, |
65 | END_OF_PART, | 62 | END_OF_PART, |
66 | TERMINAL_END_OF_PART, | 63 | TERMINAL_END_OF_PART, |
67 | END_OF_INPUT | 64 | END_OF_INPUT |
@@ -84,44 +81,44 @@ void* sspm_make_multipart_part(struct mime_impl *impl,struct sspm_header *header | |||
84 | void sspm_read_header(struct mime_impl *impl,struct sspm_header *header); | 81 | void sspm_read_header(struct mime_impl *impl,struct sspm_header *header); |
85 | 82 | ||
86 | char* sspm_strdup(char* str){ | 83 | char* sspm_strdup(char* str){ |
87 | 84 | ||
88 | char* s; | 85 | char* s; |
89 | 86 | ||
90 | s = strdup(str); | 87 | s = strdup(str); |
91 | 88 | ||
92 | return s; | 89 | return s; |
93 | } | 90 | } |
94 | 91 | ||
95 | 92 | ||
96 | struct major_content_type_map | 93 | static struct major_content_type_map |
97 | { | 94 | { |
98 | enum sspm_major_type type; | 95 | enum sspm_major_type type; |
99 | char* str; | 96 | char* str; |
100 | 97 | ||
101 | } major_content_type_map[] = | 98 | } major_content_type_map[] = |
102 | { | 99 | { |
103 | {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, | 100 | {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, |
104 | {SSPM_TEXT_MAJOR_TYPE,"text" }, | 101 | {SSPM_TEXT_MAJOR_TYPE,"text" }, |
105 | {SSPM_TEXT_MAJOR_TYPE,"text" }, | 102 | {SSPM_TEXT_MAJOR_TYPE,"text" }, |
106 | {SSPM_IMAGE_MAJOR_TYPE,"image" }, | 103 | {SSPM_IMAGE_MAJOR_TYPE,"image" }, |
107 | {SSPM_AUDIO_MAJOR_TYPE,"audio" }, | 104 | {SSPM_AUDIO_MAJOR_TYPE,"audio" }, |
108 | {SSPM_VIDEO_MAJOR_TYPE,"video" }, | 105 | {SSPM_VIDEO_MAJOR_TYPE,"video" }, |
109 | {SSPM_APPLICATION_MAJOR_TYPE,"application" }, | 106 | {SSPM_APPLICATION_MAJOR_TYPE,"application" }, |
110 | {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, | 107 | {SSPM_MULTIPART_MAJOR_TYPE,"multipart" }, |
111 | {SSPM_MESSAGE_MAJOR_TYPE,"message" }, | 108 | {SSPM_MESSAGE_MAJOR_TYPE,"message" }, |
112 | {SSPM_UNKNOWN_MAJOR_TYPE,"" }, | 109 | {SSPM_UNKNOWN_MAJOR_TYPE,"" }, |
113 | }; | 110 | }; |
114 | 111 | ||
115 | struct minor_content_type_map | 112 | static struct minor_content_type_map |
116 | { | 113 | { |
117 | enum sspm_minor_type type; | 114 | enum sspm_minor_type type; |
118 | char* str; | 115 | char* str; |
119 | 116 | ||
120 | } minor_content_type_map[] = | 117 | } minor_content_type_map[] = |
121 | { | 118 | { |
122 | {SSPM_ANY_MINOR_TYPE,"*" }, | 119 | {SSPM_ANY_MINOR_TYPE,"*" }, |
123 | {SSPM_PLAIN_MINOR_TYPE,"plain" }, | 120 | {SSPM_PLAIN_MINOR_TYPE,"plain" }, |
124 | {SSPM_RFC822_MINOR_TYPE,"rfc822" }, | 121 | {SSPM_RFC822_MINOR_TYPE,"rfc822" }, |
125 | {SSPM_DIGEST_MINOR_TYPE,"digest" }, | 122 | {SSPM_DIGEST_MINOR_TYPE,"digest" }, |
126 | {SSPM_CALENDAR_MINOR_TYPE,"calendar" }, | 123 | {SSPM_CALENDAR_MINOR_TYPE,"calendar" }, |
127 | {SSPM_MIXED_MINOR_TYPE,"mixed" }, | 124 | {SSPM_MIXED_MINOR_TYPE,"mixed" }, |
@@ -232,25 +229,25 @@ char* sspm_value(char* line) | |||
232 | for(p=value; c != s; c++){ | 229 | for(p=value; c != s; c++){ |
233 | if(*c!=' ' && *c!='\n'){ | 230 | if(*c!=' ' && *c!='\n'){ |
234 | *(p++) = *c; | 231 | *(p++) = *c; |
235 | } | 232 | } |
236 | } | 233 | } |
237 | 234 | ||
238 | *p='\0'; | 235 | *p='\0'; |
239 | 236 | ||
240 | return value; | 237 | return value; |
241 | 238 | ||
242 | } | 239 | } |
243 | 240 | ||
244 | char *mime_headers[] = { | 241 | static char *mime_headers[] = { |
245 | "Content-Type", | 242 | "Content-Type", |
246 | "Content-Transfer-Encoding", | 243 | "Content-Transfer-Encoding", |
247 | "Content-Disposition", | 244 | "Content-Disposition", |
248 | "Content-Id", | 245 | "Content-Id", |
249 | "Mime-Version", | 246 | "Mime-Version", |
250 | 0 | 247 | 0 |
251 | }; | 248 | }; |
252 | 249 | ||
253 | 250 | ||
254 | void* sspm_default_new_part() | 251 | void* sspm_default_new_part() |
255 | { | 252 | { |
256 | return 0; | 253 | return 0; |
@@ -357,49 +354,49 @@ int sspm_is_mime_terminating_boundary(char *line) | |||
357 | enum line_type { | 354 | enum line_type { |
358 | EMPTY, | 355 | EMPTY, |
359 | BLANK, | 356 | BLANK, |
360 | MIME_HEADER, | 357 | MIME_HEADER, |
361 | MAIL_HEADER, | 358 | MAIL_HEADER, |
362 | HEADER_CONTINUATION, | 359 | HEADER_CONTINUATION, |
363 | BOUNDARY, | 360 | BOUNDARY, |
364 | TERMINATING_BOUNDARY, | 361 | TERMINATING_BOUNDARY, |
365 | UNKNOWN_TYPE | 362 | UNKNOWN_TYPE |
366 | }; | 363 | }; |
367 | 364 | ||
368 | 365 | ||
369 | enum line_type get_line_type(char* line){ | 366 | static enum line_type get_line_type(char* line){ |
370 | 367 | ||
371 | if (line == 0){ | 368 | if (line == 0){ |
372 | return EMPTY; | 369 | return EMPTY; |
373 | } else if(sspm_is_blank(line)){ | 370 | } else if(sspm_is_blank(line)){ |
374 | return BLANK; | 371 | return BLANK; |
375 | } else if (sspm_is_mime_header(line)){ | 372 | } else if (sspm_is_mime_header(line)){ |
376 | return MIME_HEADER; | 373 | return MIME_HEADER; |
377 | } else if (sspm_is_mail_header(line)){ | 374 | } else if (sspm_is_mail_header(line)){ |
378 | return MAIL_HEADER; | 375 | return MAIL_HEADER; |
379 | } else if (sspm_is_continuation_line(line)){ | 376 | } else if (sspm_is_continuation_line(line)){ |
380 | return HEADER_CONTINUATION; | 377 | return HEADER_CONTINUATION; |
381 | } else if (sspm_is_mime_terminating_boundary(line)){ | 378 | } else if (sspm_is_mime_terminating_boundary(line)){ |
382 | return TERMINATING_BOUNDARY; | 379 | return TERMINATING_BOUNDARY; |
383 | } else if (sspm_is_mime_boundary(line)) { | 380 | } else if (sspm_is_mime_boundary(line)) { |
384 | return BOUNDARY; | 381 | return BOUNDARY; |
385 | } else { | 382 | } else { |
386 | return UNKNOWN_TYPE; | 383 | return UNKNOWN_TYPE; |
387 | } | 384 | } |
388 | 385 | ||
389 | 386 | ||
390 | } | 387 | } |
391 | 388 | ||
392 | 389 | ||
393 | struct sspm_action_map get_action(struct mime_impl *impl, | 390 | static struct sspm_action_map get_action(struct mime_impl *impl, |
394 | enum sspm_major_type major, | 391 | enum sspm_major_type major, |
395 | enum sspm_minor_type minor) | 392 | enum sspm_minor_type minor) |
396 | { | 393 | { |
397 | int i; | 394 | int i; |
398 | 395 | ||
399 | /* Read caller suppled action map */ | 396 | /* Read caller suppled action map */ |
400 | 397 | ||
401 | if (impl->actions != 0){ | 398 | if (impl->actions != 0){ |
402 | for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ | 399 | for(i=0; impl->actions[i].major != SSPM_UNKNOWN_MAJOR_TYPE; i++){ |
403 | if((major == impl->actions[i].major && | 400 | if((major == impl->actions[i].major && |
404 | minor == impl->actions[i].minor) || | 401 | minor == impl->actions[i].minor) || |
405 | (major == impl->actions[i].major && | 402 | (major == impl->actions[i].major && |