U8_STRCMP(9F) | Kernel Functions for Drivers | U8_STRCMP(9F) |
u8_strcmp - UTF-8 string comparison function
#include <sys/sunddi.h> int u8_strcmp(const char *s1, const char *s2, size_t n,
int flag, size_t unicode_version, int *errno);
illumos DDI specific (illumos DDI)
s1, s2
n
flag
U8_STRCMP_CS
U8_STRCMP_CI_UPPER
U8_STRCMP_CI_LOWER
U8_STRCMP_NFD
U8_STRCMP_NFC
U8_STRCMP_NFKD
U8_STRCMP_NFKC
Only one case-sensitive or case-insensitive option is allowed. Only one Unicode Normalization option is allowed.
unicode_version
U8_UNICODE_320
U8_UNICODE_500
U8_UNICODE_LATEST
errno
EBADF
EILSEQ
EINVAL
ERANGE
After proper pre-processing, the u8_strcmp() function compares two UTF-8 strings byte-by-byte, according to the machine ordering defined by the corresponding version of the Unicode Standard.
When multiple comparison options are specified, Unicode Normalization is performed after case-sensitive or case-insensitive processing is performed.
The u8_strcmp() function returns an integer greater than, equal to, or less than 0 if the string pointed to by s1 is greater than, equal to, or less than the string pointed to by s2, respectively.
When u8_strcmp() detects an illegal or incomplete character, such character causes the function to set errno to indicate the error. Afterward, the comparison is still performed on the resultant strings and a value based on byte-by-byte comparison is always returned.
The u8_strcmp() function can be called from user or interrupt context.
Example 1 Perform simple default string comparison.
#include <sys/sunddi.h> int docmp_default(const char *u1, const char *u2) {
int result;
int ;
result = u8_strcmp(u1, u2, 0, 0, U8_UNICODE_LATEST, &errno);
if (errno == EILSEQ)
return (-1);
if (errno == EINVAL)
return (-2);
if (errno == EBADF)
return (-3);
if (errno == ERANGE)
return (-4);
Example 2 Perform upper case based case-insensitive comparison with Unicode 3.2.0 date.
#include <sys/sunddi.h> int docmp_caseinsensitive_u320(const char *u1, const char *u2) {
int result;
int errno;
result = u8_strcmp(u1, u2, 0, U8_STRCMP_CI_UPPER,
U8_UNICODE_320, &errno);
if (errno == EILSEQ)
return (-1);
if (errno == EINVAL)
return (-2);
if (errno == EBADF)
return (-3);
if (errno == ERANGE)
return (-4);
return (result); }
Example 3 Perform Unicode Normalization Form D.
Perform Unicode Normalization Form D and uppercase-based case-insensitive comparison with Unicode 3.2.0 date.
#include <sys/sunddi.h> int docmp_nfd_caseinsensitive_u320(const char *u1, const char *u2) {
int result;
int errno;
result = u8_strcmp(u1, u2, 0,
(U8_STRCMP_NFD|U8_STRCMP_CI_UPPER), U8_UNICODE_320,
&errno);
if (errno == EILSEQ)
return (-1);
if (errno == EINVAL)
return (-2);
if (errno == EBADF)
return (-3);
if (errno == ERANGE)
return (-4);
return (result); }
See attributes(7) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
Interface Stability | Committed |
u8_textprep_str(3C), u8_validate(3C), attributes(7), u8_textprep_str(9F), u8_validate(9F), uconv_u16tou32(9F)
The Unicode Standard (http://www.unicode.org)
February 21, 2023 | OmniOS |