feat(newlib): add dummy implementations of pathconf, chmod, dirfd

Closes https://github.com/espressif/esp-idf/issues/14174
This commit is contained in:
Ivan Grokhotkov 2024-09-25 17:35:00 +02:00
parent d79c4f7e28
commit 7a214c1fab
No known key found for this signature in database
GPG Key ID: 1E050E141B280628
2 changed files with 46 additions and 2 deletions

View File

@ -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 <string.h>
#include <stdlib.h>
#include <assert.h>
#include <dirent.h>
#include <sys/param.h>
/* 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;
}

View File

@ -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 <unistd.h>
#include <errno.h>
#include <limits.h>
#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;
}