diff --git a/netutils/ftpc/ftpc_internal.h b/netutils/ftpc/ftpc_internal.h
index 4982e1f20..244a7cfcc 100644
--- a/netutils/ftpc/ftpc_internal.h
+++ b/netutils/ftpc/ftpc_internal.h
@@ -207,7 +207,7 @@ extern "C" {
 /* Low-level string management */
  
 EXTERN void ftpc_stripcrlf(FAR char *str);
-EXTERN void ftpc_stripslash(FAR const char *str);
+EXTERN void ftpc_stripslash(FAR char *str);
 EXTERN FAR char *ftpc_dequote(FAR const char *hostname);
 
 /* FTP helpers */
diff --git a/netutils/ftpc/ftpc_listdir.c b/netutils/ftpc/ftpc_listdir.c
index 2b7706fc1..6ec70a0d9 100644
--- a/netutils/ftpc/ftpc_listdir.c
+++ b/netutils/ftpc/ftpc_listdir.c
@@ -81,7 +81,7 @@ typedef void (*callback_t)(FAR const char *name, FAR void *arg);
  ****************************************************************************/
 
 static FAR char *ftpc_abspath(FAR struct ftpc_session_s *session,
-                              FAR const char *relpath);
+                              FAR const char *relpath)
 {
   FAR char *ptr = NULL;
   int ret = OK;
@@ -101,7 +101,7 @@ static FAR char *ftpc_abspath(FAR struct ftpc_session_s *session,
  
       if (relpath[1] == '\0')
         {
-          return strdup(session->home);
+          return strdup(session->homedir);
         }
 
       /* No... then a '/' better follow the tilde */
@@ -155,7 +155,7 @@ static FAR char *ftpc_abspath(FAR struct ftpc_session_s *session,
 
 static void ftpc_dircount(FAR const char *name, FAR void *arg)
 {
-  unsigned int *dircount = (unsigned int *)arg;
+  FAR unsigned int *dircount = (FAR unsigned int *)arg;
   (*dircount)++;
 }
 
diff --git a/netutils/ftpc/ftpc_login.c b/netutils/ftpc/ftpc_login.c
index f2697dde1..df12c0543 100644
--- a/netutils/ftpc/ftpc_login.c
+++ b/netutils/ftpc/ftpc_login.c
@@ -105,9 +105,9 @@ int ftpc_login(SESSION handle, FAR struct ftpc_login_s *login)
 
   /* Save the login parameter */
 
-  session->uname   = decode_rfc1738(login->uname);
-  session->pwd     = decode_rfc1738(login->pwd);
-  session->initdir = decode_rfc1738(login->rdir);
+  session->uname   = ftpc_dequote(login->uname);
+  session->pwd     = ftpc_dequote(login->pwd);
+  session->initdir = ftpc_dequote(login->rdir);
 
   /* Is passive mode requested? */
 
diff --git a/netutils/ftpc/ftpc_utils.c b/netutils/ftpc/ftpc_utils.c
index 46944e4b2..0b5251fe1 100644
--- a/netutils/ftpc/ftpc_utils.c
+++ b/netutils/ftpc/ftpc_utils.c
@@ -40,6 +40,7 @@
 #include <nuttx/config.h>
 
 #include <stdlib.h>
+#include <string.h>
 
 #include "ftpc_internal.h"
 
@@ -136,7 +137,8 @@ void ftpc_curdir(struct ftpc_session_s *session)
  * Name: ftpc_stripcrlf
  *
  * Description:
- *   Strip any trailing carriage returns or line feeds from a string.
+ *   Strip any trailing carriage returns or line feeds from a string (by
+ *   overwriting them with NUL characters).
  *
  ****************************************************************************/
 
@@ -164,30 +166,32 @@ void ftpc_stripcrlf(FAR char *str)
  * Name: ftpc_stripslash
  *
  * Description:
- *   Strip any trailing slashes from a string.
+ *   Strip any trailing slashes from a string (by overwriting them with NUL
+ *   characters.
  *
  ****************************************************************************/
 
-FAR char *ftpc_stripslash(FAR char *str)
+void ftpc_stripslash(FAR char *str)
 {
   FAR char *ptr;
+  int len;
 
-  if (!str || !*str)
-    return str;
-
-  ptr = strchr(str, 0);
-  if(!ptr)
-    return str;
-  ptr--;
-  if(*ptr == '/') {
-    if(ptr != str) /* root directory */
-      *ptr = 0;
-  }
-  return str;
+  if (str)
+    {
+      len = strlen(str);
+      if (len > 1)
+        {
+          ptr = str + len - 1;
+          if (*ptr == '/');
+            {
+              *ptr = '\0';
+            }
+        }
+    }
 }
 
 /****************************************************************************
- * Name: ftpc_stripslash
+ * Name: ftpc_dequote
  *
  * Description:
  *   Convert quoted hexadecimal constants to binary values.