readpst.c File Reference

#include "define.h"
#include "lzfu.h"
#include "msg.h"
Include dependency graph for readpst.c:

Go to the source code of this file.

Data Structures

struct  file_ll

Defines

#define OUTPUT_TEMPLATE   "%s"
#define OUTPUT_KMAIL_DIR_TEMPLATE   ".%s.directory"
#define KMAIL_INDEX   ".%s.index"
#define SEP_MAIL_FILE_TEMPLATE   "%i%s"
#define C_TIME_SIZE   500
#define MODE_NORMAL   0
#define MODE_KMAIL   1
#define MODE_RECURSE   2
#define MODE_SEPARATE   3
#define OUTPUT_NORMAL   0
#define OUTPUT_QUIET   1
#define MIME_TYPE_DEFAULT   "application/octet-stream"
#define RFC822   "message/rfc822"
#define CMODE_VCARD   0
#define CMODE_LIST   1
#define DMODE_EXCLUDE   0
#define DMODE_INCLUDE   1
#define OTMODE_EMAIL   1
#define OTMODE_APPOINTMENT   2
#define OTMODE_JOURNAL   4
#define OTMODE_CONTACT   8
#define RTF_ATTACH_NAME   "rtf-body.rtf"
#define RTF_ATTACH_TYPE   "application/rtf"

Functions

int grim_reaper ()
pid_t try_fork (char *folder)
void process (pst_item *outeritem, pst_desc_tree *d_ptr)
void write_email_body (FILE *f, char *body)
void removeCR (char *c)
void usage ()
void version ()
char * mk_kmail_dir (char *fname)
int close_kmail_dir ()
char * mk_recurse_dir (char *dir, int32_t folder_type)
int close_recurse_dir ()
char * mk_separate_dir (char *dir)
int close_separate_dir ()
void mk_separate_file (struct file_ll *f, char *extension, int openit)
void close_separate_file (struct file_ll *f)
char * my_stristr (char *haystack, char *needle)
void check_filename (char *fname)
int acceptable_ext (pst_item_attach *attach)
 check if the file name extension is acceptable.
void write_separate_attachment (char f_name[], pst_item_attach *attach, int attach_num, pst_file *pst)
void write_embedded_message (FILE *f_output, pst_item_attach *attach, char *boundary, pst_file *pf, int save_rtf, char **extra_mime_headers)
void write_inline_attachment (FILE *f_output, pst_item_attach *attach, char *boundary, pst_file *pst)
int valid_headers (char *header)
void header_has_field (char *header, char *field, int *flag)
void header_get_subfield (char *field, const char *subfield, char *body_subfield, size_t size_subfield)
char * header_get_field (char *header, char *field)
char * header_end_field (char *field)
void header_strip_field (char *header, char *field)
int test_base64 (char *body, size_t len)
void find_html_charset (char *html, char *charset, size_t charsetlen)
void find_rfc822_headers (char **extra_mime_headers)
void write_body_part (FILE *f_output, pst_string *body, char *mime, char *charset, char *boundary, pst_file *pst)
void write_schedule_part_data (FILE *f_output, pst_item *item, const char *sender, const char *method)
void write_schedule_part (FILE *f_output, pst_item *item, const char *sender, const char *boundary)
void write_normal_email (FILE *f_output, char f_name[], pst_item *item, int mode, int mode_MH, pst_file *pst, int save_rtf, int embedding, char **extra_mime_headers)
void write_vcard (FILE *f_output, pst_item *item, pst_item_contact *contact, char comment[])
int write_extra_categories (FILE *f_output, pst_item *item)
 write extra vcard or vcalendar categories from the extra keywords fields
void write_journal (FILE *f_output, pst_item *item)
void write_appointment (FILE *f_output, pst_item *item)
void create_enter_dir (struct file_ll *f, pst_item *item)
void close_enter_dir (struct file_ll *f)
int grim_reaper (int waitall)
int main (int argc, char *const *argv)

Variables

const char * prog_name
char * output_dir = "."
char * kmail_chdir = NULL
int mode = 0
int mode_MH = 0
int mode_EX = 0
int mode_MSG = 0
int mode_thunder = 0
int output_mode = 0
int contact_mode = 0
int deleted_mode = 0
int output_type_mode = 0xff
int contact_mode_specified = 0
int overwrite = 0
int prefer_utf8 = 0
int save_rtf_body = 1
int file_name_len = 10
pst_file pstfile
regex_t meta_charset_pattern
char * default_charset = NULL
char * acceptable_extensions = NULL
int number_processors = 1
int max_children = 0
int max_child_specified = 0
int active_children
pid_t * child_processes
int shared_memory_id
sem_t * global_children = NULL
sem_t * output_mutex = NULL

Define Documentation

#define C_TIME_SIZE   500

Definition at line 18 of file readpst.c.

#define CMODE_LIST   1

Definition at line 105 of file readpst.c.

Referenced by main().

#define CMODE_VCARD   0

Definition at line 104 of file readpst.c.

Referenced by main(), and process().

#define DMODE_EXCLUDE   0

Definition at line 108 of file readpst.c.

#define DMODE_INCLUDE   1

Definition at line 109 of file readpst.c.

Referenced by main(), and process().

#define KMAIL_INDEX   ".%s.index"

Definition at line 14 of file readpst.c.

Referenced by mk_kmail_dir().

#define MIME_TYPE_DEFAULT   "application/octet-stream"

Definition at line 100 of file readpst.c.

Referenced by write_inline_attachment().

#define MODE_KMAIL   1

Definition at line 81 of file readpst.c.

Referenced by close_enter_dir(), create_enter_dir(), and main().

#define MODE_NORMAL   0

Definition at line 77 of file readpst.c.

Referenced by write_embedded_message().

#define MODE_RECURSE   2

Definition at line 85 of file readpst.c.

Referenced by close_enter_dir(), create_enter_dir(), and main().

#define MODE_SEPARATE   3
#define OTMODE_APPOINTMENT   2

Definition at line 113 of file readpst.c.

Referenced by main(), and process().

#define OTMODE_CONTACT   8

Definition at line 115 of file readpst.c.

Referenced by main(), and process().

#define OTMODE_EMAIL   1

Definition at line 112 of file readpst.c.

Referenced by main(), and process().

#define OTMODE_JOURNAL   4

Definition at line 114 of file readpst.c.

Referenced by main(), and process().

#define OUTPUT_KMAIL_DIR_TEMPLATE   ".%s.directory"

Definition at line 13 of file readpst.c.

Referenced by mk_kmail_dir().

#define OUTPUT_NORMAL   0

Definition at line 94 of file readpst.c.

#define OUTPUT_QUIET   1

Definition at line 97 of file readpst.c.

Referenced by close_enter_dir(), main(), and process().

#define OUTPUT_TEMPLATE   "%s"

Definition at line 12 of file readpst.c.

Referenced by create_enter_dir(), and mk_kmail_dir().

#define RFC822   "message/rfc822"

Definition at line 101 of file readpst.c.

Referenced by find_rfc822_headers(), and write_normal_email().

#define RTF_ATTACH_NAME   "rtf-body.rtf"

Definition at line 119 of file readpst.c.

Referenced by write_normal_email().

#define RTF_ATTACH_TYPE   "application/rtf"

Definition at line 121 of file readpst.c.

Referenced by write_normal_email().

#define SEP_MAIL_FILE_TEMPLATE   "%i%s"

Definition at line 15 of file readpst.c.

Referenced by mk_separate_dir(), and mk_separate_file().


Function Documentation

int acceptable_ext ( pst_item_attach attach  ) 

check if the file name extension is acceptable.

If not, the attachment will be discarded

Parameters:
attach pst attachment object
Returns:
true if the attachment filename contains an extension that we want.

Definition at line 1053 of file readpst.c.

References acceptable_extensions, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_item_attach::filename1, pst_item_attach::filename2, pst_stricmp(), and pst_string::str.

Referenced by write_normal_email().

Here is the call graph for this function:

void check_filename ( char *  fname  ) 

Definition at line 1032 of file readpst.c.

References DEBUG_ENT, and DEBUG_RET.

void close_enter_dir ( struct file_ll f  ) 
int close_kmail_dir (  ) 

Definition at line 832 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, DIE, and kmail_chdir.

Referenced by close_enter_dir().

int close_recurse_dir (  ) 

Definition at line 891 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, and DIE.

Referenced by close_enter_dir().

int close_separate_dir (  ) 

Definition at line 962 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, and DIE.

Referenced by close_enter_dir().

void close_separate_file ( struct file_ll f  ) 

Definition at line 991 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, DEBUG_WARN, file_ll::name, and file_ll::output.

Referenced by process().

void create_enter_dir ( struct file_ll f,
pst_item item 
)
void find_html_charset ( char *  html,
char *  charset,
size_t  charsetlen 
)

Definition at line 1355 of file readpst.c.

References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, and meta_charset_pattern.

Referenced by write_normal_email().

void find_rfc822_headers ( char **  extra_mime_headers  ) 

Definition at line 1384 of file readpst.c.

References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, header_get_field(), and RFC822.

Referenced by write_normal_email().

Here is the call graph for this function:

int grim_reaper ( int  waitall  ) 

Definition at line 156 of file readpst.c.

References active_children, child_processes, DEBUG_INFO, and global_children.

int grim_reaper (  ) 

Referenced by main(), process(), and try_fork().

char * header_end_field ( char *  field  ) 

Definition at line 1304 of file readpst.c.

Referenced by header_get_subfield(), and header_strip_field().

char * header_get_field ( char *  header,
char *  field 
)

Definition at line 1294 of file readpst.c.

References my_stristr().

Referenced by find_rfc822_headers(), header_strip_field(), and write_normal_email().

Here is the call graph for this function:

void header_get_subfield ( char *  field,
const char *  subfield,
char *  body_subfield,
size_t  size_subfield 
)

Definition at line 1263 of file readpst.c.

References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, header_end_field(), and my_stristr().

Referenced by write_normal_email().

Here is the call graph for this function:

void header_has_field ( char *  header,
char *  field,
int *  flag 
)

Definition at line 1252 of file readpst.c.

References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, and my_stristr().

Referenced by write_normal_email().

Here is the call graph for this function:

void header_strip_field ( char *  header,
char *  field 
)

Definition at line 1314 of file readpst.c.

References header_end_field(), and header_get_field().

Referenced by write_normal_email().

Here is the call graph for this function:

int main ( int  argc,
char *const *  argv 
)
char * mk_kmail_dir ( char *  fname  ) 

Definition at line 794 of file readpst.c.

References check_filename(), D_MKDIR, DEBUG_ENT, DEBUG_RET, DIE, kmail_chdir, KMAIL_INDEX, OUTPUT_KMAIL_DIR_TEMPLATE, OUTPUT_TEMPLATE, pst_malloc(), and pst_realloc().

Referenced by create_enter_dir().

Here is the call graph for this function:

char * mk_recurse_dir ( char *  dir,
int32_t  folder_type 
)
char * mk_separate_dir ( char *  dir  ) 

Definition at line 903 of file readpst.c.

References check_filename(), D_MKDIR, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, DIE, overwrite, and SEP_MAIL_FILE_TEMPLATE.

Referenced by create_enter_dir().

Here is the call graph for this function:

void mk_separate_file ( struct file_ll f,
char *  extension,
int  openit 
)

Definition at line 974 of file readpst.c.

References check_filename(), DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DIE, file_ll::item_count, file_ll::name, file_ll::output, and SEP_MAIL_FILE_TEMPLATE.

Referenced by process().

Here is the call graph for this function:

char * my_stristr ( char *  haystack,
char *  needle 
)

Definition at line 1007 of file readpst.c.

Referenced by header_get_field(), header_get_subfield(), and header_has_field().

void process ( pst_item outeritem,
pst_desc_tree d_ptr 
)
void removeCR ( char *  c  ) 

Definition at line 732 of file readpst.c.

References DEBUG_ENT, and DEBUG_RET.

Referenced by write_body_part(), and write_normal_email().

int test_base64 ( char *  body,
size_t  len 
)

Definition at line 1336 of file readpst.c.

References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, and DEBUG_RET.

Referenced by write_body_part().

pid_t try_fork ( char *  folder  ) 

Definition at line 204 of file readpst.c.

References active_children, child_processes, global_children, grim_reaper(), max_children, and pst_reopen().

Referenced by process().

Here is the call graph for this function:

void usage ( void   ) 

Definition at line 747 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, prog_name, and version().

Here is the call graph for this function:

int valid_headers ( char *  header  ) 

Definition at line 1222 of file readpst.c.

References DEBUG_INFO.

Referenced by write_normal_email().

void version ( void   ) 

Definition at line 780 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, and VERSION.

void write_appointment ( FILE *  f_output,
pst_item item 
)
void write_body_part ( FILE *  f_output,
pst_string body,
char *  mime,
char *  charset,
char *  boundary,
pst_file pst 
)
void write_email_body ( FILE *  f,
char *  body 
)

Definition at line 712 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, mode, MODE_SEPARATE, and pst_fwrite().

Referenced by write_body_part().

Here is the call graph for this function:

void write_embedded_message ( FILE *  f_output,
pst_item_attach attach,
char *  boundary,
pst_file pf,
int  save_rtf,
char **  extra_mime_headers 
)
int write_extra_categories ( FILE *  f_output,
pst_item item 
)

write extra vcard or vcalendar categories from the extra keywords fields

Parameters:
f_output open file pointer
item pst item containing the keywords
Returns:
true if we write a categories line

Definition at line 2008 of file readpst.c.

References pst_item::extra_fields, pst_item_extra_field::field_name, pst_item_extra_field::next, pst_rfc2426_escape(), and pst_item_extra_field::value.

Referenced by write_appointment(), and write_vcard().

Here is the call graph for this function:

void write_inline_attachment ( FILE *  f_output,
pst_item_attach attach,
char *  boundary,
pst_file pst 
)
void write_journal ( FILE *  f_output,
pst_item item 
)
void write_normal_email ( FILE *  f_output,
char  f_name[],
pst_item item,
int  mode,
int  mode_MH,
pst_file pst,
int  save_rtf,
int  embedding,
char **  extra_mime_headers 
)

Definition at line 1514 of file readpst.c.

References acceptable_ext(), pst_item::attach, pst_item_email::bcc_address, pst_item::body, C_TIME_SIZE, pst_item_email::cc_address, pst_item_attach::data, pst_binary::data, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_item::email, pst_item_email::encrypted_body, pst_item_email::encrypted_htmlbody, pst_item_attach::filename1, pst_item_attach::filename2, find_html_charset(), find_rfc822_headers(), pst_item::flags, pst_item_email::header, header_get_field(), header_get_subfield(), header_has_field(), header_strip_field(), pst_item_email::htmlbody, pst_item_attach::i_id, pst_string::is_utf8, pst_item_email::messageid, pst_item_attach::method, pst_item_attach::mimetype, MODE_SEPARATE, pst_item_attach::next, pst_item_email::outlook_sender_name, PST_ATTACH_EMBEDDED, pst_convert_utf8(), pst_convert_utf8_null(), pst_default_charset(), pst_fileTimeToUnixTime(), PST_FLAG_READ, pst_lzfu_decompress(), pst_malloc(), pst_rfc2047(), PST_TYPE_REPORT, PST_TYPE_SCHEDULE, removeCR(), pst_item_email::report_text, RFC822, RTF_ATTACH_NAME, RTF_ATTACH_TYPE, pst_item_email::rtf_compressed, pst_item_email::sender_address, pst_item_email::sent_date, pst_item_email::sentto_address, pst_binary::size, pst_string::str, pst_item::subject, pst_item::type, valid_headers(), write_body_part(), write_embedded_message(), write_inline_attachment(), write_schedule_part(), and write_separate_attachment().

Referenced by process(), and write_embedded_message().

Here is the call graph for this function:

void write_schedule_part ( FILE *  f_output,
pst_item item,
const char *  sender,
const char *  boundary 
)

Definition at line 1491 of file readpst.c.

References pst_item::appointment, and write_schedule_part_data().

Referenced by write_normal_email().

Here is the call graph for this function:

void write_schedule_part_data ( FILE *  f_output,
pst_item item,
const char *  sender,
const char *  method 
)

Definition at line 1472 of file readpst.c.

References pst_item::email, pst_item_email::outlook_sender_name, pst_string::str, VERSION, and write_appointment().

Referenced by process(), and write_schedule_part().

Here is the call graph for this function:

void write_separate_attachment ( char  f_name[],
pst_item_attach attach,
int  attach_num,
pst_file pst 
)
void write_vcard ( FILE *  f_output,
pst_item item,
pst_item_contact contact,
char  comment[] 
)

Definition at line 1843 of file readpst.c.

References pst_item_contact::address1, pst_item_contact::address2, pst_item_contact::address3, pst_item_contact::assistant_name, pst_item_contact::assistant_phone, pst_item_contact::birthday, pst_item::body, pst_item_contact::business_address, pst_item_contact::business_city, pst_item_contact::business_country, pst_item_contact::business_fax, pst_item_contact::business_phone, pst_item_contact::business_phone2, pst_item_contact::business_po_box, pst_item_contact::business_postal_code, pst_item_contact::business_state, pst_item_contact::business_street, pst_item_contact::car_phone, pst_item_contact::company_name, DEBUG_ENT, DEBUG_RET, pst_item_contact::display_name_prefix, pst_item_contact::first_name, pst_item_contact::fullname, pst_item_contact::home_address, pst_item_contact::home_city, pst_item_contact::home_country, pst_item_contact::home_fax, pst_item_contact::home_phone, pst_item_contact::home_phone2, pst_item_contact::home_po_box, pst_item_contact::home_postal_code, pst_item_contact::home_state, pst_item_contact::home_street, pst_item_contact::isdn_phone, pst_item_contact::job_title, pst_item_contact::middle_name, pst_item_contact::mobile_phone, pst_item_contact::nickname, pst_item_contact::other_address, pst_item_contact::other_city, pst_item_contact::other_country, pst_item_contact::other_phone, pst_item_contact::other_po_box, pst_item_contact::other_postal_code, pst_item_contact::other_state, pst_item_contact::other_street, pst_item_contact::pager_phone, pst_item_contact::primary_fax, pst_item_contact::primary_phone, pst_item_contact::profession, pst_convert_utf8_null(), pst_rfc2425_datetime_format(), pst_rfc2426_escape(), pst_item_contact::radio_phone, pst_string::str, pst_item_contact::suffix, pst_item_contact::surname, pst_item_contact::telex, and write_extra_categories().

Referenced by process().

Here is the call graph for this function:


Variable Documentation

char* acceptable_extensions = NULL

Definition at line 141 of file readpst.c.

Referenced by acceptable_ext(), and main().

Definition at line 146 of file readpst.c.

Referenced by grim_reaper(), main(), and try_fork().

Definition at line 147 of file readpst.c.

Referenced by grim_reaper(), main(), and try_fork().

int contact_mode = 0

Definition at line 130 of file readpst.c.

Referenced by main(), and process().

Definition at line 133 of file readpst.c.

Referenced by main().

char* default_charset = NULL

Definition at line 140 of file readpst.c.

Referenced by main().

int deleted_mode = 0

Definition at line 131 of file readpst.c.

Referenced by main(), and process().

int file_name_len = 10

Definition at line 137 of file readpst.c.

Referenced by create_enter_dir(), and main().

sem_t* global_children = NULL

Definition at line 151 of file readpst.c.

Referenced by grim_reaper(), main(), process(), and try_fork().

char* kmail_chdir = NULL

Definition at line 73 of file readpst.c.

Referenced by close_kmail_dir(), and mk_kmail_dir().

Definition at line 145 of file readpst.c.

Referenced by main().

int max_children = 0

Definition at line 144 of file readpst.c.

Referenced by main(), and try_fork().

Definition at line 139 of file readpst.c.

Referenced by find_html_charset(), and main().

int mode = 0

Definition at line 124 of file readpst.c.

Referenced by close_enter_dir(), create_enter_dir(), main(), process(), and write_email_body().

int mode_EX = 0

Definition at line 126 of file readpst.c.

Referenced by main(), and process().

int mode_MH = 0

Definition at line 125 of file readpst.c.

Referenced by main(), and process().

int mode_MSG = 0

Definition at line 127 of file readpst.c.

Referenced by main(), and process().

int mode_thunder = 0

Definition at line 128 of file readpst.c.

Referenced by close_enter_dir(), create_enter_dir(), and main().

Definition at line 143 of file readpst.c.

Referenced by main().

char* output_dir = "."

Definition at line 72 of file readpst.c.

Referenced by main().

int output_mode = 0

Definition at line 129 of file readpst.c.

Referenced by close_enter_dir(), main(), and process().

sem_t* output_mutex = NULL

Definition at line 152 of file readpst.c.

Referenced by main().

int output_type_mode = 0xff

Definition at line 132 of file readpst.c.

Referenced by main(), and process().

int overwrite = 0

Definition at line 134 of file readpst.c.

Referenced by create_enter_dir(), main(), and mk_separate_dir().

int prefer_utf8 = 0

Definition at line 135 of file readpst.c.

Referenced by main(), and write_body_part().

const char* prog_name

Definition at line 71 of file readpst.c.

Definition at line 138 of file readpst.c.

int save_rtf_body = 1

Definition at line 136 of file readpst.c.

Referenced by main(), and process().

Definition at line 150 of file readpst.c.

Referenced by main().


Generated on 6 Jul 2016 for 'LibPst' by  doxygen 1.6.1