Revision d644f8be
b/osdep.c | ||
---|---|---|
51 | 51 |
#include "sysemu.h" |
52 | 52 |
#include "qemu_socket.h" |
53 | 53 |
|
54 |
#if !defined(_POSIX_C_SOURCE) || defined(_WIN32) |
|
55 |
static void *oom_check(void *ptr) |
|
56 |
{ |
|
57 |
if (ptr == NULL) { |
|
58 |
abort(); |
|
59 |
} |
|
60 |
return ptr; |
|
61 |
} |
|
62 |
#endif |
|
63 |
|
|
54 | 64 |
#if defined(_WIN32) |
55 | 65 |
void *qemu_memalign(size_t alignment, size_t size) |
56 | 66 |
{ |
57 |
return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); |
|
67 |
if (!size) { |
|
68 |
abort(); |
|
69 |
} |
|
70 |
return oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE)); |
|
58 | 71 |
} |
59 | 72 |
|
60 | 73 |
void *qemu_vmalloc(size_t size) |
... | ... | |
62 | 75 |
/* FIXME: this is not exactly optimal solution since VirtualAlloc |
63 | 76 |
has 64Kb granularity, but at least it guarantees us that the |
64 | 77 |
memory is page aligned. */ |
65 |
return VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE); |
|
78 |
if (!size) { |
|
79 |
abort(); |
|
80 |
} |
|
81 |
return oom_check(VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE)); |
|
66 | 82 |
} |
67 | 83 |
|
68 | 84 |
void qemu_vfree(void *ptr) |
... | ... | |
106 | 122 |
struct statfs stfs; |
107 | 123 |
#endif |
108 | 124 |
|
125 |
if (!size) { |
|
126 |
abort (); |
|
127 |
} |
|
128 |
|
|
109 | 129 |
if (phys_ram_fd < 0) { |
110 | 130 |
tmpdir = getenv("QEMU_TMPDIR"); |
111 | 131 |
if (!tmpdir) |
... | ... | |
188 | 208 |
void *ptr; |
189 | 209 |
ret = posix_memalign(&ptr, alignment, size); |
190 | 210 |
if (ret != 0) |
191 |
return NULL;
|
|
211 |
abort();
|
|
192 | 212 |
return ptr; |
193 | 213 |
#elif defined(HOST_BSD) |
194 |
return valloc(size);
|
|
214 |
return oom_check(valloc(size));
|
|
195 | 215 |
#else |
196 |
return memalign(alignment, size);
|
|
216 |
return oom_check(memalign(alignment, size));
|
|
197 | 217 |
#endif |
198 | 218 |
} |
199 | 219 |
|
Also available in: Unified diff