summaryrefslogtreecommitdiff
path: root/src/file_service.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/file_service.c')
-rw-r--r--src/file_service.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/file_service.c b/src/file_service.c
index 15c2304..eabf755 100644
--- a/src/file_service.c
+++ b/src/file_service.c
@@ -120,6 +120,8 @@ static inline struct request_item *create_request_item(struct tcb *tcb, int type
item->data.shm = (int)data;
break;
default:
+ ErrPrint("Invalid type of request\n");
+ free(item);
return NULL;
}
@@ -398,14 +400,10 @@ static int send_file(int handle, const struct request_item *item)
while (fsize > 0) {
if (fsize > PKT_CHUNKSZ) {
body->size = PKT_CHUNKSZ;
- fsize -= PKT_CHUNKSZ;
} else {
body->size = fsize;
- fsize = 0;
}
- pktsz = sizeof(*body) + body->size;
-
ret = read(fd, body->data, body->size);
if (ret < 0) {
ErrPrint("read: %s\n", strerror(errno));
@@ -413,6 +411,10 @@ static int send_file(int handle, const struct request_item *item)
break;
}
+ body->size = ret;
+ fsize -= ret;
+ pktsz = sizeof(*body) + body->size;
+
/* Send BODY */
ret = com_core_send(handle, (void *)body, pktsz, 2.0f);
if (ret != pktsz) {