PathCchAddSeparatorEx.c 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /*
  2. #define DEFINE_UNICODE FALSE
  3. #define _PATH_SEPARATOR_CHR '\\'
  4. #define PATH_CCH_ADD_SEPARATOR_EX PathCchAddBackslashExA
  5. */
  6. #if DEFINE_UNICODE
  7. HRESULT PATH_CCH_ADD_SEPARATOR_EX(PWSTR pszPath, size_t cchPath, PWSTR* ppszEnd,
  8. size_t* pcchRemaining)
  9. {
  10. size_t pszPathLength;
  11. if (!pszPath)
  12. return E_INVALIDARG;
  13. pszPathLength = lstrlenW(pszPath);
  14. if (pszPath[pszPathLength - 1] == _PATH_SEPARATOR_CHR)
  15. return S_FALSE;
  16. if (cchPath > (pszPathLength + 1))
  17. {
  18. pszPath[pszPathLength] = _PATH_SEPARATOR_CHR;
  19. pszPath[pszPathLength + 1] = '\0';
  20. return S_OK;
  21. }
  22. return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
  23. }
  24. #else
  25. HRESULT PATH_CCH_ADD_SEPARATOR_EX(PSTR pszPath, size_t cchPath, PSTR* ppszEnd,
  26. size_t* pcchRemaining)
  27. {
  28. size_t pszPathLength;
  29. if (!pszPath)
  30. return E_INVALIDARG;
  31. pszPathLength = lstrlenA(pszPath);
  32. if (pszPath[pszPathLength - 1] == _PATH_SEPARATOR_CHR)
  33. return S_FALSE;
  34. if (cchPath > (pszPathLength + 1))
  35. {
  36. pszPath[pszPathLength] = _PATH_SEPARATOR_CHR;
  37. pszPath[pszPathLength + 1] = '\0';
  38. return S_OK;
  39. }
  40. return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
  41. }
  42. #endif
  43. /*
  44. #undef DEFINE_UNICODE
  45. #undef _PATH_SEPARATOR_CHR
  46. #undef PATH_CCH_ADD_SEPARATOR_EX
  47. */