[evolution-data-server] CamelIMAPXJob: Split out "folder_name" data.
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] CamelIMAPXJob: Split out "folder_name" data.
- Date: Tue, 31 Jan 2012 22:10:25 +0000 (UTC)
commit a97a7aff3ea212f7046a929942a6c884d4e1cfe7
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Jan 31 16:45:35 2012 -0500
CamelIMAPXJob: Split out "folder_name" data.
Define standalone CreateFolderData and DeleteFolderData structs and
"free" functions.
Use camel_imapx_job_set_data() to attach an allocated struct to a
CamelIMAPXJob such that it will be freed along with the job.
Use camel_imapx_job_get_data() to obtain a pointer to the allocated
struct as needed, always with a NULL check for safety.
camel/providers/imapx/camel-imapx-job.h | 4 --
camel/providers/imapx/camel-imapx-server.c | 54 +++++++++++++++++++++++++--
2 files changed, 50 insertions(+), 8 deletions(-)
---
diff --git a/camel/providers/imapx/camel-imapx-job.h b/camel/providers/imapx/camel-imapx-job.h
index dcce254..0ca97e9 100644
--- a/camel/providers/imapx/camel-imapx-job.h
+++ b/camel/providers/imapx/camel-imapx-job.h
@@ -54,10 +54,6 @@ struct _CamelIMAPXJob {
gshort commands; /* counts how many commands are outstanding */
CamelFolder *folder;
-
- union {
- const gchar *folder_name;
- } u;
};
CamelIMAPXJob * camel_imapx_job_new (GCancellable *cancellable);
diff --git a/camel/providers/imapx/camel-imapx-server.c b/camel/providers/imapx/camel-imapx-server.c
index 9a04888..493bba8 100644
--- a/camel/providers/imapx/camel-imapx-server.c
+++ b/camel/providers/imapx/camel-imapx-server.c
@@ -80,6 +80,8 @@ typedef struct _CopyMessagesData CopyMessagesData;
typedef struct _ListData ListData;
typedef struct _ManageSubscriptionsData ManageSubscriptionsData;
typedef struct _RenameFolderData RenameFolderData;
+typedef struct _CreateFolderData CreateFolderData;
+typedef struct _DeleteFolderData DeleteFolderData;
struct _GetMessageData {
/* in: uid requested */
@@ -147,6 +149,14 @@ struct _RenameFolderData {
gchar *new_folder_name;
};
+struct _CreateFolderData {
+ gchar *folder_name;
+};
+
+struct _DeleteFolderData {
+ gchar *folder_name;
+};
+
enum {
SELECT_CHANGED,
SHUTDOWN,
@@ -368,6 +378,22 @@ rename_folder_data_free (RenameFolderData *data)
g_slice_free (RenameFolderData, data);
}
+static void
+create_folder_data_free (CreateFolderData *data)
+{
+ g_free (data->folder_name);
+
+ g_slice_free (CreateFolderData, data);
+}
+
+static void
+delete_folder_data_free (DeleteFolderData *data)
+{
+ g_free (data->folder_name);
+
+ g_slice_free (DeleteFolderData, data);
+}
+
/*
this creates a uid (or sequence number) set directly into a command,
if total is set, then we break it up into total uids. (i.e. command time)
@@ -4460,9 +4486,13 @@ imapx_job_create_folder_start (CamelIMAPXJob *job,
CamelIMAPXServer *is)
{
CamelIMAPXCommand *ic;
+ CreateFolderData *data;
gchar *encoded_fname = NULL;
- encoded_fname = camel_utf8_utf7 (job->u.folder_name);
+ data = camel_imapx_job_get_data (job);
+ g_return_if_fail (data != NULL);
+
+ encoded_fname = camel_utf8_utf7 (data->folder_name);
ic = camel_imapx_command_new (
is, "CREATE", NULL,
"CREATE %s", encoded_fname);
@@ -4501,9 +4531,13 @@ imapx_job_delete_folder_start (CamelIMAPXJob *job,
CamelIMAPXServer *is)
{
CamelIMAPXCommand *ic;
+ DeleteFolderData *data;
gchar *encoded_fname = NULL;
- encoded_fname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, job->u.folder_name);
+ data = camel_imapx_job_get_data (job);
+ g_return_if_fail (data != NULL);
+
+ encoded_fname = imapx_encode_folder_name ((CamelIMAPXStore *) is->store, data->folder_name);
job->folder = camel_store_get_folder_sync (
is->store, "INBOX", 0, job->cancellable, &job->error);
@@ -5912,13 +5946,19 @@ camel_imapx_server_create_folder (CamelIMAPXServer *is,
GError **error)
{
CamelIMAPXJob *job;
+ CreateFolderData *data;
gboolean success;
+ data = g_slice_new0 (CreateFolderData);
+ data->folder_name = g_strdup (folder_name);
+
job = camel_imapx_job_new (cancellable);
job->type = IMAPX_JOB_CREATE_FOLDER;
job->start = imapx_job_create_folder_start;
job->pri = IMAPX_PRIORITY_CREATE_FOLDER;
- job->u.folder_name = folder_name;
+
+ camel_imapx_job_set_data (
+ job, data, (GDestroyNotify) create_folder_data_free);
success = imapx_submit_job (is, job, error);
@@ -5934,13 +5974,19 @@ camel_imapx_server_delete_folder (CamelIMAPXServer *is,
GError **error)
{
CamelIMAPXJob *job;
+ DeleteFolderData *data;
gboolean success;
+ data = g_slice_new0 (DeleteFolderData);
+ data->folder_name = g_strdup (folder_name);
+
job = camel_imapx_job_new (cancellable);
job->type = IMAPX_JOB_DELETE_FOLDER;
job->start = imapx_job_delete_folder_start;
job->pri = IMAPX_PRIORITY_DELETE_FOLDER;
- job->u.folder_name = folder_name;
+
+ camel_imapx_job_set_data (
+ job, data, (GDestroyNotify) delete_folder_data_free);
success = imapx_submit_job (is, job, error);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]