aboutsummaryrefslogtreecommitdiff
path: root/src/dutil/inc/strutil.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dutil/inc/strutil.h')
-rw-r--r--src/dutil/inc/strutil.h311
1 files changed, 311 insertions, 0 deletions
diff --git a/src/dutil/inc/strutil.h b/src/dutil/inc/strutil.h
new file mode 100644
index 00000000..1a2ed1d8
--- /dev/null
+++ b/src/dutil/inc/strutil.h
@@ -0,0 +1,311 @@
1#pragma once
2// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
3
4
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9#define ReleaseStr(pwz) if (pwz) { StrFree(pwz); }
10#define ReleaseNullStr(pwz) if (pwz) { StrFree(pwz); pwz = NULL; }
11#define ReleaseBSTR(bstr) if (bstr) { ::SysFreeString(bstr); }
12#define ReleaseNullBSTR(bstr) if (bstr) { ::SysFreeString(bstr); bstr = NULL; }
13#define ReleaseStrArray(rg, c) { if (rg) { StrArrayFree(rg, c); } }
14#define ReleaseNullStrArray(rg, c) { if (rg) { StrArrayFree(rg, c); c = 0; rg = NULL; } }
15#define ReleaseNullStrSecure(pwz) if (pwz) { StrSecureZeroFreeString(pwz); pwz = NULL; }
16
17#define DeclareConstBSTR(bstr_const, wz) const WCHAR bstr_const[] = { 0x00, 0x00, sizeof(wz)-sizeof(WCHAR), 0x00, wz }
18#define UseConstBSTR(bstr_const) const_cast<BSTR>(bstr_const + 4)
19
20HRESULT DAPI StrAlloc(
21 __deref_out_ecount_part(cch, 0) LPWSTR* ppwz,
22 __in DWORD_PTR cch
23 );
24HRESULT DAPI StrAllocSecure(
25 __deref_out_ecount_part(cch, 0) LPWSTR* ppwz,
26 __in DWORD_PTR cch
27 );
28HRESULT DAPI StrTrimCapacity(
29 __deref_out_z LPWSTR* ppwz
30 );
31HRESULT DAPI StrTrimWhitespace(
32 __deref_out_z LPWSTR* ppwz,
33 __in_z LPCWSTR wzSource
34 );
35HRESULT DAPI StrAnsiAlloc(
36 __deref_out_ecount_part(cch, 0) LPSTR* ppz,
37 __in DWORD_PTR cch
38 );
39HRESULT DAPI StrAnsiTrimCapacity(
40 __deref_out_z LPSTR* ppz
41 );
42HRESULT DAPI StrAnsiTrimWhitespace(
43 __deref_out_z LPSTR* ppz,
44 __in_z LPCSTR szSource
45 );
46HRESULT DAPI StrAllocString(
47 __deref_out_ecount_z(cchSource+1) LPWSTR* ppwz,
48 __in_z LPCWSTR wzSource,
49 __in DWORD_PTR cchSource
50 );
51HRESULT DAPI StrAllocStringSecure(
52 __deref_out_ecount_z(cchSource + 1) LPWSTR* ppwz,
53 __in_z LPCWSTR wzSource,
54 __in DWORD_PTR cchSource
55 );
56HRESULT DAPI StrAnsiAllocString(
57 __deref_out_ecount_z(cchSource+1) LPSTR* ppsz,
58 __in_z LPCWSTR wzSource,
59 __in DWORD_PTR cchSource,
60 __in UINT uiCodepage
61 );
62HRESULT DAPI StrAllocStringAnsi(
63 __deref_out_ecount_z(cchSource+1) LPWSTR* ppwz,
64 __in_z LPCSTR szSource,
65 __in DWORD_PTR cchSource,
66 __in UINT uiCodepage
67 );
68HRESULT DAPI StrAnsiAllocStringAnsi(
69 __deref_out_ecount_z(cchSource+1) LPSTR* ppsz,
70 __in_z LPCSTR szSource,
71 __in DWORD_PTR cchSource
72 );
73HRESULT DAPI StrAllocPrefix(
74 __deref_out_z LPWSTR* ppwz,
75 __in_z LPCWSTR wzPrefix,
76 __in DWORD_PTR cchPrefix
77 );
78HRESULT DAPI StrAllocConcat(
79 __deref_out_z LPWSTR* ppwz,
80 __in_z LPCWSTR wzSource,
81 __in DWORD_PTR cchSource
82 );
83HRESULT DAPI StrAllocConcatSecure(
84 __deref_out_z LPWSTR* ppwz,
85 __in_z LPCWSTR wzSource,
86 __in DWORD_PTR cchSource
87 );
88HRESULT DAPI StrAnsiAllocConcat(
89 __deref_out_z LPSTR* ppz,
90 __in_z LPCSTR pzSource,
91 __in DWORD_PTR cchSource
92 );
93HRESULT __cdecl StrAllocFormatted(
94 __deref_out_z LPWSTR* ppwz,
95 __in __format_string LPCWSTR wzFormat,
96 ...
97 );
98HRESULT __cdecl StrAllocConcatFormatted(
99 __deref_out_z LPWSTR* ppwz,
100 __in __format_string LPCWSTR wzFormat,
101 ...
102 );
103HRESULT __cdecl StrAllocFormattedSecure(
104 __deref_out_z LPWSTR* ppwz,
105 __in __format_string LPCWSTR wzFormat,
106 ...
107 );
108HRESULT __cdecl StrAnsiAllocFormatted(
109 __deref_out_z LPSTR* ppsz,
110 __in __format_string LPCSTR szFormat,
111 ...
112 );
113HRESULT DAPI StrAllocFormattedArgs(
114 __deref_out_z LPWSTR* ppwz,
115 __in __format_string LPCWSTR wzFormat,
116 __in va_list args
117 );
118HRESULT DAPI StrAllocFormattedArgsSecure(
119 __deref_out_z LPWSTR* ppwz,
120 __in __format_string LPCWSTR wzFormat,
121 __in va_list args
122 );
123HRESULT DAPI StrAnsiAllocFormattedArgs(
124 __deref_out_z LPSTR* ppsz,
125 __in __format_string LPCSTR szFormat,
126 __in va_list args
127 );
128HRESULT DAPI StrAllocFromError(
129 __inout LPWSTR *ppwzMessage,
130 __in HRESULT hrError,
131 __in_opt HMODULE hModule,
132 ...
133 );
134
135HRESULT DAPI StrMaxLength(
136 __in LPCVOID p,
137 __out DWORD_PTR* pcch
138 );
139HRESULT DAPI StrSize(
140 __in LPCVOID p,
141 __out DWORD_PTR* pcb
142 );
143
144HRESULT DAPI StrFree(
145 __in LPVOID p
146 );
147
148
149HRESULT DAPI StrReplaceStringAll(
150 __inout LPWSTR* ppwzOriginal,
151 __in_z LPCWSTR wzOldSubString,
152 __in_z LPCWSTR wzNewSubString
153 );
154HRESULT DAPI StrReplaceString(
155 __inout LPWSTR* ppwzOriginal,
156 __inout DWORD* pdwStartIndex,
157 __in_z LPCWSTR wzOldSubString,
158 __in_z LPCWSTR wzNewSubString
159 );
160
161HRESULT DAPI StrHexEncode(
162 __in_ecount(cbSource) const BYTE* pbSource,
163 __in DWORD_PTR cbSource,
164 __out_ecount(cchDest) LPWSTR wzDest,
165 __in DWORD_PTR cchDest
166 );
167HRESULT DAPI StrAllocHexEncode(
168 __in_ecount(cbSource) const BYTE* pbSource,
169 __in DWORD_PTR cbSource,
170 __deref_out_ecount_z(2*(cbSource+1)) LPWSTR* ppwzDest
171 );
172HRESULT DAPI StrHexDecode(
173 __in_z LPCWSTR wzSource,
174 __out_bcount(cbDest) BYTE* pbDest,
175 __in DWORD_PTR cbDest
176 );
177HRESULT DAPI StrAllocHexDecode(
178 __in_z LPCWSTR wzSource,
179 __out_bcount(*pcbDest) BYTE** ppbDest,
180 __out_opt DWORD* pcbDest
181 );
182
183HRESULT DAPI StrAllocBase85Encode(
184 __in_bcount_opt(cbSource) const BYTE* pbSource,
185 __in DWORD_PTR cbSource,
186 __deref_out_z LPWSTR* pwzDest
187 );
188HRESULT DAPI StrAllocBase85Decode(
189 __in_z LPCWSTR wzSource,
190 __deref_out_bcount(*pcbDest) BYTE** hbDest,
191 __out DWORD_PTR* pcbDest
192 );
193
194HRESULT DAPI MultiSzLen(
195 __in_ecount(*pcch) __nullnullterminated LPCWSTR pwzMultiSz,
196 __out DWORD_PTR* pcch
197 );
198HRESULT DAPI MultiSzPrepend(
199 __deref_inout_ecount(*pcchMultiSz) __nullnullterminated LPWSTR* ppwzMultiSz,
200 __inout_opt DWORD_PTR *pcchMultiSz,
201 __in __nullnullterminated LPCWSTR pwzInsert
202 );
203HRESULT DAPI MultiSzFindSubstring(
204 __in __nullnullterminated LPCWSTR pwzMultiSz,
205 __in __nullnullterminated LPCWSTR pwzSubstring,
206 __out_opt DWORD_PTR* pdwIndex,
207 __deref_opt_out_z LPCWSTR* ppwzFoundIn
208 );
209HRESULT DAPI MultiSzFindString(
210 __in __nullnullterminated LPCWSTR pwzMultiSz,
211 __in __nullnullterminated LPCWSTR pwzString,
212 __out_opt DWORD_PTR* pdwIndex,
213 __deref_opt_out __nullnullterminated LPCWSTR* ppwzFound
214 );
215HRESULT DAPI MultiSzRemoveString(
216 __deref_inout __nullnullterminated LPWSTR* ppwzMultiSz,
217 __in DWORD_PTR dwIndex
218 );
219HRESULT DAPI MultiSzInsertString(
220 __deref_inout_z LPWSTR* ppwzMultiSz,
221 __inout_opt DWORD_PTR *pcchMultiSz,
222 __in DWORD_PTR dwIndex,
223 __in_z LPCWSTR pwzInsert
224 );
225HRESULT DAPI MultiSzReplaceString(
226 __deref_inout __nullnullterminated LPWSTR* ppwzMultiSz,
227 __in DWORD_PTR dwIndex,
228 __in_z LPCWSTR pwzString
229 );
230
231LPCWSTR DAPI wcsistr(
232 __in_z LPCWSTR wzString,
233 __in_z LPCWSTR wzCharSet
234 );
235
236HRESULT DAPI StrStringToInt16(
237 __in_z LPCWSTR wzIn,
238 __in DWORD cchIn,
239 __out SHORT* psOut
240 );
241HRESULT DAPI StrStringToUInt16(
242 __in_z LPCWSTR wzIn,
243 __in DWORD cchIn,
244 __out USHORT* pusOut
245 );
246HRESULT DAPI StrStringToInt32(
247 __in_z LPCWSTR wzIn,
248 __in DWORD cchIn,
249 __out INT* piOut
250 );
251HRESULT DAPI StrStringToUInt32(
252 __in_z LPCWSTR wzIn,
253 __in DWORD cchIn,
254 __out UINT* puiOut
255 );
256HRESULT DAPI StrStringToInt64(
257 __in_z LPCWSTR wzIn,
258 __in DWORD cchIn,
259 __out LONGLONG* pllOut
260 );
261HRESULT DAPI StrStringToUInt64(
262 __in_z LPCWSTR wzIn,
263 __in DWORD cchIn,
264 __out ULONGLONG* pullOut
265 );
266void DAPI StrStringToUpper(
267 __inout_z LPWSTR wzIn
268 );
269void DAPI StrStringToLower(
270 __inout_z LPWSTR wzIn
271 );
272HRESULT DAPI StrAllocStringToUpperInvariant(
273 __deref_out_z LPWSTR* pscz,
274 __in_z LPCWSTR wzSource,
275 __in int cchSource
276 );
277HRESULT DAPI StrAllocStringToLowerInvariant(
278 __deref_out_z LPWSTR* pscz,
279 __in_z LPCWSTR wzSource,
280 __in int cchSource
281 );
282
283HRESULT DAPI StrArrayAllocString(
284 __deref_inout_ecount_opt(*pcStrArray) LPWSTR **prgsczStrArray,
285 __inout LPUINT pcStrArray,
286 __in_z LPCWSTR wzSource,
287 __in DWORD_PTR cchSource
288 );
289
290HRESULT DAPI StrArrayFree(
291 __in_ecount(cStrArray) LPWSTR *rgsczStrArray,
292 __in UINT cStrArray
293 );
294
295HRESULT DAPI StrSplitAllocArray(
296 __deref_inout_ecount_opt(*pcStrArray) LPWSTR **prgsczStrArray,
297 __inout LPUINT pcStrArray,
298 __in_z LPCWSTR wzSource,
299 __in_z LPCWSTR wzDelim
300 );
301
302HRESULT DAPI StrSecureZeroString(
303 __in LPWSTR pwz
304 );
305HRESULT DAPI StrSecureZeroFreeString(
306 __in LPWSTR pwz
307 );
308
309#ifdef __cplusplus
310}
311#endif