diff options
author | Jiyoung Yun <jy910.yun@samsung.com> | 2016-12-27 16:46:08 +0900 |
---|---|---|
committer | Jiyoung Yun <jy910.yun@samsung.com> | 2016-12-27 16:46:08 +0900 |
commit | db20f3f1bb8595633a7e16c8900fd401a453a6b5 (patch) | |
tree | e5435159cd1bf0519276363a6fe1663d1721bed3 /src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/SetCurrentDirectoryW.cpp | |
parent | 4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (diff) | |
download | coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.tar.gz coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.tar.bz2 coreclr-db20f3f1bb8595633a7e16c8900fd401a453a6b5.zip |
Imported Upstream version 1.0.0.9127upstream/1.0.0.9127
Diffstat (limited to 'src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/SetCurrentDirectoryW.cpp')
-rw-r--r-- | src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/SetCurrentDirectoryW.cpp | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/SetCurrentDirectoryW.cpp b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/SetCurrentDirectoryW.cpp new file mode 100644 index 0000000000..e10f2ea8a1 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryW/test1/SetCurrentDirectoryW.cpp @@ -0,0 +1,178 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +/*===================================================================== +** +** Source: SetCurrentDirectoryW.c (test 1) +** +** Purpose: Tests the PAL implementation of the SetCurrentDirectoryW function. +** +** +**===================================================================*/ + +#include <palsuite.h> + +const char* szFileName = "blah"; +const char* szDirName = "testing"; + + +// In order to avoid the "chicken and egg" scenario, this is another +// method of getting the current directory. GetFullPathNameW is called with +// a dummy file name and then the file name is stripped off leaving the +// current working directory +BOOL GetCurrentDir(WCHAR* szwCurrentDir) +{ + DWORD dwRc = 0; + WCHAR szwReturnedPath[_MAX_DIR+1]; + LPWSTR pPathPtr; + WCHAR* szwFileName = NULL; + WCHAR* szwDirName = NULL; + int nCount = 0; + + // use GetFullPathName to to get the current path by stripping + // the file name off the end + memset(szwReturnedPath, 0, sizeof(WCHAR)*(_MAX_DIR+1)); + szwFileName = convert((char*)szFileName); + dwRc = GetFullPathNameW(szwFileName, + _MAX_DIR, + szwReturnedPath, + &pPathPtr); + + if (dwRc == 0) + { + // GetFullPathName failed + Trace("SetCurrentDirectoryW: ERROR -> GetFullPathNameW failed " + "with error code: %ld.\n", GetLastError()); + RemoveDirectoryW(szwDirName); + free(szwFileName); + return(FALSE); + } + + // now strip the file name from the full path to get the current path + nCount = lstrlenW(szwReturnedPath) - lstrlenW(szwFileName); + memset(szwCurrentDir, 0, sizeof(WCHAR)*(_MAX_DIR+1)); + wcsncpy(szwCurrentDir, szwReturnedPath, nCount - 1); + + free(szwFileName); + return(TRUE); +} + +int __cdecl main(int argc, char *argv[]) +{ + WCHAR* szwDirName = NULL; + WCHAR szwNewDir[_MAX_DIR+1]; + WCHAR szwBuiltDir[_MAX_DIR+1]; + WCHAR szwHomeDir[_MAX_DIR+1]; +#if WIN32 + WCHAR szwSlash[] = {'\\','\0'}; +#else + WCHAR szwSlash[] = {'/','\0'}; +#endif + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } + + // remove the directory just in case a previous run of the test didn't + szwDirName = convert((char*)szDirName); + RemoveDirectoryW(szwDirName); + + // create a temp directory off the current directory + if (CreateDirectoryW(szwDirName, NULL) != TRUE) + { + Trace("SetCurrentDirectoryW: ERROR -> CreateDirectoryW failed " + "with error code: %ld.\n", GetLastError()); + RemoveDirectoryW(szwDirName); + free(szwDirName); + Fail(""); + } + + // find out what the current "home" directory is + memset(szwHomeDir, 0, sizeof(WCHAR)*(_MAX_DIR+1)); + if(GetCurrentDir(szwHomeDir) != TRUE) + { + RemoveDirectoryW(szwDirName); + free(szwDirName); + PAL_TerminateEx(FAIL); + return FAIL; + } + + // set the current directory to the temp directory + if (SetCurrentDirectoryW(szwDirName) != TRUE) + { + Trace("SetCurrentDirectoryW: ERROR -> Unable to set current " + "directory. Failed with error code: %ld.\n", GetLastError()); + RemoveDirectoryW(szwDirName); + free(szwDirName); + Fail(""); + } + + // append the temp name to the "home" directory + memset(szwBuiltDir, 0, sizeof(WCHAR)*(_MAX_DIR+1)); + wcscpy(szwBuiltDir, szwHomeDir); + wcscat(szwBuiltDir, szwSlash); + wcscat(szwBuiltDir, szwDirName); + + // get the new current directory + memset(szwNewDir, 0, sizeof(WCHAR)*(_MAX_DIR+1)); + if(GetCurrentDir(szwNewDir) != TRUE) + { + RemoveDirectoryW(szwDirName); + free(szwDirName); + PAL_TerminateEx(FAIL); + return FAIL; + } + + // compare the new current dir to the compiled current dir + if (wcsncmp(szwNewDir, szwBuiltDir, wcslen(szwNewDir)) != 0) + { + RemoveDirectoryW(szwDirName); + free(szwDirName); + Fail("SetCurrentDirectoryW: ERROR -> The set directory does not " + "compare to the built directory.\n"); + } + + + + // set the current dir back to the original + if (SetCurrentDirectoryW(szwHomeDir) != TRUE) + { + Trace("SetCurrentDirectoryW: ERROR -> Unable to set current " + "directory. Failed with error code: %ld.\n", GetLastError()); + RemoveDirectoryW(szwDirName); + free(szwDirName); + Fail(""); + } + + + // get the new current directory + memset(szwNewDir, 0, sizeof(WCHAR)*(_MAX_DIR+1)); + if(GetCurrentDir(szwNewDir) != TRUE) + { + RemoveDirectoryW(szwDirName); + free(szwDirName); + PAL_TerminateEx(FAIL); + return FAIL; + } + + // ensure it compares to the "home" directory which is where + // we should be now + if (wcsncmp(szwNewDir, szwHomeDir, wcslen(szwNewDir)) != 0) + { + RemoveDirectoryW(szwDirName); + free(szwDirName); + Fail("SetCurrentDirectoryW: ERROR -> The set directory does not " + "compare to the built directory.\n"); + } + + + RemoveDirectoryW(szwDirName); + free(szwDirName); + PAL_Terminate(); + + return PASS; +} + + |