aboutsummaryrefslogtreecommitdiffstats
path: root/camel/camel-folder.c
diff options
context:
space:
mode:
authorDan Winship <danw@src.gnome.org>2000-07-13 04:37:00 +0800
committerDan Winship <danw@src.gnome.org>2000-07-13 04:37:00 +0800
commit540e1d7671ec843c2db2d03810d948f879ac1bfc (patch)
tree93b23a7c4a19ef3db93730064e0a9c5035a04f81 /camel/camel-folder.c
parent4b7d13b41ff3dd03e8490108f30277f5469d40bf (diff)
downloadgsoc2013-evolution-540e1d7671ec843c2db2d03810d948f879ac1bfc.tar.gz
gsoc2013-evolution-540e1d7671ec843c2db2d03810d948f879ac1bfc.tar.zst
gsoc2013-evolution-540e1d7671ec843c2db2d03810d948f879ac1bfc.zip
Useful default implementations for free_{uids,subfolder_names,summary}.
* camel-folder.c (camel_folder_free_deep, camel_folder_free_shallow, camel_folder_free_nop): Useful default implementations for free_{uids,subfolder_names,summary}. (free_subfolder_names, free_uids): Make these g_warning-ing default implementations. * providers/*/camel-*-folder.c: Use the new functions where appropriate, remove duplicated code. svn path=/trunk/; revision=4120
Diffstat (limited to 'camel/camel-folder.c')
-rw-r--r--camel/camel-folder.c71
1 files changed, 62 insertions, 9 deletions
diff --git a/camel/camel-folder.c b/camel/camel-folder.c
index e7af6f6d37..0b1b92b982 100644
--- a/camel/camel-folder.c
+++ b/camel/camel-folder.c
@@ -77,6 +77,8 @@ static void set_message_user_flag (CamelFolder *folder, const char *uid,
static GPtrArray *get_subfolder_names (CamelFolder *folder,
CamelException *ex);
+static void free_subfolder_names (CamelFolder *folder,
+ GPtrArray *array);
static CamelFolder *get_subfolder (CamelFolder *folder,
const gchar *folder_name,
gboolean create,
@@ -162,7 +164,7 @@ camel_folder_class_init (CamelFolderClass *camel_folder_class)
camel_folder_class->get_parent_folder = get_parent_folder;
camel_folder_class->get_parent_store = get_parent_store;
camel_folder_class->get_subfolder_names = get_subfolder_names;
- camel_folder_class->free_subfolder_names = free_uids;
+ camel_folder_class->free_subfolder_names = free_subfolder_names;
camel_folder_class->expunge = expunge;
camel_folder_class->get_message_count = get_message_count;
camel_folder_class->get_unread_message_count = get_unread_message_count;
@@ -532,6 +534,13 @@ camel_folder_get_subfolder_names (CamelFolder *folder, CamelException *ex)
}
+static void
+free_subfolder_names (CamelFolder *folder, GPtrArray *array)
+{
+ g_warning ("CamelFolder::free_subfolder_names not implemented "
+ "for `%s'", gtk_type_name (GTK_OBJECT_TYPE (folder)));
+}
+
/**
* camel_folder_free_subfolder_names:
* @folder: folder object
@@ -952,14 +961,8 @@ camel_folder_get_uids (CamelFolder *folder, CamelException *ex)
static void
free_uids (CamelFolder *folder, GPtrArray *array)
{
- int i;
-
- /* Default implementation: free all of the strings and
- * the array itself.
- */
- for (i = 0; i < array->len; i++)
- g_free (array->pdata[i]);
- g_ptr_array_free (array, TRUE);
+ g_warning ("CamelFolder::free_uids not implemented for `%s'",
+ gtk_type_name (GTK_OBJECT_TYPE (folder)));
}
/**
@@ -1285,3 +1288,53 @@ message_changed (CamelFolder *folder, const char *uid)
}
}
}
+
+
+/**
+ * camel_folder_free_nop:
+ * @folder: a folder
+ * @array: an array of uids, subfolder names, or CamelMessageInfo
+ *
+ * "Frees" the provided array by doing nothing. Used by CamelFolder
+ * subclasses as an implementation for free_uids, free_summary,
+ * or free_subfolder_names when the returned array is "static"
+ * information and should not be freed.
+ **/
+void
+camel_folder_free_nop (CamelFolder *folder, GPtrArray *array)
+{
+ ;
+}
+
+/**
+ * camel_folder_free_shallow:
+ * @folder: a folder
+ * @array: an array of uids, subfolder names, or CamelMessageInfo
+ *
+ * Frees the provided array but not its contents. Used by CamelFolder
+ * subclasses as an implementation for free_uids, free_summary, or
+ * free_subfolder_names when the returned array needs to be freed
+ * but its contents come from "static" information.
+ **/
+void
+camel_folder_free_shallow (CamelFolder *folder, GPtrArray *array)
+{
+ g_ptr_array_free (array, TRUE);
+}
+
+/**
+ * camel_folder_free_deep:
+ * @folder: a folder
+ * @array: an array of uids or subfolder names
+ *
+ * Frees the provided array and its contents. Used by CamelFolder
+ * subclasses as an implementation for free_uids or
+ * free_subfolder_names (but NOT free_summary) when the provided
+ * information was created explicitly by the corresponding get_ call.
+ **/
+void
+camel_folder_free_deep (CamelFolder *folder, GPtrArray *array)
+{
+ g_strfreev ((gchar **)array->pdata);
+ g_ptr_array_free (array, FALSE);
+}