diff --git a/components/vfs/test/test_vfs_open.c b/components/vfs/test/test_vfs_open.c new file mode 100644 index 0000000000..4db1a386ba --- /dev/null +++ b/components/vfs/test/test_vfs_open.c @@ -0,0 +1,38 @@ +/* + * SPDX-FileCopyrightText: 2022 Espressif Systems (Shanghai) CO LTD + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#include +#include +#include +#include +#include "esp_vfs.h" +#include "unity.h" + +static int open_errno_test_open(const char * path, int flags, int mode) +{ + errno = EIO; + return -1; +} + +TEST_CASE("esp_vfs_open sets correct errno", "[vfs]") +{ + esp_vfs_t desc = { + .open = open_errno_test_open + }; + TEST_ESP_OK(esp_vfs_register("/test", &desc, NULL)); + + int fd = open("/test/path", 0, 0); + int e = errno; + TEST_ASSERT_EQUAL(-1, fd); + TEST_ASSERT_EQUAL(EIO, e); + + fd = open("/nonexistent/path", 0, 0); + e = errno; + TEST_ASSERT_EQUAL(-1, fd); + TEST_ASSERT_EQUAL(ENOENT, e); + + TEST_ESP_OK(esp_vfs_unregister("/test")); +} diff --git a/components/vfs/vfs.c b/components/vfs/vfs.c index 6ec4ab6aa3..24a2f1ebc0 100644 --- a/components/vfs/vfs.c +++ b/components/vfs/vfs.c @@ -399,7 +399,7 @@ int esp_vfs_open(struct _reent *r, const char * path, int flags, int mode) __errno_r(r) = ENOMEM; return -1; } - __errno_r(r) = ENOENT; + __errno_r(r) = errno; return -1; }