summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@src.gnome.org>2007-09-13 16:04:29 +0000
committerAlexander Larsson <alexl@src.gnome.org>2007-09-13 16:04:29 +0000
commitdf365f814c5d6d02b4d84a3e90c351eba9ede22e (patch)
tree6479fc6a1cdf2ab737cae61ba41bf34b25e63219 /daemon
parent27567ba7c3b3998a1c1963df61aa6469ed216ab4 (diff)
downloadgvfs-df365f814c5d6d02b4d84a3e90c351eba9ede22e.tar.gz
Implement move for sftp
svn path=/trunk/; revision=945
Diffstat (limited to 'daemon')
-rw-r--r--daemon/gvfsbackendsftp.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/daemon/gvfsbackendsftp.c b/daemon/gvfsbackendsftp.c
index 5f590544..fbd4a401 100644
--- a/daemon/gvfsbackendsftp.c
+++ b/daemon/gvfsbackendsftp.c
@@ -2902,6 +2902,44 @@ try_get_info (GVfsBackend *backend,
}
static void
+move_reply (GVfsBackendSftp *backend,
+ int reply_type,
+ GDataInputStream *reply,
+ guint32 len,
+ GVfsJob *job,
+ gpointer user_data)
+{
+ /* on any unknown error, return NOT_SUPPORTED to get the fallback implementation */
+ if (reply_type == SSH_FXP_STATUS)
+ result_from_status (job, reply, G_IO_ERROR_NOT_SUPPORTED);
+ else
+ g_vfs_job_failed (job, G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("Invalid reply recieved"));
+}
+
+static gboolean
+try_move (GVfsBackend *backend,
+ GVfsJobMove *job,
+ const char *source,
+ const char *destination,
+ GFileCopyFlags flags,
+ GFileProgressCallback progress_callback,
+ gpointer progress_callback_data)
+{
+ GVfsBackendSftp *op_backend = G_VFS_BACKEND_SFTP (backend);
+ GDataOutputStream *command;
+ guint32 id;
+
+ command = new_command_stream (op_backend,
+ SSH_FXP_RENAME,
+ &id);
+ put_string (command, source);
+ put_string (command, destination);
+
+ queue_command_stream_and_free (op_backend, command, id, move_reply, G_VFS_JOB (job), NULL);
+}
+
+static void
g_vfs_backend_sftp_class_init (GVfsBackendSftpClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);