FreeRDP
Loading...
Searching...
No Matches
PathCchAddSeparator.h
1
2/*
3#define DEFINE_UNICODE FALSE
4#define CUR_PATH_SEPARATOR_CHR '\\'
5#define PATH_CCH_ADD_SEPARATOR PathCchAddBackslashA
6*/
7
8#if DEFINE_UNICODE
9
10HRESULT PATH_CCH_ADD_SEPARATOR(PWSTR pszPath, size_t cchPath)
11{
12 WINPR_ASSERT(pszPath || (cchPath == 0));
13 if (!pszPath)
14 return S_OK;
15
16 const size_t pszPathLength = _wcsnlen(pszPath, cchPath);
17
18 if (pszPath[pszPathLength - 1] == CUR_PATH_SEPARATOR_CHR)
19 return S_FALSE;
20
21 if (cchPath > (pszPathLength + 1))
22 {
23 pszPath[pszPathLength] = CUR_PATH_SEPARATOR_CHR;
24 pszPath[pszPathLength + 1] = '\0';
25
26 return S_OK;
27 }
28
29 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
30}
31
32#else
33
34HRESULT PATH_CCH_ADD_SEPARATOR(PSTR pszPath, size_t cchPath)
35{
36 WINPR_ASSERT(pszPath || (cchPath == 0));
37 if (!pszPath)
38 return S_OK;
39
40 const size_t pszPathLength = strnlen(pszPath, cchPath);
41
42 if (pszPath[pszPathLength - 1] == CUR_PATH_SEPARATOR_CHR)
43 return S_FALSE;
44
45 if (cchPath > (pszPathLength + 1))
46 {
47 pszPath[pszPathLength] = CUR_PATH_SEPARATOR_CHR;
48 pszPath[pszPathLength + 1] = '\0';
49
50 return S_OK;
51 }
52
53 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
54}
55
56#endif
57
58/*
59#undef DEFINE_UNICODE
60#undef CUR_PATH_SEPARATOR_CHR
61#undef PATH_CCH_ADD_SEPARATOR
62*/