mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-04 14:39:31 +03:00
fix path max in realpath on unix (pr #69)
This commit is contained in:
parent
8203f3dcfa
commit
76023ca45f
2 changed files with 27 additions and 7 deletions
25
src/alloc.c
25
src/alloc.c
|
@ -454,19 +454,30 @@ char* mi_heap_realpath(mi_heap_t* heap, const char* fname, char* resolved_name)
|
|||
}
|
||||
}
|
||||
#else
|
||||
#include <limits.h>
|
||||
#ifndef PATH_MAX
|
||||
#define PATH_MAX 260
|
||||
#endif
|
||||
#include <unistd.h>
|
||||
static size_t mi_path_max() {
|
||||
static size_t path_max = 0;
|
||||
if (path_max <= 0) {
|
||||
long m = pathconf("/",_PC_PATH_MAX);
|
||||
if (m <= 0) path_max = 4096; // guess
|
||||
else if (m < 256) path_max = 256; // at least 256
|
||||
else path_max = m;
|
||||
}
|
||||
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 {
|
||||
char buf[PATH_MAX+1];
|
||||
char* rname = realpath(fname,buf);
|
||||
return mi_heap_strndup(heap,rname,PATH_MAX); // ok if `rname==NULL`
|
||||
size_t n = mi_path_max();
|
||||
char* buf = (char*)mi_malloc(n+1);
|
||||
if (buf==NULL) 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
|
||||
|
|
|
@ -139,6 +139,15 @@ int main() {
|
|||
CHECK("heap_destroy", test_heap1());
|
||||
CHECK("heap_delete", test_heap2());
|
||||
|
||||
// ---------------------------------------------------
|
||||
// various
|
||||
// ---------------------------------------------------
|
||||
CHECK_BODY("realpath", {
|
||||
char* s = mi_realpath( ".", NULL );
|
||||
// printf("realpath: %s\n",s);
|
||||
mi_free(s);
|
||||
});
|
||||
|
||||
// ---------------------------------------------------
|
||||
// Done
|
||||
// ---------------------------------------------------[]
|
||||
|
|
Loading…
Add table
Reference in a new issue