It mimics msvc _aligned_msize() function.
---
 mingw-w64-crt/misc/mingw-aligned-malloc.c | 23 +++++++++++++++++++++++
 mingw-w64-headers/crt/malloc.h            |  1 +
 2 files changed, 24 insertions(+)

diff --git a/mingw-w64-crt/misc/mingw-aligned-malloc.c 
b/mingw-w64-crt/misc/mingw-aligned-malloc.c
index 5029b6007842..56f8e5da24d3 100644
--- a/mingw-w64-crt/misc/mingw-aligned-malloc.c
+++ b/mingw-w64-crt/misc/mingw-aligned-malloc.c
@@ -118,3 +118,26 @@ __mingw_aligned_realloc (void *memblock, size_t size, 
size_t alignment)
 {
   return __mingw_aligned_offset_realloc (memblock, size, alignment, 0);
 }
+
+size_t
+__mingw_aligned_msize (void *memblock, size_t alignment, size_t offset)
+{
+  void *p0;
+
+  if (!memblock || NOT_POWER_OF_TWO (alignment))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  p0 = ORIG_PTR (memblock);
+
+  /* It is an error if the alignment or offset does not match. */
+  if (memblock != PTR_ALIGN (p0, alignment, offset))
+    {
+      errno = EINVAL;
+      return -1;
+    }
+
+  return _msize (p0) - (alignment + sizeof (void *));
+}
diff --git a/mingw-w64-headers/crt/malloc.h b/mingw-w64-headers/crt/malloc.h
index 78d67dd2eeb4..52918782bf8c 100644
--- a/mingw-w64-headers/crt/malloc.h
+++ b/mingw-w64-headers/crt/malloc.h
@@ -133,6 +133,7 @@ void __mingw_aligned_free (void *_Memory);
 void * __mingw_aligned_offset_realloc (void *_Memory, size_t _Size, size_t 
_Alignment, size_t _Offset);
 void * __mingw_aligned_offset_malloc (size_t, size_t, size_t);
 void * __mingw_aligned_realloc (void *_Memory, size_t _Size, size_t _Offset);
+size_t __mingw_aligned_msize (void *memblock, size_t alignment, size_t offset);
 
 #if defined(__x86_64__) || defined(__i386__)
 /* Get the compiler's definition of _mm_malloc and _mm_free. */
-- 
2.20.1



_______________________________________________
Mingw-w64-public mailing list
Mingw-w64-public@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to