summaryrefslogtreecommitdiff
path: root/daemon/gvfsjobopenforread.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@src.gnome.org>2007-09-13 09:24:53 +0000
committerAlexander Larsson <alexl@src.gnome.org>2007-09-13 09:24:53 +0000
commita0830a1f27d1b4d90a251469b164b865e6b7b144 (patch)
tree2a0b701913913e2e87ecd2ccd1df2e3574742965 /daemon/gvfsjobopenforread.c
parent0e41e3d230d8c2bc40fb45db30099a8e6d21fb20 (diff)
downloadgvfs-a0830a1f27d1b4d90a251469b164b865e6b7b144.tar.gz
Initial work on read
Original git commit by Alexander Larsson <alex@localhost.localdomain> at 1161685777 +0200 svn path=/trunk/; revision=121
Diffstat (limited to 'daemon/gvfsjobopenforread.c')
-rw-r--r--daemon/gvfsjobopenforread.c48
1 files changed, 33 insertions, 15 deletions
diff --git a/daemon/gvfsjobopenforread.c b/daemon/gvfsjobopenforread.c
index 43fcb7d9..a829e1dc 100644
--- a/daemon/gvfsjobopenforread.c
+++ b/daemon/gvfsjobopenforread.c
@@ -8,7 +8,7 @@
#include <glib.h>
#include <dbus/dbus.h>
#include <glib/gi18n.h>
-#include "gvfsreadhandle.h"
+#include "gvfsreadstream.h"
#include "gvfsjobopenforread.h"
#include "gvfsdaemonutils.h"
@@ -27,8 +27,11 @@ g_vfs_job_open_for_read_finalize (GObject *object)
if (job->message)
dbus_message_unref (job->message);
- /* TODO: manage backend_handle if not put in readhandle */
+ /* TODO: manage backend_handle if not put in readstream */
+ if (job->read_stream)
+ g_object_unref (job->read_stream);
+
g_free (job->filename);
if (G_OBJECT_CLASS (g_vfs_job_open_for_read_parent_class)->finalize)
@@ -53,7 +56,7 @@ g_vfs_job_open_for_read_init (GVfsJobOpenForRead *job)
}
GVfsJob *
-g_vfs_job_open_for_read_new (GVfsDaemon *daemon,
+g_vfs_job_open_for_read_new (GVfsDaemonBackend *backend,
DBusConnection *connection,
DBusMessage *message)
{
@@ -80,7 +83,7 @@ g_vfs_job_open_for_read_new (GVfsDaemon *daemon,
job = g_object_new (G_TYPE_VFS_JOB_OPEN_FOR_READ, NULL);
- G_VFS_JOB (job)->daemon = daemon;
+ G_VFS_JOB (job)->backend = backend;
job->connection = connection; /* TODO: ref? */
job->message = dbus_message_ref (message);
job->filename = g_strndup (path_data, path_len);
@@ -94,9 +97,9 @@ start (GVfsJob *job)
GVfsDaemonBackendClass *class;
GVfsJobOpenForRead *op_job = G_VFS_JOB_OPEN_FOR_READ (job);
- class = G_VFS_DAEMON_BACKEND_GET_CLASS (job->daemon->backend);
+ class = G_VFS_DAEMON_BACKEND_GET_CLASS (job->backend);
- return class->open_for_read (job->daemon->backend,
+ return class->open_for_read (job->backend,
op_job,
op_job->filename);
}
@@ -115,43 +118,46 @@ create_reply (GVfsJob *job,
DBusMessage *message)
{
GVfsJobOpenForRead *open_job = G_VFS_JOB_OPEN_FOR_READ (job);
- GVfsReadHandle *handle;
+ GVfsReadStream *stream;
DBusMessage *reply;
GError *error;
+ int remote_fd;
int fd_id;
gboolean res;
g_assert (open_job->backend_handle != NULL);
error = NULL;
- handle = g_vfs_read_handle_new (&error);
- if (handle == NULL)
+ stream = g_vfs_read_stream_new (&error);
+ if (stream == NULL)
{
reply = dbus_message_new_error_from_gerror (message, error);
g_error_free (error);
return reply;
}
+ remote_fd = g_vfs_read_stream_steal_remote_fd (stream);
if (!dbus_connection_send_fd (connection,
- g_vfs_read_handle_get_remote_fd (handle),
+ remote_fd,
&fd_id, &error))
{
+ close (remote_fd);
reply = dbus_message_new_error_from_gerror (message, error);
g_error_free (error);
- g_object_unref (handle);
+ g_object_unref (stream);
return reply;
}
+ close (remote_fd);
reply = dbus_message_new_method_return (message);
res = dbus_message_append_args (reply,
DBUS_TYPE_UINT32, &fd_id,
DBUS_TYPE_INVALID);
- g_vfs_read_handle_close_remote_fd (handle);
- g_vfs_read_handle_set_data (handle, open_job->backend_handle);
- g_vfs_daemon_register_read_handle (job->daemon, handle);
+ g_vfs_read_stream_set_user_data (stream, open_job->backend_handle);
open_job->backend_handle = NULL;
-
+ open_job->read_stream = stream;
+
return reply;
}
@@ -175,3 +181,15 @@ send_reply (GVfsJob *job)
g_vfs_job_emit_finished (job);
}
+
+GVfsReadStream *
+g_vfs_job_open_for_read_steal_stream (GVfsJobOpenForRead *job)
+{
+ GVfsReadStream *stream;
+
+ stream = job->read_stream;
+ job->read_stream = NULL;
+
+ return stream;
+
+}