Mercurial > libpst
annotate archive/readpst.c.short_filename.diff @ 360:26c48ea9d896
From Jeffrey Morlan:
pst_build_id_ptr reads the Block BTree into a linked list, which
pst_getID does a linear scan through. For large PSTs that have
millions of blocks, this is extremely slow - almost all time is spent
in pst_getID. Since the BTree entries must be in order, this can be
dramatically improved by reading into an array and using binary
search.
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Wed, 06 Jul 2016 10:21:08 -0700 |
parents | de3753c3160a |
children |
rev | line source |
---|---|
57
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
1 Index: readpst.c |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
2 =================================================================== |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
3 --- readpst.c (revision 45) |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
4 +++ readpst.c (working copy) |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
5 @@ -149,6 +149,7 @@ |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
6 int attach_num = 0; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
7 int skip_child = 0; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
8 struct file_ll *f, *head; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
9 + char *attach_filename = NULL; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
10 prog_name = argv[0]; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
11 // }}}2 |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
12 // command-line option handling {{{2 |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
13 @@ -832,18 +833,25 @@ |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
14 } |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
15 if (mode == MODE_SEPERATE) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
16 f->name = check_filename(f->name); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
17 - if (item->current_attach->filename2 == NULL) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
18 + // If there is a long filename (filename2) use that, otherwise |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
19 + // use the 8.3 filename (filename1) |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
20 + if (item->current_attach->filename2) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
21 + attach_filename = item->current_attach->filename2; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
22 + } else { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
23 + attach_filename = item->current_attach->filename1; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
24 + } |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
25 + if (attach_filename == NULL) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
26 temp = xmalloc(strlen(f->name)+15); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
27 sprintf(temp, "%s-attach%i", f->name, attach_num); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
28 } else { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
29 - temp = xmalloc(strlen(f->name)+strlen(item->current_attach->filename2)+15); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
30 + temp = xmalloc(strlen(f->name)+strlen(attach_filename)+15); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
31 fp = NULL; x=0; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
32 do { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
33 if (fp != NULL) fclose(fp); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
34 if (x == 0) |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
35 - sprintf(temp, "%s-%s", f->name, item->current_attach->filename2); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
36 + sprintf(temp, "%s-%s", f->name, attach_filename); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
37 else |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
38 - sprintf(temp, "%s-%s-%i", f->name, item->current_attach->filename2, x); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
39 + sprintf(temp, "%s-%s-%i", f->name, attach_filename, x); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
40 } while ((fp = fopen(temp, "r"))!=NULL && ++x < 99999999); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
41 if (x > 99999999) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
42 DIE(("error finding attachment name. exhausted possibilities to %s\n", temp)); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
43 @@ -878,11 +886,18 @@ |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
44 fprintf(f->output, "Content-type: %s\n", item->current_attach->mimetype); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
45 } |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
46 fprintf(f->output, "Content-transfer-encoding: base64\n"); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
47 - if (item->current_attach->filename2 == NULL) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
48 + // If there is a long filename (filename2) use that, otherwise |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
49 + // use the 8.3 filename (filename1) |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
50 + if (item->current_attach->filename2) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
51 + attach_filename = item->current_attach->filename2; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
52 + } else { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
53 + attach_filename = item->current_attach->filename1; |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
54 + } |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
55 + if (attach_filename == NULL) { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
56 fprintf(f->output, "Content-Disposition: inline\n\n"); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
57 } else { |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
58 fprintf(f->output, "Content-Disposition: attachment; filename=\"%s\"\n\n", |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
59 - item->current_attach->filename2); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
60 + attach_filename); |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
61 } |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
62 } |
de3753c3160a
add archive directory with history of alioth versions that have been merged here
Carl Byington <carl@five-ten-sg.com>
parents:
diff
changeset
|
63 if (item->current_attach->data != NULL) { |