aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog4
-rw-r--r--e-util/e-list.c18
-rw-r--r--e-util/e-list.h1
3 files changed, 23 insertions, 0 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog
index 582155a13f..7a54bd6c17 100644
--- a/e-util/ChangeLog
+++ b/e-util/ChangeLog
@@ -1,3 +1,7 @@
+2000-07-08 Christopher James Lahey <clahey@helixcode.com>
+
+ * e-list.c, e-list.h: Added e_list_duplicate.
+
2000-07-07 Christopher James Lahey <clahey@helixcode.com>
* e-util.c, e-util.h: Added e_strsplit to work around a bug in
diff --git a/e-util/e-list.c b/e-util/e-list.c
index bc5769fb38..2a6f842888 100644
--- a/e-util/e-list.c
+++ b/e-util/e-list.c
@@ -87,6 +87,24 @@ e_list_new (EListCopyFunc copy, EListFreeFunc free, void *closure)
return list;
}
+EList *
+e_list_duplicate (EList *old)
+{
+ EList *list = gtk_type_new(e_list_get_type());
+
+ list->copy = old->copy;
+ list->free = old->free;
+ list->closure = old->closure;
+ list->list = g_list_copy(old->list);
+ if (list->copy) {
+ GList *listlist;
+ for (listlist = list->list; listlist; listlist = listlist->next) {
+ listlist->data = list->copy (listlist->data, list->closure);
+ }
+ }
+ return list;
+}
+
EIterator *
e_list_get_iterator (EList *list)
{
diff --git a/e-util/e-list.h b/e-util/e-list.h
index 545798fbf9..7a0170970f 100644
--- a/e-util/e-list.h
+++ b/e-util/e-list.h
@@ -43,6 +43,7 @@ struct _EListClass {
EList *e_list_new (EListCopyFunc copy,
EListFreeFunc free,
void *closure);
+EList *e_list_duplicate (EList *list);
EIterator *e_list_get_iterator (EList *list);
void e_list_append (EList *list,
const void *data);