diff options
Diffstat (limited to 'qarshd.c')
-rw-r--r-- | qarshd.c | 19 |
1 files changed, 11 insertions, 8 deletions
@@ -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 |