#include "mmprivate.h"
-void *mmemalign(void *md, size_t alignment, size_t size)
+void *mmemalign(xbt_mheap_t mdp, size_t alignment, size_t size)
{
void *result;
unsigned long int adj;
struct alignlist *l;
- struct mdesc *mdp;
- if ((result = mmalloc(md, size + alignment - 1)) != NULL) {
+ if ((result = mmalloc(mdp, size + alignment - 1)) != NULL) {
adj = RESIDUAL(result, alignment);
if (adj != 0) {
- mdp = MD_TO_MDP(md);
for (l = mdp->aligned_blocks; l != NULL; l = l->next) {
if (l->aligned == NULL) {
/* This slot is free. Use it. */
}
}
if (l == NULL) {
- l = (struct alignlist *) mmalloc(md, sizeof(struct alignlist));
+ l = (struct alignlist *) mmalloc(mdp, sizeof(struct alignlist));
if (l == NULL) {
- mfree(md, result);
+ mfree(mdp, result);
return (NULL);
}
l->next = mdp->aligned_blocks;
}
return (result);
}
+
+/* Cache the pagesize for the current host machine. Note that if the host
+ does not readily provide a getpagesize() function, we need to emulate it
+ elsewhere, not clutter up this file with lots of kluges to try to figure
+ it out. */
+static size_t cache_pagesize;
+
+void *mvalloc(xbt_mheap_t mdp, size_t size)
+{
+ if (cache_pagesize == 0)
+ cache_pagesize = getpagesize();
+
+ return mmemalign(mdp, cache_pagesize, size);
+}
+