commit-mailutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[SCM] GNU Mailutils branch, master, updated. release-2.2-494-g1ae9bae


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-2.2-494-g1ae9bae
Date: Thu, 01 Dec 2011 19:25:23 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".

http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=1ae9bae29836a20784c836b630264b9e15e5af13

The branch, master has been updated
       via  1ae9bae29836a20784c836b630264b9e15e5af13 (commit)
       via  7b2c07f9701573f679d292423064c18e074c8cad (commit)
      from  bd55279a9af52b1e6d88b6d8cb483e17174db106 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 1ae9bae29836a20784c836b630264b9e15e5af13
Author: Sergey Poznyakoff <address@hidden>
Date:   Thu Dec 1 21:21:06 2011 +0200

    mail: Use new list functions to simplify vartab-related operations.
    
    * mail/mailvar.c (_mailvar_symbol_to_array): Remove.
    (_mailvar_symbol_to_list): New function.
    (mailvar_make_array): Remove.
    (mailvar_list_copy): New function.
    (mailvar_iterator)<varptr,varcnt,pos>: Remove.
    <varlist,varitr>: New members.
    (mailvar_iterate_next): Use subordinate iterator.
    (mailvar_iterate_first): Likewise.
    (mailvar_print): Use mailvar_make_array.

commit 7b2c07f9701573f679d292423064c18e074c8cad
Author: Sergey Poznyakoff <address@hidden>
Date:   Thu Dec 1 15:59:21 2011 +0200

    MH: minor change in folder
    
    * mh/folder.c: Use mu_list_t instead of obstack to keep folder list.

-----------------------------------------------------------------------

Summary of changes:
 mail/mailvar.c |  173 ++++++++++++++++++++++++++++++--------------------------
 mh/folder.c    |  128 +++++++++++++++++++++--------------------
 2 files changed, 159 insertions(+), 142 deletions(-)

diff --git a/mail/mailvar.c b/mail/mailvar.c
index 0413fbd..640388f 100644
--- a/mail/mailvar.c
+++ b/mail/mailvar.c
@@ -343,10 +343,10 @@ mailvar_variable_comp (const void *a, const void *b)
 static int
 mailvar_varptr_comp (const void *a, const void *b)
 {
-  const struct mailvar_variable * const * v1 = a;
-  const struct mailvar_variable * const * v2 = b;
+  const struct mailvar_variable const * v1 = a;
+  const struct mailvar_variable const *v2 = b;
 
-  return strcmp ((*v1)->name, (*v2)->name);
+  return strcmp (v1->name, v2->name);
 }
 
 /* Find mailvar_list entry VAR. If not found and CREATE is not NULL, then
@@ -602,35 +602,34 @@ _mailvar_symbol_count (int set)
     }
 }
 
-void
-_mailvar_symbol_to_array (int set, struct mailvar_variable **vartab)
+static int
+mailvar_mapper (void **itmv, size_t itmc, void *call_data)
+{
+  return MU_LIST_MAP_OK;
+}
+
+int
+_mailvar_symbol_to_list (int set, mu_list_t list)
 {
   struct mailvar_symbol *s;
   for (s = mailvar_tab; s->var.name; s++)
     if (!set || s->var.set)
-      {
-       *vartab = &s->var;
-       vartab++;
-      }
+      mu_list_append (list, &s->var);
+  return 0;
 }
 
-struct mailvar_variable **
-mailvar_make_array (int set, size_t *pcount)
+mu_list_t
+mailvar_list_copy (int set)
 {
-  struct mailvar_variable **vartab;
-  size_t count = 0, symcount;
-
-  symcount = _mailvar_symbol_count (set);
-  mu_list_count (mailvar_list, &count);
-  vartab = xcalloc (symcount + count + 1, sizeof *vartab);
-  mu_list_to_array (mailvar_list, (void**) vartab, count, NULL);
-  _mailvar_symbol_to_array (set, vartab + count);
-  count += symcount;
-  qsort (vartab, count, sizeof *vartab, mailvar_varptr_comp);
-  vartab[count] = NULL;
-  if (pcount)
-    *pcount = count;
-  return vartab;
+  mu_list_t list;
+  
+  if (mailvar_list)
+    mu_list_map (mailvar_list, mailvar_mapper, NULL, 1, &list);
+  else
+    mu_list_create (&list);
+  _mailvar_symbol_to_list (set, list);
+  mu_list_sort (list, mailvar_varptr_comp);
+  return list;
 }
   
 
@@ -638,24 +637,25 @@ struct mailvar_iterator
 {
   const char *prefix;
   int prefixlen;
-  struct mailvar_variable **varptr;
-  size_t varcnt;
-  size_t pos;
+  mu_list_t varlist;
+  mu_iterator_t varitr;
 };
   
 const char *
 mailvar_iterate_next (struct mailvar_iterator *itr)
 {
   struct mailvar_variable *vp;
-  
-  while (itr->pos < itr->varcnt)
+
+  do
     {
-      vp = itr->varptr[itr->pos++];
-  
+      mu_iterator_current (itr->varitr, (void**) &vp);
+      mu_iterator_next (itr->varitr);
+      
       if (strlen (vp->name) >= itr->prefixlen
          && strncmp (vp->name, itr->prefix, itr->prefixlen) == 0)
        return vp->name;
     }
+  while (!mu_iterator_is_done (itr->varitr));
   return NULL;
 }
 
@@ -665,8 +665,9 @@ mailvar_iterate_first (int set, const char *prefix, struct 
mailvar_iterator **pi
   struct mailvar_iterator *itr = xmalloc (sizeof *itr);
   itr->prefix = prefix;
   itr->prefixlen = strlen (prefix);
-  itr->varptr = mailvar_make_array (set, &itr->varcnt);
-  itr->pos = 0;
+  itr->varlist = mailvar_list_copy (set);
+  mu_list_get_iterator (itr->varlist, &itr->varitr);
+  mu_iterator_first (itr->varitr);
   *pitr = itr;
   return mailvar_iterate_next (itr);
 }
@@ -677,68 +678,80 @@ mailvar_iterate_end (struct mailvar_iterator **pitr)
   if (pitr && *pitr)
     {
       struct mailvar_iterator *itr = *pitr;
-      free (itr->varptr);
+      mu_iterator_destroy (&itr->varitr);
+      mu_list_destroy (&itr->varlist);
       free (itr);
       *pitr = NULL;
     }
 }
 
-void
-mailvar_print (int set)
+struct mailvar_print_closure
 {
-  struct mailvar_variable **vartab;
+  int prettyprint;
   mu_stream_t out;
-  size_t i, count;
-  int width = util_getcols ();
-  int prettyprint = mailvar_get (NULL, "variable-pretty-print",
-                                mailvar_type_boolean, 0) == 0;
-  
-  vartab = mailvar_make_array (set, &count);
-
-  out = open_pager (count);
+  int width;
+};
 
-  for (i = 0; i < count; i++)
+static int
+mailvar_printer (void *item, void *data)
+{
+  struct mailvar_variable *vp = item;
+  struct mailvar_print_closure *clos = data;
+  
+  if (clos->prettyprint)
     {
-      if (prettyprint)
-       {
-         const struct mailvar_symbol *sym =
-           find_mailvar_symbol (vartab[i]->name);
+      const struct mailvar_symbol *sym = find_mailvar_symbol (vp->name);
 
-         if (sym)
-           {
-             if (sym->flags & MAILVAR_HIDDEN)
-               continue;
-             if (sym->flags & MAILVAR_RDONLY)
-               mu_stream_printf (out, "# %s:\n", _("Read-only variable"));
-             print_descr (out, gettext (sym->descr), 1, 3, width - 1, "# ");
-           }
-       }
-      switch (vartab[i]->type)
+      if (sym)
        {
-       case mailvar_type_number:
-         mu_stream_printf (out, "%s=%d",
-                           vartab[i]->name, vartab[i]->value.number);
-         break;
+         if (sym->flags & MAILVAR_HIDDEN)
+           return 0;
+         if (sym->flags & MAILVAR_RDONLY)
+           mu_stream_printf (clos->out, "# %s:\n", _("Read-only variable"));
+         print_descr (clos->out, gettext (sym->descr), 1, 3,
+                      clos->width - 1, "# ");
+       }
+    }
+  switch (vp->type)
+    {
+    case mailvar_type_number:
+      mu_stream_printf (clos->out, "%s=%d", vp->name, vp->value.number);
+      break;
          
-       case mailvar_type_string:
-         mu_stream_printf (out, "%s=\"%s\"",
-                           vartab[i]->name, vartab[i]->value.string);
-         break;
+    case mailvar_type_string:
+      mu_stream_printf (clos->out, "%s=\"%s\"", vp->name, vp->value.string);
+      break;
          
-       case mailvar_type_boolean:
-         if (!vartab[i]->value.bool)
-           mu_stream_printf (out, "no");
-         mu_stream_printf (out, "%s", vartab[i]->name);
-         break;
+    case mailvar_type_boolean:
+      if (!vp->value.bool)
+       mu_stream_printf (clos->out, "no");
+      mu_stream_printf (clos->out, "%s", vp->name);
+      break;
          
-       case mailvar_type_whatever:
-         mu_stream_printf (out, "%s %s", vartab[i]->name, _("oops?"));
-       }
-      mu_stream_printf (out, "\n");
+    case mailvar_type_whatever:
+      mu_stream_printf (clos->out, "%s %s", vp->name, _("oops?"));
     }
-  free (vartab);
+  mu_stream_printf (clos->out, "\n");
+  return 0;
+}
 
-  mu_stream_unref (out);
+void
+mailvar_print (int set)
+{
+  mu_list_t varlist;
+  size_t count;
+  struct mailvar_print_closure clos;
+  
+  varlist = mailvar_list_copy (set);
+  mu_list_count (varlist, &count);
+  clos.out = open_pager (count);
+  clos.prettyprint = mailvar_get (NULL, "variable-pretty-print",
+                                 mailvar_type_boolean, 0) == 0;
+  clos.width = util_getcols ();
+
+  mu_list_foreach (varlist, mailvar_printer, &clos);
+  mu_list_destroy (&varlist);
+  mu_stream_unref (clos.out);
 }
 
 
diff --git a/mh/folder.c b/mh/folder.c
index b24854f..756015f 100644
--- a/mh/folder.c
+++ b/mh/folder.c
@@ -28,10 +28,6 @@
 
 #include <dirent.h>
 
-#define obstack_chunk_alloc malloc
-#define obstack_chunk_free free
-#include <obstack.h>
-
 static char doc[] = N_("GNU MH folder")"\v"
 N_("Use -help to obtain the list of traditional MH options.");
 static char args_doc[] = N_("[ACTION] [MSG]");
@@ -243,10 +239,7 @@ struct folder_info
   size_t others;           /* Number of non-message files */ 
 };
 
-struct obstack folder_info_stack; /* Memory storage for folder infp */
-struct folder_info *folder_info;  /* Finalized array of information
-                                    structures */
-size_t folder_info_count;         /* Number of the entries in the array */
+mu_list_t folder_info_list; /* Memory storage for folder info */
 
 size_t message_count;             /* Total number of messages */
 
@@ -255,9 +248,10 @@ int name_prefix_len;              /* Length of the 
mu_path_folder_dir */
 void
 install_folder_info (const char *name, struct folder_info *info)
 {
-  info->name = strdup (name) + name_prefix_len;
-  obstack_grow (&folder_info_stack, info, sizeof (*info));
-  folder_info_count++;
+  struct folder_info *new_info = xmalloc (sizeof (*new_info));
+  *new_info = *info;
+  new_info->name = strdup (new_info->name + name_prefix_len);
+  mu_list_append (folder_info_list, new_info);
   message_count += info->message_count;
 }
 
@@ -321,7 +315,7 @@ _scan (const char *name, size_t depth)
       if (fast_mode && depth > 0)
        {
          memset (&info, 0, sizeof (info));
-         info.name = strdup (name);
+         info.name = name;
          install_folder_info (name, &info);
          closedir (dir);
          return;
@@ -382,60 +376,69 @@ _scan (const char *name, size_t depth)
   if (depth > 0)
     install_folder_info (name, &info);
 }
-    
-static void
-print_all ()
+
+static int
+_folder_info_printer (void *item, void *data)
 {
-  struct folder_info *info, *end = folder_info + folder_info_count;
+  struct folder_info *info = item;
+  int len = strlen (info->name);
 
-  for (info = folder_info; info < end; info++)
+  if (len < 22)
+    printf ("%22.22s", info->name);
+  else
+    printf ("%s", info->name);
+  
+  if (strcmp (info->name, mh_current_folder ()) == 0)
+    printf ("+");
+  else
+    printf (" ");
+  
+  if (info->message_count)
     {
-      int len = strlen (info->name);
-      if (len < 22)
-       printf ("%22.22s", info->name);
-      else
-       printf ("%s", info->name);
-      
-      if (strcmp (info->name, mh_current_folder ()) == 0)
-       printf ("+");
-      else
-       printf (" ");
-      
-      if (info->message_count)
-       {
-         printf (ngettext(" has %4lu message  (%4lu-%4lu)",
-                          " has %4lu messages (%4lu-%4lu)",
-                          info->message_count),
-                 (unsigned long) info->message_count,
-                 (unsigned long) info->min,
-                 (unsigned long) info->max);
-         if (info->cur)
-           printf ("; cur=%4lu", (unsigned long) info->cur);
-       }
+      printf (ngettext(" has %4lu message  (%4lu-%4lu)",
+                      " has %4lu messages (%4lu-%4lu)",
+                      info->message_count),
+             (unsigned long) info->message_count,
+             (unsigned long) info->min,
+             (unsigned long) info->max);
+      if (info->cur)
+       printf ("; cur=%4lu", (unsigned long) info->cur);
+    }
+  else
+    {
+      printf (_(" has no messages"));
+    }
+  
+  if (info->others)
+    {
+      if (!info->cur)
+       printf (";           ");
       else
-       {
-         printf (_(" has no messages"));
-       }
-      
-      if (info->others)
-       {
-         if (!info->cur)
-           printf (";           ");
-         else
-           printf ("; ");
-         printf (_("(others)"));
-       }
-      printf (".\n");
+       printf ("; ");
+      printf (_("(others)"));
     }
+  printf (".\n");
+  return 0;
+}
+
+static int
+_folder_name_printer (void *item, void *data)
+{
+  struct folder_info *info = item;
+  printf ("%s\n", info->name);
+  return 0;
 }
 
 static void
-print_fast ()
+print_all ()
 {
-  struct folder_info *info, *end = folder_info + folder_info_count;
+  mu_list_foreach (folder_info_list, _folder_info_printer, NULL);
+}
 
-  for (info = folder_info; info < end; info++)
-    printf ("%s\n", info->name);
+static void
+print_fast ()
+{
+  mu_list_foreach (folder_info_list, _folder_name_printer, NULL);
 }
 
 static int
@@ -449,7 +452,7 @@ action_print ()
     name_prefix_len++;
   name_prefix_len++;  /* skip past the slash */
 
-  obstack_init (&folder_info_stack);
+  mu_list_create (&folder_info_list);
 
   if (show_all)
     {
@@ -462,9 +465,7 @@ action_print ()
       free (p);
     }
   
-  folder_info = obstack_finish (&folder_info_stack);
-  qsort (folder_info, folder_info_count, sizeof (folder_info[0]),
-        folder_info_comp);
+  mu_list_sort (folder_info_list, folder_info_comp);
 
   if (fast_mode)
     print_fast ();
@@ -477,13 +478,16 @@ action_print ()
 
       if (OPTION_IS_SET (print_total))
        {
+         size_t folder_count;
+
+         mu_list_count (folder_info_list, &folder_count);
          printf ("\n%24.24s=", _("TOTAL"));
          printf (ngettext ("%4lu message  ", "%4lu messages ",
                            message_count),
                  (unsigned long) message_count);
          printf (ngettext ("in %4lu folder", "in %4lu folders",
-                           folder_info_count),
-                 (unsigned long) folder_info_count);
+                           folder_count),
+                 (unsigned long) folder_count);
          printf ("\n");
        }
     }


hooks/post-receive
-- 
GNU Mailutils



reply via email to

[Prev in Thread] Current Thread [Next in Thread]