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-499-gf606ab2


From: Sergey Poznyakoff
Subject: [SCM] GNU Mailutils branch, master, updated. release-2.2-499-gf606ab2
Date: Mon, 05 Dec 2011 22:34:46 +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=f606ab21eafbd947113daae4c41328118d51a0eb

The branch, master has been updated
       via  f606ab21eafbd947113daae4c41328118d51a0eb (commit)
      from  4a151fd82add56d993437bcceb969a7cf8dd3bdf (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 f606ab21eafbd947113daae4c41328118d51a0eb
Author: Sergey Poznyakoff <address@hidden>
Date:   Tue Dec 6 00:20:30 2011 +0200

    Implement LIFO access functions for lists.
    
    * include/mailutils/list.h (mu_list_push)
    (mu_list_pop): New functions.
    * libmailutils/list/pop.c: New file.
    * libmailutils/list/push.c: New file.
    * libmailutils/list/Makefile.am (liblist_la_SOURCES): Add new files.
    * libmailutils/tests/list.at: Test LIFO access.
    * libmailutils/tests/listop.c: Implement push & pop.

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

Summary of changes:
 include/mailutils/list.h                   |    7 ++++
 libmailutils/list/Makefile.am              |    2 +
 libmailutils/list/{head.c => pop.c}        |   22 +++++++++++---
 libmailutils/{url/urlinv.c => list/push.c} |   12 ++-----
 libmailutils/tests/list.at                 |   25 ++++++++++++++++
 libmailutils/tests/listop.c                |   42 ++++++++++++++++++++++++++++
 6 files changed, 97 insertions(+), 13 deletions(-)
 copy libmailutils/list/{head.c => pop.c} (73%)
 copy libmailutils/{url/urlinv.c => list/push.c} (83%)

diff --git a/include/mailutils/list.h b/include/mailutils/list.h
index 60f0031..7934aa2 100644
--- a/include/mailutils/list.h
+++ b/include/mailutils/list.h
@@ -124,6 +124,13 @@ int mu_list_replace  (mu_list_t _list, void *_old_item, 
void *_new_item);
   /* A non-destructive version of mu_list_replace: the removed item is not
      deallocated. */
 int mu_list_replace_nd (mu_list_t _list, void *_old_item, void *_new_item);
+
+  /* ************************************************* */
+  /* LIFO Access                                       */
+  /* ************************************************* */
+int mu_list_push (mu_list_t list, void *item);
+int mu_list_pop (mu_list_t list, void **item);
+  
 
   /* ************************************************* */
   /* Interation over lists.                            */
diff --git a/libmailutils/list/Makefile.am b/libmailutils/list/Makefile.am
index eb6084a..21a600b 100644
--- a/libmailutils/list/Makefile.am
+++ b/libmailutils/list/Makefile.am
@@ -37,7 +37,9 @@ liblist_la_SOURCES = \
  listlist.c\
  locate.c\
  map.c\
+ pop.c\
  prepend.c\
+ push.c\
  remove.c\
  replace.c\
  rfold.c\
diff --git a/libmailutils/list/head.c b/libmailutils/list/pop.c
similarity index 73%
copy from libmailutils/list/head.c
copy to libmailutils/list/pop.c
index 7c52b89..9c1af0f 100644
--- a/libmailutils/list/head.c
+++ b/libmailutils/list/pop.c
@@ -23,14 +23,26 @@
 #include <mailutils/errno.h>
 
 int
-mu_list_head (mu_list_t list, void **pitem)
+mu_list_pop (mu_list_t list, void **item)
 {
+  struct list_data *last, *prev;
+  
   if (list == NULL)
     return EINVAL;
-  if (pitem == NULL)
-    return MU_ERR_OUT_PTR_NULL;
-  if (!list->head.next)
+
+  if (list->count == 0)
     return MU_ERR_NOENT;
-  *pitem = list->head.next->item;
+
+  last = list->head.prev;
+  prev = last->prev;
+  mu_iterator_advance (list->itr, last);
+  prev->next = last->next;
+  prev->next->prev = prev;
+  if (item)
+    *item = last->item;
+  else
+    DESTROY_ITEM (list, last);
+  free (last);
+  list->count--;
   return 0;
 }
diff --git a/libmailutils/url/urlinv.c b/libmailutils/list/push.c
similarity index 83%
copy from libmailutils/url/urlinv.c
copy to libmailutils/list/push.c
index c4f8113..c6bead7 100644
--- a/libmailutils/url/urlinv.c
+++ b/libmailutils/list/push.c
@@ -19,15 +19,11 @@
 # include <config.h>
 #endif
 #include <stdlib.h>
-#include <errno.h>
-#include <mailutils/sys/url.h>
+#include <mailutils/sys/list.h>
+#include <mailutils/errno.h>
 
 int
-mu_url_invalidate (mu_url_t url)
+mu_list_push (mu_list_t list, void *item)
 {
-  if (!url)
-    return EINVAL;
-  free (url->name);
-  url->name = NULL;
-  return 0;
+  return mu_list_append (list, item);
 }
diff --git a/libmailutils/tests/list.at b/libmailutils/tests/list.at
index d49ab43..e909fef 100644
--- a/libmailutils/tests/list.at
+++ b/libmailutils/tests/list.at
@@ -97,6 +97,31 @@ tre
 fem
 ])
 
+TESTLIST([push],[],
+[push en to tre
+print],
+[# items: 3
+en
+to
+tre
+])
+
+TESTLIST([pop],[],
+[push en to tre
+pop
+pop
+pop],
+[tre
+to
+en
+])
+
+TESTLIST([pop-null],[],
+[pop],
+[],
+[mu_list_pop: Requested item not found
+])
+
 TESTLIST([get],[],
 [add en to tre fire fem
 3],
diff --git a/libmailutils/tests/listop.c b/libmailutils/tests/listop.c
index 00d3949..8287239 100644
--- a/libmailutils/tests/listop.c
+++ b/libmailutils/tests/listop.c
@@ -781,6 +781,42 @@ sort (mu_list_t list)
 }
 
 void
+push (mu_list_t list, int argc, char **argv)
+{
+  if (argc < 2)
+    {
+      fprintf (stderr, "push arg [arg] ?\n");
+      return;
+    }
+
+  while (--argc)
+    {
+      int rc = mu_list_push (list, strdup (*++argv));
+      if (rc)
+       fprintf (stderr, "mu_list_push: %s\n", mu_strerror (rc));
+    }
+}
+
+void
+pop (mu_list_t list, int argc, char **argv)
+{
+  char *text;
+  int rc;
+  
+  if (argc != 1)
+    {
+      fprintf (stderr, "pop ?\n");
+      return;
+    }
+
+  rc = mu_list_pop (list, (void**) &text);
+  if (rc)
+    fprintf (stderr, "mu_list_pop: %s\n", mu_strerror (rc));
+  else
+    printf ("%s\n", text);
+}
+  
+void
 help ()
 {
   printf ("count\n");
@@ -808,6 +844,8 @@ help ()
   printf ("help\n");
   printf ("head\n");
   printf ("tail\n");
+  printf ("push item\n");
+  printf ("pop\n");
   printf ("sort\n");
   printf ("NUMBER\n");
 }
@@ -928,6 +966,10 @@ shell (mu_list_t list)
            head (ws.ws_wordc, list);
          else if (strcmp (ws.ws_wordv[0], "tail") == 0)
            tail (ws.ws_wordc, list);
+         else if (strcmp (ws.ws_wordv[0], "push") == 0)
+           push (list, ws.ws_wordc, ws.ws_wordv);
+         else if (strcmp (ws.ws_wordv[0], "pop") == 0)
+           pop (list, ws.ws_wordc, ws.ws_wordv);
          else if (strcmp (ws.ws_wordv[0], "sort") == 0)
            {
              int i;


hooks/post-receive
-- 
GNU Mailutils



reply via email to

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