gvfs r1419 - in trunk: . daemon
- From: otte svn gnome org
- To: svn-commits-list gnome org
- Subject: gvfs r1419 - in trunk: . daemon
- Date: Thu, 28 Feb 2008 12:29:24 +0000 (GMT)
Author: otte
Date: Thu Feb 28 12:29:24 2008
New Revision: 1419
URL: http://svn.gnome.org/viewvc/gvfs?rev=1419&view=rev
Log:
2008-02-28 Benjamin Otte <otte gnome org>
* daemon/gvfsbackendftp.c: (ftp_connection_sendv),
(ftp_connection_send), (do_start_write), (do_create), (do_append),
(do_replace), (g_vfs_backend_ftp_class_init):
implement append
Modified:
trunk/ChangeLog
trunk/daemon/gvfsbackendftp.c
Modified: trunk/daemon/gvfsbackendftp.c
==============================================================================
--- trunk/daemon/gvfsbackendftp.c (original)
+++ trunk/daemon/gvfsbackendftp.c Thu Feb 28 12:29:24 2008
@@ -291,28 +291,19 @@
*
**/
static guint
-ftp_connection_send (FtpConnection *conn,
- ResponseFlags flags,
- GError ** error,
- const char * format,
- ...) G_GNUC_PRINTF (4, 5);
-static guint
-ftp_connection_send (FtpConnection *conn,
- ResponseFlags flags,
- GError ** error,
- const char * format,
- ...)
+ftp_connection_sendv (FtpConnection *conn,
+ ResponseFlags flags,
+ GError ** error,
+ const char * format,
+ va_list varargs)
{
- va_list varargs;
GString *command;
SoupSocketIOStatus status;
gsize n_bytes;
guint response;
command = g_string_new ("");
- va_start (varargs, format);
g_string_append_vprintf (command, format, varargs);
- va_end (varargs);
DEBUG ("--> %s\n", command->str);
g_string_append (command, "\r\n");
status = soup_socket_write (conn->commands,
@@ -343,6 +334,32 @@
return response;
}
+static guint
+ftp_connection_send (FtpConnection *conn,
+ ResponseFlags flags,
+ GError ** error,
+ const char * format,
+ ...) G_GNUC_PRINTF (4, 5);
+static guint
+ftp_connection_send (FtpConnection *conn,
+ ResponseFlags flags,
+ GError ** error,
+ const char * format,
+ ...)
+{
+ va_list varargs;
+ guint response;
+
+ va_start (varargs, format);
+ response = ftp_connection_sendv (conn,
+ flags,
+ error,
+ format,
+ varargs);
+ va_end (varargs);
+ return response;
+}
+
static void
ftp_connection_parse_features (FtpConnection *conn)
{
@@ -511,6 +528,7 @@
g_object_unref (conn->data);
conn->data = NULL;
}
+
/*** BACKEND ***/
static void
@@ -839,13 +857,22 @@
g_error_free (error);
}
-static void
+static gboolean
do_start_write (GVfsBackendFtp *ftp,
FtpConnection *conn,
GVfsJobOpenForWrite *job,
- const char *filename,
- GFileCreateFlags flags)
+ GFileCreateFlags flags,
+ const char *format,
+ ...) G_GNUC_PRINTF (5, 6);
+static gboolean
+do_start_write (GVfsBackendFtp *ftp,
+ FtpConnection *conn,
+ GVfsJobOpenForWrite *job,
+ GFileCreateFlags flags,
+ const char *format,
+ ...)
{
+ va_list varargs;
GError *error = NULL;
guint status;
@@ -853,10 +880,13 @@
if (!ftp_connection_ensure_data_connection (conn, &error))
goto error;
- status = ftp_connection_send (conn,
+ va_start (varargs, format);
+ status = ftp_connection_sendv (conn,
RESPONSE_PASS_100 | RESPONSE_FAIL_200,
&error,
- "STOR %s", filename);
+ format,
+ varargs);
+ va_end (varargs);
if (status == 0)
goto error;
@@ -865,12 +895,13 @@
g_vfs_job_open_for_write_set_handle (job, conn);
g_vfs_job_open_for_write_set_can_seek (job, FALSE);
g_vfs_job_succeeded (G_VFS_JOB (job));
- return;
+ return TRUE;
error:
g_vfs_backend_ftp_push_connection (ftp, conn);
g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
g_error_free (error);
+ return FALSE;
}
static void
@@ -887,7 +918,30 @@
if (conn == NULL)
goto error;
- do_start_write (ftp, conn, job, filename, flags);
+ do_start_write (ftp, conn, job, flags, "STOR %s", filename);
+ return;
+
+error:
+ g_vfs_backend_ftp_push_connection (ftp, conn);
+ g_vfs_job_failed_from_error (G_VFS_JOB (job), error);
+ g_error_free (error);
+}
+
+static void
+do_append (GVfsBackend *backend,
+ GVfsJobOpenForWrite *job,
+ const char *filename,
+ GFileCreateFlags flags)
+{
+ GVfsBackendFtp *ftp = G_VFS_BACKEND_FTP (backend);
+ FtpConnection *conn;
+ GError *error = NULL;
+
+ conn = g_vfs_backend_ftp_pop_connection (ftp, G_VFS_JOB (job)->cancellable, &error);
+ if (conn == NULL)
+ goto error;
+
+ do_start_write (ftp, conn, job, flags, "APPE %s", filename);
return;
error:
@@ -922,7 +976,7 @@
if (conn == NULL)
goto error;
- do_start_write (ftp, conn, job, filename, flags);
+ do_start_write (ftp, conn, job, flags, "STOR %s", filename);
return;
error:
@@ -1271,6 +1325,7 @@
backend_class->close_read = do_close_read;
backend_class->read = do_read;
backend_class->create = do_create;
+ backend_class->append_to = do_append;
backend_class->replace = do_replace;
backend_class->close_write = do_close_write;
backend_class->write = do_write;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]