[Spice-devel] [linux-vdagent PATCH 07/10] file-xfers: Handle writing errors
Hans de Goede
hdegoede at redhat.com
Wed Mar 6 07:22:43 PST 2013
Signed-off-by: Hans de Goede <hdegoede at redhat.com>
---
src/vdagent-file-xfers.c | 34 ++++++++++++++++++----------------
1 file changed, 18 insertions(+), 16 deletions(-)
diff --git a/src/vdagent-file-xfers.c b/src/vdagent-file-xfers.c
index faff743..959a491 100644
--- a/src/vdagent-file-xfers.c
+++ b/src/vdagent-file-xfers.c
@@ -262,26 +262,28 @@ void vdagent_file_xfers_data(struct vdagent_file_xfers *xfers,
return;
len = write(task->file_fd, msg->data, msg->size);
- if (len == -1) {
+ if (len == msg->size) {
+ task->read_bytes += msg->size;
+ if (task->read_bytes >= task->file_size) {
+ if (task->read_bytes == task->file_size) {
+ if (xfers->debug)
+ syslog(LOG_DEBUG, "file-xfer: task %u %s has completed",
+ task->id, task->file_name);
+ close(task->file_fd);
+ task->file_fd = -1;
+ status = VD_AGENT_FILE_XFER_STATUS_SUCCESS;
+ } else {
+ syslog(LOG_ERR, "file-xfer: error received too much data");
+ status = VD_AGENT_FILE_XFER_STATUS_ERROR;
+ }
+ }
+ } else {
syslog(LOG_ERR, "file-xfer: error writing %s: %s", task->file_name,
strerror(errno));
- /* TODO: close, cancel dnd */
- return ;
+ status = VD_AGENT_FILE_XFER_STATUS_ERROR;
}
- task->read_bytes += msg->size;
- if (task->read_bytes >= task->file_size) {
- if (task->read_bytes == task->file_size) {
- if (xfers->debug)
- syslog(LOG_DEBUG, "file-xfer: task %u %s has completed",
- task->id, task->file_name);
- close(task->file_fd);
- task->file_fd = -1;
- status = VD_AGENT_FILE_XFER_STATUS_SUCCESS;
- } else {
- syslog(LOG_ERR, "file-xfer: error received too much data");
- status = VD_AGENT_FILE_XFER_STATUS_ERROR;
- }
+ if (status != -1) {
udscs_write(xfers->vdagentd, VDAGENTD_FILE_XFER_STATUS,
msg->id, status, NULL, 0);
g_hash_table_remove(xfers->xfers, GUINT_TO_POINTER(msg->id));
--
1.8.1.4
More information about the Spice-devel
mailing list