annotate src/readpst.c @ 129:fc11b1d1ad34

fix initial from header in mbox format. start moving to PST_LE_GET* rather than LE*_CPU macros so we can eventually remove the pragma packing.
author Carl Byington <carl@five-ten-sg.com>
date Thu, 05 Feb 2009 12:09:04 -0800
parents 23a36ac0514d
children 1b3922080ca8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
1 /***
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
2 * readpst.c
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
3 * Part of the LibPST project
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
4 * Written by David Smith
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
5 * dave.s@earthcorp.com
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
6 */
59
7d5c637aaafb General cleanup and code fixes.
Carl Byington <carl@five-ten-sg.com>
parents: 52
diff changeset
7
122
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 121
diff changeset
8 #include "define.h"
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 121
diff changeset
9 #include "lzfu.h"
bdb38b434c0a more changes from Fridrich Strba to avoid installing our config.h
Carl Byington <carl@five-ten-sg.com>
parents: 121
diff changeset
10
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
11 #define OUTPUT_TEMPLATE "%s"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
12 #define OUTPUT_KMAIL_DIR_TEMPLATE ".%s.directory"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
13 #define KMAIL_INDEX ".%s.index"
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
14 #define SEP_MAIL_FILE_TEMPLATE "%i" /* "%09i" */
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
15
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
16 // max size of the c_time char*. It will store the date of the email
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
17 #define C_TIME_SIZE 500
59
7d5c637aaafb General cleanup and code fixes.
Carl Byington <carl@five-ten-sg.com>
parents: 52
diff changeset
18
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
19 struct file_ll {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
20 char *name;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
21 char *dname;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
22 FILE * output;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
23 int32_t stored_count;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
24 int32_t email_count;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
25 int32_t skip_count;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
26 int32_t type;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
27 };
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
28
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
29 void process(pst_item *outeritem, pst_desc_ll *d_ptr);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
30 void write_email_body(FILE *f, char *body);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
31 void removeCR(char *c);
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
32 void usage();
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
33 void version();
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
34 char* mk_kmail_dir(char*);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
35 int close_kmail_dir();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
36 char* mk_recurse_dir(char*);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
37 int close_recurse_dir();
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
38 char* mk_separate_dir(char *dir);
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
39 int close_separate_dir();
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
40 int mk_separate_file(struct file_ll *f);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
41 char* my_stristr(char *haystack, char *needle);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
42 void check_filename(char *fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
43 void write_separate_attachment(char f_name[], pst_item_attach* current_attach, int attach_num, pst_file* pst);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
44 void write_inline_attachment(FILE* f_output, pst_item_attach* current_attach, char *boundary, pst_file* pst);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
45 void header_has_field(char *header, char *field, int *flag);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
46 char* header_get_field(char *header, char *field);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
47 void header_strip_field(char *header, char *field);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
48 int test_base64(char *body);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
49 void find_html_charset(char *html, char *charset, size_t charsetlen);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
50 void write_body_part(FILE* f_output, char *body, char *mime, char *charset, char *boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
51 void write_normal_email(FILE* f_output, char f_name[], pst_item* item, int mode, int mode_MH, pst_file* pst, int save_rtf);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
52 void write_vcard(FILE* f_output, pst_item_contact* contact, char comment[]);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
53 void write_appointment(FILE* f_output, pst_item_appointment* appointment,
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
54 pst_item_email* email, FILETIME* create_date, FILETIME* modify_date);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
55 void create_enter_dir(struct file_ll* f, pst_item *item);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
56 void close_enter_dir(struct file_ll *f);
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
57
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
58 const char* prog_name;
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
59 char* output_dir = ".";
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
60 char* kmail_chdir = NULL;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
61
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
62 // Normal mode just creates mbox format files in the current directory. Each file is named
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
63 // the same as the folder's name that it represents
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
64 #define MODE_NORMAL 0
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
65
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
66 // KMail mode creates a directory structure suitable for being used directly
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
67 // by the KMail application
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
68 #define MODE_KMAIL 1
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
69
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
70 // recurse mode creates a directory structure like the PST file. Each directory
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
71 // contains only one file which stores the emails in mbox format.
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
72 #define MODE_RECURSE 2
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
73
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
74 // separate mode creates the same directory structure as recurse. The emails are stored in
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
75 // separate files, numbering from 1 upward. Attachments belonging to the emails are
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
76 // saved as email_no-filename (e.g. 1-samplefile.doc or 000001-Attachment2.zip)
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
77 #define MODE_SEPARATE 3
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
78
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
79 // Decrypt the whole file (even the parts that aren't encrypted) and ralph it to stdout
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
80 #define MODE_DECSPEW 4
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
81
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
82
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
83 // Output Normal just prints the standard information about what is going on
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
84 #define OUTPUT_NORMAL 0
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
85
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
86 // Output Quiet is provided so that only errors are printed
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
87 #define OUTPUT_QUIET 1
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
88
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
89 // default mime-type for attachments that have a null mime-type
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
90 #define MIME_TYPE_DEFAULT "application/octet-stream"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
91
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
92 // output mode for contacts
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
93 #define CMODE_VCARD 0
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
94 #define CMODE_LIST 1
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
95
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
96 // output mode for deleted items
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
97 #define DMODE_EXCLUDE 0
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
98 #define DMODE_INCLUDE 1
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
99
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
100 // output settings for RTF bodies
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
101 // filename for the attachment
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
102 #define RTF_ATTACH_NAME "rtf-body.rtf"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
103 // mime type for the attachment
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
104 #define RTF_ATTACH_TYPE "application/rtf"
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
105
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
106 // global settings
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
107 int mode = MODE_NORMAL;
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
108 int mode_MH = 0;
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
109 int output_mode = OUTPUT_NORMAL;
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
110 int contact_mode = CMODE_VCARD;
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
111 int deleted_mode = DMODE_EXCLUDE;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
112 int overwrite = 0;
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
113 int save_rtf_body = 1;
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
114 pst_file pstfile;
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
115 regex_t meta_charset_pattern;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
116
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
117
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
118 void process(pst_item *outeritem, pst_desc_ll *d_ptr)
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
119 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
120 struct file_ll ff;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
121 pst_item *item = NULL;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
122
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
123 DEBUG_ENT("process");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
124 memset(&ff, 0, sizeof(ff));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
125 create_enter_dir(&ff, outeritem);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
126
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
127 while (d_ptr) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
128 DEBUG_MAIN(("main: New item record\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
129 if (!d_ptr->desc) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
130 DEBUG_WARN(("main: ERROR ?? item's desc record is NULL\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
131 ff.skip_count++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
132 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
133 else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
134 DEBUG_MAIN(("main: Desc Email ID %#x [d_ptr->id = %#x]\n", d_ptr->desc->id, d_ptr->id));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
135
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
136 item = pst_parse_item(&pstfile, d_ptr);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
137 DEBUG_MAIN(("main: About to process item\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
138 if (item && item->email && item->email->subject && item->email->subject->subj) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
139 DEBUG_EMAIL(("item->email->subject = %p\n", item->email->subject));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
140 DEBUG_EMAIL(("item->email->subject->subj = %p\n", item->email->subject->subj));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
141 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
142 if (item) {
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
143 if (item->folder && d_ptr->child && (deleted_mode == DMODE_INCLUDE || strcasecmp(item->file_as, "Deleted Items"))) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
144 //if this is a non-empty folder other than deleted items, we want to recurse into it
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
145 if (output_mode != OUTPUT_QUIET) printf("Processing Folder \"%s\"\n", item->file_as);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
146 process(item, d_ptr->child);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
147
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
148 } else if (item->contact && (item->type == PST_TYPE_CONTACT)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
149 // deal with a contact
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
150 // write them to the file, one per line in this format
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
151 // Desc Name <email@address>\n
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
152 if (mode == MODE_SEPARATE) mk_separate_file(&ff);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
153 ff.email_count++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
154 DEBUG_MAIN(("main: Processing Contact\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
155 if (ff.type != PST_TYPE_CONTACT) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
156 DEBUG_MAIN(("main: I have a contact, but the folder isn't a contacts folder. Processing anyway\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
157 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
158 if (contact_mode == CMODE_VCARD)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
159 write_vcard(ff.output, item->contact, item->comment);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
160 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
161 fprintf(ff.output, "%s <%s>\n", item->contact->fullname, item->contact->address1);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
162
110
7133b39975f7 patch from David Cuadrado to process emails with type PST_TYPE_OTHER
Carl Byington <carl@five-ten-sg.com>
parents: 104
diff changeset
163 } else if (item->email && (item->type == PST_TYPE_NOTE || item->type == PST_TYPE_REPORT || item->type == PST_TYPE_OTHER)) {
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
164 if (mode == MODE_SEPARATE) mk_separate_file(&ff);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
165 ff.email_count++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
166 DEBUG_MAIN(("main: Processing Email\n"));
110
7133b39975f7 patch from David Cuadrado to process emails with type PST_TYPE_OTHER
Carl Byington <carl@five-ten-sg.com>
parents: 104
diff changeset
167 if ((ff.type != PST_TYPE_NOTE) && (ff.type != PST_TYPE_REPORT) && (ff.type != PST_TYPE_OTHER)) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
168 DEBUG_MAIN(("main: I have an email, but the folder isn't an email folder. Processing anyway\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
169 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
170 write_normal_email(ff.output, ff.name, item, mode, mode_MH, &pstfile, save_rtf_body);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
171
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
172 } else if (item->journal && (item->type == PST_TYPE_JOURNAL)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
173 // deal with journal items
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
174 if (mode == MODE_SEPARATE) mk_separate_file(&ff);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
175 ff.email_count++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
176 DEBUG_MAIN(("main: Processing Journal Entry\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
177 if (ff.type != PST_TYPE_JOURNAL) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
178 DEBUG_MAIN(("main: I have a journal entry, but the folder isn't a journal folder. Processing anyway\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
179 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
180 fprintf(ff.output, "BEGIN:VJOURNAL\n");
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
181 if (item->email && item->email->subject && item->email->subject->subj)
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
182 fprintf(ff.output, "SUMMARY:%s\n", pst_rfc2426_escape(item->email->subject->subj));
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
183 if (item->email && item->email->body)
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
184 fprintf(ff.output, "DESCRIPTION:%s\n", pst_rfc2426_escape(item->email->body));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
185 if (item->journal->start)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
186 fprintf(ff.output, "DTSTART;VALUE=DATE-TIME:%s\n", pst_rfc2445_datetime_format(item->journal->start));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
187 fprintf(ff.output, "END:VJOURNAL\n\n");
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
188
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
189 } else if (item->appointment && (item->type == PST_TYPE_APPOINTMENT)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
190 // deal with Calendar appointments
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
191 if (mode == MODE_SEPARATE) mk_separate_file(&ff);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
192 ff.email_count++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
193 DEBUG_MAIN(("main: Processing Appointment Entry\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
194 if (ff.type != PST_TYPE_APPOINTMENT) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
195 DEBUG_MAIN(("main: I have an appointment, but folder isn't specified as an appointment type. Processing...\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
196 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
197 write_appointment(ff.output, item->appointment, item->email, item->create_date, item->modify_date);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
198
79
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
199 } else if (item->message_store) {
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
200 // there should only be one message_store, and we have already done it
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
201 DEBUG_MAIN(("item with message store content, type %i %s folder type %i, skipping it\n", item->type, item->ascii_type, ff.type));
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
202
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
203 } else {
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
204 // these all seem to be things that MS agrees are not included in the item count
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
205 //ff.skip_count++;
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
206 DEBUG_MAIN(("main: Unknown item type %i (%s) name (%s)\n",
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
207 item->type, item->ascii_type, item->file_as));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
208 }
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
209 pst_freeItem(item);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
210 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
211 ff.skip_count++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
212 DEBUG_MAIN(("main: A NULL item was seen\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
213 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
214 d_ptr = d_ptr->next;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
215 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
216 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
217 close_enter_dir(&ff);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
218 DEBUG_RET();
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
219 }
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
220
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
221
34
07177825c91b fix signed/unsigned to allow very small pst files with only leaf nodes
carl
parents: 33
diff changeset
222
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
223 int main(int argc, char* const* argv) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
224 pst_item *item = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
225 pst_desc_ll *d_ptr;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
226 char * fname = NULL;
48
f66078abed38 more fixes for 64 bit format
carl
parents: 46
diff changeset
227 char *d_log = NULL;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
228 int c,x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
229 char *temp = NULL; //temporary char pointer
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
230 prog_name = argv[0];
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
231
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
232 time_t now = time(NULL);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
233 srand((unsigned)now);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
234
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
235 if (regcomp(&meta_charset_pattern, "<meta[^>]*content=\"[^>]*charset=([^>\";]*)[\";]", REG_ICASE | REG_EXTENDED)) {
123
ab2a11e72250 more cleanup of #include files.
Carl Byington <carl@five-ten-sg.com>
parents: 122
diff changeset
236 printf("cannot compile regex pattern to find content charset in html bodies\n");
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
237 exit(3);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
238 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
239
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
240 // command-line option handling
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
241 while ((c = getopt(argc, argv, "bCc:Dd:hko:qrSMVw"))!= -1) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
242 switch (c) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
243 case 'b':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
244 save_rtf_body = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
245 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
246 case 'C':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
247 mode = MODE_DECSPEW;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
248 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
249 case 'c':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
250 if (optarg && optarg[0]=='v')
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
251 contact_mode=CMODE_VCARD;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
252 else if (optarg && optarg[0]=='l')
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
253 contact_mode=CMODE_LIST;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
254 else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
255 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
256 exit(0);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
257 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
258 break;
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
259 case 'D':
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
260 deleted_mode = DMODE_INCLUDE;
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
261 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
262 case 'd':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
263 d_log = optarg;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
264 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
265 case 'h':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
266 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
267 exit(0);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
268 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
269 case 'V':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
270 version();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
271 exit(0);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
272 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
273 case 'k':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
274 mode = MODE_KMAIL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
275 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
276 case 'M':
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
277 mode = MODE_SEPARATE;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
278 mode_MH = 1;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
279 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
280 case 'o':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
281 output_dir = optarg;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
282 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
283 case 'q':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
284 output_mode = OUTPUT_QUIET;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
285 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
286 case 'r':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
287 mode = MODE_RECURSE;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
288 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
289 case 'S':
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
290 mode = MODE_SEPARATE;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
291 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
292 case 'w':
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
293 overwrite = 1;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
294 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
295 default:
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
296 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
297 exit(1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
298 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
299 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
300 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
301
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
302 if (argc > optind) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
303 fname = argv[optind];
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
304 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
305 usage();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
306 exit(2);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
307 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
308
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
309 #ifdef DEBUG_ALL
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
310 // force a log file
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
311 if (!d_log) d_log = "readpst.log";
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
312 #endif // defined DEBUG_ALL
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
313 DEBUG_INIT(d_log);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
314 DEBUG_REGISTER_CLOSE();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
315 DEBUG_ENT("main");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
316
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
317 if (mode == MODE_DECSPEW) {
70
b12f4e50e2e8 Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents: 63
diff changeset
318 FILE *fp;
b12f4e50e2e8 Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents: 63
diff changeset
319 char buf[1024];
b12f4e50e2e8 Patch from Joachim Metz <joachim.metz@gmail.com> for 64 bit compile.
Carl Byington <carl@five-ten-sg.com>
parents: 63
diff changeset
320 size_t l = 0;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
321 if (NULL == (fp = fopen(fname, "rb"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
322 fprintf(stderr, "Couldn't open file %s\n", fname );
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
323 DEBUG_RET();
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
324 return 1;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
325 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
326
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
327 while (0 != (l = fread(buf, 1, 1024, fp))) {
79
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
328 if (0 != pst_decrypt(0, buf, l, PST_COMP_ENCRYPT))
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
329 fprintf(stderr, "pst_decrypt() failed (I'll try to continue)\n");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
330
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
331 if (l != pst_fwrite(buf, 1, l, stdout)) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
332 fprintf(stderr, "Couldn't output to stdout?\n");
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
333 DEBUG_RET();
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
334 return 1;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
335 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
336 }
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
337 DEBUG_RET();
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
338 return 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
339 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
340
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
341 if (output_mode != OUTPUT_QUIET) printf("Opening PST file and indexes...\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
342
59
7d5c637aaafb General cleanup and code fixes.
Carl Byington <carl@five-ten-sg.com>
parents: 52
diff changeset
343 RET_DERROR(pst_open(&pstfile, fname), 1, ("Error opening File\n"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
344 RET_DERROR(pst_load_index(&pstfile), 2, ("Index Error\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
345
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
346 pst_load_extended_attributes(&pstfile);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
347
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
348 if (chdir(output_dir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
349 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
350 pst_close(&pstfile);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
351 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
352 DIE(("main: Cannot change to output dir %s: %s\n", output_dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
353 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
354
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
355 if (output_mode != OUTPUT_QUIET) printf("About to start processing first record...\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
356
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
357 d_ptr = pstfile.d_head; // first record is main record
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
358 item = pst_parse_item(&pstfile, d_ptr);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
359 if (!item || !item->message_store) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
360 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
361 DIE(("main: Could not get root record\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
362 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
363
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
364 // default the file_as to the same as the main filename if it doesn't exist
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
365 if (!item->file_as) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
366 if (!(temp = strrchr(fname, '/')))
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
367 if (!(temp = strrchr(fname, '\\')))
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
368 temp = fname;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
369 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
370 temp++; // get past the "\\"
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
371 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
372 temp++; // get past the "/"
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
373 item->file_as = (char*)xmalloc(strlen(temp)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
374 strcpy(item->file_as, temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
375 DEBUG_MAIN(("file_as was blank, so am using %s\n", item->file_as));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
376 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
377 DEBUG_MAIN(("main: Root Folder Name: %s\n", item->file_as));
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
378
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
379 d_ptr = pst_getTopOfFolders(&pstfile, item);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
380 if (!d_ptr) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
381 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
382 DIE(("Top of folders record not found. Cannot continue\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
383 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
384
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
385 process(item, d_ptr->child); // do the children of TOPF
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
386 pst_freeItem(item);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
387 pst_close(&pstfile);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
388 DEBUG_RET();
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
389 regfree(&meta_charset_pattern);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
390 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
391 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
392
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
393
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
394 void write_email_body(FILE *f, char *body) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
395 char *n = body;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
396 // DEBUG_MAIN(("write_email_body(): \"%s\"\n", body));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
397 DEBUG_ENT("write_email_body");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
398 while (n) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
399 if (strncmp(body, "From ", 5) == 0)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
400 fprintf(f, ">");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
401 if ((n = strchr(body, '\n'))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
402 n++;
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
403 pst_fwrite(body, n-body, 1, f); //write just a line
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
404 body = n;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
405 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
406 }
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
407 pst_fwrite(body, strlen(body), 1, f);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
408 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
409 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
410
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
411
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
412 void removeCR (char *c) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
413 // converts \r\n to \n
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
414 char *a, *b;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
415 DEBUG_ENT("removeCR");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
416 a = b = c;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
417 while (*a != '\0') {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
418 *b = *a;
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
419 if (*a != '\r') b++;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
420 a++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
421 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
422 *b = '\0';
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
423 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
424 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
425
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
426
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
427 void usage() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
428 DEBUG_ENT("usage");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
429 version();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
430 printf("Usage: %s [OPTIONS] {PST FILENAME}\n", prog_name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
431 printf("OPTIONS:\n");
104
39ba19372732 many fixes in pst2ldif by Robert Harris
Carl Byington <carl@five-ten-sg.com>
parents: 100
diff changeset
432 printf("\t-V\t- Version. Display program version\n");
79
56fa05fd5271 Patch from Robert Simpson for encryption type 2.
Carl Byington <carl@five-ten-sg.com>
parents: 77
diff changeset
433 printf("\t-C\t- Decrypt (compressible encryption) the entire file and output on stdout (not typically useful)\n");
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
434 printf("\t-D\t- Include deleted items in output\n");
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
435 printf("\t-M\t- MH. Write emails in the MH format\n");
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
436 printf("\t-S\t- Separate. Write emails in the separate format\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
437 printf("\t-b\t- Don't save RTF-Body attachments\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
438 printf("\t-c[v|l]\t- Set the Contact output mode. -cv = VCard, -cl = EMail list\n");
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
439 printf("\t-d <filename> \t- Debug to file. This is a binary log. Use readpstlog to print it\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
440 printf("\t-h\t- Help. This screen\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
441 printf("\t-k\t- KMail. Output in kmail format\n");
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
442 printf("\t-o <dirname>\t- Output directory to write files to. CWD is changed *after* opening pst file\n");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
443 printf("\t-q\t- Quiet. Only print error messages\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
444 printf("\t-r\t- Recursive. Output in a recursive format\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
445 printf("\t-w\t- Overwrite any output mbox files\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
446 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
447 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
448
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
449
118
0f1492b7fe8b patch from Fridrich Strba for building on mingw and general cleanup of autoconf files
Carl Byington <carl@five-ten-sg.com>
parents: 116
diff changeset
450 void version() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
451 DEBUG_ENT("version");
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
452 printf("ReadPST / LibPST v%s\n", VERSION);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
453 #if BYTE_ORDER == BIG_ENDIAN
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
454 printf("Big Endian implementation being used.\n");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
455 #elif BYTE_ORDER == LITTLE_ENDIAN
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
456 printf("Little Endian implementation being used.\n");
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
457 #else
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
458 # error "Byte order not supported by this library"
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
459 #endif
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
460 #ifdef __GNUC__
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
461 printf("GCC %d.%d : %s %s\n", __GNUC__, __GNUC_MINOR__, __DATE__, __TIME__);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
462 #endif
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
463 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
464 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
465
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
466
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
467 char *mk_kmail_dir(char *fname) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
468 //change to that directory
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
469 //make a directory based on OUTPUT_KMAIL_DIR_TEMPLATE
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
470 //allocate space for OUTPUT_TEMPLATE and form a char* with fname
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
471 //return that value
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
472 char *dir, *out_name, *index;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
473 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
474 DEBUG_ENT("mk_kmail_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
475 if (kmail_chdir && chdir(kmail_chdir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
476 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
477 DIE(("mk_kmail_dir: Cannot change to directory %s: %s\n", kmail_chdir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
478 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
479 dir = malloc(strlen(fname)+strlen(OUTPUT_KMAIL_DIR_TEMPLATE)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
480 sprintf(dir, OUTPUT_KMAIL_DIR_TEMPLATE, fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
481 check_filename(dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
482 if (D_MKDIR(dir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
483 //error occured
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
484 if (errno != EEXIST) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
485 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
486 DIE(("mk_kmail_dir: Cannot create directory %s: %s\n", dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
487 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
488 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
489 kmail_chdir = realloc(kmail_chdir, strlen(dir)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
490 strcpy(kmail_chdir, dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
491 free (dir);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
492
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
493 //we should remove any existing indexes created by KMail, cause they might be different now
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
494 index = malloc(strlen(fname)+strlen(KMAIL_INDEX)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
495 sprintf(index, KMAIL_INDEX, fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
496 unlink(index);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
497 free(index);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
498
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
499 out_name = malloc(strlen(fname)+strlen(OUTPUT_TEMPLATE)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
500 sprintf(out_name, OUTPUT_TEMPLATE, fname);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
501 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
502 return out_name;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
503 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
504
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
505
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
506 int close_kmail_dir() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
507 // change ..
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
508 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
509 DEBUG_ENT("close_kmail_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
510 if (kmail_chdir) { //only free kmail_chdir if not NULL. do not change directory
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
511 free(kmail_chdir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
512 kmail_chdir = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
513 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
514 if (chdir("..")) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
515 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
516 DIE(("close_kmail_dir: Cannot move up dir (..): %s\n", strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
517 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
518 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
519 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
520 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
521 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
522
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
523
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
524 // this will create a directory by that name, then make an mbox file inside
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
525 // that dir. any subsequent dirs will be created by name, and they will
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
526 // contain mbox files
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
527 char *mk_recurse_dir(char *dir) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
528 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
529 char *out_name;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
530 DEBUG_ENT("mk_recurse_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
531 check_filename(dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
532 if (D_MKDIR (dir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
533 if (errno != EEXIST) { // not an error because it exists
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
534 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
535 DIE(("mk_recurse_dir: Cannot create directory %s: %s\n", dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
536 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
537 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
538 if (chdir (dir)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
539 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
540 DIE(("mk_recurse_dir: Cannot change to directory %s: %s\n", dir, strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
541 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
542 out_name = malloc(strlen("mbox")+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
543 strcpy(out_name, "mbox");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
544 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
545 return out_name;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
546 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
547
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
548
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
549 int close_recurse_dir() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
550 int x;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
551 DEBUG_ENT("close_recurse_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
552 if (chdir("..")) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
553 x = errno;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
554 DIE(("close_recurse_dir: Cannot go up dir (..): %s\n", strerror(x)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
555 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
556 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
557 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
558 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
559
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
560
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
561 char *mk_separate_dir(char *dir) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
562 size_t dirsize = strlen(dir) + 10;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
563 char dir_name[dirsize];
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
564 int x = 0, y = 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
565
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
566 DEBUG_ENT("mk_separate_dir");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
567 do {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
568 if (y == 0)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
569 snprintf(dir_name, dirsize, "%s", dir);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
570 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
571 snprintf(dir_name, dirsize, "%s" SEP_MAIL_FILE_TEMPLATE, dir, y); // enough for 9 digits allocated above
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
572
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
573 check_filename(dir_name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
574 DEBUG_MAIN(("about to try creating %s\n", dir_name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
575 if (D_MKDIR(dir_name)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
576 if (errno != EEXIST) { // if there is an error, and it doesn't already exist
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
577 x = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
578 DIE(("mk_separate_dir: Cannot create directory %s: %s\n", dir, strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
579 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
580 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
581 break;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
582 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
583 y++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
584 } while (overwrite == 0);
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
585
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
586 if (chdir(dir_name)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
587 x = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
588 DIE(("mk_separate_dir: Cannot change to directory %s: %s\n", dir, strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
589 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
590
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
591 if (overwrite) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
592 // we should probably delete all files from this directory
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
593 #if !defined(WIN32) && !defined(__CYGWIN__)
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
594 DIR * sdir = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
595 struct dirent *dirent = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
596 struct stat filestat;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
597 if (!(sdir = opendir("./"))) {
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
598 WARN(("mk_separate_dir: Cannot open dir \"%s\" for deletion of old contents\n", "./"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
599 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
600 while ((dirent = readdir(sdir))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
601 if (lstat(dirent->d_name, &filestat) != -1)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
602 if (S_ISREG(filestat.st_mode)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
603 if (unlink(dirent->d_name)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
604 y = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
605 DIE(("mk_separate_dir: unlink returned error on file %s: %s\n", dirent->d_name, strerror(y)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
606 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
607 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
608 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
609 }
26
9eeba3f4ca4b more cleanup from Arne
carl
parents: 25
diff changeset
610 #endif
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
611 }
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
612
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
613 // we don't return a filename here cause it isn't necessary.
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
614 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
615 return NULL;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
616 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
617
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
618
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
619 int close_separate_dir() {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
620 int x;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
621 DEBUG_ENT("close_separate_dir");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
622 if (chdir("..")) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
623 x = errno;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
624 DIE(("close_separate_dir: Cannot go up dir (..): %s\n", strerror(x)));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
625 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
626 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
627 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
628 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
629
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
630
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
631 int mk_separate_file(struct file_ll *f) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
632 const int name_offset = 1;
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
633 DEBUG_ENT("mk_separate_file");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
634 DEBUG_MAIN(("opening next file to save email\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
635 if (f->email_count > 999999999) { // bigger than nine 9's
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
636 DIE(("mk_separate_file: The number of emails in this folder has become too high to handle"));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
637 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
638 sprintf(f->name, SEP_MAIL_FILE_TEMPLATE, f->email_count + name_offset);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
639 if (f->output) fclose(f->output);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
640 f->output = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
641 check_filename(f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
642 if (!(f->output = fopen(f->name, "w"))) {
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
643 DIE(("mk_separate_file: Cannot open file to save email \"%s\"\n", f->name));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
644 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
645 DEBUG_RET();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
646 return 0;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
647 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
648
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
649
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
650 char *my_stristr(char *haystack, char *needle) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
651 // my_stristr varies from strstr in that its searches are case-insensitive
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
652 char *x=haystack, *y=needle, *z = NULL;
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
653 if (!haystack || !needle) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
654 return NULL;
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
655 }
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
656 while (*y != '\0' && *x != '\0') {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
657 if (tolower(*y) == tolower(*x)) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
658 // move y on one
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
659 y++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
660 if (!z) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
661 z = x; // store first position in haystack where a match is made
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
662 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
663 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
664 y = needle; // reset y to the beginning of the needle
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
665 z = NULL; // reset the haystack storage point
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
666 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
667 x++; // advance the search in the haystack
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
668 }
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
669 // If the haystack ended before our search finished, it's not a match.
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
670 if (*y != '\0') return NULL;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
671 return z;
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
672 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
673
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
674
41
183ae993b9ad security fix for potential buffer overrun in lz decompress
carl
parents: 39
diff changeset
675 void check_filename(char *fname) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
676 char *t = fname;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
677 DEBUG_ENT("check_filename");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
678 if (!t) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
679 DEBUG_RET();
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
680 return;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
681 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
682 while ((t = strpbrk(t, "/\\:"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
683 // while there are characters in the second string that we don't want
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
684 *t = '_'; //replace them with an underscore
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
685 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
686 DEBUG_RET();
16
c508ee15dfca switch to automake/autoconf
carl
parents:
diff changeset
687 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
688
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
689
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
690 void write_separate_attachment(char f_name[], pst_item_attach* current_attach, int attach_num, pst_file* pst)
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
691 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
692 FILE *fp = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
693 int x = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
694 char *temp = NULL;
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
695
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
696 // If there is a long filename (filename2) use that, otherwise
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
697 // use the 8.3 filename (filename1)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
698 char *attach_filename = (current_attach->filename2) ? current_attach->filename2
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
699 : current_attach->filename1;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
700 DEBUG_ENT("write_separate_attachment");
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
701
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
702 check_filename(f_name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
703 if (!attach_filename) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
704 // generate our own (dummy) filename for the attachement
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
705 temp = xmalloc(strlen(f_name)+15);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
706 sprintf(temp, "%s-attach%i", f_name, attach_num);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
707 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
708 // have an attachment name, make sure it's unique
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
709 temp = xmalloc(strlen(f_name)+strlen(attach_filename)+15);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
710 do {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
711 if (fp) fclose(fp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
712 if (x == 0)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
713 sprintf(temp, "%s-%s", f_name, attach_filename);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
714 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
715 sprintf(temp, "%s-%s-%i", f_name, attach_filename, x);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
716 } while ((fp = fopen(temp, "r")) && ++x < 99999999);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
717 if (x > 99999999) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
718 DIE(("error finding attachment name. exhausted possibilities to %s\n", temp));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
719 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
720 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
721 DEBUG_EMAIL(("Saving attachment to %s\n", temp));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
722 if (!(fp = fopen(temp, "w"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
723 WARN(("write_separate_attachment: Cannot open attachment save file \"%s\"\n", temp));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
724 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
725 if (current_attach->data)
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
726 pst_fwrite(current_attach->data, 1, current_attach->size, fp);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
727 else {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
728 (void)pst_attach_to_file(pst, current_attach, fp);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
729 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
730 fclose(fp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
731 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
732 if (temp) free(temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
733 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
734 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
735
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
736
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
737 void write_inline_attachment(FILE* f_output, pst_item_attach* current_attach, char *boundary, pst_file* pst)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
738 {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
739 char *attach_filename;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
740 char *enc = NULL; // base64 encoded attachment
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
741 DEBUG_ENT("write_inline_attachment");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
742 DEBUG_EMAIL(("Attachment Size is %i\n", current_attach->size));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
743 DEBUG_EMAIL(("Attachment Pointer is %p\n", current_attach->data));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
744 if (current_attach->data) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
745 enc = base64_encode (current_attach->data, current_attach->size);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
746 if (!enc) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
747 DEBUG_EMAIL(("ERROR base64_encode returned NULL. Must have failed\n"));
52
034641c26ab9 code cleanup
carl
parents: 50
diff changeset
748 DEBUG_RET();
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
749 return;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
750 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
751 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
752
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
753 fprintf(f_output, "\n--%s\n", boundary);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
754 if (!current_attach->mimetype) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
755 fprintf(f_output, "Content-Type: %s\n", MIME_TYPE_DEFAULT);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
756 } else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
757 fprintf(f_output, "Content-Type: %s\n", current_attach->mimetype);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
758 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
759 fprintf(f_output, "Content-Transfer-Encoding: base64\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
760 // If there is a long filename (filename2) use that, otherwise
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
761 // use the 8.3 filename (filename1)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
762 if (current_attach->filename2) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
763 attach_filename = current_attach->filename2;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
764 } else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
765 attach_filename = current_attach->filename1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
766 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
767 if (!attach_filename) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
768 fprintf(f_output, "Content-Disposition: inline\n\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
769 } else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
770 fprintf(f_output, "Content-Disposition: attachment; filename=\"%s\"\n\n", attach_filename);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
771 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
772
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
773 if (current_attach->data) {
73
3cb02cb1e6cd Patch from Robert Simpson to fix doubly-linked list in the cache_ptr code, and allow arrays of unicode strings (without converting them).
Carl Byington <carl@five-ten-sg.com>
parents: 70
diff changeset
774 pst_fwrite(enc, 1, strlen(enc), f_output);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
775 DEBUG_EMAIL(("Attachment Size after encoding is %i\n", strlen(enc)));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
776 free(enc); // caught by valgrind
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
777 } else {
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
778 (void)pst_attach_to_file_base64(pst, current_attach, f_output);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
779 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
780 fprintf(f_output, "\n\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
781 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
782 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
783
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
784
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
785 void header_has_field(char *header, char *field, int *flag)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
786 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
787 if (my_stristr(header, field) || (strncasecmp(header, field+1, strlen(field)-1) == 0)) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
788 DEBUG_EMAIL(("header block has %s header\n", field+1));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
789 *flag = 1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
790 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
791 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
792
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
793
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
794 char* header_get_field(char *header, char *field)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
795 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
796 char *t = my_stristr(header, field);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
797 if (!t && (strncasecmp(header, field+1, strlen(field)-1) == 0)) t = header;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
798 return t;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
799 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
800
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
801
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
802 void header_strip_field(char *header, char *field)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
803 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
804 char *e;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
805 char *t = header_get_field(header, field);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
806 if (t) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
807 e = strchr(t+1, '\n');
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
808 while (e && ((e[1] == ' ') || (e[1] == '\t'))) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
809 e = strchr(e+1, '\n');
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
810 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
811 if (e) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
812 if (t == header) e++; // if *t is not \n, we don't want to keep the \n at *e either.
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
813 while (*e != '\0') {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
814 *t = *e;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
815 t++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
816 e++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
817 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
818 *t = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
819 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
820 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
821 // this was the last header field, truncate the headers
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
822 *t = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
823 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
824 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
825 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
826
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
827
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
828 int test_base64(char *body)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
829 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
830 int b64 = 0;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
831 uint8_t *b = (uint8_t *)body;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
832 while (*b != 0) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
833 if ((*b < 32) && (*b != 9) && (*b != 10)) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
834 DEBUG_EMAIL(("found base64 byte %d\n", (int)*b));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
835 DEBUG_HEXDUMPC(body, strlen(body), 0x10);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
836 b64 = 1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
837 break;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
838 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
839 b++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
840 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
841 return b64;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
842 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
843
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
844
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
845 void find_html_charset(char *html, char *charset, size_t charsetlen)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
846 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
847 const int index = 1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
848 const int nmatch = index+1;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
849 regmatch_t match[nmatch];
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
850 int rc = regexec(&meta_charset_pattern, html, nmatch, match, 0);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
851 if (rc == 0) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
852 int s = match[index].rm_so;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
853 int e = match[index].rm_eo;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
854 if (s != -1) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
855 char save = html[e];
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
856 html[e] = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
857 snprintf(charset, charsetlen, "%s", html+s); // copy the html charset
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
858 html[e] = save;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
859 DEBUG_EMAIL(("charset %s from html text\n", charset));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
860 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
861 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
862 DEBUG_EMAIL(("matching %d %d %d %d", match[0].rm_so, match[0].rm_eo, match[1].rm_so, match[1].rm_eo));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
863 DEBUG_HEXDUMPC(html, strlen(html), 0x10);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
864 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
865 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
866 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
867 DEBUG_EMAIL(("regexec returns %d\n", rc));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
868 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
869 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
870
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
871
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
872 void write_body_part(FILE* f_output, char *body, char *mime, char *charset, char *boundary)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
873 {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
874 char *needfree = NULL;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
875 if (strcasecmp("utf-8", charset)) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
876 // try to convert to the specified charset since it is not utf-8
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
877 size_t rc;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
878 DEBUG_EMAIL(("Convert %s utf-8 to %s\n", mime, charset));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
879 vbuf *newer = vballoc(2);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
880 rc = vb_utf8to8bit(newer, body, strlen(body) + 1, charset);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
881 if (rc == (size_t)-1) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
882 // unable to convert, maybe it is already in that character set
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
883 free(newer->b);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
884 DEBUG_EMAIL(("Failed to convert %s utf-8 to %s\n", mime, charset));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
885 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
886 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
887 needfree = body = newer->b;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
888 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
889 free(newer);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
890 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
891 removeCR(body);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
892 int base64 = test_base64(body);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
893 fprintf(f_output, "\n--%s\n", boundary);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
894 fprintf(f_output, "Content-Type: %s; charset=\"%s\"\n", mime, charset);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
895 if (base64) fprintf(f_output, "Content-Transfer-Encoding: base64\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
896 fprintf(f_output, "\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
897 if (base64) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
898 char *enc = base64_encode(body, strlen(body));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
899 if (enc) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
900 write_email_body(f_output, enc);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
901 fprintf(f_output, "\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
902 free(enc);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
903 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
904 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
905 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
906 write_email_body(f_output, body);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
907 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
908 if (needfree) free(needfree);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
909 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
910
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
911
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
912 void write_normal_email(FILE* f_output, char f_name[], pst_item* item, int mode, int mode_MH, pst_file* pst, int save_rtf)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
913 {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
914 char boundary[60];
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
915 char body_charset[60];
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
916 char sender[60];
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
917 int sender_known = 0;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
918 char *temp = NULL;
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
919 int attach_num;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
920 time_t em_time;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
921 char *c_time;
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
922 int has_from, has_subject, has_to, has_cc, has_bcc, has_date;
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
923 has_from = has_subject = has_to = has_cc = has_bcc = has_date = 0;
46
b2a7f2e0926a more fixes for 64 bit format
carl
parents: 45
diff changeset
924 DEBUG_ENT("write_normal_email");
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
925
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
926 // setup default body character set
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
927 snprintf(body_charset, sizeof(body_charset), "%s", (item->email->body_charset) ? item->email->body_charset : "utf-8");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
928
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
929 // setup default sender
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
930 if (item->email->sender_address && strchr(item->email->sender_address, '@')) {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
931 temp = item->email->sender_address;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
932 sender_known = 1;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
933 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
934 else {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
935 temp = "MAILER-DAEMON";
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
936 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
937 snprintf(sender, sizeof(sender), "%s", temp);
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
938
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
939 // convert the sent date if it exists, or set it to a fixed date
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
940 if (item->email->sent_date) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
941 em_time = fileTimeToUnixTime(item->email->sent_date, 0);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
942 c_time = ctime(&em_time);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
943 if (c_time)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
944 c_time[strlen(c_time)-1] = '\0'; //remove end \n
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
945 else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
946 c_time = "Fri Dec 28 12:06:21 2001";
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
947 } else
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
948 c_time= "Fri Dec 28 12:06:21 2001";
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
949
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
950 // create our MIME boundary here.
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
951 snprintf(boundary, sizeof(boundary), "--boundary-LibPST-iamunique-%i_-_-", rand());
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
952
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
953 // we will always look at the headers to discover some stuff
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
954 if (item->email->header ) {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
955 char *t;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
956 removeCR(item->email->header);
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
957
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
958 // some of the headers we get from the file are not properly defined.
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
959 // they can contain some email stuff too. We will cut off the header
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
960 // when we see a \n\n
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
961 temp = strstr(item->email->header, "\n\n");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
962 if (temp) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
963 temp[1] = '\0'; // stop after first \n
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
964 DEBUG_EMAIL(("Found body text in header %s\n", temp+2));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
965 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
966
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
967 // Check if the headers have all the necessary fields
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
968 header_has_field(item->email->header, "\nFrom: ", &has_from);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
969 header_has_field(item->email->header, "\nTo: ", &has_to);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
970 header_has_field(item->email->header, "\nSubject: ", &has_subject);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
971 header_has_field(item->email->header, "\nDate: ", &has_date);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
972 header_has_field(item->email->header, "\nCC: ", &has_cc);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
973 header_has_field(item->email->header, "\nBCC: ", &has_bcc);
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
974
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
975 // look for charset in Content-Type header
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
976 t = header_get_field(item->email->header, "\nContent-Type: ");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
977 if (t) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
978 // assume charset= will be on the first line, rather than on a continuation line
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
979 t++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
980 char *n = strchr(t, '\n');
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
981 char *s = my_stristr(t, "; charset=");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
982 if (n && s && (s < n)) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
983 char *e;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
984 char save;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
985 s += 10; // skip over charset=
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
986 if (*s == '"') {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
987 s++;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
988 e = strchr(s, '"');
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
989 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
990 else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
991 e = strchr(s, ';');
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
992 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
993 if (!e || (e > n)) e = n; // use the trailing lf as terminator if nothing better
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
994 save = *e;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
995 *e = '\0';
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
996 snprintf(body_charset, sizeof(body_charset), "%s", s); // copy the charset to our buffer
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
997 *e = save;
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
998 DEBUG_EMAIL(("body charset %s from headers\n", body_charset));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
999 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1000 }
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1001
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1002 // derive a proper sender email address
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1003 if (!sender_known) {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1004 t = header_get_field(item->email->header, "\nFrom: ");
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1005 if (t) {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1006 // assume address is on the first line, rather than on a continuation line
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1007 t++;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1008 char *n = strchr(t, '\n');
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1009 char *s = strchr(t, '<');
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1010 char *e = strchr(t, '>');
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1011 if (s && e && n && (s < e) && (e < n)) {
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1012 char save = *e;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1013 *e = '\0';
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1014 snprintf(sender, sizeof(sender), "%s", s+1);
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1015 *e = save;
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1016 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1017 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1018 }
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1019
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1020 // Strip out the mime headers and some others that we don't want to emit
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1021 header_strip_field(item->email->header, "\nMicrosoft Mail Internet Headers");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1022 header_strip_field(item->email->header, "\nMIME-Version: ");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1023 header_strip_field(item->email->header, "\nContent-Type: ");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1024 header_strip_field(item->email->header, "\nContent-Transfer-Encoding: ");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1025 header_strip_field(item->email->header, "\nContent-class: ");
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1026 header_strip_field(item->email->header, "\nX-MimeOLE: ");
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1027 header_strip_field(item->email->header, "\nBcc: ");
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1028 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1029
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1030 DEBUG_EMAIL(("About to print Header\n"));
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1031
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1032 if (item && item->email && item->email->subject && item->email->subject->subj) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1033 DEBUG_EMAIL(("item->email->subject->subj = %s\n", item->email->subject->subj));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1034 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1035
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1036 if (item->email->header) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1037 int len;
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1038 char *soh = item->email->header;
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1039
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1040 if (mode != MODE_SEPARATE) {
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1041 // don't put rubbish in if we are doing separate
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1042 if (strncmp(soh, "X-From_: ", 9) == 0 ) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1043 fputs("From ", f_output);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1044 soh += 9;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1045 } else
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1046 fprintf(f_output, "From %s %s\n", sender, c_time);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1047 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1048
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1049 // make sure the headers end with a \n
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1050 fprintf(f_output, "%s", soh);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1051 len = strlen(soh);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1052 if (!len || (soh[len-1] != '\n')) fprintf(f_output, "\n");
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1053
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1054 } else {
63
cfd6175f9334 Start work on pst2dii to convert to Summation dii load file format.
Carl Byington <carl@five-ten-sg.com>
parents: 59
diff changeset
1055 //make up our own headers
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1056 if (mode != MODE_SEPARATE) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1057 // don't want this first line for this mode
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1058 fprintf(f_output, "From %s %s\n", sender, c_time);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1059 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1060 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1061
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1062 // create required header fields that are not already written
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1063 if (!has_from) {
129
fc11b1d1ad34 fix initial from header in mbox format.
Carl Byington <carl@five-ten-sg.com>
parents: 125
diff changeset
1064 fprintf(f_output, "From: \"%s\" <%s>\n", item->email->outlook_sender_name, sender);
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1065 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1066
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1067 if (!has_subject) {
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1068 if (item->email->subject && item->email->subject->subj) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1069 fprintf(f_output, "Subject: %s\n", item->email->subject->subj);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1070 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1071 fprintf(f_output, "Subject: \n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1072 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1073 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1074
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1075 if (!has_to && item->email->sentto_address) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1076 fprintf(f_output, "To: %s\n", item->email->sentto_address);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1077 }
100
1e4a7610d525 fixes from Justin Greer to add -D option to include deleted items, to add missing email headers, to fix bug in my_stristr()
Carl Byington <carl@five-ten-sg.com>
parents: 79
diff changeset
1078
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1079 if (!has_cc && item->email->cc_address) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1080 fprintf(f_output, "Cc: %s\n", item->email->cc_address);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1081 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1082
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1083 if (!has_bcc && item->email->bcc_address) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1084 fprintf(f_output, "Bcc: %s\n", item->email->bcc_address);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1085 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1086
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1087 if (!has_date && item->email->sent_date) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1088 char c_time[C_TIME_SIZE];
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1089 strftime(c_time, C_TIME_SIZE, "%a, %d %b %Y %H:%M:%S %z", gmtime(&em_time));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1090 fprintf(f_output, "Date: %s\n", c_time);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1091 }
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1092
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1093 // add our own mime headers
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1094 fprintf(f_output, "MIME-Version: 1.0\n");
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1095 if (item->attach || (item->email->rtf_compressed && save_rtf)
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1096 || item->email->encrypted_body
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1097 || item->email->encrypted_htmlbody) {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1098 // use multipart/mixed if we have attachments
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1099 fprintf(f_output, "Content-Type: multipart/mixed;\n\tboundary=\"%s\"\n", boundary);
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1100 } else {
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1101 // else use multipart/alternative
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1102 fprintf(f_output, "Content-Type: multipart/alternative;\n\tboundary=\"%s\"\n", boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1103 }
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1104 fprintf(f_output, "\n"); // end of headers, start of body
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1105
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1106 // now dump the body parts
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1107 if (item->email->body) {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1108 write_body_part(f_output, item->email->body, "text/plain", body_charset, boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1109 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1110
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1111 if (item->email->htmlbody) {
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1112 find_html_charset(item->email->htmlbody, body_charset, sizeof(body_charset));
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1113 write_body_part(f_output, item->email->htmlbody, "text/html", body_charset, boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1114 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1115
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1116 if (item->email->rtf_compressed && save_rtf) {
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1117 pst_item_attach* attach = (pst_item_attach*)xmalloc(sizeof(pst_item_attach));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1118 DEBUG_EMAIL(("Adding RTF body as attachment\n"));
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1119 memset(attach, 0, sizeof(pst_item_attach));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1120 attach->next = item->attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1121 item->attach = attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1122 attach->data = lzfu_decompress(item->email->rtf_compressed, item->email->rtf_compressed_size, &attach->size);
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1123 attach->filename2 = strdup(RTF_ATTACH_NAME);
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1124 attach->mimetype = strdup(RTF_ATTACH_TYPE);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1125 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1126
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1127 if (item->email->encrypted_body || item->email->encrypted_htmlbody) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1128 // if either the body or htmlbody is encrypted, add them as attachments
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1129 if (item->email->encrypted_body) {
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1130 pst_item_attach* attach = (pst_item_attach*)xmalloc(sizeof(pst_item_attach));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1131 DEBUG_EMAIL(("Adding Encrypted Body as attachment\n"));
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1132 attach = (pst_item_attach*) xmalloc(sizeof(pst_item_attach));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1133 memset(attach, 0, sizeof(pst_item_attach));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1134 attach->next = item->attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1135 item->attach = attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1136 attach->data = item->email->encrypted_body;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1137 attach->size = item->email->encrypted_body_size;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1138 item->email->encrypted_body = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1139 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1140
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1141 if (item->email->encrypted_htmlbody) {
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1142 pst_item_attach* attach = (pst_item_attach*)xmalloc(sizeof(pst_item_attach));
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1143 DEBUG_EMAIL(("Adding encrypted HTML body as attachment\n"));
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1144 attach = (pst_item_attach*) xmalloc(sizeof(pst_item_attach));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1145 memset(attach, 0, sizeof(pst_item_attach));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1146 attach->next = item->attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1147 item->attach = attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1148 attach->data = item->email->encrypted_htmlbody;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1149 attach->size = item->email->encrypted_htmlbody_size;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1150 item->email->encrypted_htmlbody = NULL;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1151 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1152 write_email_body(f_output, "The body of this email is encrypted. This isn't supported yet, but the body is now an attachment\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1153 }
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1154
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1155 // other attachments
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1156 {
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1157 pst_item_attach* attach;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1158 attach_num = 0;
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1159 for (attach = item->attach; attach; attach = attach->next) {
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1160 DEBUG_EMAIL(("Attempting Attachment encoding\n"));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1161 if (!attach->data) {
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1162 DEBUG_EMAIL(("Data of attachment is NULL!. Size is supposed to be %i\n", attach->size));
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1163 }
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1164 if (mode == MODE_SEPARATE && !mode_MH)
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1165 write_separate_attachment(f_name, attach, ++attach_num, pst);
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1166 else
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1167 write_inline_attachment(f_output, attach, boundary, pst);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1168 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1169 }
125
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1170
23a36ac0514d recover dropped pragma pack line, use int64_t rather than off_t to avoid forcing users of the shared library to enable large file support.
Carl Byington <carl@five-ten-sg.com>
parents: 123
diff changeset
1171 // end of this mail message
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1172 if (mode != MODE_SEPARATE) { /* do not add a boundary after the last attachment for mode_MH */
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1173 DEBUG_EMAIL(("Writing buffer between emails\n"));
121
8399ef94c11b strip and regenerate all MIME headers to avoid duplicates.
Carl Byington <carl@five-ten-sg.com>
parents: 120
diff changeset
1174 fprintf(f_output, "\n--%s--\n", boundary);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1175 fprintf(f_output, "\n\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1176 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1177 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1178 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1179
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1180
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1181 void write_vcard(FILE* f_output, pst_item_contact* contact, char comment[])
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1182 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1183 // We can only call rfc escape once per printf, since the second call
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1184 // may free the buffer returned by the first call.
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1185 // I had tried to place those into a single printf - Carl.
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1186
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1187 DEBUG_ENT("write_vcard");
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1188 // the specification I am following is (hopefully) RFC2426 vCard Mime Directory Profile
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1189 fprintf(f_output, "BEGIN:VCARD\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1190 fprintf(f_output, "FN:%s\n", pst_rfc2426_escape(contact->fullname));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1191
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1192 //fprintf(f_output, "N:%s;%s;%s;%s;%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1193 fprintf(f_output, "N:%s;", (!contact->surname) ? "" : pst_rfc2426_escape(contact->surname));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1194 fprintf(f_output, "%s;", (!contact->first_name) ? "" : pst_rfc2426_escape(contact->first_name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1195 fprintf(f_output, "%s;", (!contact->middle_name) ? "" : pst_rfc2426_escape(contact->middle_name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1196 fprintf(f_output, "%s;", (!contact->display_name_prefix) ? "" : pst_rfc2426_escape(contact->display_name_prefix));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1197 fprintf(f_output, "%s\n", (!contact->suffix) ? "" : pst_rfc2426_escape(contact->suffix));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1198
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1199 if (contact->nickname)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1200 fprintf(f_output, "NICKNAME:%s\n", pst_rfc2426_escape(contact->nickname));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1201 if (contact->address1)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1202 fprintf(f_output, "EMAIL:%s\n", pst_rfc2426_escape(contact->address1));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1203 if (contact->address2)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1204 fprintf(f_output, "EMAIL:%s\n", pst_rfc2426_escape(contact->address2));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1205 if (contact->address3)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1206 fprintf(f_output, "EMAIL:%s\n", pst_rfc2426_escape(contact->address3));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1207 if (contact->birthday)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1208 fprintf(f_output, "BDAY:%s\n", pst_rfc2425_datetime_format(contact->birthday));
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1209
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1210 if (contact->home_address) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1211 //fprintf(f_output, "ADR;TYPE=home:%s;%s;%s;%s;%s;%s;%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1212 fprintf(f_output, "ADR;TYPE=home:%s;", (!contact->home_po_box) ? "" : pst_rfc2426_escape(contact->home_po_box));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1213 fprintf(f_output, "%s;", ""); // extended Address
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1214 fprintf(f_output, "%s;", (!contact->home_street) ? "" : pst_rfc2426_escape(contact->home_street));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1215 fprintf(f_output, "%s;", (!contact->home_city) ? "" : pst_rfc2426_escape(contact->home_city));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1216 fprintf(f_output, "%s;", (!contact->home_state) ? "" : pst_rfc2426_escape(contact->home_state));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1217 fprintf(f_output, "%s;", (!contact->home_postal_code) ? "" : pst_rfc2426_escape(contact->home_postal_code));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1218 fprintf(f_output, "%s\n", (!contact->home_country) ? "" : pst_rfc2426_escape(contact->home_country));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1219 fprintf(f_output, "LABEL;TYPE=home:%s\n", pst_rfc2426_escape(contact->home_address));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1220 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1221
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1222 if (contact->business_address) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1223 //fprintf(f_output, "ADR;TYPE=work:%s;%s;%s;%s;%s;%s;%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1224 fprintf(f_output, "ADR;TYPE=work:%s;", (!contact->business_po_box) ? "" : pst_rfc2426_escape(contact->business_po_box));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1225 fprintf(f_output, "%s;", ""); // extended Address
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1226 fprintf(f_output, "%s;", (!contact->business_street) ? "" : pst_rfc2426_escape(contact->business_street));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1227 fprintf(f_output, "%s;", (!contact->business_city) ? "" : pst_rfc2426_escape(contact->business_city));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1228 fprintf(f_output, "%s;", (!contact->business_state) ? "" : pst_rfc2426_escape(contact->business_state));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1229 fprintf(f_output, "%s;", (!contact->business_postal_code) ? "" : pst_rfc2426_escape(contact->business_postal_code));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1230 fprintf(f_output, "%s\n", (!contact->business_country) ? "" : pst_rfc2426_escape(contact->business_country));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1231 fprintf(f_output, "LABEL;TYPE=work:%s\n", pst_rfc2426_escape(contact->business_address));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1232 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1233
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1234 if (contact->other_address) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1235 //fprintf(f_output, "ADR;TYPE=postal:%s;%s;%s;%s;%s;%s;%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1236 fprintf(f_output, "ADR;TYPE=postal:%s;",(!contact->other_po_box) ? "" : pst_rfc2426_escape(contact->other_po_box));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1237 fprintf(f_output, "%s;", ""); // extended Address
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1238 fprintf(f_output, "%s;", (!contact->other_street) ? "" : pst_rfc2426_escape(contact->other_street));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1239 fprintf(f_output, "%s;", (!contact->other_city) ? "" : pst_rfc2426_escape(contact->other_city));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1240 fprintf(f_output, "%s;", (!contact->other_state) ? "" : pst_rfc2426_escape(contact->other_state));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1241 fprintf(f_output, "%s;", (!contact->other_postal_code) ? "" : pst_rfc2426_escape(contact->other_postal_code));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1242 fprintf(f_output, "%s\n", (!contact->other_country) ? "" : pst_rfc2426_escape(contact->other_country));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1243 fprintf(f_output, "LABEL;TYPE=postal:%s\n", pst_rfc2426_escape(contact->other_address));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1244 }
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1245
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1246 if (contact->business_fax) fprintf(f_output, "TEL;TYPE=work,fax:%s\n", pst_rfc2426_escape(contact->business_fax));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1247 if (contact->business_phone) fprintf(f_output, "TEL;TYPE=work,voice:%s\n", pst_rfc2426_escape(contact->business_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1248 if (contact->business_phone2) fprintf(f_output, "TEL;TYPE=work,voice:%s\n", pst_rfc2426_escape(contact->business_phone2));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1249 if (contact->car_phone) fprintf(f_output, "TEL;TYPE=car,voice:%s\n", pst_rfc2426_escape(contact->car_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1250 if (contact->home_fax) fprintf(f_output, "TEL;TYPE=home,fax:%s\n", pst_rfc2426_escape(contact->home_fax));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1251 if (contact->home_phone) fprintf(f_output, "TEL;TYPE=home,voice:%s\n", pst_rfc2426_escape(contact->home_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1252 if (contact->home_phone2) fprintf(f_output, "TEL;TYPE=home,voice:%s\n", pst_rfc2426_escape(contact->home_phone2));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1253 if (contact->isdn_phone) fprintf(f_output, "TEL;TYPE=isdn:%s\n", pst_rfc2426_escape(contact->isdn_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1254 if (contact->mobile_phone) fprintf(f_output, "TEL;TYPE=cell,voice:%s\n", pst_rfc2426_escape(contact->mobile_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1255 if (contact->other_phone) fprintf(f_output, "TEL;TYPE=msg:%s\n", pst_rfc2426_escape(contact->other_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1256 if (contact->pager_phone) fprintf(f_output, "TEL;TYPE=pager:%s\n", pst_rfc2426_escape(contact->pager_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1257 if (contact->primary_fax) fprintf(f_output, "TEL;TYPE=fax,pref:%s\n", pst_rfc2426_escape(contact->primary_fax));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1258 if (contact->primary_phone) fprintf(f_output, "TEL;TYPE=phone,pref:%s\n", pst_rfc2426_escape(contact->primary_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1259 if (contact->radio_phone) fprintf(f_output, "TEL;TYPE=pcs:%s\n", pst_rfc2426_escape(contact->radio_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1260 if (contact->telex) fprintf(f_output, "TEL;TYPE=bbs:%s\n", pst_rfc2426_escape(contact->telex));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1261 if (contact->job_title) fprintf(f_output, "TITLE:%s\n", pst_rfc2426_escape(contact->job_title));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1262 if (contact->profession) fprintf(f_output, "ROLE:%s\n", pst_rfc2426_escape(contact->profession));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1263 if (contact->assistant_name || contact->assistant_phone) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1264 fprintf(f_output, "AGENT:BEGIN:VCARD\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1265 if (contact->assistant_name) fprintf(f_output, "FN:%s\n", pst_rfc2426_escape(contact->assistant_name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1266 if (contact->assistant_phone) fprintf(f_output, "TEL:%s\n", pst_rfc2426_escape(contact->assistant_phone));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1267 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1268 if (contact->company_name) fprintf(f_output, "ORG:%s\n", pst_rfc2426_escape(contact->company_name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1269 if (comment) fprintf(f_output, "NOTE:%s\n", pst_rfc2426_escape(comment));
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1270
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1271 fprintf(f_output, "VERSION: 3.0\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1272 fprintf(f_output, "END:VCARD\n\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1273 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1274 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1275
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1276
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1277 void write_appointment(FILE* f_output, pst_item_appointment* appointment,
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1278 pst_item_email* email, FILETIME* create_date, FILETIME* modify_date)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1279 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1280 fprintf(f_output, "BEGIN:VEVENT\n");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1281 if (create_date)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1282 fprintf(f_output, "CREATED:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1283 pst_rfc2445_datetime_format(create_date));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1284 if (modify_date)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1285 fprintf(f_output, "LAST-MOD:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1286 pst_rfc2445_datetime_format(modify_date));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1287 if (email && email->subject)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1288 fprintf(f_output, "SUMMARY:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1289 pst_rfc2426_escape(email->subject->subj));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1290 if (email && email->body)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1291 fprintf(f_output, "DESCRIPTION:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1292 pst_rfc2426_escape(email->body));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1293 if (appointment && appointment->start)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1294 fprintf(f_output, "DTSTART;VALUE=DATE-TIME:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1295 pst_rfc2445_datetime_format(appointment->start));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1296 if (appointment && appointment->end)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1297 fprintf(f_output, "DTEND;VALUE=DATE-TIME:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1298 pst_rfc2445_datetime_format(appointment->end));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1299 if (appointment && appointment->location)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1300 fprintf(f_output, "LOCATION:%s\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1301 pst_rfc2426_escape(appointment->location));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1302 if (appointment) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1303 switch (appointment->showas) {
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1304 case PST_FREEBUSY_TENTATIVE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1305 fprintf(f_output, "STATUS:TENTATIVE\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1306 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1307 case PST_FREEBUSY_FREE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1308 // mark as transparent and as confirmed
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1309 fprintf(f_output, "TRANSP:TRANSPARENT\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1310 case PST_FREEBUSY_BUSY:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1311 case PST_FREEBUSY_OUT_OF_OFFICE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1312 fprintf(f_output, "STATUS:CONFIRMED\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1313 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1314 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1315 switch (appointment->label) {
50
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1316 case PST_APP_LABEL_NONE:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1317 fprintf(f_output, "CATEGORIES:NONE\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1318 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1319 case PST_APP_LABEL_IMPORTANT:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1320 fprintf(f_output, "CATEGORIES:IMPORTANT\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1321 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1322 case PST_APP_LABEL_BUSINESS:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1323 fprintf(f_output, "CATEGORIES:BUSINESS\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1324 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1325 case PST_APP_LABEL_PERSONAL:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1326 fprintf(f_output, "CATEGORIES:PERSONAL\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1327 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1328 case PST_APP_LABEL_VACATION:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1329 fprintf(f_output, "CATEGORIES:VACATION\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1330 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1331 case PST_APP_LABEL_MUST_ATTEND:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1332 fprintf(f_output, "CATEGORIES:MUST-ATTEND\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1333 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1334 case PST_APP_LABEL_TRAVEL_REQ:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1335 fprintf(f_output, "CATEGORIES:TRAVEL-REQUIRED\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1336 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1337 case PST_APP_LABEL_NEEDS_PREP:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1338 fprintf(f_output, "CATEGORIES:NEEDS-PREPARATION\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1339 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1340 case PST_APP_LABEL_BIRTHDAY:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1341 fprintf(f_output, "CATEGORIES:BIRTHDAY\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1342 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1343 case PST_APP_LABEL_ANNIVERSARY:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1344 fprintf(f_output, "CATEGORIES:ANNIVERSARY\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1345 break;
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1346 case PST_APP_LABEL_PHONE_CALL:
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1347 fprintf(f_output, "CATEGORIES:PHONE-CALL\n");
fb3818370dd6 more fixes for 64 bit format
carl
parents: 48
diff changeset
1348 break;
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1349 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1350 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1351 fprintf(f_output, "END:VEVENT\n\n");
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1352 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1353
31
b88ceb81dba2 mege changes from Joe Nahmias
carl
parents: 28
diff changeset
1354
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1355 void create_enter_dir(struct file_ll* f, pst_item *item)
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1356 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1357 f->email_count = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1358 f->skip_count = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1359 f->type = item->type;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1360 f->stored_count = (item->folder) ? item->folder->email_count : 0;
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1361
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1362 DEBUG_ENT("create_enter_dir");
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1363 if (mode == MODE_KMAIL)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1364 f->name = mk_kmail_dir(item->file_as); //create directory and form filename
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1365 else if (mode == MODE_RECURSE)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1366 f->name = mk_recurse_dir(item->file_as);
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1367 else if (mode == MODE_SEPARATE) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1368 // do similar stuff to recurse here.
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1369 mk_separate_dir(item->file_as);
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1370 f->name = (char*) xmalloc(10);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1371 memset(f->name, 0, 10);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1372 // sprintf(f->name, SEP_MAIL_FILE_TEMPLATE, f->email_count);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1373 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1374 f->name = (char*) xmalloc(strlen(item->file_as)+strlen(OUTPUT_TEMPLATE)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1375 sprintf(f->name, OUTPUT_TEMPLATE, item->file_as);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1376 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1377
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1378 f->dname = (char*) xmalloc(strlen(item->file_as)+1);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1379 strcpy(f->dname, item->file_as);
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1380
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1381 if (overwrite != 1) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1382 int x = 0;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1383 char *temp = (char*) xmalloc (strlen(f->name)+10); //enough room for 10 digits
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1384
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1385 sprintf(temp, "%s", f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1386 check_filename(temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1387 while ((f->output = fopen(temp, "r"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1388 DEBUG_MAIN(("need to increase filename because one already exists with that name\n"));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1389 DEBUG_MAIN(("- increasing it to %s%d\n", f->name, x));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1390 x++;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1391 sprintf(temp, "%s%08d", f->name, x);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1392 DEBUG_MAIN(("- trying \"%s\"\n", f->name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1393 if (x == 99999999) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1394 DIE(("create_enter_dir: Why can I not create a folder %s? I have tried %i extensions...\n", f->name, x));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1395 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1396 fclose(f->output);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1397 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1398 if (x > 0) { //then the f->name should change
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1399 free (f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1400 f->name = temp;
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1401 } else {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1402 free(temp);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1403 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1404 }
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1405
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1406 DEBUG_MAIN(("f->name = %s\nitem->folder_name = %s\n", f->name, item->file_as));
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1407 if (mode != MODE_SEPARATE) {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1408 check_filename(f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1409 if (!(f->output = fopen(f->name, "w"))) {
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1410 DIE(("create_enter_dir: Could not open file \"%s\" for write\n", f->name));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1411 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1412 }
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1413 DEBUG_RET();
25
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1414 }
73e8959cd86b patches from Arne
carl
parents: 21
diff changeset
1415
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1416
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1417 void close_enter_dir(struct file_ll *f)
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1418 {
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1419 DEBUG_MAIN(("main: Email Count for folder %s is %i\n", f->dname, f->email_count));
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1420 if (output_mode != OUTPUT_QUIET)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1421 printf("\t\"%s\" - %i items done, skipped %i, should have been %i\n",
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1422 f->dname, f->email_count, f->skip_count, f->stored_count);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1423 if (f->output) fclose(f->output);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1424 free(f->name);
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1425 free(f->dname);
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1426
43
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1427 if (mode == MODE_KMAIL)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1428 close_kmail_dir();
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1429 else if (mode == MODE_RECURSE)
f6db1f060a95 start on outlook 2003 64 bit format
carl
parents: 41
diff changeset
1430 close_recurse_dir();
77
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1431 else if (mode == MODE_SEPARATE)
87216aefc6df spelling fixup
Carl Byington <carl@five-ten-sg.com>
parents: 75
diff changeset
1432 close_separate_dir();
39
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1433 }
2ad7ef0a3c4f more valgrind fixes
carl
parents: 38
diff changeset
1434