Mercurial > libpst
diff dumpblocks.c @ 0:6b1b602514db libpst_0_5
Initial revision
author | carl |
---|---|
date | Fri, 09 Jul 2004 07:26:16 -0700 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dumpblocks.c Fri Jul 09 07:26:16 2004 -0700 @@ -0,0 +1,85 @@ +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include "libpst.h" +#include "define.h" + +#define OUT_BUF 20 +int main(int argc, char **argv) { + pst_file pstfile; + pst_index_ll *ptr; + char *outdir=NULL, *file=NULL, *outname=NULL; + unsigned char *buf=NULL; + int c; + FILE *fp; + + while ((c=getopt(argc, argv, "o:"))!=-1) { + switch(c) { + case 'o': + outdir=optarg; + break; + default: + printf("Unknown switch %c\n", c); + } + } + if (optind < argc) { + file = argv[optind]; + } else { + printf("Usage: dumpblocks [options] pstfile\n"); + printf("\tcopies the datablocks from the pst file into seperate files\n"); + printf("Options: \n"); + printf("\t-o target\tSpecify the output directory\n"); + exit(1); + } + DEBUG_INIT("dumpblocks.log"); + DEBUG_REGISTER_CLOSE(); + DEBUG_ENT("main"); + + printf("Opening file %s\n",file); + if (pst_open(&pstfile, file, "r")) { + printf("Failed to open file %s\n", file); + exit(1); + } + + printf("Reading Indexes\n"); + if (pst_load_index(&pstfile)) { + printf("Failed to load indexes in file %s\n", argv[1]); + exit(1); + } + + if (outdir != NULL) + if (chdir(outdir)) { + printf("Failed to change into directory %s\n", outdir); + exit(1); + } + + ptr = pstfile.i_head; + outname = (char*) xmalloc(OUT_BUF); + printf("Saving blocks\n"); + while (ptr != NULL) { + /* if (pstfile.encryption == PST_ENC) { + c = _pst_ff_getIDblock_dec(&pstfile, ptr->id, buf); + } else {*/ + if ((ptr->id & 0x02)==0 && pstfile.encryption == PST_ENC) { + c = _pst_ff_getIDblock_dec(&pstfile, ptr->id, &buf); + } else { + c = _pst_ff_getIDblock(&pstfile, ptr->id, &buf); + } + + if (c > 0) { + snprintf(outname, OUT_BUF, "%x", ptr->id); + if ((fp = fopen(outname, "wb")) == NULL) { + printf("Failed to open file %s\n", outname); + continue; + } + fwrite(buf, 1, c, fp); + fclose(fp); + } else { + printf("Failed to read block id %#x\n", ptr->id); + } + ptr = ptr->next; + } + pst_close(&pstfile); + DEBUG_RET(); + return 0; +}