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