static GnomeVFSResult do_tell (GnomeVFSMethod *method, GnomeVFSMethodHandle *method_handle, GnomeVFSFileSize *offset_return) { PERFORM_OPERATION_NO_URI (tell, gnome_vfs_tell ((GnomeVFSHandle *) method_handle, offset_return)); }
static GstFlowReturn gst_gnome_vfs_sink_render (GstBaseSink * basesink, GstBuffer * buf) { GnomeVFSFileSize written, cur_pos; GstGnomeVFSSink *sink; GnomeVFSResult result; GstFlowReturn ret; sink = GST_GNOME_VFS_SINK (basesink); if (gnome_vfs_tell (sink->handle, &cur_pos) == GNOME_VFS_OK) { /* bring up to date with current position for proper reporting */ sink->current_pos = cur_pos; } result = gnome_vfs_write (sink->handle, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf), &written); switch (result) { case GNOME_VFS_OK: { GST_DEBUG_OBJECT (sink, "wrote %" G_GINT64_FORMAT " bytes at %" G_GINT64_FORMAT, (gint64) written, (gint64) cur_pos); if (written < GST_BUFFER_SIZE (buf)) { /* FIXME: what to do here? (tpm) */ g_warning ("%s: %d bytes should be written, only %" G_GUINT64_FORMAT " bytes written", G_STRLOC, GST_BUFFER_SIZE (buf), written); } sink->current_pos += GST_BUFFER_SIZE (buf); ret = GST_FLOW_OK; break; } case GNOME_VFS_ERROR_NO_SPACE: { /* TODO: emit signal/send msg on out-of-diskspace and * handle this gracefully (see open bug) (tpm) */ GST_ELEMENT_ERROR (sink, RESOURCE, NO_SPACE_LEFT, (NULL), ("bufsize=%u, written=%u", GST_BUFFER_SIZE (buf), (guint) written)); ret = GST_FLOW_ERROR; break; } default: { gchar *filename = gnome_vfs_uri_to_string (sink->uri, GNOME_VFS_URI_HIDE_PASSWORD); GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (_("Error while writing to file \"%s\"."), filename), ("%s, bufsize=%u, written=%u", gnome_vfs_result_to_string (result), GST_BUFFER_SIZE (buf), (guint) written)); g_free (filename); ret = GST_FLOW_ERROR; break; } } return GST_FLOW_OK; }