]> granicus.if.org Git - neomutt/commitdiff
Fix some issues with ungroup [...] *
authorRocco Rutte <pdmef@gmx.net>
Tue, 28 Jul 2009 21:06:54 +0000 (23:06 +0200)
committerRocco Rutte <pdmef@gmx.net>
Tue, 28 Jul 2009 21:06:54 +0000 (23:06 +0200)
ChangeLog
group.c
group.h
init.c
rfc822.c

index 112d793255941367c6206b320e5fa6019960793a..2c2b89e56842d0a571c9be996fc6d5c0a7cd42be 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2009-07-27 21:14 -0700  Kees Cook  <kees@outflux.net>  (2fc9348684fe)
+
+       * mh.c: Properly propagate mh_read_sequences result. Closes #3308.
+
+2009-07-27 20:49 -0700  Brendan Cully  <brendan@kublai.com>  (5c076ed18883)
+
+       * configure.ac: Do not overwrite docdir unless --with-
+       docdir was explicitly given. This allows --docdir from autoconf
+       2.60+ to work, though if given --with-docdir will silently override
+       --docdir. Closes #3282.
+
 2009-07-24 14:30 +0200  Rocco Rutte  <pdmef@gmx.net>  (86e066a206ac)
 
        * po/de.po: Update German translation
diff --git a/group.c b/group.c
index 1e50d360462908fd9ecee1461fe9e3578213c926..f48329756ac99c5dee25a95a5f2e8b3888922af6 100644 (file)
--- a/group.c
+++ b/group.c
@@ -53,32 +53,26 @@ group_t *mutt_pattern_group (const char *k)
   return p;
 }
 
-static void group_free (void *p)
+static void mutt_group_remove (group_t *g)
 {
-  group_t *g = (group_t *)p;
-
   if (!g)
     return;
-  FREE(&g->name);
+  hash_delete (Groups, g->name, g, NULL);
   rfc822_free_address (&g->as);
   mutt_free_rx_list (&g->rs);
+  FREE(&g->name);
   FREE(&g);
 }
 
-int mutt_group_remove (group_t * g, BUFFER * err)
+int mutt_group_context_clear (group_context_t **ctx)
 {
-  int h;
-
-  if (!g)
-    return -1;
-  h = Groups->hash_string ((const unsigned char *)g->name, Groups->nelem);
-  if (!hash_find_hash (Groups, h, g->name))
+  group_context_t *t;
+  for ( ; ctx && *ctx; (*ctx) = t)
   {
-    if (err)
-      snprintf (err->data, err->dsize, _("No such group: %s"), g->name);
-    return -1;
+    mutt_group_remove ((*ctx)->g);
+    t = (*ctx)->next;
+    FREE(ctx);                         /* __FREE_CHECKED__ */
   }
-  hash_delete_hash (Groups, h, g->name, g, group_free);
   return 0;
 }
 
@@ -167,7 +161,7 @@ int mutt_group_context_remove_adrlist (group_context_t *ctx, ADDRESS * a)
   {
     rv = mutt_group_remove_adrlist (ctx->g, a);
     if (empty_group (ctx->g))
-      mutt_group_remove (ctx->g, NULL);
+      mutt_group_remove (ctx->g);
   }
 
   return rv;
@@ -191,7 +185,7 @@ int mutt_group_context_remove_rx (group_context_t *ctx, const char *s)
   {
     rv = mutt_group_remove_rx (ctx->g, s);
     if (empty_group (ctx->g))
-      mutt_group_remove (ctx->g, NULL);
+      mutt_group_remove (ctx->g);
   }
 
   return rv;
diff --git a/group.h b/group.h
index 460884f9ef0cbd8d89423fd941b723da826d77bb..d61c615bd34ad53d924eadd640087ad4c2413750 100644 (file)
--- a/group.h
+++ b/group.h
@@ -32,7 +32,7 @@ int mutt_group_context_add_rx (group_context_t *ctx, const char *s, int flags, B
 
 int mutt_group_match (group_t *g, const char *s);
 
-int mutt_group_remove (group_t *, BUFFER *);
+int mutt_group_context_clear (group_context_t **ctx);
 int mutt_group_context_remove_rx (group_context_t *ctx, const char *s);
 int mutt_group_context_remove_adrlist (group_context_t *ctx, ADDRESS *);
 
diff --git a/init.c b/init.c
index 5ba8dcacfe0fa2a1dea89767ce37a0d6303ddd2c..97dc7fcf6213952f39e2f237e45d87f0b8e8af0e 100644 (file)
--- a/init.c
+++ b/init.c
@@ -843,7 +843,7 @@ static int parse_group (BUFFER *buf, BUFFER *s, unsigned long data, BUFFER *err)
 
     if (data == M_UNGROUP && !mutt_strcasecmp (buf->data, "*"))
     {
-      if (mutt_group_remove (gc->g, err) < 0)
+      if (mutt_group_context_clear (&gc) < 0)
        goto bail;
       goto out;
     }
index 89737b5c1e759589fb36c95f95eeff9f5808e641..5569d319fc92bfa2023b974f327df78127747fb9 100644 (file)
--- a/rfc822.c
+++ b/rfc822.c
@@ -89,6 +89,7 @@ static void free_address (ADDRESS *a)
 #ifdef EXACT_ADDRESS
   FREE(&a->val);
 #endif
+  FREE(&a);
 }
 
 int rfc822_remove_from_adrlist (ADDRESS **a, const char *mailbox)