diff options
Diffstat (limited to 'src/file_service.c')
-rw-r--r-- | src/file_service.c | 10 |
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) { |