#include "define.h"
Include dependency graph for libpst.c:
Go to the source code of this file.
Data Structures | |
struct | pst_block_offset |
struct | pst_block_offset_pointer |
struct | pst_holder |
struct | pst_subblock |
struct | pst_subblocks |
struct | pst_mapi_element |
struct | pst_mapi_object |
struct | pst_desc32 |
struct | pst_index32 |
struct | pst_table_ptr_struct32 |
struct | pst_desc |
struct | pst_index |
struct | pst_table_ptr_struct |
struct | pst_block_header |
struct | pst_id2_assoc32 |
struct | pst_id2_assoc |
struct | pst_table3_rec32 |
struct | pst_table3_rec |
struct | pst_block_hdr |
struct | pst_x_attrib |
Defines | |
#define | ASSERT(x) { if(!(x)) raise( SIGSEGV ); } |
#define | INDEX_TYPE32 0x0E |
#define | INDEX_TYPE32A 0x0F |
#define | INDEX_TYPE64 0x17 |
#define | INDEX_TYPE64A 0x15 |
#define | INDEX_TYPE_OFFSET (int64_t)0x0A |
#define | FILE_SIZE_POINTER32 (int64_t)0xA8 |
#define | INDEX_POINTER32 (int64_t)0xC4 |
#define | INDEX_BACK32 (int64_t)0xC0 |
#define | SECOND_POINTER32 (int64_t)0xBC |
#define | SECOND_BACK32 (int64_t)0xB8 |
#define | ENC_TYPE32 (int64_t)0x1CD |
#define | FILE_SIZE_POINTER64 (int64_t)0xB8 |
#define | INDEX_POINTER64 (int64_t)0xF0 |
#define | INDEX_BACK64 (int64_t)0xE8 |
#define | SECOND_POINTER64 (int64_t)0xE0 |
#define | SECOND_BACK64 (int64_t)0xD8 |
#define | ENC_TYPE64 (int64_t)0x201 |
#define | FILE_SIZE_POINTER ((pf->do_read64) ? FILE_SIZE_POINTER64 : FILE_SIZE_POINTER32) |
#define | INDEX_POINTER ((pf->do_read64) ? INDEX_POINTER64 : INDEX_POINTER32) |
#define | INDEX_BACK ((pf->do_read64) ? INDEX_BACK64 : INDEX_BACK32) |
#define | SECOND_POINTER ((pf->do_read64) ? SECOND_POINTER64 : SECOND_POINTER32) |
#define | SECOND_BACK ((pf->do_read64) ? SECOND_BACK64 : SECOND_BACK32) |
#define | ENC_TYPE ((pf->do_read64) ? ENC_TYPE64 : ENC_TYPE32) |
#define | PST_SIGNATURE 0x4E444221 |
#define | ITEM_COUNT_OFFSET32 0x1f0 |
#define | LEVEL_INDICATOR_OFFSET32 0x1f3 |
#define | BACKLINK_OFFSET32 0x1f8 |
#define | ITEM_SIZE32 12 |
#define | DESC_SIZE32 16 |
#define | INDEX_COUNT_MAX32 41 |
#define | DESC_COUNT_MAX32 31 |
#define | ITEM_COUNT_OFFSET64 0x1e8 |
#define | LEVEL_INDICATOR_OFFSET64 0x1eb |
#define | BACKLINK_OFFSET64 0x1f8 |
#define | ITEM_SIZE64 24 |
#define | DESC_SIZE64 32 |
#define | INDEX_COUNT_MAX64 20 |
#define | DESC_COUNT_MAX64 15 |
#define | BLOCK_SIZE 512 |
#define | DESC_BLOCK_SIZE 512 |
#define | ITEM_COUNT_OFFSET (size_t)((pf->do_read64) ? ITEM_COUNT_OFFSET64 : ITEM_COUNT_OFFSET32) |
#define | LEVEL_INDICATOR_OFFSET (size_t)((pf->do_read64) ? LEVEL_INDICATOR_OFFSET64 : LEVEL_INDICATOR_OFFSET32) |
#define | BACKLINK_OFFSET (size_t)((pf->do_read64) ? BACKLINK_OFFSET64 : BACKLINK_OFFSET32) |
#define | ITEM_SIZE (size_t)((pf->do_read64) ? ITEM_SIZE64 : ITEM_SIZE32) |
#define | DESC_SIZE (size_t)((pf->do_read64) ? DESC_SIZE64 : DESC_SIZE32) |
#define | INDEX_COUNT_MAX (int32_t)((pf->do_read64) ? INDEX_COUNT_MAX64 : INDEX_COUNT_MAX32) |
#define | DESC_COUNT_MAX (int32_t)((pf->do_read64) ? DESC_COUNT_MAX64 : DESC_COUNT_MAX32) |
#define | SAFE_FREE(x) {if (x) free(x);} |
#define | SAFE_FREE_STR(x) SAFE_FREE(x.str) |
#define | SAFE_FREE_BIN(x) SAFE_FREE(x.data) |
#define | MALLOC_EMAIL(x) { if (!x->email) { x->email = (pst_item_email*) pst_malloc(sizeof(pst_item_email)); memset(x->email, 0, sizeof(pst_item_email) );} } |
#define | MALLOC_FOLDER(x) { if (!x->folder) { x->folder = (pst_item_folder*) pst_malloc(sizeof(pst_item_folder)); memset(x->folder, 0, sizeof(pst_item_folder) );} } |
#define | MALLOC_CONTACT(x) { if (!x->contact) { x->contact = (pst_item_contact*) pst_malloc(sizeof(pst_item_contact)); memset(x->contact, 0, sizeof(pst_item_contact) );} } |
#define | MALLOC_MESSAGESTORE(x) { if (!x->message_store) { x->message_store = (pst_item_message_store*) pst_malloc(sizeof(pst_item_message_store)); memset(x->message_store, 0, sizeof(pst_item_message_store));} } |
#define | MALLOC_JOURNAL(x) { if (!x->journal) { x->journal = (pst_item_journal*) pst_malloc(sizeof(pst_item_journal)); memset(x->journal, 0, sizeof(pst_item_journal) );} } |
#define | MALLOC_APPOINTMENT(x) { if (!x->appointment) { x->appointment = (pst_item_appointment*) pst_malloc(sizeof(pst_item_appointment)); memset(x->appointment, 0, sizeof(pst_item_appointment) );} } |
#define | LIST_COPY(targ, type) |
#define | LIST_COPY_CSTR(targ) |
#define | LIST_COPY_BOOL(label, targ) |
#define | LIST_COPY_EMAIL_BOOL(label, targ) |
#define | LIST_COPY_CONTACT_BOOL(label, targ) |
#define | LIST_COPY_APPT_BOOL(label, targ) |
#define | LIST_COPY_INT16_N(targ) |
#define | LIST_COPY_INT16(label, targ) |
#define | LIST_COPY_INT32_N(targ) |
#define | LIST_COPY_INT32(label, targ) |
#define | LIST_COPY_EMAIL_INT32(label, targ) |
#define | LIST_COPY_APPT_INT32(label, targ) |
#define | LIST_COPY_FOLDER_INT32(label, targ) |
#define | LIST_COPY_STORE_INT32(label, targ) |
#define | LIST_COPY_ENUM(label, targ, delta, count,) |
#define | LIST_COPY_EMAIL_ENUM(label, targ, delta, count,) |
#define | LIST_COPY_APPT_ENUM(label, targ, delta, count,) |
#define | LIST_COPY_ENUM16(label, targ, delta, count,) |
#define | LIST_COPY_CONTACT_ENUM16(label, targ, delta, count,) |
#define | LIST_COPY_ENTRYID(label, targ) |
#define | LIST_COPY_EMAIL_ENTRYID(label, targ) |
#define | LIST_COPY_STORE_ENTRYID(label, targ) |
#define | LIST_COPY_STR(label, targ) |
#define | LIST_COPY_EMAIL_STR(label, targ) |
#define | LIST_COPY_CONTACT_STR(label, targ) |
#define | LIST_COPY_APPT_STR(label, targ) |
#define | LIST_COPY_JOURNAL_STR(label, targ) |
#define | LIST_COPY_TIME(label, targ) |
#define | LIST_COPY_EMAIL_TIME(label, targ) |
#define | LIST_COPY_CONTACT_TIME(label, targ) |
#define | LIST_COPY_APPT_TIME(label, targ) |
#define | LIST_COPY_JOURNAL_TIME(label, targ) |
#define | LIST_COPY_BIN(targ) |
#define | LIST_COPY_EMAIL_BIN(label, targ) |
#define | LIST_COPY_APPT_BIN(label, targ) |
#define | NULL_CHECK(x) { if (!x) { DEBUG_WARN(("NULL_CHECK: Null Found\n")); break;} } |
Typedefs | |
typedef pst_block_offset | pst_block_offset |
typedef pst_block_offset_pointer | pst_block_offset_pointer |
typedef pst_holder | pst_holder |
typedef pst_subblock | pst_subblock |
typedef pst_subblocks | pst_subblocks |
typedef pst_mapi_element | pst_mapi_element |
typedef pst_mapi_object | pst_mapi_object |
typedef pst_desc32 | pst_desc32 |
typedef pst_index32 | pst_index32 |
typedef pst_desc | pst_desc |
typedef pst_index | pst_index |
typedef pst_block_header | pst_block_header |
typedef pst_id2_assoc32 | pst_id2_assoc32 |
typedef pst_id2_assoc | pst_id2_assoc |
typedef pst_table3_rec32 | pst_table3_rec32 |
typedef pst_table3_rec | pst_table3_rec |
typedef pst_block_hdr | pst_block_hdr |
typedef pst_x_attrib | pst_x_attrib |
Functions | |
size_t | pst_append_holder (pst_holder *h, size_t size, char **buf, size_t z) |
int | pst_build_desc_ptr (pst_file *pf, int64_t offset, int32_t depth, uint64_t linku1, uint64_t start_val, uint64_t end_val) |
pst_id2_tree * | pst_build_id2 (pst_file *pf, pst_index_ll *list) |
int | pst_build_id_ptr (pst_file *pf, int64_t offset, int32_t depth, uint64_t linku1, uint64_t start_val, uint64_t end_val) |
Process the index1 b-tree from the pst file and create the pf->i_head linked list from it. | |
int | pst_chr_count (char *str, char x) |
size_t | pst_ff_compile_ID (pst_file *pf, uint64_t i_id, pst_holder *h, size_t size) |
size_t | pst_ff_getIDblock (pst_file *pf, uint64_t i_id, char **buf) |
size_t | pst_ff_getID2block (pst_file *pf, uint64_t id2, pst_id2_tree *id2_head, char **buf) |
size_t | pst_ff_getID2data (pst_file *pf, pst_index_ll *ptr, pst_holder *h) |
size_t | pst_finish_cleanup_holder (pst_holder *h, size_t size) |
void | pst_free_attach (pst_item_attach *attach) |
void | pst_free_desc (pst_desc_tree *head) |
void | pst_free_id2 (pst_id2_tree *head) |
void | pst_free_id (pst_index_ll *head) |
void | pst_free_list (pst_mapi_object *list) |
void | pst_free_xattrib (pst_x_attrib_ll *x) |
size_t | pst_getAtPos (pst_file *pf, int64_t pos, void *buf, size_t size) |
int | pst_getBlockOffsetPointer (pst_file *pf, pst_id2_tree *i2_head, pst_subblocks *subblocks, uint32_t offset, pst_block_offset_pointer *p) |
int | pst_getBlockOffset (char *buf, size_t read_size, uint32_t i_offset, uint32_t offset, pst_block_offset *p) |
pst_id2_tree * | pst_getID2 (pst_id2_tree *ptr, uint64_t id) |
pst_desc_tree * | pst_getDptr (pst_file *pf, uint64_t d_id) |
uint64_t | pst_getIntAt (pst_file *pf, char *buf) |
uint64_t | pst_getIntAtPos (pst_file *pf, int64_t pos) |
pst_mapi_object * | pst_parse_block (pst_file *pf, uint64_t block_id, pst_id2_tree *i2_head) |
void | pst_printDptr (pst_file *pf, pst_desc_tree *ptr) |
void | pst_printID2ptr (pst_id2_tree *ptr) |
int | pst_process (pst_mapi_object *list, pst_item *item, pst_item_attach *attach) |
size_t | pst_read_block_size (pst_file *pf, int64_t offset, size_t size, char **buf) |
int | pst_decrypt (uint64_t i_id, char *buf, size_t size, unsigned char type) |
int | pst_stricmp (char *a, char *b) |
int | pst_strincmp (char *a, char *b, size_t x) |
char * | pst_wide_to_single (char *wt, size_t size) |
int | pst_open (pst_file *pf, const char *name) |
Open a pst file. | |
int | pst_reopen (pst_file *pf) |
Reopen the pst file after a fork. | |
int | pst_close (pst_file *pf) |
Close a pst file. | |
void | add_descriptor_to_list (pst_desc_tree *node, pst_desc_tree **head, pst_desc_tree **tail) |
add a pst descriptor node to a linked list of such nodes. | |
void | record_descriptor (pst_file *pf, pst_desc_tree *node) |
add a pst descriptor node into the global tree. | |
pst_id2_tree * | deep_copy (pst_id2_tree *head) |
make a deep copy of part of the id2 mapping tree, for use by an attachment containing an embedded rfc822 message. | |
pst_desc_tree * | pst_getTopOfFolders (pst_file *pf, const pst_item *root) |
Get the top of folders descriptor tree. | |
pst_binary | pst_attach_to_mem (pst_file *pf, pst_item_attach *attach) |
Assemble the binary attachment into a single buffer. | |
size_t | pst_attach_to_file (pst_file *pf, pst_item_attach *attach, FILE *fp) |
Write a binary attachment to a file. | |
size_t | pst_attach_to_file_base64 (pst_file *pf, pst_item_attach *attach, FILE *fp) |
Write a binary attachment base64 encoded to a file. | |
int | pst_load_index (pst_file *pf) |
Load the index entries from the pst file. | |
pst_desc_tree * | pst_getNextDptr (pst_desc_tree *d) |
Walk the descriptor tree. | |
int | pst_load_extended_attributes (pst_file *pf) |
Load the extended attribute mapping table from the pst file. | |
size_t | pst_decode_desc (pst_file *pf, pst_desc *desc, char *buf) |
size_t | pst_decode_table (pst_file *pf, struct pst_table_ptr_struct *table, char *buf) |
size_t | pst_decode_index (pst_file *pf, pst_index *index, char *buf) |
size_t | pst_decode_assoc (pst_file *pf, pst_id2_assoc *assoc, char *buf) |
size_t | pst_decode_type3 (pst_file *pf, pst_table3_rec *table3_rec, char *buf) |
pst_item * | pst_parse_item (pst_file *pf, pst_desc_tree *d_ptr, pst_id2_tree *m_head) |
Assemble a mapi object from a descriptor pointer. | |
Variables | |
unsigned char | comp_enc [] |
for "compressible" encryption, just a simple substitution cipher, plaintext = comp_enc[ciphertext]; for "strong" encryption, this is the first rotor of an Enigma 3 rotor cipher. | |
unsigned char | comp_high1 [] |
for "strong" encryption, this is the second rotor of an Enigma 3 rotor cipher. | |
unsigned char | comp_high2 [] |
for "strong" encryption, this is the third rotor of an Enigma 3 rotor cipher. |
|
|
|
Definition at line 815 of file libpst.c. Referenced by pst_build_id_ptr(). |
|
|
|
|
|
Definition at line 811 of file libpst.c. Referenced by pst_build_id_ptr(). |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 47 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
Definition at line 42 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
Definition at line 44 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
Definition at line 818 of file libpst.c. Referenced by pst_build_id_ptr(). |
|
|
|
|
|
Definition at line 43 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
Definition at line 22 of file libpst.c. Referenced by pst_open(). |
|
Definition at line 23 of file libpst.c. Referenced by pst_open(). |
|
Definition at line 24 of file libpst.c. Referenced by pst_open(). |
|
Definition at line 25 of file libpst.c. Referenced by pst_open(). |
|
Definition at line 26 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
|
|
|
|
Definition at line 798 of file libpst.c. Referenced by pst_build_id_ptr(). |
|
|
|
|
|
|
|
|
|
Value: { \
targ = type realloc(targ, list->elements[x]->size+1); \
memcpy(targ, list->elements[x]->data, list->elements[x]->size);\
memset(((char*)targ)+list->elements[x]->size, 0, (size_t)1); \
}
|
|
Value: { \ MALLOC_APPOINTMENT(item); \ LIST_COPY_BIN(targ); \ DEBUG_INFO((label"\n")); \ DEBUG_HEXDUMP(targ.data, targ.size); \ } |
|
Value: { \ MALLOC_APPOINTMENT(item); \ LIST_COPY_BOOL(label, targ) \ } |
|
Value: { \ MALLOC_APPOINTMENT(item); \ LIST_COPY_ENUM(label, targ, delta, count, __VA_ARGS__); \ } |
|
Value: { \ MALLOC_APPOINTMENT(item); \ LIST_COPY_INT32(label, targ); \ } |
|
Value: { \ MALLOC_APPOINTMENT(item); \ LIST_COPY_STR(label, targ); \ } |
|
Value: { \ MALLOC_APPOINTMENT(item); \ LIST_COPY_TIME(label, targ); \ } |
|
Value: { \ targ.size = list->elements[x]->size; \ if (targ.size) { \ targ.data = (char*)realloc(targ.data, targ.size); \ memcpy(targ.data, list->elements[x]->data, targ.size); \ } \ else { \ SAFE_FREE_BIN(targ); \ targ.data = NULL; \ } \ } |
|
Value: { \ if (list->elements[x]->type != 0x0b) { \ DEBUG_WARN(("src not 0x0b for boolean dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ if (*(int16_t*)list->elements[x]->data) { \ DEBUG_INFO((label" - True\n")); \ targ = 1; \ } else { \ DEBUG_INFO((label" - False\n")); \ targ = 0; \ } \ } |
|
Value: { \ MALLOC_CONTACT(item); \ LIST_COPY_BOOL(label, targ) \ } |
|
Value: { \ MALLOC_CONTACT(item); \ LIST_COPY_ENUM16(label, targ, delta, count, __VA_ARGS__); \ } |
|
Value: { \ MALLOC_CONTACT(item); \ LIST_COPY_STR(label, targ); \ } |
|
Value: { \ MALLOC_CONTACT(item); \ LIST_COPY_TIME(label, targ); \ } |
|
Value: { \ if ((list->elements[x]->type == 0x1f) || \ (list->elements[x]->type == 0x1e) || \ (list->elements[x]->type == 0x102)) { \ LIST_COPY(targ, (char*)) \ } \ else { \ DEBUG_WARN(("src not 0x1e or 0x1f or 0x102 for string dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ SAFE_FREE(targ); \ targ = NULL; \ } \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_BIN(targ); \ DEBUG_INFO((label"\n")); \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_BOOL(label, targ) \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_ENTRYID(label, targ); \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_ENUM(label, targ, delta, count, __VA_ARGS__); \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_INT32(label, targ); \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_STR(label, targ); \ } |
|
Value: { \ MALLOC_EMAIL(item); \ LIST_COPY_TIME(label, targ); \ } |
|
Value: { \ LIST_COPY(targ, (pst_entryid*)); \ LE32_CPU(targ->u1); \ LE32_CPU(targ->id); \ DEBUG_INFO((label" u1=%#x, id=%#x\n", targ->u1, targ->id));\ } |
|
Value: { \ char *tlabels[] = {__VA_ARGS__}; \ LIST_COPY_INT32_N(targ); \ targ += delta; \ DEBUG_INFO((label" - %s [%i]\n", \ (((int)targ < 0) || ((int)targ >= count)) \ ? "**invalid" \ : tlabels[(int)targ], (int)targ)); \ } |
|
Value: { \ char *tlabels[] = {__VA_ARGS__}; \ LIST_COPY_INT16_N(targ); \ targ += delta; \ DEBUG_INFO((label" - %s [%i]\n", \ (((int)targ < 0) || ((int)targ >= count)) \ ? "**invalid" \ : tlabels[(int)targ], (int)targ)); \ } |
|
Value: { \ MALLOC_FOLDER(item); \ LIST_COPY_INT32(label, targ); \ } |
|
Value: { \ LIST_COPY_INT16_N(targ); \ DEBUG_INFO((label" - %i %#x\n", (int)targ, (int)targ)); \ } |
|
Value: { \ if (list->elements[x]->type != 0x02) { \ DEBUG_WARN(("src not 0x02 for int16 dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ memcpy(&(targ), list->elements[x]->data, sizeof(targ)); \ LE16_CPU(targ); \ } |
|
Value: { \ LIST_COPY_INT32_N(targ); \ DEBUG_INFO((label" - %i %#x\n", (int)targ, (int)targ)); \ } |
|
Value: { \ if (list->elements[x]->type != 0x03) { \ DEBUG_WARN(("src not 0x03 for int32 dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ memcpy(&(targ), list->elements[x]->data, sizeof(targ)); \ LE32_CPU(targ); \ } |
|
Value: { \ MALLOC_JOURNAL(item); \ LIST_COPY_STR(label, targ); \ } |
|
Value: { \ MALLOC_JOURNAL(item); \ LIST_COPY_TIME(label, targ); \ } |
|
Value: { \ MALLOC_MESSAGESTORE(item); \ LIST_COPY_ENTRYID(label, targ); \ } |
|
Value: { \ MALLOC_MESSAGESTORE(item); \ LIST_COPY_INT32(label, targ); \ } |
|
Value: { \ LIST_COPY_CSTR(targ.str); \ targ.is_utf8 = (list->elements[x]->type == 0x1f) ? 1 : 0; \ DEBUG_INFO((label" - unicode %d - %s\n", targ.is_utf8, targ.str)); \ } |
|
Value: { \ if (list->elements[x]->type != 0x40) { \ DEBUG_WARN(("src not 0x40 for filetime dst\n")); \ DEBUG_HEXDUMP(list->elements[x]->data, list->elements[x]->size); \ } \ targ = (FILETIME*) realloc(targ, sizeof(FILETIME)); \ memcpy(targ, list->elements[x]->data, list->elements[x]->size); \ LE32_CPU(targ->dwLowDateTime); \ LE32_CPU(targ->dwHighDateTime); \ DEBUG_INFO((label" - %s", pst_fileTimeToAscii(targ, time_buffer))); \ } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Definition at line 46 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
Definition at line 45 of file libpst.c. Referenced by pst_open(). |
|
|
|
|
|
|
|
|
|
|
|
|
|
Referenced by pst_decode_desc(). |
|
Referenced by pst_decode_desc(). |
|
|
|
Referenced by pst_decode_assoc(). |
|
Referenced by pst_decode_assoc(). |
|
Referenced by pst_decode_index(). |
|
Referenced by pst_decode_index(). |
|
|
|
|
|
|
|
|
|
Referenced by pst_decode_type3(). |
|
Referenced by pst_decode_type3(). |
|
|
|
add a pst descriptor node to a linked list of such nodes.
Definition at line 409 of file libpst.c. References DEBUG_ENT, DEBUG_RET, pst_desc_tree::next, pst_mapi_object::next, and pst_desc_tree::prev. Referenced by record_descriptor(). |
|
make a deep copy of part of the id2 mapping tree, for use by an attachment containing an embedded rfc822 message.
Definition at line 498 of file libpst.c. References pst_id2_tree::child, pst_id2_tree::id, pst_id2_tree::id2, pst_id2_tree::next, and pst_malloc(). Referenced by pst_parse_item(). |
Here is the call graph for this function:
|
|
|
Write a binary attachment to a file.
Definition at line 566 of file libpst.c. References pst_item_attach::data, pst_binary::data, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_item_attach::i_id, pst_ff_getID2data(), pst_fwrite(), pst_getID(), and pst_binary::size. Referenced by write_separate_attachment(). |
Here is the call graph for this function:
|
Write a binary attachment base64 encoded to a file.
Definition at line 590 of file libpst.c. References pst_item_attach::data, pst_binary::data, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_item_attach::i_id, pst_base64_encode(), pst_ff_getID2data(), pst_fwrite(), pst_getID(), and pst_binary::size. |
Here is the call graph for this function:
|
Assemble the binary attachment into a single buffer.
Definition at line 542 of file libpst.c. References pst_binary::data, pst_item_attach::data, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_item_attach::i_id, pst_ff_getID2data(), pst_getID(), and pst_binary::size. |
Here is the call graph for this function:
|
Referenced by pst_load_index(). |
|
Referenced by pst_load_extended_attributes(), and pst_parse_item(). |
|
Process the index1 b-tree from the pst file and create the pf->i_head linked list from it. This tree holds the location (offset and size) of lower level objects (0xbcec descriptor blocks, etc) in the pst file. Definition at line 975 of file libpst.c. References BACKLINK_OFFSET, BLOCK_SIZE, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::i_head, pst_file::i_tail, pst_index::id, INDEX_COUNT_MAX, ITEM_SIZE32, pst_index_ll::next, pst_table_ptr_struct::offset, pst_index::offset, pst_decode_index(), pst_decode_table(), pst_getIntAt(), pst_malloc(), pst_read_block_size(), pst_index::size, pst_table_ptr_struct::start, pst_table_ptr_struct::u1, and pst_index::u1. Referenced by pst_load_index(). |
Here is the call graph for this function:
|
|
|
Close a pst file.
Definition at line 380 of file libpst.c. References pst_file::cwd, pst_file::d_head, DEBUG_ENT, DEBUG_RET, DEBUG_WARN, pst_file::fname, pst_file::fp, pst_file::i_head, pst_free_desc(), pst_free_id(), pst_free_xattrib(), and pst_file::x_head. Referenced by main(). |
Here is the call graph for this function:
|
Definition at line 919 of file libpst.c. References pst_id2_assoc32::child_id, pst_id2_assoc::child_id, DEBUG_HEXDUMPC, DEBUG_INFO, pst_file::do_read64, pst_id2_assoc32::id, pst_id2_assoc::id, pst_id2_assoc32::id2, pst_id2_assoc::id2, LE32_CPU, LE64_CPU, pst_id2_assoc, and pst_id2_assoc32. |
|
Definition at line 823 of file libpst.c. References pst_desc32::d_id, pst_desc::d_id, DEBUG_HEXDUMPC, DEBUG_INFO, pst_desc32::desc_id, pst_desc::desc_id, pst_file::do_read64, LE32_CPU, LE64_CPU, pst_desc32::parent_d_id, pst_desc::parent_d_id, pst_desc, pst_desc32, pst_desc32::tree_id, pst_desc::tree_id, and pst_desc::u1. |
|
Definition at line 886 of file libpst.c. References DEBUG_HEXDUMPC, DEBUG_INFO, pst_file::do_read64, pst_index32::id, pst_index::id, LE16_CPU, LE32_CPU, LE64_CPU, pst_index32::offset, pst_index::offset, pst_index, pst_index32, pst_index32::size, pst_index::size, pst_index::u0, pst_index32::u1, and pst_index::u1. Referenced by pst_build_id_ptr(). |
|
Definition at line 857 of file libpst.c. References DEBUG_HEXDUMPC, DEBUG_INFO, pst_file::do_read64, LE32_CPU, LE64_CPU, pst_table_ptr_struct32::offset, pst_table_ptr_struct::offset, pst_table_ptr_struct32::start, pst_table_ptr_struct::start, pst_table_ptr_struct32::u1, and pst_table_ptr_struct::u1. Referenced by pst_build_id_ptr(). |
|
Definition at line 947 of file libpst.c. References DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, pst_file::do_read64, pst_table3_rec32::id, pst_table3_rec::id, LE32_CPU, LE64_CPU, pst_table3_rec, and pst_table3_rec32. |
|
|
|
|
|
|
|
Referenced by pst_attach_to_file(), pst_attach_to_file_base64(), and pst_attach_to_mem(). |
|
|
|
|
|
|
|
Referenced by pst_close(). |
|
Referenced by pst_close(). |
|
Referenced by pst_load_extended_attributes(), and pst_parse_item(). |
|
Referenced by pst_load_extended_attributes(), and pst_parse_item(). |
|
Referenced by pst_close(). |
|
Referenced by pst_open(). |
|
|
|
|
|
Referenced by pst_getTopOfFolders(), pst_load_extended_attributes(), and record_descriptor(). |
|
Referenced by pst_parse_item(). |
|
Referenced by pst_build_id_ptr(). |
|
Referenced by pst_open(). |
|
Walk the descriptor tree.
Definition at line 640 of file libpst.c. References pst_desc_tree::child, DEBUG_ENT, DEBUG_RET, pst_desc_tree::next, and pst_desc_tree::parent. Referenced by dumper(). |
|
Get the top of folders descriptor tree. This is the main descriptor tree that needs to be walked to look at every item in the pst file.
Definition at line 510 of file libpst.c. References pst_desc_tree::assoc_tree, pst_desc_tree::d_id, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_desc_tree::desc, pst_entryid::id, pst_item::message_store, pst_desc_tree::parent_d_id, pst_getDptr(), pst_malloc(), record_descriptor(), and pst_item_message_store::top_of_personal_folder. Referenced by main(). |
Here is the call graph for this function:
|
Load the extended attribute mapping table from the pst file.
Definition at line 664 of file libpst.c. References pst_desc_tree::assoc_tree, pst_mapi_object::count_elements, pst_mapi_element::data, DEBUG_ENT, DEBUG_HEXDUMPC, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_desc_tree::desc, pst_mapi_object::elements, pst_x_attrib::extended, pst_index_ll::i_id, LE32_CPU, pst_x_attrib::map, pst_x_attrib_ll::map, pst_mapi_element::mapi_id, pst_x_attrib_ll::next, pst_build_id2(), pst_free_id2(), pst_free_list(), pst_getDptr(), PST_LE_GET_UINT16, PST_LE_GET_UINT32, pst_malloc(), pst_parse_block(), pst_printID2ptr(), pst_wide_to_single(), pst_mapi_element::size, pst_mapi_element::type, pst_x_attrib::type, and pst_file::x_head. Referenced by main(). |
Here is the call graph for this function:
|
Load the index entries from the pst file. This loads both the i_id linked list, and the d_id tree, and should normally be the first call after pst_open().
Definition at line 618 of file libpst.c. References pst_file::d_head, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, pst_file::index1, pst_file::index1_back, pst_file::index2, pst_file::index2_back, pst_build_desc_ptr(), pst_build_id_ptr(), and pst_printDptr(). Referenced by main(). |
Here is the call graph for this function:
|
Open a pst file.
Definition at line 293 of file libpst.c. References DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, ENC_TYPE, FILE_SIZE_POINTER, INDEX_BACK, INDEX_POINTER, INDEX_TYPE32, INDEX_TYPE32A, INDEX_TYPE64, INDEX_TYPE64A, INDEX_TYPE_OFFSET, LE32_CPU, pst_getAtPos(), pst_getIntAtPos(), pst_malloc(), pst_unicode_init(), SECOND_BACK, SECOND_POINTER, and WARN. Referenced by main(). |
Here is the call graph for this function:
|
Referenced by pst_load_extended_attributes(), and pst_parse_item(). |
|
Assemble a mapi object from a descriptor pointer. append (buf,z) data to the output destination (h,size)
finish cleanup for base64 encoding to a file with extra bytes left over
Convert a code page integer into a string suitable for iconv()
Get the default character set for this item. This is used to find the charset for pst_string elements that are not already in utf8 encoding.
Convert str to utf8 if possible; null strings are preserved.
Convert str to utf8 if possible; null strings are converted into empty strings.
Decode raw recurrence data into a better structure.
Free a recurrence structure.
Definition at line 1209 of file libpst.c. References pst_desc_tree::assoc_tree, pst_item::attach, pst_id2_tree::child, pst_mapi_object::count_objects, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, DEBUG_WARN, deep_copy(), pst_desc_tree::desc, pst_index_ll::i_id, pst_item_attach::i_id, pst_id2_tree::id, pst_item_attach::id2_head, pst_item_attach::id2_val, pst_item_attach::next, pst_build_id2(), pst_free_id2(), pst_free_list(), pst_freeItem(), pst_getID2(), pst_item, pst_item_attach, pst_malloc(), pst_parse_block(), pst_printID2ptr(), and pst_process(). |
Here is the call graph for this function:
|
Referenced by pst_load_index(). |
|
Referenced by pst_load_extended_attributes(), and pst_parse_item(). |
|
Referenced by pst_parse_item(). |
|
Referenced by pst_build_id_ptr(). |
|
Reopen the pst file after a fork.
Definition at line 370 of file libpst.c. References pst_file::cwd, pst_file::fname, and pst_file::fp. Referenced by try_fork(). |
|
|
|
|
|
Referenced by pst_load_extended_attributes(). |
|
add a pst descriptor node into the global tree.
Definition at line 433 of file libpst.c. References add_descriptor_to_list(), pst_desc_tree::child, pst_desc_tree::child_tail, pst_file::d_head, pst_desc_tree::d_id, pst_file::d_tail, DEBUG_ENT, DEBUG_INFO, DEBUG_RET, pst_desc_tree::next, pst_desc_tree::no_child, pst_desc_tree::parent, pst_desc_tree::parent_d_id, pst_desc_tree::prev, and pst_getDptr(). Referenced by pst_getTopOfFolders(). |
Here is the call graph for this function:
|
Initial value: { 0x47, 0xf1, 0xb4, 0xe6, 0x0b, 0x6a, 0x72, 0x48, 0x85, 0x4e, 0x9e, 0xeb, 0xe2, 0xf8, 0x94, 0x53, 0xe0, 0xbb, 0xa0, 0x02, 0xe8, 0x5a, 0x09, 0xab, 0xdb, 0xe3, 0xba, 0xc6, 0x7c, 0xc3, 0x10, 0xdd, 0x39, 0x05, 0x96, 0x30, 0xf5, 0x37, 0x60, 0x82, 0x8c, 0xc9, 0x13, 0x4a, 0x6b, 0x1d, 0xf3, 0xfb, 0x8f, 0x26, 0x97, 0xca, 0x91, 0x17, 0x01, 0xc4, 0x32, 0x2d, 0x6e, 0x31, 0x95, 0xff, 0xd9, 0x23, 0xd1, 0x00, 0x5e, 0x79, 0xdc, 0x44, 0x3b, 0x1a, 0x28, 0xc5, 0x61, 0x57, 0x20, 0x90, 0x3d, 0x83, 0xb9, 0x43, 0xbe, 0x67, 0xd2, 0x46, 0x42, 0x76, 0xc0, 0x6d, 0x5b, 0x7e, 0xb2, 0x0f, 0x16, 0x29, 0x3c, 0xa9, 0x03, 0x54, 0x0d, 0xda, 0x5d, 0xdf, 0xf6, 0xb7, 0xc7, 0x62, 0xcd, 0x8d, 0x06, 0xd3, 0x69, 0x5c, 0x86, 0xd6, 0x14, 0xf7, 0xa5, 0x66, 0x75, 0xac, 0xb1, 0xe9, 0x45, 0x21, 0x70, 0x0c, 0x87, 0x9f, 0x74, 0xa4, 0x22, 0x4c, 0x6f, 0xbf, 0x1f, 0x56, 0xaa, 0x2e, 0xb3, 0x78, 0x33, 0x50, 0xb0, 0xa3, 0x92, 0xbc, 0xcf, 0x19, 0x1c, 0xa7, 0x63, 0xcb, 0x1e, 0x4d, 0x3e, 0x4b, 0x1b, 0x9b, 0x4f, 0xe7, 0xf0, 0xee, 0xad, 0x3a, 0xb5, 0x59, 0x04, 0xea, 0x40, 0x55, 0x25, 0x51, 0xe5, 0x7a, 0x89, 0x38, 0x68, 0x52, 0x7b, 0xfc, 0x27, 0xae, 0xd7, 0xbd, 0xfa, 0x07, 0xf4, 0xcc, 0x8e, 0x5f, 0xef, 0x35, 0x9c, 0x84, 0x2b, 0x15, 0xd5, 0x77, 0x34, 0x49, 0xb6, 0x12, 0x0a, 0x7f, 0x71, 0x88, 0xfd, 0x9d, 0x18, 0x41, 0x7d, 0x93, 0xd8, 0x58, 0x2c, 0xce, 0xfe, 0x24, 0xaf, 0xde, 0xb8, 0x36, 0xc8, 0xa1, 0x80, 0xa6, 0x99, 0x98, 0xa8, 0x2f, 0x0e, 0x81, 0x65, 0x73, 0xe4, 0xc2, 0xa2, 0x8a, 0xd4, 0xe1, 0x11, 0xd0, 0x08, 0x8b, 0x2a, 0xf2, 0xed, 0x9a, 0x64, 0x3f, 0xc1, 0x6c, 0xf9, 0xec }
|
|
Initial value: { 0x41, 0x36, 0x13, 0x62, 0xa8, 0x21, 0x6e, 0xbb, 0xf4, 0x16, 0xcc, 0x04, 0x7f, 0x64, 0xe8, 0x5d, 0x1e, 0xf2, 0xcb, 0x2a, 0x74, 0xc5, 0x5e, 0x35, 0xd2, 0x95, 0x47, 0x9e, 0x96, 0x2d, 0x9a, 0x88, 0x4c, 0x7d, 0x84, 0x3f, 0xdb, 0xac, 0x31, 0xb6, 0x48, 0x5f, 0xf6, 0xc4, 0xd8, 0x39, 0x8b, 0xe7, 0x23, 0x3b, 0x38, 0x8e, 0xc8, 0xc1, 0xdf, 0x25, 0xb1, 0x20, 0xa5, 0x46, 0x60, 0x4e, 0x9c, 0xfb, 0xaa, 0xd3, 0x56, 0x51, 0x45, 0x7c, 0x55, 0x00, 0x07, 0xc9, 0x2b, 0x9d, 0x85, 0x9b, 0x09, 0xa0, 0x8f, 0xad, 0xb3, 0x0f, 0x63, 0xab, 0x89, 0x4b, 0xd7, 0xa7, 0x15, 0x5a, 0x71, 0x66, 0x42, 0xbf, 0x26, 0x4a, 0x6b, 0x98, 0xfa, 0xea, 0x77, 0x53, 0xb2, 0x70, 0x05, 0x2c, 0xfd, 0x59, 0x3a, 0x86, 0x7e, 0xce, 0x06, 0xeb, 0x82, 0x78, 0x57, 0xc7, 0x8d, 0x43, 0xaf, 0xb4, 0x1c, 0xd4, 0x5b, 0xcd, 0xe2, 0xe9, 0x27, 0x4f, 0xc3, 0x08, 0x72, 0x80, 0xcf, 0xb0, 0xef, 0xf5, 0x28, 0x6d, 0xbe, 0x30, 0x4d, 0x34, 0x92, 0xd5, 0x0e, 0x3c, 0x22, 0x32, 0xe5, 0xe4, 0xf9, 0x9f, 0xc2, 0xd1, 0x0a, 0x81, 0x12, 0xe1, 0xee, 0x91, 0x83, 0x76, 0xe3, 0x97, 0xe6, 0x61, 0x8a, 0x17, 0x79, 0xa4, 0xb7, 0xdc, 0x90, 0x7a, 0x5c, 0x8c, 0x02, 0xa6, 0xca, 0x69, 0xde, 0x50, 0x1a, 0x11, 0x93, 0xb9, 0x52, 0x87, 0x58, 0xfc, 0xed, 0x1d, 0x37, 0x49, 0x1b, 0x6a, 0xe0, 0x29, 0x33, 0x99, 0xbd, 0x6c, 0xd9, 0x94, 0xf3, 0x40, 0x54, 0x6f, 0xf0, 0xc6, 0x73, 0xb8, 0xd6, 0x3e, 0x65, 0x18, 0x44, 0x1f, 0xdd, 0x67, 0x10, 0xf1, 0x0c, 0x19, 0xec, 0xae, 0x03, 0xa1, 0x14, 0x7b, 0xa9, 0x0b, 0xff, 0xf8, 0xa3, 0xc0, 0xa2, 0x01, 0xf7, 0x2e, 0xbc, 0x24, 0x68, 0x75, 0x0d, 0xfe, 0xba, 0x2f, 0xb5, 0xd0, 0xda, 0x3d }
|
|
Initial value: { 0x14, 0x53, 0x0f, 0x56, 0xb3, 0xc8, 0x7a, 0x9c, 0xeb, 0x65, 0x48, 0x17, 0x16, 0x15, 0x9f, 0x02, 0xcc, 0x54, 0x7c, 0x83, 0x00, 0x0d, 0x0c, 0x0b, 0xa2, 0x62, 0xa8, 0x76, 0xdb, 0xd9, 0xed, 0xc7, 0xc5, 0xa4, 0xdc, 0xac, 0x85, 0x74, 0xd6, 0xd0, 0xa7, 0x9b, 0xae, 0x9a, 0x96, 0x71, 0x66, 0xc3, 0x63, 0x99, 0xb8, 0xdd, 0x73, 0x92, 0x8e, 0x84, 0x7d, 0xa5, 0x5e, 0xd1, 0x5d, 0x93, 0xb1, 0x57, 0x51, 0x50, 0x80, 0x89, 0x52, 0x94, 0x4f, 0x4e, 0x0a, 0x6b, 0xbc, 0x8d, 0x7f, 0x6e, 0x47, 0x46, 0x41, 0x40, 0x44, 0x01, 0x11, 0xcb, 0x03, 0x3f, 0xf7, 0xf4, 0xe1, 0xa9, 0x8f, 0x3c, 0x3a, 0xf9, 0xfb, 0xf0, 0x19, 0x30, 0x82, 0x09, 0x2e, 0xc9, 0x9d, 0xa0, 0x86, 0x49, 0xee, 0x6f, 0x4d, 0x6d, 0xc4, 0x2d, 0x81, 0x34, 0x25, 0x87, 0x1b, 0x88, 0xaa, 0xfc, 0x06, 0xa1, 0x12, 0x38, 0xfd, 0x4c, 0x42, 0x72, 0x64, 0x13, 0x37, 0x24, 0x6a, 0x75, 0x77, 0x43, 0xff, 0xe6, 0xb4, 0x4b, 0x36, 0x5c, 0xe4, 0xd8, 0x35, 0x3d, 0x45, 0xb9, 0x2c, 0xec, 0xb7, 0x31, 0x2b, 0x29, 0x07, 0x68, 0xa3, 0x0e, 0x69, 0x7b, 0x18, 0x9e, 0x21, 0x39, 0xbe, 0x28, 0x1a, 0x5b, 0x78, 0xf5, 0x23, 0xca, 0x2a, 0xb0, 0xaf, 0x3e, 0xfe, 0x04, 0x8c, 0xe7, 0xe5, 0x98, 0x32, 0x95, 0xd3, 0xf6, 0x4a, 0xe8, 0xa6, 0xea, 0xe9, 0xf3, 0xd5, 0x2f, 0x70, 0x20, 0xf2, 0x1f, 0x05, 0x67, 0xad, 0x55, 0x10, 0xce, 0xcd, 0xe3, 0x27, 0x3b, 0xda, 0xba, 0xd7, 0xc2, 0x26, 0xd4, 0x91, 0x1d, 0xd2, 0x1c, 0x22, 0x33, 0xf8, 0xfa, 0xf1, 0x5a, 0xef, 0xcf, 0x90, 0xb6, 0x8b, 0xb5, 0xbd, 0xc0, 0xbf, 0x08, 0x97, 0x1e, 0x6c, 0xe2, 0x61, 0xe0, 0xc6, 0xc1, 0x59, 0xab, 0xbb, 0x58, 0xde, 0x5f, 0xdf, 0x60, 0x79, 0x7e, 0xb2, 0x8a }
|