summaryrefslogtreecommitdiff
path: root/src/lib/libc/string
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libc/string')
-rw-r--r--src/lib/libc/string/Makefile.inc12
-rw-r--r--src/lib/libc/string/ffs.333
-rw-r--r--src/lib/libc/string/ffsl.c17
-rw-r--r--src/lib/libc/string/ffsll.c17
-rw-r--r--src/lib/libc/string/memmem.36
5 files changed, 70 insertions, 15 deletions
diff --git a/src/lib/libc/string/Makefile.inc b/src/lib/libc/string/Makefile.inc
index 204ca1b266..f8b6330453 100644
--- a/src/lib/libc/string/Makefile.inc
+++ b/src/lib/libc/string/Makefile.inc
@@ -1,13 +1,13 @@
1# $OpenBSD: Makefile.inc,v 1.40 2024/07/14 09:51:18 jca Exp $ 1# $OpenBSD: Makefile.inc,v 1.41 2025/10/24 11:30:06 claudio Exp $
2 2
3# string sources 3# string sources
4.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/string ${LIBCSRCDIR}/string 4.PATH: ${LIBCSRCDIR}/arch/${MACHINE_CPU}/string ${LIBCSRCDIR}/string
5 5
6SRCS+= explicit_bzero.c memccpy.c memmem.c memrchr.c stpcpy.c stpncpy.c \ 6SRCS+= explicit_bzero.c ffsl.c ffsll.c memccpy.c memmem.c memrchr.c \
7 strcasecmp.c strcasecmp_l.c strcasestr.c strcoll.c strcoll_l.c \ 7 stpcpy.c stpncpy.c strcasecmp.c strcasecmp_l.c strcasestr.c \
8 strdup.c strerror.c strerror_l.c strerror_r.c strmode.c \ 8 strcoll.c strcoll_l.c strdup.c strerror.c strerror_l.c strerror_r.c \
9 strndup.c strnlen.c strsignal.c strtok.c strxfrm.c strxfrm_l.c \ 9 strmode.c strndup.c strnlen.c strsignal.c strtok.c strxfrm.c \
10 timingsafe_bcmp.c timingsafe_memcmp.c \ 10 strxfrm_l.c timingsafe_bcmp.c timingsafe_memcmp.c \
11 wcscat.c wcschr.c wcscmp.c wcscpy.c wcscspn.c wcslcat.c wcslcpy.c \ 11 wcscat.c wcschr.c wcscmp.c wcscpy.c wcscspn.c wcslcat.c wcslcpy.c \
12 wcslen.c wcsncat.c wcsncmp.c wcsncpy.c wcsnlen.c wcspbrk.c wcsrchr.c \ 12 wcslen.c wcsncat.c wcsncmp.c wcsncpy.c wcsnlen.c wcspbrk.c wcsrchr.c \
13 wcsspn.c wcsstr.c wcstok.c wcswcs.c wcswidth.c wmemchr.c wmemcmp.c \ 13 wcsspn.c wcsstr.c wcstok.c wcswcs.c wcswidth.c wmemchr.c wmemcmp.c \
diff --git a/src/lib/libc/string/ffs.3 b/src/lib/libc/string/ffs.3
index e78ab99e8f..0b78fbfd33 100644
--- a/src/lib/libc/string/ffs.3
+++ b/src/lib/libc/string/ffs.3
@@ -27,24 +27,33 @@
27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 27.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28.\" SUCH DAMAGE. 28.\" SUCH DAMAGE.
29.\" 29.\"
30.\" $OpenBSD: ffs.3,v 1.11 2019/08/30 18:35:03 deraadt Exp $ 30.\" $OpenBSD: ffs.3,v 1.13 2025/11/06 17:19:11 schwarze Exp $
31.\" 31.\"
32.Dd $Mdocdate: August 30 2019 $ 32.Dd $Mdocdate: November 6 2025 $
33.Dt FFS 3 33.Dt FFS 3
34.Os 34.Os
35.Sh NAME 35.Sh NAME
36.Nm ffs 36.Nm ffs ,
37.Nm ffsl ,
38.Nm ffsll
37.Nd find first bit set in a bit string 39.Nd find first bit set in a bit string
38.Sh SYNOPSIS 40.Sh SYNOPSIS
39.In strings.h 41.In strings.h
40.Ft int 42.Ft int
41.Fn ffs "int value" 43.Fn ffs "int value"
44.Ft int
45.Fn ffsl "long value"
46.Ft int
47.Fn ffsll "long long value"
42.Sh DESCRIPTION 48.Sh DESCRIPTION
43The 49The
44.Fn ffs 50.Fn ffs ,
45function finds the first bit set in 51.Fn ffsl ,
52and
53.Fn ffsll
54functions find the first bit set in
46.Fa value 55.Fa value
47and returns the index of that bit. 56and return the index of that bit.
48Bits are numbered starting from 1, starting at the rightmost bit. 57Bits are numbered starting from 1, starting at the rightmost bit.
49A return value of 0 means that the argument was zero. 58A return value of 0 means that the argument was zero.
50.Sh SEE ALSO 59.Sh SEE ALSO
@@ -54,8 +63,20 @@ The
54.Fn ffs 63.Fn ffs
55function conforms to 64function conforms to
56.St -p1003.1-2008 . 65.St -p1003.1-2008 .
66The
67.Fn ffsl
68and
69.Fn ffsll
70functions conform to
71.St -p1003.1-2024 .
57.Sh HISTORY 72.Sh HISTORY
58The 73The
59.Fn ffs 74.Fn ffs
60function first appeared in 75function first appeared in
61.Bx 4.2 . 76.Bx 4.2 .
77The
78.Fn ffsl
79and
80.Fn ffsll
81functions first appeared in
82.Ox 7.9 .
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 */
13int
14ffsl(long mask)
15{
16 return (mask ? __builtin_ctzl(mask) + 1 : 0);
17}
diff --git a/src/lib/libc/string/ffsll.c b/src/lib/libc/string/ffsll.c
new file mode 100644
index 0000000000..9370c5ae41
--- /dev/null
+++ b/src/lib/libc/string/ffsll.c
@@ -0,0 +1,17 @@
1/* $OpenBSD: ffsll.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 */
13int
14ffsll(long long mask)
15{
16 return (mask ? __builtin_ctzll(mask) + 1 : 0);
17}
diff --git a/src/lib/libc/string/memmem.3 b/src/lib/libc/string/memmem.3
index de62d738de..eeb621f8f6 100644
--- a/src/lib/libc/string/memmem.3
+++ b/src/lib/libc/string/memmem.3
@@ -1,4 +1,4 @@
1.\" $OpenBSD: memmem.3,v 1.4 2024/08/03 20:13:23 guenther Exp $ 1.\" $OpenBSD: memmem.3,v 1.5 2025/06/13 18:34:00 schwarze Exp $
2.\" 2.\"
3.\" Copyright (c) 2005 Pascal Gloor <pascal.gloor@spale.com> 3.\" Copyright (c) 2005 Pascal Gloor <pascal.gloor@spale.com>
4.\" 4.\"
@@ -26,7 +26,7 @@
26.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27.\" SUCH DAMAGE. 27.\" SUCH DAMAGE.
28.\" 28.\"
29.Dd $Mdocdate: August 3 2024 $ 29.Dd $Mdocdate: June 13 2025 $
30.Dt MEMMEM 3 30.Dt MEMMEM 3
31.Os 31.Os
32.Sh NAME 32.Sh NAME
@@ -34,7 +34,7 @@
34.Nd locate a byte substring in a byte string 34.Nd locate a byte substring in a byte string
35.Sh SYNOPSIS 35.Sh SYNOPSIS
36.In string.h 36.In string.h
37.Ft "void *" 37.Ft void *
38.Fo memmem 38.Fo memmem
39.Fa "const void *big" "size_t big_len" 39.Fa "const void *big" "size_t big_len"
40.Fa "const void *little" "size_t little_len" 40.Fa "const void *little" "size_t little_len"