view archive/readpst.c.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
line wrap: on
line source

Index: readpst.c
===================================================================
--- readpst.c	(revision 45)
+++ readpst.c	(working copy)
@@ -1396,6 +1396,7 @@
 // char *rfc2426_escape(char *str) {{{1
 char *rfc2426_escape(char *str) {
   static char *buf = NULL;
+  static int buflen = 0;
   char *a, *b;
   int x, y, z;
   DEBUG_ENT("rfc2426_escape");
@@ -1411,9 +1412,10 @@
   z = chr_count(str, '\r');
   x = strlen(str) + y - z;
 
-  if ( (y - z) == 0 )	// resize buffer if needed
+  if ( x + 1 > buflen )	// resize buffer if needed
   {
     buf = (char*) realloc(buf, x + 1); // don't forget room for the NUL
+    buflen = x + 1;
 	if ( buf == NULL )
 	{
       fprintf(stderr, "Error: rfc2426_escape(): realloc(%d) returned NULL!\n", x + 1);