============================================================================= PathRelativeToApp()
| 878 | // PathRelativeToApp() |
| 879 | // |
| 880 | void PathRelativeToApp ( |
| 881 | LPWSTR lpszSrc, LPWSTR lpszDest, int cchDest, BOOL bSrcIsFile, |
| 882 | BOOL bUnexpandEnv, BOOL bUnexpandMyDocs ) |
| 883 | { |
| 884 | WCHAR wchAppPath[MAX_PATH]; |
| 885 | WCHAR wchWinDir[MAX_PATH]; |
| 886 | WCHAR wchUserFiles[MAX_PATH]; |
| 887 | WCHAR wchPath[MAX_PATH]; |
| 888 | WCHAR wchResult[MAX_PATH]; |
| 889 | DWORD dwAttrTo = ( bSrcIsFile ) ? 0 : FILE_ATTRIBUTE_DIRECTORY; |
| 890 | GetModuleFileName ( NULL, wchAppPath, COUNTOF ( wchAppPath ) ); |
| 891 | PathRemoveFileSpec ( wchAppPath ); |
| 892 | GetWindowsDirectory ( wchWinDir, COUNTOF ( wchWinDir ) ); |
| 893 | SHGetFolderPath ( NULL, CSIDL_PERSONAL, NULL, SHGFP_TYPE_CURRENT, wchUserFiles ); |
| 894 | if ( bUnexpandMyDocs && |
| 895 | !PathIsRelative ( lpszSrc ) && |
| 896 | !PathIsPrefix ( wchUserFiles, wchAppPath ) && |
| 897 | PathIsPrefix ( wchUserFiles, lpszSrc ) && |
| 898 | PathRelativePathTo ( wchPath, wchUserFiles, FILE_ATTRIBUTE_DIRECTORY, lpszSrc, dwAttrTo ) ) { |
| 899 | lstrcpy ( wchUserFiles, L"%CSIDL:MYDOCUMENTS%" ); |
| 900 | PathAppend ( wchUserFiles, wchPath ); |
| 901 | lstrcpy ( wchPath, wchUserFiles ); |
| 902 | } else if ( PathIsRelative ( lpszSrc ) || PathCommonPrefix ( wchAppPath, wchWinDir, NULL ) ) { |
| 903 | lstrcpyn ( wchPath, lpszSrc, COUNTOF ( wchPath ) ); |
| 904 | } else { |
| 905 | if ( !PathRelativePathTo ( wchPath, wchAppPath, FILE_ATTRIBUTE_DIRECTORY, lpszSrc, dwAttrTo ) ) { |
| 906 | lstrcpyn ( wchPath, lpszSrc, COUNTOF ( wchPath ) ); |
| 907 | } |
| 908 | } |
| 909 | if ( bUnexpandEnv ) { |
| 910 | if ( !PathUnExpandEnvStrings ( wchPath, wchResult, COUNTOF ( wchResult ) ) ) { |
| 911 | lstrcpyn ( wchResult, wchPath, COUNTOF ( wchResult ) ); |
| 912 | } |
| 913 | } else { |
| 914 | lstrcpyn ( wchResult, wchPath, COUNTOF ( wchResult ) ); |
| 915 | } |
| 916 | if ( lpszDest == NULL || lpszSrc == lpszDest ) { |
| 917 | lstrcpyn ( lpszSrc, wchResult, ( cchDest == 0 ) ? MAX_PATH : cchDest ); |
| 918 | } else { |
| 919 | lstrcpyn ( lpszDest, wchResult, ( cchDest == 0 ) ? MAX_PATH : cchDest ); |
| 920 | } |
| 921 | } |
| 922 | |
| 923 | |
| 924 | //============================================================================= |
no outgoing calls
no test coverage detected