Added a couple of Unicode string routines.

This commit is contained in:
Alexandre Julliard 2000-06-13 01:08:29 +00:00
parent 9c51c96c6d
commit 0d4a55804e
3 changed files with 55 additions and 9 deletions

View File

@ -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 */

View File

@ -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)

38
unicode/string.c Normal file
View File

@ -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;
}