annotate src/readpst.c @ 113:f04499f1ef90

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