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 if (pszPathLength < 1)
18 return S_OK;
19
20 if (pszPath[pszPathLength - 1] == CUR_PATH_SEPARATOR_CHR)
21 return S_FALSE;
22
23 if (cchPath > (pszPathLength + 1))
24 {
25 pszPath[pszPathLength] = CUR_PATH_SEPARATOR_CHR;
26 pszPath[pszPathLength + 1] = '\0';
27
28 return S_OK;
29 }
30
31 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
32}
33
34#else
35
36HRESULT PATH_CCH_ADD_SEPARATOR(PSTR pszPath, size_t cchPath)
37{
38 WINPR_ASSERT(pszPath || (cchPath == 0));
39 if (!pszPath)
40 return S_OK;
41
42 const size_t pszPathLength = strnlen(pszPath, cchPath);
43 if (pszPathLength < 1)
44 return S_OK;
45
46 if (pszPath[pszPathLength - 1] == CUR_PATH_SEPARATOR_CHR)
47 return S_FALSE;
48
49 if (cchPath > (pszPathLength + 1))
50 {
51 pszPath[pszPathLength] = CUR_PATH_SEPARATOR_CHR;
52 pszPath[pszPathLength + 1] = '\0';
53
54 return S_OK;
55 }
56
57 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
58}
59
60#endif
61
62/*
63#undef DEFINE_UNICODE
64#undef CUR_PATH_SEPARATOR_CHR
65#undef PATH_CCH_ADD_SEPARATOR
66*/