From 0bb44d7b758317cabeb7972a2aff833da6e6e408 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Wed, 4 Sep 2024 21:16:04 +0300 Subject: [PATCH] LibC: Fix errno to work with shared libraries --- userspace/libraries/LibC/CMakeLists.txt | 1 + userspace/libraries/LibC/errno.cpp | 8 ++++++++ userspace/libraries/LibC/include/errno.h | 4 ++-- userspace/libraries/LibC/string.cpp | 2 -- 4 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 userspace/libraries/LibC/errno.cpp diff --git a/userspace/libraries/LibC/CMakeLists.txt b/userspace/libraries/LibC/CMakeLists.txt index 9cacaaf1..a6a5389e 100644 --- a/userspace/libraries/LibC/CMakeLists.txt +++ b/userspace/libraries/LibC/CMakeLists.txt @@ -4,6 +4,7 @@ set(LIBC_SOURCES ctype.cpp dirent.cpp dlfcn.cpp + errno.cpp fcntl.cpp ftw.cpp grp.cpp diff --git a/userspace/libraries/LibC/errno.cpp b/userspace/libraries/LibC/errno.cpp new file mode 100644 index 00000000..e60ef5c3 --- /dev/null +++ b/userspace/libraries/LibC/errno.cpp @@ -0,0 +1,8 @@ +#include + +static int s_errno = 0; + +int* __errno_location() +{ + return &s_errno; +} diff --git a/userspace/libraries/LibC/include/errno.h b/userspace/libraries/LibC/include/errno.h index 2dcc3e57..d4151459 100644 --- a/userspace/libraries/LibC/include/errno.h +++ b/userspace/libraries/LibC/include/errno.h @@ -93,9 +93,9 @@ __BEGIN_DECLS #define EUNKNOWN 0xFF -#define errno __errno +#define errno (*__errno_location()) -extern int __errno; +int* __errno_location(void); __END_DECLS diff --git a/userspace/libraries/LibC/string.cpp b/userspace/libraries/LibC/string.cpp index 853735db..fd17f356 100644 --- a/userspace/libraries/LibC/string.cpp +++ b/userspace/libraries/LibC/string.cpp @@ -8,8 +8,6 @@ #include #include -int errno = 0; - void* memccpy(void* __restrict s1, const void* __restrict s2, int c, size_t n) { unsigned char* dst = static_cast(s1);