Added a couple of Unicode string routines.
This commit is contained in:
parent
9c51c96c6d
commit
0d4a55804e
|
@ -118,7 +118,7 @@ static inline int strcmpW( const WCHAR *str1, const WCHAR *str2 )
|
||||||
|
|
||||||
static inline int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
|
static inline int strncmpW( const WCHAR *str1, const WCHAR *str2, int n )
|
||||||
{
|
{
|
||||||
if (!n) return 0;
|
if (n <= 0) return 0;
|
||||||
while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
|
while ((--n > 0) && *str1 && (*str1 == *str2)) { str1++; str2++; }
|
||||||
return *str1 - *str2;
|
return *str1 - *str2;
|
||||||
}
|
}
|
||||||
|
@ -135,15 +135,22 @@ static inline WCHAR *strchrW( const WCHAR *str, WCHAR ch )
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int strcmpiW( const WCHAR *str1, const WCHAR *str2 )
|
static inline WCHAR *strlwrW( WCHAR *str )
|
||||||
{
|
{
|
||||||
for (;;)
|
WCHAR *ret = str;
|
||||||
{
|
while ((*str = tolowerW(*str))) str++;
|
||||||
int ret = toupperW(*str1) - toupperW(*str2);
|
return ret;
|
||||||
if (ret || !*str1) return ret;
|
|
||||||
str1++;
|
|
||||||
str2++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline WCHAR *struprW( WCHAR *str )
|
||||||
|
{
|
||||||
|
WCHAR *ret = str;
|
||||||
|
while ((*str = toupperW(*str))) str++;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int strcmpiW( const WCHAR *str1, const WCHAR *str2 );
|
||||||
|
extern int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n );
|
||||||
|
extern WCHAR *strstrW( const WCHAR *str, const WCHAR *sub );
|
||||||
|
|
||||||
#endif /* __WINE_UNICODE_H */
|
#endif /* __WINE_UNICODE_H */
|
||||||
|
|
|
@ -65,6 +65,7 @@ C_SRCS = \
|
||||||
casemap.c \
|
casemap.c \
|
||||||
cptable.c \
|
cptable.c \
|
||||||
mbtowc.c \
|
mbtowc.c \
|
||||||
|
string.c \
|
||||||
wctomb.c \
|
wctomb.c \
|
||||||
$(CODEPAGES:%=c_%.c)
|
$(CODEPAGES:%=c_%.c)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/*
|
||||||
|
* Unicode string manipulation functions
|
||||||
|
*
|
||||||
|
* Copyright 2000 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "wine/unicode.h"
|
||||||
|
|
||||||
|
int strcmpiW( const WCHAR *str1, const WCHAR *str2 )
|
||||||
|
{
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
int ret = toupperW(*str1) - toupperW(*str2);
|
||||||
|
if (ret || !*str1) return ret;
|
||||||
|
str1++;
|
||||||
|
str2++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int strncmpiW( const WCHAR *str1, const WCHAR *str2, int n )
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
for ( ; n > 0; n--, str1++, str2++)
|
||||||
|
if ((ret = toupperW(*str1) - toupperW(*str2)) || !*str1) break;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
WCHAR *strstrW( const WCHAR *str, const WCHAR *sub )
|
||||||
|
{
|
||||||
|
while (*str)
|
||||||
|
{
|
||||||
|
const WCHAR *p1 = str, *p2 = sub;
|
||||||
|
while (*p1 && *p2 && *p1 == *p2) { p1++; p2++; }
|
||||||
|
if (!*p2) return (WCHAR *)str;
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
Loading…
Reference in New Issue