FreeRDP
PathCchAddSeparatorEx.h
1 
2 /*
3 #define DEFINE_UNICODE FALSE
4 #define CUR_PATH_SEPARATOR_CHR '\\'
5 #define PATH_CCH_ADD_SEPARATOR_EX PathCchAddBackslashExA
6 */
7 
8 #if DEFINE_UNICODE
9 
10 HRESULT PATH_CCH_ADD_SEPARATOR_EX(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
11  size_t* pcchRemaining)
12 {
13  size_t pszPathLength;
14 
15  if (!pszPath)
16  return E_INVALIDARG;
17 
18  pszPathLength = _wcslen(pszPath);
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 
36 HRESULT PATH_CCH_ADD_SEPARATOR_EX(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
37  size_t* pcchRemaining)
38 {
39  size_t pszPathLength;
40 
41  if (!pszPath)
42  return E_INVALIDARG;
43 
44  pszPathLength = strlen(pszPath);
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_EX
66 */