This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new aef24f5f3c rename lib_pathbuffer to lib_tempbuffer
aef24f5f3c is described below
commit aef24f5f3c46cd8d2e899b861e3db78a8e4ce272
Author: zhangshoukui <[email protected]>
AuthorDate: Tue Jan 7 10:17:58 2025 +0800
rename lib_pathbuffer to lib_tempbuffer
Signed-off-by: zhangshoukui <[email protected]>
---
include/nuttx/lib/lib.h | 15 ++--
libs/libc/misc/CMakeLists.txt | 4 +-
libs/libc/misc/Kconfig | 25 ++++---
libs/libc/misc/Make.defs | 4 +-
.../misc/{lib_pathbuffer.c => lib_tempbuffer.c} | 79 +++++++++++-----------
5 files changed, 66 insertions(+), 61 deletions(-)
diff --git a/include/nuttx/lib/lib.h b/include/nuttx/lib/lib.h
index 3b65e98eb8..92c2436988 100644
--- a/include/nuttx/lib/lib.h
+++ b/include/nuttx/lib/lib.h
@@ -120,16 +120,19 @@ FAR struct file_struct *lib_get_stream(int fd);
unsigned long nrand(unsigned long limit);
-/* Functions defined in lib_pathbuffer.c ************************************/
+/* Functions defined in lib_tempbuffer.c ************************************/
-#ifdef CONFIG_LIBC_PATHBUFFER
-FAR char *lib_get_pathbuffer(void);
-void lib_put_pathbuffer(FAR char *buffer);
+#ifdef CONFIG_LIBC_TEMPBUFFER
+FAR char *lib_get_tempbuffer(size_t nbytes);
+void lib_put_tempbuffer(FAR char *buffer);
#else
-# define lib_get_pathbuffer() alloca(PATH_MAX)
-# define lib_put_pathbuffer(b)
+# define lib_get_tempbuffer(n) alloca(n)
+# define lib_put_tempbuffer(b)
#endif
+#define lib_get_pathbuffer() lib_get_tempbuffer(PATH_MAX)
+#define lib_put_pathbuffer(b) lib_put_tempbuffer(b)
+
/* Functions defined in lib_realpath.c **************************************/
FAR char *lib_realpath(FAR const char *path, FAR char *resolved,
diff --git a/libs/libc/misc/CMakeLists.txt b/libs/libc/misc/CMakeLists.txt
index 6c4a5cd09f..d4c46b2a2d 100644
--- a/libs/libc/misc/CMakeLists.txt
+++ b/libs/libc/misc/CMakeLists.txt
@@ -49,8 +49,8 @@ list(
lib_mallopt.c
lib_getnprocs.c)
-if(CONFIG_LIBC_PATHBUFFER)
- list(APPEND SRCS lib_pathbuffer.c)
+if(CONFIG_LIBC_TEMPBUFFER)
+ list(APPEND SRCS lib_tempbuffer.c)
endif()
# Support for platforms that do not have long long types
diff --git a/libs/libc/misc/Kconfig b/libs/libc/misc/Kconfig
index 9af74f518f..bf47b07abb 100644
--- a/libs/libc/misc/Kconfig
+++ b/libs/libc/misc/Kconfig
@@ -119,31 +119,30 @@ config LIBC_MEM_FD_VFS_PATH
---help---
The relative path to where memfd will exist in the tmpfs
namespace.
-config LIBC_PATHBUFFER
- bool "Enable global path buffer"
+config LIBC_TEMPBUFFER
+ bool "Enable global temp buffer"
default !DEFAULT_SMALL
---help---
- Enable this option to enable the global path buffer, otherwise
use stack variables via alloca().
- If the current platform does not require a large PATH_MAX size
support and toolchain supports alloca(),
+ Enable this option to enable the global temp buffer, otherwise
use stack variables via alloca().
+ If the current platform does not require a large TEMP_MAX_SIZE
size support and toolchain supports alloca(),
we could turn off this option to improve performance.
-if LIBC_PATHBUFFER
+if LIBC_TEMPBUFFER
-config LIBC_PATHBUFFER_MAX
- int "Maximum size of a temporary file path buffer array"
+config LIBC_MAX_TEMPBUFFER
+ int "Maximum size of a temporary file temp buffer array"
range 0 32
default 2
---help---
- This value is the maximum size of the buffer that will hold the
full
- file path.
+ This value is the maximum size of the buffer that will hold the
full line.
-config LIBC_PATHBUFFER_MALLOC
- bool "Enable malloc pathbuffer"
+config LIBC_TEMPBUFFER_MALLOC
+ bool "Enable malloc tempbuffer"
default y
---help---
- Enable malloc path buffer from the heap when pathbuffer is
insufficient.
+ Enable malloc temp buffer from the heap when tempbuffer is
insufficient.
-endif # LIBC_PATHBUFFER
+endif # LIBC_TEMPBUFFER
config LIBC_BACKTRACE_BUFFSIZE
int "The size of backtrace record buffer"
diff --git a/libs/libc/misc/Make.defs b/libs/libc/misc/Make.defs
index ae93069639..e1fc5ba009 100644
--- a/libs/libc/misc/Make.defs
+++ b/libs/libc/misc/Make.defs
@@ -29,8 +29,8 @@ CSRCS += lib_fchmodat.c lib_fstatat.c lib_getfullpath.c
lib_openat.c
CSRCS += lib_mkdirat.c lib_utimensat.c lib_mallopt.c
CSRCS += lib_idr.c lib_getnprocs.c
-ifeq ($(CONFIG_LIBC_PATHBUFFER),y)
-CSRCS += lib_pathbuffer.c
+ifeq ($(CONFIG_LIBC_TEMPBUFFER),y)
+CSRCS += lib_tempbuffer.c
endif
# Support for platforms that do not have long long types
diff --git a/libs/libc/misc/lib_pathbuffer.c b/libs/libc/misc/lib_tempbuffer.c
similarity index 66%
rename from libs/libc/misc/lib_pathbuffer.c
rename to libs/libc/misc/lib_tempbuffer.c
index 846ab94a42..fcf9e0f265 100644
--- a/libs/libc/misc/lib_pathbuffer.c
+++ b/libs/libc/misc/lib_tempbuffer.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * libs/libc/misc/lib_pathbuffer.c
+ * libs/libc/misc/lib_tempbuffer.c
*
* SPDX-License-Identifier: Apache-2.0
*
@@ -36,28 +36,28 @@
****************************************************************************/
#if CONFIG_PATH_MAX > CONFIG_LINE_MAX
-# define PATH_MAX_SIZE CONFIG_PATH_MAX
+# define TEMP_MAX_SIZE CONFIG_PATH_MAX
#else
-# define PATH_MAX_SIZE CONFIG_LINE_MAX
+# define TEMP_MAX_SIZE CONFIG_LINE_MAX
#endif
/****************************************************************************
* Private Types
****************************************************************************/
-struct pathbuffer_s
+struct tempbuffer_s
{
atomic_t free_bitmap; /* Bitmap of free buffer */
- char buffer[CONFIG_LIBC_PATHBUFFER_MAX][PATH_MAX_SIZE];
+ char buffer[CONFIG_LIBC_MAX_TEMPBUFFER][TEMP_MAX_SIZE];
};
/****************************************************************************
* Private Data
****************************************************************************/
-static struct pathbuffer_s g_pathbuffer =
+static struct tempbuffer_s g_tempbuffer =
{
- (1u << CONFIG_LIBC_PATHBUFFER_MAX) - 1,
+ (1u << CONFIG_LIBC_MAX_TEMPBUFFER) - 1,
};
/****************************************************************************
@@ -69,58 +69,61 @@ static struct pathbuffer_s g_pathbuffer =
****************************************************************************/
/****************************************************************************
- * Name: lib_get_pathbuffer
+ * Name: lib_get_tempbuffer
*
* Description:
- * The lib_get_pathbuffer() function returns a pointer to a temporary
+ * The lib_get_tempbuffer() function returns a pointer to a temporary
* buffer. The buffer is allocated from a pool of pre-allocated buffers
* and if the pool is exhausted, a new buffer is allocated through
- * kmm_malloc(). The size of the buffer is PATH_MAX_SIZE, and must freed by
- * calling lib_put_pathbuffer().
+ * kmm_malloc(). The size of the buffer is nbytes, and must freed by
+ * calling lib_put_tempbuffer().
*
* Returned Value:
- * On success, lib_get_pathbuffer() returns a pointer to a temporary
+ * On success, lib_get_tempbuffer() returns a pointer to a temporary
* buffer. On failure, NULL is returned.
*
****************************************************************************/
-FAR char *lib_get_pathbuffer(void)
+FAR char *lib_get_tempbuffer(size_t nbytes)
{
- for (; ; )
+ if (nbytes <= TEMP_MAX_SIZE)
{
- int32_t update;
- int32_t free_bitmap = atomic_read(&g_pathbuffer.free_bitmap);
- int index = ffsl(free_bitmap) - 1;
- if (index < 0 || index >= CONFIG_LIBC_PATHBUFFER_MAX)
+ for (; ; )
{
- break;
- }
-
- update = free_bitmap & ~(1u << index);
- if (atomic_cmpxchg(&g_pathbuffer.free_bitmap, &free_bitmap,
- update))
- {
- return g_pathbuffer.buffer[index];
+ int32_t update;
+ int32_t free_bitmap = atomic_read(&g_tempbuffer.free_bitmap);
+ int index = ffsl(free_bitmap) - 1;
+ if (index < 0 || index >= CONFIG_LIBC_MAX_TEMPBUFFER)
+ {
+ break;
+ }
+
+ update = free_bitmap & ~(1u << index);
+ if (atomic_cmpxchg(&g_tempbuffer.free_bitmap, &free_bitmap,
+ update))
+ {
+ return g_tempbuffer.buffer[index];
+ }
}
}
/* If no free buffer is found, allocate a new one if
- * CONFIG_LIBC_PATHBUFFER_MALLOC is enabled
+ * CONFIG_LIBC_TEMPBUFFER_MALLOC is enabled
*/
-#ifdef CONFIG_LIBC_PATHBUFFER_MALLOC
- return lib_malloc(PATH_MAX_SIZE);
+#ifdef CONFIG_LIBC_TEMPBUFFER_MALLOC
+ return lib_malloc(nbytes);
#else
return NULL;
#endif
}
/****************************************************************************
- * Name: lib_put_pathbuffer
+ * Name: lib_put_tempbuffer
*
* Description:
- * The lib_put_pathbuffer() function frees a temporary buffer that was
- * allocated by lib_get_pathbuffer(). If the buffer was allocated
+ * The lib_put_tempbuffer() function frees a temporary buffer that was
+ * allocated by lib_get_tempbuffer(). If the buffer was allocated
* dynamically, it is freed by calling kmm_free(). Otherwise, the buffer
* is marked as free in the pool of pre-allocated buffers.
*
@@ -129,20 +132,20 @@ FAR char *lib_get_pathbuffer(void)
*
****************************************************************************/
-void lib_put_pathbuffer(FAR char *buffer)
+void lib_put_tempbuffer(FAR char *buffer)
{
- int index = (buffer - &g_pathbuffer.buffer[0][0]) / PATH_MAX_SIZE;
- if (index >= 0 && index < CONFIG_LIBC_PATHBUFFER_MAX)
+ int index = (buffer - &g_tempbuffer.buffer[0][0]) / TEMP_MAX_SIZE;
+ if (index >= 0 && index < CONFIG_LIBC_MAX_TEMPBUFFER)
{
- DEBUGASSERT((atomic_read(&g_pathbuffer.free_bitmap) &
+ DEBUGASSERT((atomic_read(&g_tempbuffer.free_bitmap) &
(1u << index)) == 0);
- atomic_fetch_or_acquire(&g_pathbuffer.free_bitmap, 1u << index);
+ atomic_fetch_or_acquire(&g_tempbuffer.free_bitmap, 1u << index);
return;
}
/* Free the buffer if it was dynamically allocated */
-#ifdef CONFIG_LIBC_PATHBUFFER_MALLOC
+#ifdef CONFIG_LIBC_TEMPBUFFER_MALLOC
lib_free(buffer);
#endif
}