diff options
author | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 12:04:00 +0000 |
---|---|---|
committer | Alexander Larsson <alexl@src.gnome.org> | 2007-09-13 12:04:00 +0000 |
commit | 2f8542e5274fe14e631947643cadc10d1803897c (patch) | |
tree | 61047e675d22edc5f1513fe68b1dddb5d2cff968 /daemon/gvfsjobopenforwrite.c | |
parent | 0502df143b8442efa0ec92fe407705da607bbe1c (diff) | |
download | gvfs-2f8542e5274fe14e631947643cadc10d1803897c.tar.gz |
Add backend support for append_to and replace
Original git commit by Alexander Larsson <alex@greebo.(none)> at 1171881679 +0100
svn path=/trunk/; revision=366
Diffstat (limited to 'daemon/gvfsjobopenforwrite.c')
-rw-r--r-- | daemon/gvfsjobopenforwrite.c | 66 |
1 files changed, 57 insertions, 9 deletions
diff --git a/daemon/gvfsjobopenforwrite.c b/daemon/gvfsjobopenforwrite.c index 37c65804..c5f9ec10 100644 --- a/daemon/gvfsjobopenforwrite.c +++ b/daemon/gvfsjobopenforwrite.c @@ -113,9 +113,28 @@ run (GVfsJob *job) GVfsJobOpenForWrite *op_job = G_VFS_JOB_OPEN_FOR_WRITE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); - class->create (op_job->backend, - op_job, - op_job->filename); + if (op_job->mode == OPEN_FOR_WRITE_CREATE) + { + class->create (op_job->backend, + op_job, + op_job->filename); + } + else if (op_job->mode == OPEN_FOR_WRITE_APPEND) + { + class->append_to (op_job->backend, + op_job, + op_job->filename); + } + else if (op_job->mode == OPEN_FOR_WRITE_REPLACE) + { + class->replace (op_job->backend, + op_job, + op_job->filename, + op_job->mtime, + op_job->make_backup); + } + else + g_assert_not_reached (); /* Handled in try */ } static gboolean @@ -124,12 +143,41 @@ try (GVfsJob *job) GVfsJobOpenForWrite *op_job = G_VFS_JOB_OPEN_FOR_WRITE (job); GVfsBackendClass *class = G_VFS_BACKEND_GET_CLASS (op_job->backend); - if (class->try_create == NULL) - return FALSE; - - return class->try_create (op_job->backend, - op_job, - op_job->filename); + if (op_job->mode == OPEN_FOR_WRITE_CREATE) + { + if (class->try_create == NULL) + return FALSE; + return class->try_create (op_job->backend, + op_job, + op_job->filename); + } + else if (op_job->mode == OPEN_FOR_WRITE_APPEND) + { + if (class->try_append_to == NULL) + return FALSE; + return class->try_append_to (op_job->backend, + op_job, + op_job->filename); + } + else if (op_job->mode == OPEN_FOR_WRITE_REPLACE) + { + if (class->try_replace == NULL) + return FALSE; + return class->try_replace (op_job->backend, + op_job, + op_job->filename, + op_job->mtime, + op_job->make_backup); + } + else + { + GError *error = NULL; + g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_INVAL, + "Wrong open for write type"); + g_vfs_job_failed_from_error (job, error); + g_error_free (error); + return TRUE; + } } void |