mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-01 20:29:00 +00:00
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:
parent
131d50ae9d
commit
5330966762
2 changed files with 19 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue