Merged msacm and msacm32 dlls.
[wine] / dlls / crtdll / wcstring.c
1 /*
2  * CRTDLL wide-char functions
3  *
4  * Copyright 1999 Alexandre Julliard
5  */
6
7 #include "config.h"
8
9 #include <ctype.h>
10 #include <stdlib.h>
11 #include <string.h>
12
13 #include "windef.h"
14 #include "wine/unicode.h"
15 #include "crtdll.h"
16 #include "debugtools.h"
17
18 DEFAULT_DEBUG_CHANNEL(crtdll);
19
20
21 /*********************************************************************
22  *           CRTDLL__wcsdup    (CRTDLL.320)
23  */
24 LPWSTR __cdecl CRTDLL__wcsdup( LPCWSTR str )
25 {
26     LPWSTR ret = NULL;
27     if (str)
28     {
29         int size = (strlenW(str) + 1) * sizeof(WCHAR);
30         ret = CRTDLL_malloc( size );
31         if (ret) memcpy( ret, str, size );
32     }
33     return ret;
34 }
35
36
37 /*********************************************************************
38  *           CRTDLL__wcsicoll    (CRTDLL.322)
39  */
40 INT __cdecl CRTDLL__wcsicoll( LPCWSTR str1, LPCWSTR str2 )
41 {
42     /* FIXME: handle collates */
43     return strcmpiW( str1, str2 );
44 }
45
46
47 /*********************************************************************
48  *           CRTDLL__wcsnset    (CRTDLL.325)
49  */
50 LPWSTR __cdecl CRTDLL__wcsnset( LPWSTR str, WCHAR c, INT n )
51 {
52     LPWSTR ret = str;
53     while ((n-- > 0) && *str) *str++ = c;
54     return ret;
55 }
56
57
58 /*********************************************************************
59  *           CRTDLL__wcsrev    (CRTDLL.326)
60  */
61 LPWSTR __cdecl CRTDLL__wcsrev( LPWSTR str )
62 {
63     LPWSTR ret = str;
64     LPWSTR end = str + strlenW(str) - 1;
65     while (end > str)
66     {
67         WCHAR t = *end;
68         *end--  = *str;
69         *str++  = t;
70     }
71     return ret;
72 }
73
74
75 /*********************************************************************
76  *           CRTDLL__wcsset    (CRTDLL.327)
77  */
78 LPWSTR __cdecl CRTDLL__wcsset( LPWSTR str, WCHAR c )
79 {
80     LPWSTR ret = str;
81     while (*str) *str++ = c;
82     return ret;
83 }
84
85
86 /*********************************************************************
87  *           CRTDLL_wcscoll    (CRTDLL.506)
88  */
89 DWORD __cdecl CRTDLL_wcscoll( LPCWSTR str1, LPCWSTR str2 )
90 {
91     /* FIXME: handle collates */
92     return strcmpW( str1, str2 );
93 }
94
95
96 /*********************************************************************
97  *           CRTDLL_wcspbrk    (CRTDLL.514)
98  */
99 LPWSTR __cdecl CRTDLL_wcspbrk( LPCWSTR str, LPCWSTR accept )
100 {
101     LPCWSTR p;
102     while (*str)
103     {
104         for (p = accept; *p; p++) if (*p == *str) return (LPWSTR)str;
105         str++;
106     }
107     return NULL;
108 }
109
110
111 /*********************************************************************
112  *           CRTDLL_wctomb    (CRTDLL.524)
113  */
114 INT __cdecl CRTDLL_wctomb( LPSTR dst, WCHAR ch )
115 {
116     return wctomb( dst, (wchar_t)ch );
117 }
118
119 extern INT __cdecl NTDLL_iswctype( WCHAR wc, WCHAR wct ); /* FIXME */
120
121 /*********************************************************************
122  *           CRTDLL_iswalnum    (CRTDLL.405)
123  */
124 INT __cdecl CRTDLL_iswalnum( WCHAR wc )
125 {
126     return NTDLL_iswctype( wc, 0x0107 );
127 }
128
129 /*********************************************************************
130  *           CRTDLL_iswalpha    (CRTDLL.406)
131  */
132 INT __cdecl CRTDLL_iswalpha( WCHAR wc )
133 {
134     return NTDLL_iswctype( wc, 0x0103 );
135 }
136
137 /*********************************************************************
138  *           CRTDLL_iswcntrl    (CRTDLL.408)
139  */
140 INT __cdecl CRTDLL_iswcntrl( WCHAR wc )
141 {
142     return NTDLL_iswctype( wc, 0x0020 );
143 }
144
145 /*********************************************************************
146  *           CRTDLL_iswdigit    (CRTDLL.410)
147  */
148 INT __cdecl CRTDLL_iswdigit( WCHAR wc )
149 {
150     return NTDLL_iswctype( wc, 0x0004 );
151 }
152
153 /*********************************************************************
154  *           CRTDLL_iswgraph    (CRTDLL.411)
155  */
156 INT __cdecl CRTDLL_iswgraph( WCHAR wc )
157 {
158     return NTDLL_iswctype( wc, 0x0117 );
159 }
160
161 /*********************************************************************
162  *           CRTDLL_iswlower    (CRTDLL.412)
163  */
164 INT __cdecl CRTDLL_iswlower( WCHAR wc )
165 {
166     return NTDLL_iswctype( wc, 0x0002 );
167 }
168
169 /*********************************************************************
170  *           CRTDLL_iswprint    (CRTDLL.413)
171  */
172 INT __cdecl CRTDLL_iswprint( WCHAR wc )
173 {
174     return NTDLL_iswctype( wc, 0x0157 );
175 }
176
177 /*********************************************************************
178  *           CRTDLL_iswpunct    (CRTDLL.414)
179  */
180 INT __cdecl CRTDLL_iswpunct( WCHAR wc )
181 {
182     return NTDLL_iswctype( wc, 0x0010 );
183 }
184
185 /*********************************************************************
186  *           CRTDLL_iswspace    (CRTDLL.415)
187  */
188 INT __cdecl CRTDLL_iswspace( WCHAR wc )
189 {
190     return NTDLL_iswctype( wc, 0x0008 );
191 }
192
193 /*********************************************************************
194  *           CRTDLL_iswupper    (CRTDLL.416)
195  */
196 INT __cdecl CRTDLL_iswupper( WCHAR wc )
197 {
198     return NTDLL_iswctype( wc, 0x0001 );
199 }
200
201 /*********************************************************************
202  *           CRTDLL_iswxdigit    (CRTDLL.417)
203  */
204 INT __cdecl CRTDLL_iswxdigit( WCHAR wc )
205 {
206     return NTDLL_iswctype( wc, 0x0080 );
207 }