diff options
Diffstat (limited to 'apps/netutils/ftpc/ftpc_putfile.c')
-rw-r--r-- | apps/netutils/ftpc/ftpc_putfile.c | 53 |
1 files changed, 29 insertions, 24 deletions
diff --git a/apps/netutils/ftpc/ftpc_putfile.c b/apps/netutils/ftpc/ftpc_putfile.c index c05112402..6993169d9 100644 --- a/apps/netutils/ftpc/ftpc_putfile.c +++ b/apps/netutils/ftpc/ftpc_putfile.c @@ -111,32 +111,37 @@ static int ftpc_sendbinary(FAR struct ftpc_session_s *session, int ret = OK; buf = (char *)malloc(CONFIG_FTP_BUFSIZE); - while (!feof(linstream)) + for (;;) { nread = fread(buf, sizeof(char), CONFIG_FTP_BUFSIZE, linstream); - if (nread <= 0) - { - (void)ftpc_xfrabort(session, linstream); - ret = ERROR; - break; - } - - if (ftpc_waitoutput(session) != 0) - { - ret = ERROR; - break; - } - - nwritten = fwrite(buf, sizeof(char), nread, routstream); - if (nwritten != nread) - { - (void)ftpc_xfrabort(session, routstream); - ret = ERROR; - break; - } - - session->size += nread; - } + if (nread <= 0) + { + /* nread == 0 is just EOF */ + + if (nread < 0) + { + (void)ftpc_xfrabort(session, linstream); + ret = ERROR; + } + break; + } + + if (ftpc_waitoutput(session) != 0) + { + ret = ERROR; + break; + } + + nwritten = fwrite(buf, sizeof(char), nread, routstream); + if (nwritten != nread) + { + (void)ftpc_xfrabort(session, routstream); + ret = ERROR; + break; + } + + session->size += nread; + } free(buf); return ret; |