| /* |
| * Unicode routines for use inside the server |
| * |
| * Copyright (C) 1999 Alexandre Julliard |
| */ |
| |
| #ifndef __WINE_SERVER_UNICODE_H |
| #define __WINE_SERVER_UNICODE_H |
| |
| #ifndef __WINE_SERVER__ |
| #error This file can only be used in the Wine server |
| #endif |
| |
| #include "config.h" |
| |
| #include <ctype.h> |
| #ifdef HAVE_WCTYPE_H |
| #include <wctype.h> |
| #endif |
| |
| #include "windef.h" |
| #include "object.h" |
| |
| static inline size_t strlenW( const WCHAR *str ) |
| { |
| const WCHAR *s = str; |
| while (*s) s++; |
| return s - str; |
| } |
| |
| static inline int strcmpW( const WCHAR *str1, const WCHAR *str2 ) |
| { |
| while (*str1 && (*str1 == *str2)) { str1++; str2++; } |
| return *str1 - *str2; |
| } |
| |
| #ifndef HAVE_WCTYPE_H |
| /* FIXME */ |
| #define towupper(ch) (HIBYTE(ch) ? ch : (WCHAR)toupper(LOBYTE(ch))) |
| #endif |
| |
| static inline int strcmpiW( const WCHAR *str1, const WCHAR *str2 ) |
| { |
| while (*str1 && (towupper(*str1) == towupper(*str2))) { str1++; str2++; } |
| return towupper(*str1) - towupper(*str2); |
| } |
| |
| static inline WCHAR *strcpyW( WCHAR *dst, const WCHAR *src ) |
| { |
| const WCHAR *ret = dst; |
| while ((*dst++ = *src++)); |
| return (WCHAR *)ret; |
| } |
| |
| static inline WCHAR *strdupW( const WCHAR *str ) |
| { |
| size_t len = (strlenW(str) + 1) * sizeof(WCHAR); |
| return memdup( str, len ); |
| } |
| |
| extern int dump_strW( const WCHAR *str, size_t len, FILE *f, char escape[2] ); |
| |
| #endif /* __WINE_SERVER_UNICODE_H */ |