U8_STRCMP(3C)           Standard C Library Functions           U8_STRCMP(3C)
NAME
       u8_strcmp - UTF-8 string comparison function
SYNOPSIS
       #include <sys/u8_textprep.h>       
int u8_strcmp(
const char *s1, 
const char *s2, 
size_t n,            
int flag, 
size_t version, 
int *errnum);
PARAMETERS
       s1, 
s2                    Pointers to null-terminated UTF-8 strings       
n                    The maximum number of bytes to be compared.  If 0, the
                    comparison is performed until either or both of the
                    strings are examined to the string terminating null
                    byte.       
flag                    The possible comparison options constructed by a bit-
                    wise-inclusive-OR of the following values:                    
U8_STRCMP_CS                        Perform case-sensitive string comparison. This is
                        the default.                    
U8_STRCMP_CI_UPPER                        Perform case-insensitive string comparison based on
                        Unicode upper case converted results of 
s1 and 
s2.                    
U8_STRCMP_CI_LOWER                        Perform case-insensitive string comparison based on
                        Unicode lower case converted results of 
s1 and 
s2.                    
U8_STRCMP_NFD                        Perform string comparison after 
s1 and 
s2 have been
                        normalized by using Unicode Normalization Form D.                    
U8_STRCMP_NFC                        Perform string comparison after 
s1 and 
s2 have been
                        normalized by using Unicode Normalization Form C.                    
U8_STRCMP_NFKD                        Perform string comparison after 
s1 and 
s2 have been
                        normalized by using Unicode Normalization Form KD.                    
U8_STRCMP_NFKC                        Perform string comparison after 
s1 and 
s2 have been
                        normalized by using Unicode Normalization Form KC.
                    Only one case-sensitive or case-insensitive option is
                    allowed. Only one Unicode Normalization option is
                    allowed.       
version                    The version of Unicode data that should be used during
                    comparison. The following values are supported:                    
U8_UNICODE_320                        Use Unicode 3.2.0 data during comparison.                    
U8_UNICODE_500                        Use Unicode 5.0.0 data during comparison.                    
U8_UNICODE_LATEST                        Use the latest Unicode version data available, which
                        is Unicode 5.0.0.       
errnum                    A non-zero value indicates that an error has occurred
                    during comparison. The following values are supported:                    
EBADF                              The specified option values are conflicting
                              and cannot be supported.                    
EILSEQ                              There was an illegal character at 
s1, 
s2, or
                              both.                    
EINVAL                              There was an incomplete character at 
s1, 
s2,
                              or both.                    
ERANGE                              The specified Unicode version value is not
                              supported.
DESCRIPTION
       The 
u8_stcmp() function internally processes UTF-8 strings pointed to
       by 
s1 and 
s2 based on the corresponding version of the Unicode
       Standard and other input arguments and compares the result strings in
       byte-by-byte, machine ordering.
       When multiple comparison options are specified, Unicode Normalization
       is performed after case-sensitive or case-insensitive processing is
       performed.
RETURN VALUES
       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 
errnum 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.
EXAMPLES
       Example 1: Perform simple default string comparison.
         #include <sys/u8_textprep.h>
         int
         docmp_default(const char *u1, const char *u2) {
             int result;
             int errnum;
             result = u8_strcmp(u1, u2, 0, 0, U8_UNICODE_LATEST, &errnum);
             if (errnum == EILSEQ)
                 return (-1);
             if (errnum == EINVAL)
                 return (-2);
             if (errnum == EBADF)
                 return (-3);
             if (errnum == ERANGE)
                 return (-4);
       Example 2: Perform upper case based case-insensitive comparison with
       Unicode 3.2.0 date.
         #include <sys/u8_textprep.h>
         int
         docmp_caseinsensitive_u320(const char *u1, const char *u2) {
             int result;
             int errnum;
             result = u8_strcmp(u1, u2, 0, U8_STRCMP_CI_UPPER,
                 U8_UNICODE_320, &errnum);
             if (errnum == EILSEQ)
                 return (-1);
             if (errnum == EINVAL)
                 return (-2);
             if (errnum == EBADF)
                 return (-3);
             if (errnum == ERANGE)
                 return (-4);
             return (result);
         }
       Example 3: Perform Unicode Normalization Form D.
       Perform Unicode Normalization Form D and upper case based case-
       insensitive comparison with Unicode 3.2.0 date.
         #include <sys/u8_textprep.h>
         int
         docmp_nfd_caseinsensitive_u320(const char *u1, const char *u2) {
             int result;
             int errnum;
             result = u8_strcmp(u1, u2, 0,
                 (U8_STRCMP_NFD|U8_STRCMP_CI_UPPER), U8_UNICODE_320,
                 &errnum);
             if (errnum == EILSEQ)
                 return (-1);
             if (errnum == EINVAL)
                 return (-2);
             if (errnum == EBADF)
                 return (-3);
             if (errnum == ERANGE)
                 return (-4);
             return (result);
         }
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
       |MT-Level            | MT-Safe         |
       +--------------------+-----------------+
SEE ALSO
       u8_textprep_str(3C), 
u8_validate(3C), 
attributes(7), 
u8_strcmp(9F),       
u8_textprep_str(9F), 
u8_validate(9F)       The Unicode Standard (http://www.unicode.org)
                             September 12, 2007                U8_STRCMP(3C)