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();