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&);