X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fpbd%2Fmalign.cc;h=59c6c4469ef3f5b61260e7c8e475948b7c392319;hb=d3738b087ef1698d45e140114feb8fca4d31e42f;hp=a5f966c0c509db146c3f79eff97dde09ce12c637;hpb=92e4f227deb5a340dad0c4dbbec5ad52d44fa391;p=ardour.git diff --git a/libs/pbd/malign.cc b/libs/pbd/malign.cc index a5f966c0c5..59c6c4469e 100644 --- a/libs/pbd/malign.cc +++ b/libs/pbd/malign.cc @@ -1,5 +1,5 @@ /* - Copyright (C) 2012 Paul Davis + Copyright (C) 2012 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -25,7 +25,7 @@ #include "pbd/malign.h" #include "pbd/error.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace PBD; @@ -62,7 +62,7 @@ int cache_aligned_malloc (void** memptr, size_t size) } return 0; -#endif +#endif } void cache_aligned_free (void* memptr) @@ -72,4 +72,43 @@ void cache_aligned_free (void* memptr) #else free (memptr); #endif -} \ No newline at end of file +} + +int aligned_malloc (void** memptr, size_t size, size_t alignment) +{ +#ifndef HAVE_POSIX_MEMALIGN +#ifdef PLATFORM_WINDOWS + if (((*memptr) = _aligned_malloc (size, alignment)) == 0) { + fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), + alignment, size, strerror (errno)) << endmsg; + return errno; + } else { + return 0; + } +#else + if (((*memptr) = malloc (size)) == 0) { + fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"), + alignment, size, strerror (errno)) << endmsg; + return errno; + } else { + return 0; + } +#endif +#else + if (posix_memalign (memptr, alignment, size)) { + fatal << string_compose (_("Memory allocation error: posix_memalign (%1 * %2) failed (%3)"), + alignment, size, strerror (errno)) << endmsg; + } + + return 0; +#endif +} + +void aligned_free (void* memptr) +{ +#ifdef PLATFORM_WINDOWS + _aligned_free (memptr); +#else + free (memptr); +#endif +}