Skip to content

Commit

Permalink
nshlib: Replace the big temp buffer with lib_get_[path|temp]buffer
Browse files Browse the repository at this point in the history
to save the stack consumption

Signed-off-by: Xiang Xiao <[email protected]>
  • Loading branch information
xiaoxiang781216 committed Jan 19, 2025
1 parent d351399 commit acd10c6
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
14 changes: 11 additions & 3 deletions nshlib/nsh_fsutils.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -82,20 +82,27 @@ static int getpid_callback(FAR struct nsh_vtbl_s *vtbl,
return -E2BIG;
}

/* Match the name of the process */
buffer = lib_get_pathbuffer();
if (buffer == NULL)
{
return -errno;
}

snprintf(buffer, sizeof(buffer), "%s/%s/cmdline", dirpath, entryp->d_name);
/* Match the name of the process */

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;
}

len = read(fd, buffer, sizeof(buffer) - 1);
close(fd);
if (len < 0)
{
lib_put_pathbuffer(buffer);
return -errno;
}

Expand All @@ -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
Expand Down
9 changes: 8 additions & 1 deletion nshlib/nsh_timcmds.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#include <nuttx/config.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit acd10c6

Please sign in to comment.