From 1810b02cfdae5ff2aaddc744926069653eb4d6e1 Mon Sep 17 00:00:00 2001 From: Alexander Zhylin Date: Tue, 19 May 2026 13:53:50 +0300 Subject: [PATCH] fixes packages processing on file load --- src/file_p.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/file_p.c b/src/file_p.c index 6d0678e..9181f41 100644 --- a/src/file_p.c +++ b/src/file_p.c @@ -326,15 +326,19 @@ void file_upload(session *sess) { return; } if (sess->file->package_rest < rlen) { - write(dest_d, buf, sess->file->package_rest); - s_file_pd_t *fpd = (s_file_pd_t *)buf + sess->file->package_rest; + write(dest_d, buf, sess->file->package_rest); + rlen -= sess->file->package_rest; + sess->file->rest -= sess->file->package_rest; + if (rlen == 0) return; + s_file_pd_t *fpd = (s_file_pd_t *) (buf + sess->file->package_rest); switch (fpd->signal) { case sig_continue: - sess->file->package_rest = fpd->package_size; rlen -= sizeof(s_file_pd_t); if (rlen > 0) { - write(dest_d, buf + sizeof(s_file_pd_t), rlen); - } + write(dest_d, buf + sess->file->package_rest + sizeof(s_file_pd_t), rlen); + sess->file->rest -= rlen; + } + sess->file->package_rest = fpd->package_size - rlen; break; case sig_cancel: fprintf(stderr, "Upload of %s is cancelled!\n", sess->file->name); @@ -350,10 +354,10 @@ void file_upload(session *sess) { } } else { write(dest_d, buf, rlen); + sess->file->rest -= rlen; + sess->file->package_rest -= rlen; } - sess->file->rest -= rlen; - sess->file->package_rest -= rlen; if (!sess->file->rest) { printf("File %s is uploaded to the server\n", sess->file->name); session_send_string(sess, "finished\n");