1/**
2 * Copyright (c) 2006-2023 LOVE Development Team
3 *
4 * This software is provided 'as-is', without any express or implied
5 * warranty. In no event will the authors be held liable for any damages
6 * arising from the use of this software.
7 *
8 * Permission is granted to anyone to use this software for any purpose,
9 * including commercial applications, and to alter it and redistribute it
10 * freely, subject to the following restrictions:
11 *
12 * 1. The origin of this software must not be misrepresented; you must not
13 * claim that you wrote the original software. If you use this software
14 * in a product, an acknowledgment in the product documentation would be
15 * appreciated but is not required.
16 * 2. Altered source versions must be plainly marked as such, and must not be
17 * misrepresented as being the original software.
18 * 3. This notice may not be removed or altered from any source distribution.
19 **/
20
21#include "config.h"
22#include "memory.h"
23
24#include <stdlib.h>
25
26#ifdef LOVE_WINDOWS
27#define WIN32_LEAN_AND_MEAN
28#include <malloc.h>
29#include <Windows.h>
30#else
31#include <unistd.h> // Assume POSIX support.
32#endif
33
34namespace love
35{
36
37bool alignedMalloc(void **mem, size_t size, size_t alignment)
38{
39#ifdef LOVE_WINDOWS
40 *mem = _aligned_malloc(size, alignment);
41 return *mem != nullptr;
42#else
43 return posix_memalign(mem, alignment, size) == 0;
44#endif
45}
46
47void alignedFree(void *mem)
48{
49#ifdef LOVE_WINDOWS
50 _aligned_free(mem);
51#else
52 free(mem);
53#endif
54}
55
56size_t getPageSize()
57{
58#ifdef LOVE_WINDOWS
59 static DWORD size = 0;
60 if (size == 0)
61 {
62 SYSTEM_INFO si;
63 GetSystemInfo(&si);
64 size = si.dwPageSize;
65 }
66
67 return (size_t) size;
68#else
69 static const long size = sysconf(_SC_PAGESIZE);
70 return size > 0 ? (size_t) size : 4096;
71#endif
72}
73
74size_t alignUp(size_t size, size_t alignment)
75{
76 return (size + alignment - 1) & (~(alignment - 1));
77}
78
79} // love
80