File bnc395452-sortfix.diff of Package pan

diff -ur --exclude 'config*' --exclude '*desktop' --exclude '*list' pan-0.132.inc/pan/data/parts.cc pan-0.132/pan/data/parts.cc
--- pan-0.132.inc/pan/data/parts.cc	2007-08-01 13:00:01.000000000 -0400
+++ pan-0.132/pan/data/parts.cc	2008-05-27 22:27:03.000000000 -0400
@@ -303,8 +303,7 @@
   this->n_parts_total = n_parts_total;
   this->n_parts_found = 0; // they haven't been added yet
 
-  if (n_parts_found > parts.size())
-    parts.resize (n_parts_found);
+  parts.clear();
 }
 
 void
@@ -312,21 +311,10 @@
                        const StringView  & mid,
                        bytes_t             bytes)
 {
-  if (n_parts_found >= parts.size())
-    parts.resize (n_parts_found+1);
-
-  Part& p = *(&parts.front() + n_parts_found++);
-  p.number = number;
-  p.bytes = bytes;
 
   Packer packer;
   pack_message_id (packer, mid, reference_mid);
-  p.len_used = packer.size ();
-  if (p.len_alloced < p.len_used) {
-    delete [] p.packed_mid;
-    p.packed_mid = new char [p.len_used];
-    p.len_alloced = p.len_used;
-  }
+  Part p(number,bytes,packer.size());
   packer.pack (p.packed_mid);
   packed_mids_len += p.len_used;
 
@@ -337,8 +325,9 @@
   assert (mid == tmp);
 #endif
 
-  if (n_parts_total < n_parts_found)
+  if (n_parts_total < ++n_parts_found)
       n_parts_total = n_parts_found;
+  parts.push_back(p);
 }
 
 PartBatch :: Part&
@@ -346,7 +335,7 @@
 {
   number =  that.number;
   bytes =  that.bytes;
-  len_used = len_alloced = that.len_used;
+  len_used = that.len_used;
   delete [] packed_mid;
   packed_mid = new char [len_used];
   memcpy (packed_mid, that.packed_mid, len_used);
@@ -357,11 +346,17 @@
   number (that.number),
   bytes (that.bytes),
   len_used (that.len_used),
-  len_alloced (that.len_used),
   packed_mid (new char [len_used])
 {
   memcpy (packed_mid, that.packed_mid, len_used);
 }
+PartBatch :: Part :: Part (number_t n, bytes_t b, size_t l):
+    number(n),
+    bytes(b),
+    len_used(l),
+    packed_mid(new char [len_used])
+{
+}
 
 void
 PartBatch :: sort (void)
diff -ur --exclude 'config*' --exclude '*desktop' --exclude '*list' pan-0.132.inc/pan/data/parts.h pan-0.132/pan/data/parts.h
--- pan-0.132.inc/pan/data/parts.h	2007-08-01 13:00:01.000000000 -0400
+++ pan-0.132/pan/data/parts.h	2008-05-27 22:27:03.000000000 -0400
@@ -141,10 +141,10 @@
         number_t number;
         bytes_t bytes;
         size_t len_used;
-        size_t len_alloced;
         char * packed_mid;
         Part(): number(0), bytes(0),
-                len_used(0), len_alloced(0), packed_mid(0) {}
+                len_used(0), packed_mid(0) {}
+        Part(number_t n, bytes_t b, size_t l);
         ~Part() { delete [] packed_mid; }
         Part (const Part&);
         Part& operator= (const Part&);
openSUSE Build Service is sponsored by