diff options
-rwxr-xr-x | apps/examples/ftpc/ftpc_cmds.c | 4 | ||||
-rw-r--r-- | apps/netutils/ftpc/ftpc_getfile.c | 15 | ||||
-rw-r--r-- | apps/netutils/ftpc/ftpc_internal.h | 3 | ||||
-rw-r--r-- | apps/netutils/ftpc/ftpc_listdir.c | 2 | ||||
-rw-r--r-- | apps/netutils/ftpc/ftpc_putfile.c | 15 | ||||
-rw-r--r-- | apps/netutils/ftpc/ftpc_socket.c | 15 | ||||
-rw-r--r-- | apps/netutils/ftpc/ftpc_transfer.c | 22 | ||||
-rw-r--r-- | apps/nshlib/nsh_parse.c | 2 |
8 files changed, 54 insertions, 24 deletions
diff --git a/apps/examples/ftpc/ftpc_cmds.c b/apps/examples/ftpc/ftpc_cmds.c index f0a0a2413..a4cab45e0 100755 --- a/apps/examples/ftpc/ftpc_cmds.c +++ b/apps/examples/ftpc/ftpc_cmds.c @@ -276,7 +276,7 @@ int cmd_rls(SESSION handle, int argc, char **argv) int cmd_rget(SESSION handle, int argc, char **argv)
{
- FAR const char *lname = argv[1];
+ FAR const char *lname = NULL;
if (argc > 2)
{
@@ -291,7 +291,7 @@ int cmd_rget(SESSION handle, int argc, char **argv) int cmd_rput(SESSION handle, int argc, char **argv)
{
- FAR const char *rname = argv[1];
+ FAR const char *rname = NULL;
if (argc > 2)
{
diff --git a/apps/netutils/ftpc/ftpc_getfile.c b/apps/netutils/ftpc/ftpc_getfile.c index bf9fc69ea..9df827c6e 100644 --- a/apps/netutils/ftpc/ftpc_getfile.c +++ b/apps/netutils/ftpc/ftpc_getfile.c @@ -151,7 +151,7 @@ static int ftpc_recvinit(struct ftpc_session_s *session, FAR const char *path, /* Accept a connection on the data socket */ - ret = ftpc_sockaccept(&session->data, "r", FTPC_IS_PASSIVE(session)); + ret = ftpc_sockaccept(&session->data, FTPC_IS_PASSIVE(session)); if (ret != OK) { ndbg("data connection not accepted\n"); @@ -274,6 +274,19 @@ int ftpc_getfile(SESSION handle, FAR const char *rname, FAR const char *lname, off_t offset; int ret; + /* Don't call this with a NULL remote file name */ + + DEBUGASSERT(rname); + + /* If the local name is not specified, then it is assumed to the same as + * the remote file name. + */ + + if (!lname) + { + lname = rname; + } + /* Get the full path to the local file */ abslpath = ftpc_abslpath(session, lname); diff --git a/apps/netutils/ftpc/ftpc_internal.h b/apps/netutils/ftpc/ftpc_internal.h index 6eab632a5..a59e4fdc1 100644 --- a/apps/netutils/ftpc/ftpc_internal.h +++ b/apps/netutils/ftpc/ftpc_internal.h @@ -246,8 +246,7 @@ EXTERN int ftpc_sockconnect(FAR struct ftpc_socket_s *sock, FAR struct sockaddr_in *addr); EXTERN int ftpc_sockgetsockname(FAR struct ftpc_socket_s *sock, FAR struct sockaddr_in *sa); -EXTERN int ftpc_sockaccept(FAR struct ftpc_socket_s *sock, - FAR const char *mode, bool passive); +EXTERN int ftpc_sockaccept(FAR struct ftpc_socket_s *sock, bool passive); EXTERN int ftpc_socklisten(FAR struct ftpc_socket_s *sock); EXTERN void ftpc_sockcopy(FAR struct ftpc_socket_s *dest, FAR const struct ftpc_socket_s *src); diff --git a/apps/netutils/ftpc/ftpc_listdir.c b/apps/netutils/ftpc/ftpc_listdir.c index e5309daed..d5de10ec3 100644 --- a/apps/netutils/ftpc/ftpc_listdir.c +++ b/apps/netutils/ftpc/ftpc_listdir.c @@ -201,7 +201,7 @@ static int ftpc_recvdir(FAR struct ftpc_session_s *session, /* Accept the connection from the server */ - ret = ftpc_sockaccept(&session->data, "r", FTPC_IS_PASSIVE(session)); + ret = ftpc_sockaccept(&session->data, FTPC_IS_PASSIVE(session)); if (ret != OK) { ndbg("ftpc_sockaccept() failed: %d\n", errno); diff --git a/apps/netutils/ftpc/ftpc_putfile.c b/apps/netutils/ftpc/ftpc_putfile.c index c465cc66d..94942edba 100644 --- a/apps/netutils/ftpc/ftpc_putfile.c +++ b/apps/netutils/ftpc/ftpc_putfile.c @@ -340,7 +340,7 @@ static int ftpc_sendfile(struct ftpc_session_s *session, const char *path, * with a mark. */ - ret = ftpc_sockaccept(&session->data, "w", FTPC_IS_PASSIVE(session)); + ret = ftpc_sockaccept(&session->data, FTPC_IS_PASSIVE(session)); if (ret != OK) { ndbg("Data connection not accepted\n"); @@ -388,6 +388,19 @@ int ftp_putfile(SESSION handle, const char *lname, const char *rname, FILE *finstream; int ret; + /* Don't call this with a NULL local file name */ + + DEBUGASSERT(lname); + + /* If the remote name is not specified, then it is assumed to the same as + * the local file name. + */ + + if (!rname) + { + rname = lname; + } + /* Get the full path to the local file */ abslpath = ftpc_abslpath(session, lname); diff --git a/apps/netutils/ftpc/ftpc_socket.c b/apps/netutils/ftpc/ftpc_socket.c index d70bf1d63..6d917cf36 100644 --- a/apps/netutils/ftpc/ftpc_socket.c +++ b/apps/netutils/ftpc/ftpc_socket.c @@ -212,16 +212,20 @@ void ftpc_sockcopy(FAR struct ftpc_socket_s *dest, * ****************************************************************************/ -int ftpc_sockaccept(struct ftpc_socket_s *sock, const char *mode, bool passive) +int ftpc_sockaccept(struct ftpc_socket_s *sock, bool passive) { struct sockaddr addr; socklen_t addrlen; /* Any previous socket should have been uninitialized (0) or explicitly - * closed (-1). + * closed (-1). But the path to this function may include a call to + * ftpc_sockinit(). */ - DEBUGASSERT(sock->sd == 0 || sock->sd == -1); + if (sock->sd > 0) + { + ftpc_sockclose(sock); + } /* In active mode FTP the client connects from a random port (N>1023) to the * FTP server's command port, port 21. Then, the client starts listening to @@ -249,6 +253,7 @@ int ftpc_sockaccept(struct ftpc_socket_s *sock, const char *mode, bool passive) ndbg("accept() failed: %d\n", errno); return ERROR; } + memcpy(&sock->laddr, &addr, sizeof(sock->laddr)); } @@ -256,7 +261,7 @@ int ftpc_sockaccept(struct ftpc_socket_s *sock, const char *mode, bool passive) * the incoming buffered stream. */ - sock->instream = fdopen(sock->sd, mode); + sock->instream = fdopen(sock->sd, "r"); if (!sock->instream) { ndbg("fdopen() failed: %d\n", errno); @@ -265,7 +270,7 @@ int ftpc_sockaccept(struct ftpc_socket_s *sock, const char *mode, bool passive) /* Create the outgoing stream */ - sock->outstream = fdopen(sock->sd, mode); + sock->outstream = fdopen(sock->sd, "w"); if (!sock->outstream) { ndbg("fdopen() failed: %d\n", errno); diff --git a/apps/netutils/ftpc/ftpc_transfer.c b/apps/netutils/ftpc/ftpc_transfer.c index 8d1a577e9..4dfa6d47b 100644 --- a/apps/netutils/ftpc/ftpc_transfer.c +++ b/apps/netutils/ftpc/ftpc_transfer.c @@ -285,21 +285,21 @@ int ftpc_xfrinit(FAR struct ftpc_session_s *session) ndbg("ftp_pasvmode() failed: %d\n", errno); goto errout_with_data; } - } - /* Configure the data socket */ + /* Configure the data socket */ - ftpc_sockgetsockname(&session->cmd, &addr); - memcpy(&addr.sin_addr, addrport, (size_t)4); - memcpy(&addr.sin_port, addrport+4, (size_t)2); + ftpc_sockgetsockname(&session->cmd, &addr); + memcpy(&addr.sin_addr, addrport, (size_t)4); + memcpy(&addr.sin_port, addrport+4, (size_t)2); - /* Connect the data socket */ + /* Connect the data socket */ - ret = ftpc_sockconnect(&session->data, &addr); - if (ret < 0) - { - ndbg("ftpc_sockconnect() failed: %d\n", errno); - goto errout_with_data; + ret = ftpc_sockconnect(&session->data, &addr); + if (ret < 0) + { + ndbg("ftpc_sockconnect() failed: %d\n", errno); + goto errout_with_data; + } } else { diff --git a/apps/nshlib/nsh_parse.c b/apps/nshlib/nsh_parse.c index 5819def75..82fd01ee4 100644 --- a/apps/nshlib/nsh_parse.c +++ b/apps/nshlib/nsh_parse.c @@ -431,7 +431,7 @@ static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) /* List the set of available built-in commands */ #ifdef CONFIG_NSH_BUILTIN_APPS - nsh_output(vtbl, "\nBuiltin Apps: "); + nsh_output(vtbl, "\nBuiltin Apps:\n"); for (i = 0; (name = namedapp_getname(i)) != NULL; i++) { nsh_output(vtbl, " %s\n", name); |