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.%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 ()
void mk_kmail_dir (char *fname)
int close_kmail_dir ()
void mk_recurse_dir (char *dir)
int close_recurse_dir ()
void mk_separate_dir (char *dir)
int close_separate_dir ()
void mk_separate_file (struct file_ll *f, int32_t t, 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)
char * quote_string (char *inp)
 Backslash-escape quotes and backslashes in the given string.
int grim_reaper (int waitall)
int main (int argc, char *const *argv)
char * item_type_to_name (int32_t item_type)
int32_t reduced_item_type (int32_t item_type)
int header_match (char *header, char *field)

Variables

const char * prog_name
char * output_dir = "."
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 104 of file readpst.c.

Referenced by main().

#define CMODE_VCARD   0

Definition at line 103 of file readpst.c.

Referenced by main(), and process().

#define DMODE_EXCLUDE   0

Definition at line 107 of file readpst.c.

#define DMODE_INCLUDE   1

Definition at line 108 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 99 of file readpst.c.

Referenced by write_inline_attachment().

#define MODE_KMAIL   1

Definition at line 80 of file readpst.c.

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

#define MODE_NORMAL   0

Definition at line 76 of file readpst.c.

Referenced by write_embedded_message().

#define MODE_RECURSE   2

Definition at line 84 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 112 of file readpst.c.

Referenced by main(), and process().

#define OTMODE_CONTACT   8

Definition at line 114 of file readpst.c.

Referenced by main(), and process().

#define OTMODE_EMAIL   1

Definition at line 111 of file readpst.c.

Referenced by main(), and process().

#define OTMODE_JOURNAL   4

Definition at line 113 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 93 of file readpst.c.

#define OUTPUT_QUIET   1

Definition at line 96 of file readpst.c.

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

#define OUTPUT_TEMPLATE   "%s.%s"

Definition at line 12 of file readpst.c.

Referenced by create_enter_dir().

#define RFC822   "message/rfc822"

Definition at line 100 of file readpst.c.

Referenced by find_rfc822_headers(), and write_normal_email().

#define RTF_ATTACH_NAME   "rtf-body.rtf"

Definition at line 118 of file readpst.c.

Referenced by write_normal_email().

#define RTF_ATTACH_TYPE   "application/rtf"

Definition at line 120 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 1035 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 1014 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 795 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, and DIE.

Referenced by close_enter_dir().

int close_recurse_dir (  ) 

Definition at line 872 of file readpst.c.

References DEBUG_ENT, DEBUG_RET, and DIE.

Referenced by close_enter_dir().

int close_separate_dir (  ) 

Definition at line 941 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 970 of file readpst.c.

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

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 1379 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 1408 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 155 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 1328 of file readpst.c.

Referenced by header_get_subfield(), and header_strip_field().

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

Definition at line 1318 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 1287 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 1276 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:

int header_match ( char *  header,
char *  field 
)

Definition at line 1236 of file readpst.c.

References DEBUG_INFO.

Referenced by valid_headers().

void header_strip_field ( char *  header,
char *  field 
)

Definition at line 1338 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:

char* item_type_to_name ( int32_t  item_type  ) 
int main ( int  argc,
char *const *  argv 
)
void mk_kmail_dir ( char *  fname  ) 

Definition at line 764 of file readpst.c.

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

Referenced by create_enter_dir().

Here is the call graph for this function:

void mk_recurse_dir ( char *  dir  ) 

Definition at line 854 of file readpst.c.

References check_filename(), D_MKDIR, DEBUG_ENT, DEBUG_RET, and DIE.

Referenced by create_enter_dir().

Here is the call graph for this function:

void mk_separate_dir ( char *  dir  ) 

Definition at line 884 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,
int32_t  t,
char *  extension,
int  openit 
)

Definition at line 953 of file readpst.c.

References check_filename(), DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DIE, file_ll::item_count, item_type_to_name(), 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 989 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 
)
char * quote_string ( char *  inp  ) 

Backslash-escape quotes and backslashes in the given string.

Definition at line 1158 of file readpst.c.

Referenced by write_inline_attachment().

int32_t reduced_item_type ( int32_t  item_type  ) 
void removeCR ( char *  c  ) 

Definition at line 702 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 1360 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 203 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 717 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 1247 of file readpst.c.

References DEBUG_INFO, and header_match().

Referenced by write_normal_email().

Here is the call graph for this function:

void version ( void   ) 

Definition at line 750 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 682 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 2032 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 1538 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 1515 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 1496 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 1867 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 140 of file readpst.c.

Referenced by acceptable_ext(), and main().

Definition at line 145 of file readpst.c.

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

Definition at line 146 of file readpst.c.

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

int contact_mode = 0

Definition at line 129 of file readpst.c.

Referenced by main(), and process().

Definition at line 132 of file readpst.c.

Referenced by main().

char* default_charset = NULL

Definition at line 139 of file readpst.c.

Referenced by main().

int deleted_mode = 0

Definition at line 130 of file readpst.c.

Referenced by main(), and process().

int file_name_len = 10

Definition at line 136 of file readpst.c.

Referenced by create_enter_dir(), and main().

sem_t* global_children = NULL

Definition at line 150 of file readpst.c.

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

Definition at line 144 of file readpst.c.

Referenced by main().

int max_children = 0

Definition at line 143 of file readpst.c.

Referenced by main(), and try_fork().

Definition at line 138 of file readpst.c.

Referenced by find_html_charset(), and main().

int mode = 0

Definition at line 123 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 125 of file readpst.c.

Referenced by main(), and process().

int mode_MH = 0

Definition at line 124 of file readpst.c.

Referenced by main(), and process().

int mode_MSG = 0

Definition at line 126 of file readpst.c.

Referenced by main(), and process().

int mode_thunder = 0

Definition at line 127 of file readpst.c.

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

Definition at line 142 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 128 of file readpst.c.

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

sem_t* output_mutex = NULL

Definition at line 151 of file readpst.c.

Referenced by main().

int output_type_mode = 0xff

Definition at line 131 of file readpst.c.

Referenced by main(), and process().

int overwrite = 0

Definition at line 133 of file readpst.c.

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

int prefer_utf8 = 0

Definition at line 134 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 137 of file readpst.c.

int save_rtf_body = 1

Definition at line 135 of file readpst.c.

Referenced by main(), and process().

Definition at line 149 of file readpst.c.

Referenced by main().


Generated on 26 Mar 2020 for 'LibPst' by  doxygen 1.6.1