github.com/Schaudge/grailbase@v0.0.0-20240223061707-44c758a471c0/compress/libdeflate/aligned_malloc.c (about) 1 /* 2 * aligned_malloc.c - aligned memory allocation 3 * 4 * Originally public domain; changes after 2016-09-07 are copyrighted. 5 * 6 * Copyright 2016 Eric Biggers 7 * 8 * Permission is hereby granted, free of charge, to any person 9 * obtaining a copy of this software and associated documentation 10 * files (the "Software"), to deal in the Software without 11 * restriction, including without limitation the rights to use, 12 * copy, modify, merge, publish, distribute, sublicense, and/or sell 13 * copies of the Software, and to permit persons to whom the 14 * Software is furnished to do so, subject to the following 15 * conditions: 16 * 17 * The above copyright notice and this permission notice shall be 18 * included in all copies or substantial portions of the Software. 19 * 20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 22 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 23 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 24 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 25 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 26 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27 * OTHER DEALINGS IN THE SOFTWARE. 28 */ 29 30 /* 31 * This file provides portable aligned memory allocation functions that only 32 * use malloc() and free(). This avoids portability problems with 33 * posix_memalign(), aligned_alloc(), etc. 34 */ 35 36 #include <stdlib.h> 37 38 #include "aligned_malloc.h" 39 40 void * 41 aligned_malloc(size_t alignment, size_t size) 42 { 43 void *ptr = malloc(sizeof(void *) + alignment - 1 + size); 44 if (ptr) { 45 void *orig_ptr = ptr; 46 ptr = (void *)ALIGN((uintptr_t)ptr + sizeof(void *), alignment); 47 ((void **)ptr)[-1] = orig_ptr; 48 } 49 return ptr; 50 } 51 52 void 53 aligned_free(void *ptr) 54 { 55 if (ptr) 56 free(((void **)ptr)[-1]); 57 }