summaryrefslogtreecommitdiff
path: root/apps/netutils/ftpc/ftpc_getfile.c
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-06-05 16:46:27 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2011-06-05 16:46:27 +0000
commit672c0505c6c10c227c9315ed4f94746462392ea5 (patch)
treef30aa3ac2eceee1f822ff4b7e5b2851ac8fea785 /apps/netutils/ftpc/ftpc_getfile.c
parentd6e0fecec1f8b8bfa14784fa2a33f5f4da66148e (diff)
downloadnuttx-672c0505c6c10c227c9315ed4f94746462392ea5.tar.gz
nuttx-672c0505c6c10c227c9315ed4f94746462392ea5.tar.bz2
nuttx-672c0505c6c10c227c9315ed4f94746462392ea5.zip
Fix more FTP bugs
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@3671 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'apps/netutils/ftpc/ftpc_getfile.c')
-rw-r--r--apps/netutils/ftpc/ftpc_getfile.c30
1 files changed, 19 insertions, 11 deletions
diff --git a/apps/netutils/ftpc/ftpc_getfile.c b/apps/netutils/ftpc/ftpc_getfile.c
index 366351636..6077b7580 100644
--- a/apps/netutils/ftpc/ftpc_getfile.c
+++ b/apps/netutils/ftpc/ftpc_getfile.c
@@ -181,7 +181,6 @@ static int ftpc_recvbinary(FAR struct ftpc_session_s *session,
ssize_t nread;
ssize_t nwritten;
int err;
- int ret = OK;
/* Allocate an I/O buffer */
@@ -199,16 +198,20 @@ static int ftpc_recvbinary(FAR struct ftpc_session_s *session,
nread = fread(buf, sizeof(char), CONFIG_FTP_BUFSIZE, rinstream);
if (nread <= 0)
{
- /* nread == 0 means end of file */
+ /* nread < 0 is an error */
if (nread < 0)
{
/* errno should already be set by fread */
(void)ftpc_xfrabort(session, rinstream);
- ret = ERROR;
+ goto errout_with_buf;
}
- break;
+
+ /* nread == 0 means end of file. Return success */
+
+ free(buf);
+ return OK;
}
/* Write the data to the file */
@@ -217,19 +220,24 @@ static int ftpc_recvbinary(FAR struct ftpc_session_s *session,
if (nwritten != nread)
{
(void)ftpc_xfrabort(session, loutstream);
- ret = ERROR;
- break;
+
+ /* If nwritten < 0 errno should already be set by fwrite.
+ * What would a short write mean?
+ */
+
+ goto errout_with_buf;
}
- session->size += nread;
+ /* Increment the size of the file written */
+
+ session->size += nwritten;
}
+errout_with_buf: /* Buffer allocated, errno already set */
free(buf);
- return ret;
+ return ERROR;
-errout_with_buf:
- free(buf);
-errout_with_err:
+errout_with_err: /* Buffer not allocated, errno needs to be set */
set_errno(err);
return ERROR;
}