git: 06a98fefd3d3 - main - nvi: Replace Clang-only __builtin_is_aligned with C code (#124)
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 27 Nov 2024 18:39:00 UTC
The branch main has been updated by brooks: URL: https://cgit.FreeBSD.org/src/commit/?id=06a98fefd3d3ff42b7e7832af6c0736b98f167ac commit 06a98fefd3d3ff42b7e7832af6c0736b98f167ac Author: Zhihao Yuan <lichray@gmail.com> AuthorDate: 2024-11-27 18:30:46 +0000 Commit: Brooks Davis <brooks@FreeBSD.org> CommitDate: 2024-11-27 18:35:10 +0000 nvi: Replace Clang-only __builtin_is_aligned with C code (#124) We should use alignof in the future. Obtained from: https://github.com/lichray/nvi2/commit/25c4d7db4ea638a31ac458b733a3b67b0a0ff634 --- contrib/nvi/common/log.c | 2 +- contrib/nvi/common/mem.h | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/contrib/nvi/common/log.c b/contrib/nvi/common/log.c index d9b142b16d01..d1a1bc6f704a 100644 --- a/contrib/nvi/common/log.c +++ b/contrib/nvi/common/log.c @@ -709,7 +709,7 @@ apply_with(int (*db_func)(SCR *, recno_t, CHAR_T *, size_t), SCR *sp, static size_t blen; static u_char *bp; - if (!__builtin_is_aligned(p, sizeof(unsigned long))) { + if (!is_aligned(p, sizeof(unsigned long))) { if (len > blen) { blen = p2roundup(MAX(len, 512)); REALLOC(sp, bp, u_char *, blen); diff --git a/contrib/nvi/common/mem.h b/contrib/nvi/common/mem.h index d24ec0b50b09..0c83b70dec2f 100644 --- a/contrib/nvi/common/mem.h +++ b/contrib/nvi/common/mem.h @@ -212,6 +212,18 @@ p2roundup(size_t n) return (n); } +/* + * is_aligned -- + * Determine whether the program can safely read an object with an + * alignment requirement from ptr. + * + * See also: https://clang.llvm.org/docs/LanguageExtensions.html#alignment-builtins + */ +static __inline int +is_aligned(void *ptr, size_t alignment) { + return ((uintptr_t)ptr % alignment) == 0; +} + /* Additional TAILQ helper. */ #define TAILQ_ENTRY_ISVALID(elm, field) \ ((elm)->field.tqe_prev != NULL)