diff --git a/apps/nshlib/nsh_fscmds.c b/apps/nshlib/nsh_fscmds.c
index 25e2427b64fa04996b067081c249ed70a45bbd2e..299f11ca3a01a718dfca3d8782ef1ff7522c1c01 100644
--- a/apps/nshlib/nsh_fscmds.c
+++ b/apps/nshlib/nsh_fscmds.c
@@ -147,19 +147,26 @@ static void trim_dir(char *arg)
 #if CONFIG_NFILE_DESCRIPTORS > 0
 static char *nsh_getdirpath(const char *path, const char *file)
 {
+  char *dirpath = NULL;
+  int ret;
+
   /* Handle the case where all that is left is '/' */
 
   if (strcmp(path, "/") == 0)
     {
-      sprintf(g_iobuffer, "/%s", file);
+      ret = asprintf(&dirpath, "/%s", file);
     }
   else
     {
-      sprintf(g_iobuffer, "%s/%s", path, file);
+      ret = asprintf(&dirpath, "%s/%s", path, file);
+    }
+
+  if (ret < 0)
+    {
+      dirpath = NULL;
     }
 
-  g_iobuffer[PATH_MAX] = '\0';
-  return strdup(g_iobuffer);
+  return dirpath;
 }
 #endif