16c57e368SRobert Clausecker /* 26c57e368SRobert Clausecker * Copyright (c) 2025 Robert Clausecker <fuz@FreeBSD.org> 36c57e368SRobert Clausecker * 46c57e368SRobert Clausecker * SPDX-License-Identifier: BSD-2-Clause 56c57e368SRobert Clausecker */ 66c57e368SRobert Clausecker 76c57e368SRobert Clausecker #include <stdint.h> 86c57e368SRobert Clausecker #include <stdlib.h> 96c57e368SRobert Clausecker 106c57e368SRobert Clausecker size_t memalignment(const void * p)116c57e368SRobert Clauseckermemalignment(const void *p) 126c57e368SRobert Clausecker { 136c57e368SRobert Clausecker uintptr_t align; 146c57e368SRobert Clausecker 156c57e368SRobert Clausecker if (p == NULL) 166c57e368SRobert Clausecker return (0); 176c57e368SRobert Clausecker 186c57e368SRobert Clausecker align = (uintptr_t)p; 196c57e368SRobert Clausecker align &= -align; 206c57e368SRobert Clausecker 216c57e368SRobert Clausecker #if UINTPTR_MAX > SIZE_MAX 226c57e368SRobert Clausecker /* if alignment overflows size_t, return maximum possible */ 236c57e368SRobert Clausecker if (align > SIZE_MAX) 246c57e368SRobert Clausecker align = SIZE_MAX - SIZE_MAX/2; 256c57e368SRobert Clausecker #endif 266c57e368SRobert Clausecker 276c57e368SRobert Clausecker return (align); 286c57e368SRobert Clausecker } 29