From 199a403d81bdb2366f76795906f4b8879d9135a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adam=20M=C3=BAdry?= Date: Mon, 22 Jun 2026 14:01:30 +0200 Subject: [PATCH] fix(vfs): Fix __errno_r(__getreent()) correctness for Linux --- components/vfs/linux_include/sys/reent.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/vfs/linux_include/sys/reent.h b/components/vfs/linux_include/sys/reent.h index 886ad52d9ad..6bccfc1f96d 100644 --- a/components/vfs/linux_include/sys/reent.h +++ b/components/vfs/linux_include/sys/reent.h @@ -1,16 +1,20 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ #pragma once +#include + // reent struct is not used for Linux platform. It's defined in Newlib. // To make it compatible with vfs.c, following dummy struct and macros are defined. struct _reent { int i; }; -#define __errno_r(r) r->i +// __getreent() returns NULL on Linux, so __errno_r() must not dereference its +// argument. Map it to the real (thread-local) errno instead, matching esp_libc. +#define __errno_r(r) errno #define __getreent() NULL