1 /* 2 * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org> 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7 #include <stdint.h> 8 #include <stdlib.h> 9 10 size_t memalignment(const void * p)11memalignment(const void *p) 12 { 13 uintptr_t align; 14 15 if (p == NULL) 16 return (0); 17 18 align = (uintptr_t)p; 19 align &= -align; 20 21 #if UINTPTR_MAX > SIZE_MAX 22 /* if alignment overflows size_t, return maximum possible */ 23 if (align > SIZE_MAX) 24 align = SIZE_MAX - SIZE_MAX/2; 25 #endif 26 27 return (align); 28 } 29