xref: /reactos/sdk/lib/crt/mbstring/mbsicmp.c (revision 8a978a17)
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS system libraries
4  * FILE:        lib/sdk/crt/mbstring/mbsicmp.c
5  * PURPOSE:     Duplicates a multi byte string
6  * PROGRAMER:   Ariadne
7  * UPDATE HISTORY:
8  *              12/04/99: Created
9  */
10 #include <precomp.h>
11 #include <mbstring.h>
12 
13 /*
14  * @implemented
15  */
16 int _mbsicmp(const unsigned char *str1, const unsigned char *str2)
17 {
18 	unsigned char *s1 = (unsigned char *)str1;
19 	unsigned char *s2 = (unsigned char *)str2;
20 
21 	unsigned short *short_s1, *short_s2;
22 
23 	int l1, l2;
24 
25 	do {
26 
27 		if (*s1 == 0)
28 			break;
29 
30 		l1 = _ismbblead(*s1);
31 		l2 = _ismbblead(*s2);
32 		if ( !l1 &&  !l2  ) {
33 
34 			if (toupper(*s1) != toupper(*s2))
35 				return toupper(*s1) - toupper(*s2);
36 			else {
37 				s1 += 1;
38 				s2 += 1;
39 			}
40 		}
41 		else if ( l1 && l2 ){
42 			short_s1 = (unsigned short *)s1;
43 			short_s2 = (unsigned short *)s2;
44 			if ( _mbctoupper(*short_s1) != _mbctoupper(*short_s2 ))
45 				return _mbctoupper(*short_s1) - _mbctoupper(*short_s2);
46 			else {
47 				s1 += 2;
48 				s2 += 2;
49 			}
50 		}
51 		else
52 			return *s1 - *s2;
53 	} while (*s1 != 0);
54 	return 0;
55 
56   while (toupper(*s1) == toupper(*s2))
57   {
58     if (*s1 == 0)
59       return 0;
60     s1++;
61     s2++;
62   }
63   return toupper(*(unsigned const char *)s1) - toupper(*(unsigned const char *)(s2));
64 }
65