10 HRESULT PATH_CCH_ADD_EXTENSION(PWSTR pszPath,
size_t cchPath, PCWSTR pszExt)
24 pszExtLength = _wcslen(pszExt);
25 pszPathLength = _wcslen(pszPath);
26 bExtDot = (pszExt[0] ==
'.') ? TRUE : FALSE;
28 pDot = _wcsrchr(pszPath,
'.');
29 pBackslash = _wcsrchr(pszPath, CUR_PATH_SEPARATOR_CHR);
31 if (pDot && pBackslash)
33 if (pDot > pBackslash)
37 if (cchPath > pszPathLength + pszExtLength + ((bExtDot) ? 0 : 1))
39 const WCHAR dot[] = {
'.',
'\0' };
40 WCHAR* ptr = &pszPath[pszPathLength];
44 _wcsncat(ptr, dot, _wcslen(dot));
45 _wcsncat(ptr, pszExt, pszExtLength);
50 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
55 HRESULT PATH_CCH_ADD_EXTENSION(PSTR pszPath,
size_t cchPath, PCSTR pszExt)
69 pszExtLength = strlen(pszExt);
70 pszPathLength = strlen(pszPath);
71 bExtDot = (pszExt[0] ==
'.') ? TRUE : FALSE;
73 pDot = strrchr(pszPath,
'.');
74 pBackslash = strrchr(pszPath, CUR_PATH_SEPARATOR_CHR);
76 if (pDot && pBackslash)
78 if (pDot > pBackslash)
82 if (cchPath > pszPathLength + pszExtLength + ((bExtDot) ? 0 : 1))
85 sprintf_s(&pszPath[pszPathLength], cchPath - pszPathLength,
"%s", pszExt);
87 sprintf_s(&pszPath[pszPathLength], cchPath - pszPathLength,
".%s", pszExt);
92 return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);