From f43846877bd903b7f4bad5d26dd138b53c75b345 Mon Sep 17 00:00:00 2001 From: Benjamin Bannier Date: Wed, 18 Dec 2024 15:25:52 +0100 Subject: [PATCH] Avoid GNU `getcwd` extension behavior GNU `getcwd` can allocate a buffer if passed `NULL` for it. This is an extension which is e.g., not recognized by clang-tidy-19's `StdCLibraryFunctions` check[^1] which emits a diagnostic on a violated precondition `buf != NULL`, ``` The 1st argument to 'getcwd' is NULL but should not be NULL [clang-analyzer-unix.StdCLibraryFunctions,-warnings-as-errors] [build] 3987 | std::unique_ptr buffer{::getcwd(NULL, 0), std::free}; ``` This patch modifies this use of `getcwd` with this extension behavior to instead use `get_current_dir_name` which is also a GNU extension, but does not trigger this diagnostic. [^1]: https://clang.llvm.org/docs/analyzer/checkers.html#unix-stdclibraryfunctions-c --- include/ghc/filesystem.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ghc/filesystem.hpp b/include/ghc/filesystem.hpp index 1770d73..89fccfd 100644 --- a/include/ghc/filesystem.hpp +++ b/include/ghc/filesystem.hpp @@ -4229,7 +4229,7 @@ GHC_INLINE path current_path(std::error_code& ec) } return path(std::wstring(buffer.get()), path::native_format); #elif defined(__GLIBC__) - std::unique_ptr buffer { ::getcwd(NULL, 0), std::free }; + std::unique_ptr buffer { ::get_current_dir_name(), std::free }; if (buffer == nullptr) { ec = detail::make_system_error(); return path();