diff --git a/components/newlib/src/realpath.c b/components/newlib/src/realpath.c index 6a6f1bddc8..47ad2d4ba0 100644 --- a/components/newlib/src/realpath.c +++ b/components/newlib/src/realpath.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -9,6 +9,7 @@ #include #include #include +#include #include /* realpath logic: @@ -122,3 +123,20 @@ int chdir(const char *path) errno = ENOSYS; return -1; } + +/* std::filesystem functions call chmod and exit with an exception if it fails, + * so not failing with ENOSYS seems a better solution. + */ +int chmod(const char *path, mode_t mode) +{ + return 0; +} + +/* As a workaround for libstdc++ being built with _GLIBCXX_HAVE_DIRFD, + * we have to provide at least a stub for dirfd function. + */ +int dirfd(DIR *dirp) +{ + errno = ENOSYS; + return -1; +} diff --git a/components/newlib/src/sysconf.c b/components/newlib/src/sysconf.c index 545e4a2df4..83f5a02053 100644 --- a/components/newlib/src/sysconf.c +++ b/components/newlib/src/sysconf.c @@ -1,13 +1,18 @@ /* - * SPDX-FileCopyrightText: 2021-2022 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2021-2024 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #include #include +#include +#include "esp_err.h" +#include "esp_log.h" #include "sdkconfig.h" +static const char *TAG = "sysconf"; + #ifdef CONFIG_FREERTOS_UNICORE #define CPU_NUM 1 #else @@ -25,3 +30,24 @@ long sysconf(int arg) return -1; } } + +// pathconf +long fpathconf(int fildes, int name) +{ + if (name == _PC_PATH_MAX) { + return PATH_MAX; + } + ESP_LOGW(TAG, "fpathconf: unsupported name %d", name); + errno = EINVAL; + return -1; +} + +long pathconf(const char *path, int name) +{ + if (name == _PC_PATH_MAX) { + return PATH_MAX; + } + ESP_LOGW(TAG, "pathconf: unsupported name %d", name); + errno = EINVAL; + return -1; +}