Mercurial > libpst
view src/dumpblocks.c @ 59:7d5c637aaafb
General cleanup and code fixes.
Use autoscan to cleanup our autoconf system.
Use autoconf to detect when we need to use our XGetopt files and other header files.
Decode BCC field.
Fix missing LE32_CPU byte swapping for FILETIME types.
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Thu, 14 Feb 2008 14:55:32 -0800 |
parents | 034641c26ab9 |
children | 3cb02cb1e6cd |
line wrap: on
line source
#include "define.h" #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include "libpst.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; 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)) { 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, "%llx", 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 %#llx\n", ptr->id); } ptr = ptr->next; } pst_close(&pstfile); DEBUG_RET(); return 0; }