libc/chdir: replace heap alloc to path buffer to improve performance
realloc path buffer to avoid alloc from realpath() Signed-off-by: chao an <anchao@lixiang.com>
This commit is contained in:
parent
bf27e4d75d
commit
2ccdd947a1
1 changed files with 10 additions and 6 deletions
|
@ -72,9 +72,7 @@
|
||||||
|
|
||||||
int chdir(FAR const char *path)
|
int chdir(FAR const char *path)
|
||||||
{
|
{
|
||||||
#ifndef CONFIG_DISABLE_ENVIRON
|
FAR char *oldpwd = NULL;
|
||||||
FAR char *oldpwd;
|
|
||||||
#endif /* !CONFIG_DISABLE_ENVIRON */
|
|
||||||
FAR char *abspath;
|
FAR char *abspath;
|
||||||
struct stat buf;
|
struct stat buf;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -99,9 +97,15 @@ int chdir(FAR const char *path)
|
||||||
* Remove any trailing '/' characters from the path
|
* Remove any trailing '/' characters from the path
|
||||||
*/
|
*/
|
||||||
|
|
||||||
abspath = realpath(path, NULL);
|
abspath = lib_get_pathbuffer();
|
||||||
if (abspath == NULL)
|
if (abspath != NULL)
|
||||||
{
|
{
|
||||||
|
oldpwd = realpath(path, abspath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (abspath == NULL || oldpwd == NULL)
|
||||||
|
{
|
||||||
|
lib_put_pathbuffer(abspath);
|
||||||
return ERROR;
|
return ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,7 +128,7 @@ int chdir(FAR const char *path)
|
||||||
ret = setenv("PWD", abspath, TRUE);
|
ret = setenv("PWD", abspath, TRUE);
|
||||||
#endif /* !CONFIG_DISABLE_ENVIRON */
|
#endif /* !CONFIG_DISABLE_ENVIRON */
|
||||||
|
|
||||||
lib_free(abspath);
|
lib_put_pathbuffer(abspath);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue