summaryrefslogtreecommitdiffstats
path: root/qarshd.c
diff options
context:
space:
mode:
Diffstat (limited to 'qarshd.c')
-rw-r--r--qarshd.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/qarshd.c b/qarshd.c
index d686078..78b9dda 100644
--- a/qarshd.c
+++ b/qarshd.c
@@ -183,13 +183,13 @@ prepare_recvfile(struct qa_packet *qp)
recvsize = qp->qp_recvfile.qp_count;
received = 0;
- return make_qp_returncode(0, 0, "Ready to receive");
+ return make_qp_data_allow(0, QARSHD_BUFSIZE);
}
struct qa_packet *
receive_data(struct qa_packet *qp)
{
- ssize_t nwrote;
+ ssize_t ret, nwrote;
if (qp->qp_data.qp_count == 0) { /* EOF */
close(receivefd);
@@ -198,13 +198,16 @@ receive_data(struct qa_packet *qp)
}
if (debug) syslog(LOG_DEBUG, "Data for %d, %d@%ld\n",
receivefd, qp->qp_data.qp_count, qp->qp_data.qp_offset);
- nwrote = write(receivefd, qp->qp_data.qp_blob, qp->qp_data.qp_count);
-
- if (nwrote < 0) {
- return make_qp_returncode(-1, errno, strerror(errno));
- }
+ nwrote = 0;
+ do {
+ ret = write(receivefd, qp->qp_data.qp_blob + nwrote, qp->qp_data.qp_count - nwrote);
+ if (ret < 0) {
+ return make_qp_returncode(-1, errno, strerror(errno));
+ }
+ nwrote += ret;
+ } while (nwrote < qp->qp_data.qp_count);
received += nwrote;
- return NULL;
+ return make_qp_data_allow(0, nwrote);
}
ssize_t