size_t MY_pathToRelative(const TCHAR *pSrc, TCHAR *pOut) { size_t dwSrcLen, dwProfilePathLen; if (!pSrc || !pOut) return 0; dwSrcLen = mir_tstrlen(pSrc); if (!dwSrcLen || dwSrcLen > (MAX_PATH - 1)) return 0; if (!MY_pathIsAbsolute(pSrc)) goto path_not_abs; TCHAR szTmp[MAX_PATH]; memcpy(szTmp, pSrc, (dwSrcLen * sizeof(TCHAR))); szTmp[dwSrcLen] = 0; _tcslwr(szTmp); if (_tcsstr(szTmp, cfg::dat.tszProfilePath)) { dwProfilePathLen = mir_tstrlen(cfg::dat.tszProfilePath); memcpy(pOut, (pSrc + (dwProfilePathLen - 1)), ((dwSrcLen - (dwProfilePathLen - 1)) * sizeof(TCHAR))); pOut[0] = '.'; pOut[dwSrcLen] = 0; return (dwSrcLen - (dwProfilePathLen - 1)); } path_not_abs: memcpy(pOut, pSrc, (dwSrcLen * sizeof(TCHAR))); pOut[dwSrcLen] = 0; return dwSrcLen; }
size_t MY_pathToAbsolute(const TCHAR *pSrc, TCHAR *pOut) { if (!pSrc || !lstrlen(pSrc) || lstrlen(pSrc) > MAX_PATH) return 0; if (MY_pathIsAbsolute(pSrc)&&pSrc[0]!='.') mir_sntprintf(pOut, MAX_PATH, _T("%s"), pSrc); else if (pSrc[0]=='.') mir_sntprintf(pOut, MAX_PATH, _T("%s\\%s"), cfg::dat.tszProfilePath, pSrc); return lstrlen(pOut); }
size_t MY_pathToAbsolute(const TCHAR *pSrc, TCHAR *pOut) { size_t dwSrcLen; if (!pSrc || !pOut) return 0; dwSrcLen = mir_tstrlen(pSrc); if (!dwSrcLen || dwSrcLen > (MAX_PATH - 1)) return 0; if (MY_pathIsAbsolute(pSrc) && pSrc[0] != '.') { memcpy(pOut, pSrc, (dwSrcLen * sizeof(TCHAR))); pOut[dwSrcLen] = 0; return dwSrcLen; } if (pSrc[0] == '.') return (mir_sntprintf(pOut, MAX_PATH, _T("%s\\%s"), cfg::dat.tszProfilePath, pSrc)); return 0; }
size_t MY_pathToRelative(const TCHAR *pSrc, TCHAR *pOut) { if (!pSrc || !lstrlen(pSrc) || lstrlen(pSrc) > MAX_PATH) return 0; if (!MY_pathIsAbsolute(pSrc)) { mir_sntprintf(pOut, MAX_PATH, _T("%s"), pSrc); return lstrlen(pOut); } else { TCHAR szTmp[MAX_PATH]; mir_sntprintf(szTmp, SIZEOF(szTmp), _T("%s"), pSrc); _tcslwr(szTmp); if (_tcsstr(szTmp, cfg::dat.tszProfilePath)) { mir_sntprintf(pOut, MAX_PATH, _T("%s"), pSrc + lstrlen(cfg::dat.tszProfilePath) - 1); pOut[0]='.'; return lstrlen(pOut); } else { mir_sntprintf(pOut, MAX_PATH, _T("%s"), pSrc); return lstrlen(pOut); } } }