FreeRDP
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Modules Pages
PathCchAddSeparatorEx.h
1
2#include <winpr/wtypes.h>
3
4/*
5#define DEFINE_UNICODE FALSE
6#define CUR_PATH_SEPARATOR_CHR '\\'
7#define PATH_CCH_ADD_SEPARATOR_EX PathCchAddBackslashExA
8*/
9
10#if DEFINE_UNICODE
11
12HRESULT PATH_CCH_ADD_SEPARATOR_EX(PWSTR pszPath, size_t cchPath, WINPR_ATTR_UNUSED PWSTR* ppszEnd,
13 WINPR_ATTR_UNUSED size_t* pcchRemaining)
14{
15 size_t pszPathLength;
16
17 if (!pszPath)
18 return E_INVALIDARG;
19
20 pszPathLength = _wcslen(pszPath);
21
22 if (pszPath[pszPathLength - 1] == CUR_PATH_SEPARATOR_CHR)
23 return S_FALSE;
24
25 if (cchPath > (pszPathLength + 1))
26 {
27 pszPath[pszPathLength] = CUR_PATH_SEPARATOR_CHR;
28 pszPath[pszPathLength + 1] = '\0';
29
30 return S_OK;
31 }
32
33 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
34}
35
36#else
37
38HRESULT PATH_CCH_ADD_SEPARATOR_EX(WINPR_ATTR_UNUSED PSTR pszPath, WINPR_ATTR_UNUSED size_t cchPath,
39 WINPR_ATTR_UNUSED PSTR* ppszEnd,
40 WINPR_ATTR_UNUSED size_t* pcchRemaining)
41{
42 size_t pszPathLength;
43
44 if (!pszPath)
45 return E_INVALIDARG;
46
47 pszPathLength = strlen(pszPath);
48
49 if (pszPath[pszPathLength - 1] == CUR_PATH_SEPARATOR_CHR)
50 return S_FALSE;
51
52 if (cchPath > (pszPathLength + 1))
53 {
54 pszPath[pszPathLength] = CUR_PATH_SEPARATOR_CHR;
55 pszPath[pszPathLength + 1] = '\0';
56
57 return S_OK;
58 }
59
60 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
61}
62
63#endif
64
65/*
66#undef DEFINE_UNICODE
67#undef CUR_PATH_SEPARATOR_CHR
68#undef PATH_CCH_ADD_SEPARATOR_EX
69*/