nshlib: Replace the big temp buffer with lib_get_[path|temp]buffer

to save the stack consumption

Signed-off-by: Xiang Xiao <xiaoxiang@xiaomi.com>
This commit is contained in:
Xiang Xiao 2025-01-19 10:00:11 +08:00 committed by GUIDINGLI
parent 131d50ae9d
commit 5330966762
2 changed files with 19 additions and 4 deletions

View file

@ -73,7 +73,7 @@ static int getpid_callback(FAR struct nsh_vtbl_s *vtbl,
FAR struct dirent *entryp, FAR void *pvarg)
{
FAR struct getpid_arg_s *arg = (FAR struct getpid_arg_s *)pvarg;
char buffer[PATH_MAX];
FAR char *buffer;
int fd;
int len;
@ -82,13 +82,19 @@ static int getpid_callback(FAR struct nsh_vtbl_s *vtbl,
return -E2BIG;
}
buffer = lib_get_pathbuffer();
if (buffer == NULL)
{
return -errno;
}
/* Match the name of the process */
snprintf(buffer, sizeof(buffer), "%s/%s/cmdline", dirpath, entryp->d_name);
snprintf(buffer, PATH_MAX, "%s/%s/cmdline", dirpath, entryp->d_name);
fd = open(buffer, O_RDONLY | O_CLOEXEC);
if (fd < 0)
{
lib_put_pathbuffer(buffer);
return 0;
}
@ -96,6 +102,7 @@ static int getpid_callback(FAR struct nsh_vtbl_s *vtbl,
close(fd);
if (len < 0)
{
lib_put_pathbuffer(buffer);
return -errno;
}
@ -107,6 +114,7 @@ static int getpid_callback(FAR struct nsh_vtbl_s *vtbl,
arg->pids[arg->next++] = atoi(entryp->d_name);
}
lib_put_pathbuffer(buffer);
return OK;
}
#endif

View file

@ -26,6 +26,7 @@
#include <nuttx/config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
@ -552,7 +553,6 @@ int cmd_timedatectl(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
#ifndef CONFIG_NSH_DISABLE_WATCH
int cmd_watch(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
{
char buffer[LINE_MAX];
int interval = 2;
int count = -1;
FAR char *cmd;
@ -595,8 +595,15 @@ int cmd_watch(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv)
for (i = 0; i < count; i++)
{
FAR char *buffer = lib_get_tempbuffer(LINE_MAX);
if (buffer == NULL)
{
return ERROR;
}
strlcpy(buffer, cmd, LINE_MAX);
ret = nsh_parse(vtbl, buffer);
lib_put_tempbuffer(buffer);
if (ret < 0)
{
nsh_error(vtbl, g_fmtcmdfailed, argv[0], cmd, NSH_ERRNO);