diff options
| author | claudio <> | 2025-10-24 11:30:06 +0000 | 
|---|---|---|
| committer | claudio <> | 2025-10-24 11:30:06 +0000 | 
| commit | 8cbd4e746f40c750809e34d04c0298e0a5ff6f42 (patch) | |
| tree | de417cfcebbdd39fd868b5b5a0569e386e25b92f /src/lib/libc/string/ffsl.c | |
| parent | 2e803cbe8e599c0ae52e9dda44c3d22e3dec105d (diff) | |
| download | openbsd-8cbd4e746f40c750809e34d04c0298e0a5ff6f42.tar.gz openbsd-8cbd4e746f40c750809e34d04c0298e0a5ff6f42.tar.bz2 openbsd-8cbd4e746f40c750809e34d04c0298e0a5ff6f42.zip | |
Implement ffsl() and ffsll() using the compiler builtin __builtin_ctzl
now that all archs use at least gcc4.
ffsl() and ffsll() are now part of POSIX.
OK deraadt@, input from miod@ and jsg@
Diffstat (limited to 'src/lib/libc/string/ffsl.c')
| -rw-r--r-- | src/lib/libc/string/ffsl.c | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/src/lib/libc/string/ffsl.c b/src/lib/libc/string/ffsl.c new file mode 100644 index 0000000000..182318c3d6 --- /dev/null +++ b/src/lib/libc/string/ffsl.c | |||
| @@ -0,0 +1,17 @@ | |||
| 1 | /* $OpenBSD: ffsl.c,v 1.1 2025/10/24 11:30:06 claudio Exp $ */ | ||
| 2 | |||
| 3 | /* | ||
| 4 | * Public domain. | ||
| 5 | * Written by Claudio Jeker. | ||
| 6 | */ | ||
| 7 | |||
| 8 | #include <strings.h> | ||
| 9 | |||
| 10 | /* | ||
| 11 | * ffs -- find the first (least significant) bit set | ||
| 12 | */ | ||
| 13 | int | ||
| 14 | ffsl(long mask) | ||
| 15 | { | ||
| 16 | return (mask ? __builtin_ctzl(mask) + 1 : 0); | ||
| 17 | } | ||
