diff options
author | Carl-Anton Ingmarsson <ca.ingmarsson@gmail.com> | 2011-08-14 23:20:42 +0200 |
---|---|---|
committer | Christian Kellner <gicmo@gnome.org> | 2011-08-25 21:19:55 +0200 |
commit | 25fe18ebda237061bcda68cc30fb91494d4255e7 (patch) | |
tree | 63450a0c80b50868f7c775552ebb55401f91b41b | |
parent | 0f7c6f8795cb43467d7401bc52e24fb90da8d79e (diff) | |
download | gvfs-25fe18ebda237061bcda68cc30fb91494d4255e7.tar.gz |
afp: small cleanup in create_file
use g_simple_async_result_set_op_res_gpointer to store data needed for the
operation
-rw-r--r-- | daemon/gvfsbackendafp.c | 57 |
1 files changed, 30 insertions, 27 deletions
diff --git a/daemon/gvfsbackendafp.c b/daemon/gvfsbackendafp.c index 288e34cf..7693346e 100644 --- a/daemon/gvfsbackendafp.c +++ b/daemon/gvfsbackendafp.c @@ -975,20 +975,18 @@ get_vol_parms_finish (GVfsBackendAfp *afp_backend, typedef struct { - GSimpleAsyncResult *simple; - GCancellable *cancellable; char *filename; gboolean hard_create; + GCancellable *cancellable; } CreateFileData; static void free_create_file_data (CreateFileData *cfd) { - g_object_unref (cfd->simple); + g_free (cfd->filename); if (cfd->cancellable) g_object_unref (cfd->cancellable); - g_free (cfd->filename); - + g_slice_free (CreateFileData, cfd); } @@ -996,16 +994,17 @@ static void create_file_cb (GObject *object, GAsyncResult *res, gpointer user_data) { GVfsAfpConnection *afp_conn = G_VFS_AFP_CONNECTION (object); - CreateFileData *cfd = (CreateFileData *)user_data; + GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data); GVfsAfpReply *reply; GError *err = NULL; AfpResultCode res_code; + reply = g_vfs_afp_connection_send_command_finish (afp_conn, res, &err); if (!reply) { - g_simple_async_result_take_error (cfd->simple, err); + g_simple_async_result_take_error (simple, err); goto done; } @@ -1016,47 +1015,49 @@ create_file_cb (GObject *object, GAsyncResult *res, gpointer user_data) switch (res_code) { case AFP_RESULT_ACCESS_DENIED: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, _("Permission denied")); break; case AFP_RESULT_DISK_FULL: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_NO_SPACE, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_NO_SPACE, _("Not enough space on volume")); break; case AFP_RESULT_FILE_BUSY: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_EXISTS, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_EXISTS, _("Target file is open")); break; case AFP_RESULT_OBJECT_EXISTS: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_EXISTS, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_EXISTS, _("Target file already exists")); break; case AFP_RESULT_OBJECT_NOT_FOUND: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_NOT_FOUND, _("Ancestor directory doesn't exist")); break; case AFP_RESULT_VOL_LOCKED: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED, _("Volume is read-only")); break; default: - g_simple_async_result_set_error (cfd->simple, G_IO_ERROR, G_IO_ERROR_FAILED, + g_simple_async_result_set_error (simple, G_IO_ERROR, G_IO_ERROR_FAILED, _("Got error code: %d from server"), res_code); break; } } done: - g_simple_async_result_complete (cfd->simple); - free_create_file_data (cfd); + g_simple_async_result_complete (simple); + g_object_unref (simple); } static void create_file_get_filedir_parms_cb (GObject *source_object, GAsyncResult *res, gpointer user_data) { GVfsBackendAfp *afp_backend = G_VFS_BACKEND_AFP (source_object); - CreateFileData *cfd = (CreateFileData *)user_data; + GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (user_data); + CreateFileData *cfd = g_simple_async_result_get_op_res_gpointer (simple); + GFileInfo *info; GError *err = NULL; @@ -1067,10 +1068,9 @@ create_file_get_filedir_parms_cb (GObject *source_object, GAsyncResult *res, gpo info = get_filedir_parms_finish (afp_backend, res, &err); if (!info) { - g_simple_async_result_take_error (cfd->simple, err); - g_simple_async_result_complete (cfd->simple); - - free_create_file_data (cfd); + g_simple_async_result_take_error (simple, err); + g_simple_async_result_complete (simple); + g_object_unref (simple); return; } @@ -1091,7 +1091,7 @@ create_file_get_filedir_parms_cb (GObject *source_object, GAsyncResult *res, gpo g_free (basename); g_vfs_afp_connection_send_command (afp_backend->server->conn, comm, NULL, - create_file_cb, cfd->cancellable, cfd); + create_file_cb, cfd->cancellable, simple); g_object_unref (comm); } @@ -1104,20 +1104,23 @@ create_file (GVfsBackendAfp *afp_backend, gpointer user_data) { CreateFileData *cfd; + GSimpleAsyncResult *simple; char *dirname; cfd = g_slice_new0 (CreateFileData); cfd->filename = g_strdup (filename); cfd->hard_create = hard_create; - - cfd->simple = g_simple_async_result_new (G_OBJECT (afp_backend), callback, user_data, - create_file); if (cancellable) cfd->cancellable = g_object_ref (cancellable); + + simple = g_simple_async_result_new (G_OBJECT (afp_backend), callback, user_data, + create_file); + g_simple_async_result_set_op_res_gpointer (simple, cfd, + (GDestroyNotify)free_create_file_data); dirname = g_path_get_dirname (filename); get_filedir_parms (afp_backend, dirname, 0, AFP_DIR_BITMAP_NODE_ID_BIT, - cancellable, create_file_get_filedir_parms_cb, cfd); + cancellable, create_file_get_filedir_parms_cb, simple); g_free (dirname); } @@ -2196,7 +2199,7 @@ close_replace_exchange_files_cb (GObject *source_object, GAsyncResult *res, gpoi } return; } - + g_vfs_job_succeeded (G_VFS_JOB (job)); } |