diff --git a/CMakeLists.txt b/CMakeLists.txt index 53726b70..74c1f291 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.0) +cmake_minimum_required(VERSION 3.13) project(libmimalloc C CXX) set(CMAKE_C_STANDARD 11) diff --git a/ide/vs2017/mimalloc-override.vcxproj b/ide/vs2017/mimalloc-override.vcxproj index a87b69ac..6fdd83d9 100644 --- a/ide/vs2017/mimalloc-override.vcxproj +++ b/ide/vs2017/mimalloc-override.vcxproj @@ -110,7 +110,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)" Copy mimalloc-redirect32.dll to the output directory @@ -138,7 +138,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)" copy mimalloc-redirect.dll to the output directory @@ -170,7 +170,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)" Copy mimalloc-redirect32.dll to the output directory @@ -202,7 +202,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)" copy mimalloc-redirect.dll to the output directory diff --git a/ide/vs2019/mimalloc-override.vcxproj b/ide/vs2019/mimalloc-override.vcxproj index 4136e574..4c4235b4 100644 --- a/ide/vs2019/mimalloc-override.vcxproj +++ b/ide/vs2019/mimalloc-override.vcxproj @@ -110,7 +110,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)" Copy mimalloc-redirect32.dll to the output directory @@ -138,7 +138,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)" copy mimalloc-redirect.dll to the output directory @@ -170,7 +170,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)" Copy mimalloc-redirect32.dll to the output directory @@ -202,7 +202,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)" copy mimalloc-redirect.dll to the output directory diff --git a/ide/vs2022/mimalloc-override.vcxproj b/ide/vs2022/mimalloc-override.vcxproj index 13722051..54964d96 100644 --- a/ide/vs2022/mimalloc-override.vcxproj +++ b/ide/vs2022/mimalloc-override.vcxproj @@ -110,7 +110,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)" Copy mimalloc-redirect32.dll to the output directory @@ -138,7 +138,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)" copy mimalloc-redirect.dll to the output directory @@ -170,7 +170,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect32.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect32.dll" "$(OutputPath)" Copy mimalloc-redirect32.dll to the output directory @@ -202,7 +202,7 @@ false - COPY /Y $(ProjectDir)..\..\bin\mimalloc-redirect.dll $(OutputPath) + COPY /Y "$(ProjectDir)..\..\bin\mimalloc-redirect.dll" "$(OutputPath)" copy mimalloc-redirect.dll to the output directory diff --git a/src/alloc.c b/src/alloc.c index c87c00ee..7bea69e9 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -786,7 +786,9 @@ mi_decl_nodiscard mi_decl_restrict char* mi_heap_strdup(mi_heap_t* heap, const c if (s == NULL) return NULL; size_t n = strlen(s); char* t = (char*)mi_heap_malloc(heap,n+1); - if (t != NULL) _mi_memcpy(t, s, n + 1); + if (t == NULL) return NULL; + _mi_memcpy(t, s, n); + t[n] = 0; return t; } @@ -837,6 +839,7 @@ mi_decl_nodiscard mi_decl_restrict char* mi_heap_realpath(mi_heap_t* heap, const } #else #include // pathconf +/* static size_t mi_path_max(void) { static size_t path_max = 0; if (path_max <= 0) { @@ -847,20 +850,31 @@ static size_t mi_path_max(void) { } return path_max; } - +*/ char* mi_heap_realpath(mi_heap_t* heap, const char* fname, char* resolved_name) mi_attr_noexcept { if (resolved_name != NULL) { return realpath(fname,resolved_name); } else { - size_t n = mi_path_max(); + char* rname = realpath(fname, NULL); + if (rname == NULL) return NULL; + char* result = mi_heap_strdup(heap, rname); + free(rname); // use regular free! (which may be redirected to our free but that's ok) + return result; + } + /* + const size_t n = mi_path_max(); char* buf = (char*)mi_malloc(n+1); - if (buf==NULL) return NULL; + if (buf == NULL) { + errno = ENOMEM; + return NULL; + } char* rname = realpath(fname,buf); char* result = mi_heap_strndup(heap,rname,n); // ok if `rname==NULL` mi_free(buf); return result; } + */ } #endif diff --git a/test/main-override.cpp b/test/main-override.cpp index b73d8f09..7242eb29 100644 --- a/test/main-override.cpp +++ b/test/main-override.cpp @@ -41,6 +41,7 @@ static void heap_thread_free_huge(); static void test_stl_allocators(); + int main() { mi_stats_reset(); // ignore earlier allocations heap_thread_free_huge();