xref: /freebsd/lib/libc/string/strverscmp.3 (revision 2e3507c25e42292b45a5482e116d278f5515d04d)
1.\" SPDX-License-Identifier: BSD-2-Clause
2.\" Copyright (c) 2022 Aymeric Wibo <obiwac@gmail.com>
3.Dd August 31, 2023
4.Dt STRVERSCMP 3
5.Os
6.Sh NAME
7.Nm strverscmp
8.Nd compare strings according to natural order
9.Sh LIBRARY
10.Lb libc
11.Sh SYNOPSIS
12.In string.h
13.Ft int
14.Fn strverscmp "const char *s1" "const char *s2"
15.Sh DESCRIPTION
16The
17.Fn strverscmp
18function
19compares the null-terminated strings
20.Fa s1
21and
22.Fa s2
23according to their natural order
24and returns an integer greater than, equal to, or less than 0,
25depending on whether
26.Fa s1
27is greater than, equal to, or less than
28.Fa s2 .
29.Pp
30More specifically, this natural order is found by iterating over both
31strings until a difference is found.
32If the difference is between non-decimal characters,
33.Fn strverscmp
34acts like
35.Xr strcmp 3
36(thus, the ordering would be "a", "b", "train").
37If a decimal digit is found, the whole number is read and compared
38(thus, the ordering would be "9", "10", "420" which is different to lexicographic order,
39what
40.Xr strcmp 3
41would have done).
42Numbers with leading zeroes are interpreted as fractional parts (even without a decimal point),
43and numbers with more leading zeroes are placed before numbers with fewer leading zeroes
44(thus, the ordering would be "000", "00", "01", "010", "09", "0", "1", "9", "10").
45.Sh SEE ALSO
46.Xr strcmp 3 ,
47.Xr versionsort 3
48.Sh STANDARDS
49The
50.Fn strverscmp
51function is a GNU extension and conforms to no standard.
52.Sh HISTORY
53The
54.Fn strverscmp
55function was added in
56.Fx 13.2 .
57