This is an automated email from the ASF dual-hosted git repository. aguettouche pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 1cb1fb4 libc: Replace all malloc/free to lib_malloc/lib_free 1cb1fb4 is described below commit 1cb1fb427d717c5ca99e8f192cedf46f3d319483 Author: Xiang Xiao <xiaoxi...@xiaomi.com> AuthorDate: Sun Jul 26 22:43:43 2020 +0800 libc: Replace all malloc/free to lib_malloc/lib_free since libc can be built and used in kernel space, we must call kmm_malloc and kmm_free in this case. Signed-off-by: Xiang Xiao <xiaoxi...@xiaomi.com> --- libs/libc/dirent/lib_scandir.c | 36 ++++++++++++++++++------------------ libs/libc/dlfcn/lib_dlopen.c | 6 ++++-- libs/libc/grp/lib_getgrbuf.c | 9 +++++---- libs/libc/hex2bin/lib_hex2bin.c | 6 ++++-- libs/libc/pwd/lib_getpwbuf.c | 12 +++++++----- libs/libc/stdio/lib_tempnam.c | 4 +++- libs/libc/stdio/lib_vasprintf.c | 9 ++++----- libs/libc/stdlib/lib_realpath.c | 6 ++++-- libs/libc/time/lib_localtime.c | 14 ++++++++------ libs/libc/unistd/lib_execl.c | 12 ++++++++---- libs/libc/userfs/lib_userfs.c | 6 ++++-- 11 files changed, 69 insertions(+), 51 deletions(-) diff --git a/libs/libc/dirent/lib_scandir.c b/libs/libc/dirent/lib_scandir.c index 7234a6c..19f0fe9 100644 --- a/libs/libc/dirent/lib_scandir.c +++ b/libs/libc/dirent/lib_scandir.c @@ -44,6 +44,8 @@ #include <errno.h> #include <stdlib.h> +#include "libc.h" + /* The scandir() function is not appropriate for use within the kernel in its * current form because it uses user space memory allocators and modifies * the errno value. @@ -59,18 +61,18 @@ * Name: scandir * * Description: - * The scandir() function scans the directory dirp, calling filter() on each - * directory entry. Entries for which filter() returns nonzero are stored - * in strings allocated via malloc(), sorted using qsort() with comparison - * function compar(), and collected in array namelist which is allocated via - * malloc(). If filter is NULL, all entries are selected. + * The scandir() function scans the directory dirp, calling filter() on + * each directory entry. Entries for which filter() returns nonzero are + * stored in strings allocated via malloc(), sorted using qsort() with + * comparison function compar(), and collected in array namelist which is + * allocated via malloc(). If filter is NULL, all entries are selected. * * Input Parameters: * path - Pathname of the directory to scan * namelist - An array of pointers to directory entries, which is allocated * by scandir via malloc. Each directory entry is allocated via * malloc as well. The caller is responsible to free said - objects. + * objects. * filter - Directory entries for which filter returns zero are not * included in the namelist. If filter is NULL, all entries are * included. @@ -149,7 +151,7 @@ int scandir(FAR const char *path, FAR struct dirent ***namelist, listsize *= 2; } - newlist = realloc(list, listsize * sizeof(*list)); + newlist = lib_realloc(list, listsize * sizeof(*list)); if (!newlist) { @@ -163,14 +165,12 @@ int scandir(FAR const char *path, FAR struct dirent ***namelist, list = newlist; } - /* Allocate a new directory entry, but restrict its heap size to what is - * really required given the directories' path name. + /* Allocate a new directory entry, but restrict its heap size to what + * is really required given the directories' path name. */ dsize = (size_t)(&d->d_name[strlen(d->d_name) + 1] - (char *)d); - - dnew = malloc(dsize); - + dnew = lib_malloc(dsize); if (!dnew) { /* malloc failed and set errno. This will tell follow up code that @@ -197,14 +197,14 @@ int scandir(FAR const char *path, FAR struct dirent ***namelist, if (get_errno() == 0) { - /* If the caller provided a comparison function, use it to sort the list - * of directory entries. + /* If the caller provided a comparison function, use it to sort the + * list of directory entries. */ if (compar) { - qsort(list, cnt, sizeof(*list), - (CODE int (*)(FAR const void *, FAR const void *))compar); + typedef int (*compar_fn_t)(FAR const void *, FAR const void *); + qsort(list, cnt, sizeof(*list), (compar_fn_t)compar); } /* Set the output parameters. */ @@ -220,10 +220,10 @@ int scandir(FAR const char *path, FAR struct dirent ***namelist, for (i = 0; i < cnt; i++) { - free(list[i]); + lib_free(list[i]); } - free(list); + lib_free(list); result = -1; } diff --git a/libs/libc/dlfcn/lib_dlopen.c b/libs/libc/dlfcn/lib_dlopen.c index a471862..784cbca 100644 --- a/libs/libc/dlfcn/lib_dlopen.c +++ b/libs/libc/dlfcn/lib_dlopen.c @@ -290,10 +290,12 @@ static inline FAR void *dlinsert(FAR const char *filename) return NULL; } - /* Then install the file using the basename of the file as the module name. */ + /* Then install the file using the basename of the file as the module + * name. + */ handle = insmod(filename, basename(name)); - free(name); + lib_free(name); return handle; } #else /* if defined(CONFIG_BUILD_KERNEL) */ diff --git a/libs/libc/grp/lib_getgrbuf.c b/libs/libc/grp/lib_getgrbuf.c index 82a7337..75f7f65 100644 --- a/libs/libc/grp/lib_getgrbuf.c +++ b/libs/libc/grp/lib_getgrbuf.c @@ -45,6 +45,7 @@ #include <grp.h> #include "grp/lib_grp.h" +#include "libc.h" /**************************************************************************** * Private Data @@ -85,7 +86,7 @@ FAR struct group *getgrbuf(gid_t gid, FAR const char *name, buflen = sizeof(FAR char **) + strlen(name) + 1 + strlen(passwd) + 1; - newbuf = (FAR char *)realloc(g_buf, buflen); + newbuf = (FAR char *)lib_realloc(g_buf, buflen); if (!newbuf) { @@ -97,7 +98,7 @@ FAR struct group *getgrbuf(gid_t gid, FAR const char *name, if (!g_grp) { - g_grp = (FAR struct group *)malloc(sizeof(struct group)); + g_grp = (FAR struct group *)lib_malloc(sizeof(struct group)); } if (!g_grp) @@ -116,8 +117,8 @@ FAR struct group *getgrbuf(gid_t gid, FAR const char *name, return result; error: - free(g_grp); - free(g_buf); + lib_free(g_grp); + lib_free(g_buf); g_grp = NULL; g_buf = NULL; set_errno(err); diff --git a/libs/libc/hex2bin/lib_hex2bin.c b/libs/libc/hex2bin/lib_hex2bin.c index 5d2f7c6..927f251 100644 --- a/libs/libc/hex2bin/lib_hex2bin.c +++ b/libs/libc/hex2bin/lib_hex2bin.c @@ -42,6 +42,8 @@ #include <nuttx/streams.h> +#include "libc.h" + #ifdef CONFIG_LIB_HEX2BIN /**************************************************************************** @@ -422,7 +424,7 @@ int hex2bin(FAR struct lib_instream_s *instream, /* Allocate buffer memory */ - alloc = (FAR uint8_t *)malloc(LINE_ALLOC + BIN_ALLOC); + alloc = (FAR uint8_t *)lib_malloc(LINE_ALLOC + BIN_ALLOC); if (alloc == NULL) { lerr("ERROR: Failed to allocate memory\n"); @@ -703,7 +705,7 @@ errout_with_einval: errout_with_buffers: exit_with_buffers: - free(alloc); + lib_free(alloc); return ret; } diff --git a/libs/libc/pwd/lib_getpwbuf.c b/libs/libc/pwd/lib_getpwbuf.c index ce67cdd..b6392a3 100644 --- a/libs/libc/pwd/lib_getpwbuf.c +++ b/libs/libc/pwd/lib_getpwbuf.c @@ -45,6 +45,7 @@ #include <pwd.h> #include "pwd/lib_pwd.h" +#include "libc.h" /**************************************************************************** * Private Data @@ -87,7 +88,7 @@ FAR struct passwd *getpwbuf(uid_t uid, gid_t gid, FAR const char *name, buflen = strlen(name) + 1 + strlen(dir) + 1 + strlen(shell) + 1; - newbuf = (FAR char *)realloc(g_buf, buflen); + newbuf = (FAR char *)lib_realloc(g_buf, buflen); if (!newbuf) { @@ -99,7 +100,7 @@ FAR struct passwd *getpwbuf(uid_t uid, gid_t gid, FAR const char *name, if (!g_pwd) { - g_pwd = (FAR struct passwd *)malloc(sizeof(struct passwd)); + g_pwd = (FAR struct passwd *)lib_malloc(sizeof(struct passwd)); } if (!g_pwd) @@ -108,7 +109,8 @@ FAR struct passwd *getpwbuf(uid_t uid, gid_t gid, FAR const char *name, goto error; } - err = getpwbuf_r(uid, gid, name, dir, shell, g_pwd, g_buf, buflen, &result); + err = getpwbuf_r(uid, gid, name, dir, shell, + g_pwd, g_buf, buflen, &result); if (err) { @@ -118,8 +120,8 @@ FAR struct passwd *getpwbuf(uid_t uid, gid_t gid, FAR const char *name, return result; error: - free(g_pwd); - free(g_buf); + lib_free(g_pwd); + lib_free(g_buf); g_pwd = NULL; g_buf = NULL; set_errno(err); diff --git a/libs/libc/stdio/lib_tempnam.c b/libs/libc/stdio/lib_tempnam.c index fcb3ad6..1e2acaf 100644 --- a/libs/libc/stdio/lib_tempnam.c +++ b/libs/libc/stdio/lib_tempnam.c @@ -43,6 +43,8 @@ #include <stdlib.h> #include <errno.h> +#include "libc.h" + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ @@ -97,7 +99,7 @@ FAR char *tempnam(FAR const char *dir, FAR const char *pfx) return path; } - free(path); + lib_free(path); } set_errno(ENOMEM); diff --git a/libs/libc/stdio/lib_vasprintf.c b/libs/libc/stdio/lib_vasprintf.c index 0676bb5..21f6b78 100644 --- a/libs/libc/stdio/lib_vasprintf.c +++ b/libs/libc/stdio/lib_vasprintf.c @@ -105,7 +105,7 @@ int vasprintf(FAR char **ptr, FAR const IPTR char *fmt, va_list ap) * for the null terminator. */ - buf = (FAR char *)malloc(nulloutstream.nput + 1); + buf = (FAR char *)lib_malloc(nulloutstream.nput + 1); if (!buf) { va_end(ap); @@ -125,16 +125,15 @@ int vasprintf(FAR char **ptr, FAR const IPTR char *fmt, va_list ap) /* Then let lib_vsprintf do it's real thing */ - nbytes = lib_vsprintf((FAR struct lib_outstream_s *)&memoutstream.public, #ifdef va_copy + nbytes = lib_vsprintf((FAR struct lib_outstream_s *)&memoutstream.public, fmt, ap2); + va_end(ap2); #else + nbytes = lib_vsprintf((FAR struct lib_outstream_s *)&memoutstream.public, fmt, ap); #endif -#ifdef va_copy - va_end(ap2); -#endif va_end(ap); /* Return a pointer to the string to the caller. NOTE: the memstream put() diff --git a/libs/libc/stdlib/lib_realpath.c b/libs/libc/stdlib/lib_realpath.c index 7643a67..c6581ed 100644 --- a/libs/libc/stdlib/lib_realpath.c +++ b/libs/libc/stdlib/lib_realpath.c @@ -30,6 +30,8 @@ #include <string.h> #include <unistd.h> +#include "libc.h" + /**************************************************************************** * Public Functions ****************************************************************************/ @@ -62,7 +64,7 @@ FAR char *realpath(FAR const char *path, FAR char *resolved) if (resolved == NULL) { - fres = resolved = malloc(PATH_MAX); + fres = resolved = lib_malloc(PATH_MAX); if (resolved == NULL) { return NULL; @@ -230,6 +232,6 @@ loop: goto loop; out: - free(fres); + lib_free(fres); return NULL; } diff --git a/libs/libc/time/lib_localtime.c b/libs/libc/time/lib_localtime.c index 2ee99fd..4bdeb5c 100644 --- a/libs/libc/time/lib_localtime.c +++ b/libs/libc/time/lib_localtime.c @@ -60,6 +60,8 @@ #include <nuttx/fs/fs.h> +#include "libc.h" + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ @@ -544,7 +546,7 @@ static int tzload(FAR const char *name, int doaccess; union local_storage *lsp; - lsp = malloc(sizeof *lsp); + lsp = lib_malloc(sizeof *lsp); if (!lsp) { return -1; @@ -897,11 +899,11 @@ static int tzload(FAR const char *name, } sp->defaulttype = i; - free(up); + lib_free(up); return 0; oops: - free(up); + lib_free(up); return -1; } @@ -1646,7 +1648,7 @@ static void tzsetwall(void) if (lclptr == NULL) { - lclptr = malloc(sizeof *lclptr); + lclptr = lib_malloc(sizeof *lclptr); if (lclptr == NULL) { settzname(); /* all we can do */ @@ -1791,7 +1793,7 @@ static struct tm *gmtsub(FAR const time_t * const timep, { if (!g_gmt_isset) { - gmtptr = malloc(sizeof *gmtptr); + gmtptr = lib_malloc(sizeof *gmtptr); g_gmt_isset = gmtptr != NULL; if (g_gmt_isset) { @@ -2510,7 +2512,7 @@ void tzset(void) if (lclptr == NULL) { - lclptr = malloc(sizeof *lclptr); + lclptr = lib_malloc(sizeof *lclptr); if (lclptr == NULL) { settzname(); /* all we can do */ diff --git a/libs/libc/unistd/lib_execl.c b/libs/libc/unistd/lib_execl.c index e9af31a..8c3b94c 100644 --- a/libs/libc/unistd/lib_execl.c +++ b/libs/libc/unistd/lib_execl.c @@ -44,11 +44,14 @@ #include <unistd.h> #include <errno.h> +#include "libc.h" + #ifdef CONFIG_LIBC_EXECFUNCS /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ + /* This is an artificial limit to detect error conditions where an argv[] * list is not properly terminated. */ @@ -96,11 +99,12 @@ * The non-standard binfmt function 'exec()' needs to have (1) a symbol * table that provides the list of symbols exported by the base code, and * (2) the number of symbols in that table. This information is currently - * provided to 'exec()' from 'exec[l|v]()' via NuttX configuration settings: + * provided to 'exec()' from 'exec[l|v]()' via NuttX configuration setting: * * CONFIG_LIBC_EXECFUNCS : Enable exec[l|v] support * CONFIG_EXECFUNCS_SYMTAB_ARRAY : Symbol table name used by exec[l|v] - * CONFIG_EXECFUNCS_NSYMBOLS_VAR : Variable holding number of symbols in the table + * CONFIG_EXECFUNCS_NSYMBOLS_VAR : Variable holding number of symbols in + * the table * * As a result of the above, the current implementations of 'execl()' and * 'execv()' suffer from some incompatibilities that may or may not be @@ -166,7 +170,7 @@ int execl(FAR const char *path, ...) if (nargs > 0) { - argv = (FAR char **)malloc((nargs + 1) * sizeof(FAR char *)); + argv = (FAR char **)lib_malloc((nargs + 1) * sizeof(FAR char *)); if (argv == (FAR char **)NULL) { set_errno(ENOMEM); @@ -193,7 +197,7 @@ int execl(FAR const char *path, ...) if (argv) { - free(argv); + lib_free(argv); } return ret; diff --git a/libs/libc/userfs/lib_userfs.c b/libs/libc/userfs/lib_userfs.c index 6e3f336..349877a 100644 --- a/libs/libc/userfs/lib_userfs.c +++ b/libs/libc/userfs/lib_userfs.c @@ -56,6 +56,8 @@ #include <nuttx/fs/userfs.h> #include <nuttx/semaphore.h> +#include "libc.h" + /**************************************************************************** * Private Types ****************************************************************************/ @@ -939,7 +941,7 @@ int userfs_run(FAR const char *mountpt, */ iolen = USERFS_REQ_MAXSIZE + mxwrite; - info = (FAR struct userfs_info_s *)zalloc(SIZEOF_USERFS_INFO_S(iolen)); + info = lib_zalloc(SIZEOF_USERFS_INFO_S(iolen)); if (info == NULL) { ferr("ERROR: Failed to allocate state structure\n"); @@ -1165,6 +1167,6 @@ errout_with_sockfd: /* Free the IO Buffer */ errout_with_info: - free(info); + lib_free(info); return ret; }