summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorRoss Lagerwall <rosslagerwall@gmail.com>2013-10-17 07:26:05 +0200
committerRoss Lagerwall <rosslagerwall@gmail.com>2013-12-05 23:51:30 +0000
commitc3b6615e95bd213beab32d90a8bf38f1b221a8b4 (patch)
treeb18ec470be6377b527e603d58ca274bb5c48074d /common
parent444a63d09fdaf4db8124801ec6f4ff26ca3c7c0e (diff)
downloadgvfs-c3b6615e95bd213beab32d90a8bf38f1b221a8b4.tar.gz
Implement truncate support for output streams
Backends receive a TRUNCATE message which contains a size parameter. Truncation is signaled with a TRUNCATED message (which contains no other useful information). In more detail: Add a new dbus method, OpenForWriteFlags, which has a flags parameter to implement can_seek and can_truncate. These flags are used in GDaemonFileOutputStream. Compatability with old clients is maintained. Implement the can_truncate and truncate_fn GDaemonFileOutputStream methods. Add two new message types to the daemon socket protocol: G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_TRUNCATE G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_TRUNCATED Add a new job type, GVfsJobTruncate. Add two new methods to GVfsBackend which backend classes can implement: truncate and try_truncate https://bugzilla.gnome.org/show_bug.cgi?id=573837
Diffstat (limited to 'common')
-rw-r--r--common/gvfsdaemonprotocol.h6
-rw-r--r--common/org.gtk.vfs.xml12
2 files changed, 18 insertions, 0 deletions
diff --git a/common/gvfsdaemonprotocol.h b/common/gvfsdaemonprotocol.h
index 440620b4..e74a5d24 100644
--- a/common/gvfsdaemonprotocol.h
+++ b/common/gvfsdaemonprotocol.h
@@ -19,6 +19,10 @@ G_BEGIN_DECLS
/* Normal ops are faster, one minute timeout */
#define G_VFS_DBUS_TIMEOUT_MSECS (1000*60)
+/* Flags for the OpenForWriteFlags method */
+#define OPEN_FOR_WRITE_FLAG_CAN_SEEK (1<<0)
+#define OPEN_FOR_WRITE_FLAG_CAN_TRUNCATE (1<<1)
+
typedef struct {
guint32 command;
guint32 seq_nr;
@@ -36,6 +40,7 @@ typedef struct {
#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_SET 4
#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_SEEK_END 5
#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_QUERY_INFO 6
+#define G_VFS_DAEMON_SOCKET_PROTOCOL_REQUEST_TRUNCATE 7
/*
read, readahead reply:
@@ -67,6 +72,7 @@ typedef struct {
#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_WRITTEN 3
#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_CLOSED 4
#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_INFO 5
+#define G_VFS_DAEMON_SOCKET_PROTOCOL_REPLY_TRUNCATED 6
typedef union {
diff --git a/common/org.gtk.vfs.xml b/common/org.gtk.vfs.xml
index b668352a..63038b02 100644
--- a/common/org.gtk.vfs.xml
+++ b/common/org.gtk.vfs.xml
@@ -199,6 +199,18 @@
<arg type='t' name='initial_offset' direction='out'/>
<annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
</method>
+ <method name="OpenForWriteFlags">
+ <arg type='ay' name='path_data' direction='in'/>
+ <arg type='q' name='mode' direction='in'/>
+ <arg type='s' name='etag' direction='in'/>
+ <arg type='b' name='make_backup' direction='in'/>
+ <arg type='u' name='flags' direction='in'/>
+ <arg type='u' name='pid' direction='in'/>
+ <arg type='h' name='fd_id' direction='out'/>
+ <arg type='u' name='flags' direction='out'/>
+ <arg type='t' name='initial_offset' direction='out'/>
+ <annotation name="org.gtk.GDBus.C.UnixFD" value="true"/>
+ </method>
<method name="QueryInfo">
<arg type='ay' name='path_data' direction='in'/>
<arg type='s' name='attributes' direction='in'/>