Rocco Rutte:
[apps/madmutt.git] / thread.c
index 9da0e5b..d07f328 100644 (file)
--- a/thread.c
+++ b/thread.c
@@ -1,19 +1,10 @@
 /*
+ * Copyright notice from original mutt:
  * Copyright (C) 1996-2002 Michael R. Elkins <me@mutt.org>
  *
- *     This program is free software; you can redistribute it and/or modify
- *     it under the terms of the GNU General Public License as published by
- *     the Free Software Foundation; either version 2 of the License, or
- *     (at your option) any later version.
- * 
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU General Public License for more details.
- * 
- *     You should have received a copy of the GNU General Public License
- *     along with this program; if not, write to the Free Software
- *     Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * This file is part of mutt-ng, see http://www.muttng.org/.
+ * It's licensed under the GNU General Public License,
+ * please see the file GPL in the top level source directory.
  */
 
 #if HAVE_CONFIG_H
@@ -23,6 +14,9 @@
 #include "mutt.h"
 #include "sort.h"
 
+#include "lib/mem.h"
+#include "lib/intl.h"
+
 #include <string.h>
 #include <ctype.h>
 
@@ -849,7 +843,7 @@ void mutt_sort_threads (CONTEXT * ctx, int init)
         if (new->duplicate_thread)
           new = new->parent;
         if (is_descendant (new, thread))        /* no loops! */
-          break;
+          continue;
       }
 
       if (thread->parent)
@@ -1256,7 +1250,7 @@ static void clean_references (THREAD * brk, THREAD * cur)
     for (p = brk; !done && p; p = p->parent)
       for (ref = cur->message->env->references; p->message && ref;
            ref = ref->next)
-        if (!mutt_strcasecmp (ref->data, p->message->env->message_id)) {
+        if (!safe_strcasecmp (ref->data, p->message->env->message_id)) {
           done = 1;
           break;
         }
@@ -1267,14 +1261,7 @@ static void clean_references (THREAD * brk, THREAD * cur)
       /* clearing the References: header from obsolete Message-Id(s) */
       mutt_free_list (&ref->next);
 
-      if (h->new_env)
-        mutt_free_list (&h->new_env->references);
-      else
-        h->new_env = mutt_new_envelope ();
-
-      h->new_env->references = mutt_copy_list (h->env->references);
-
-      h->refs_changed = h->changed = 1;
+      h->env->refs_changed = h->changed = 1;
     }
   }
 }
@@ -1283,15 +1270,7 @@ void mutt_break_thread (HEADER * hdr)
 {
   mutt_free_list (&hdr->env->in_reply_to);
   mutt_free_list (&hdr->env->references);
-  hdr->irt_changed = hdr->refs_changed = hdr->changed = 1;
-
-  if (hdr->new_env) {
-    mutt_free_list (&hdr->new_env->in_reply_to);
-    mutt_free_list (&hdr->new_env->references);
-  }
-  else
-    hdr->new_env = mutt_new_envelope ();
-
+  hdr->env->irt_changed = hdr->env->refs_changed = 1;
   clean_references (hdr->thread, hdr->thread->child);
 }
 
@@ -1305,12 +1284,9 @@ static int link_threads (HEADER * parent, HEADER * child, CONTEXT * ctx)
   child->env->in_reply_to = mutt_new_list ();
   child->env->in_reply_to->data = safe_strdup (parent->env->message_id);
 
-  child->new_env->in_reply_to = mutt_new_list ();
-  child->new_env->in_reply_to->data = safe_strdup (parent->env->message_id);
-
   mutt_set_flag (ctx, child, M_TAG, 0);
 
-  child->irt_changed = child->changed = 1;
+  child->env->irt_changed = child->changed = 1;
   return 1;
 }