diff options
Diffstat (limited to 'src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/setcurrentdirectorya.cpp')
-rw-r--r-- | src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/setcurrentdirectorya.cpp | 142 |
1 files changed, 142 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/setcurrentdirectorya.cpp b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/setcurrentdirectorya.cpp new file mode 100644 index 0000000000..4b1c1c8790 --- /dev/null +++ b/src/pal/tests/palsuite/file_io/SetCurrentDirectoryA/test2/setcurrentdirectorya.cpp @@ -0,0 +1,142 @@ +// 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: SetCurrentDirectoryA.c (test 2) +** +** Purpose: Tests the PAL implementation of the SetCurrentDirectoryA function +** by setting the current directory with ../ +** +** +**===================================================================*/ + +#include <palsuite.h> + +int __cdecl main(int argc, char *argv[]) +{ + const char szDirName[MAX_PATH] = "testing"; + char szBuiltDir[_MAX_DIR+1]; + char szHomeDirBefore[_MAX_DIR+1]; + char szHomeDirAfter[_MAX_DIR+1]; + WCHAR* szwPtr = NULL; + + + if (0 != PAL_Initialize(argc,argv)) + { + return FAIL; + } + + /* create a temp directory off the current directory */ + szwPtr = convert((LPSTR)szDirName); + + if (CreateDirectoryA(szDirName, NULL) != TRUE) + { + free(szwPtr); + Fail("Unexpected error: CreateDirectoryW failed " + "with error code: %ld.\n", + GetLastError()); + } + + /* find out what the current "home" directory is */ + memset(szHomeDirBefore, 0, (_MAX_DIR+1)); + + if( 0 == GetCurrentDirectoryA((_MAX_DIR+1), szHomeDirBefore) ) + { + Trace("Unexpected error: Unable to get current directory " + "with GetCurrentDirectoryA that returned %ld\n", + GetLastError()); + + if (!RemoveDirectoryW(szwPtr)) + { + Trace("Unexpected error: RemoveDirectoryW failed " + "with error code: %ld.\n", + GetLastError()); + } + free(szwPtr); + + Fail(""); + } + + /* append the temp name to the "home" directory */ + memset(szBuiltDir, 0, (_MAX_DIR+1)); +#if WIN32 + sprintf_s(szBuiltDir, _countof(szBuiltDir),"%s\\..\\", szDirName); +#else + sprintf_s(szBuiltDir, _countof(szBuiltDir),"%s/../", szDirName); +#endif + + + /* set the current directory to the temp directory */ + if (SetCurrentDirectoryA(szBuiltDir) != TRUE) + { + Trace("ERROR: Unable to set current " + "directory to %s. Failed with error code: %ld.\n", + szBuiltDir, + GetLastError()); + + if (!RemoveDirectoryW(szwPtr)) + { + Trace("SetCurrentDirectoryA: ERROR -> RemoveDirectoryW failed " + "with error code: %ld.\n", + GetLastError()); + } + free(szwPtr); + Fail(""); + } + + /* find out what the current "home" directory is */ + memset(szHomeDirAfter, 0, (_MAX_DIR+1)); + + if( 0 == GetCurrentDirectoryA((_MAX_DIR+1), szHomeDirAfter) ) + { + Trace("Unexpected error: Unable to get current directory " + "with GetCurrentDirectoryA that returned %ld\n", + GetLastError()); + + if (!RemoveDirectoryW(szwPtr)) + { + Trace("Unexpected error: RemoveDirectoryW failed " + "with error code: %ld.\n", + GetLastError()); + } + free(szwPtr); + + Fail(""); + } + + /*compare the new current dir to the compiled current dir */ + if (strncmp(szHomeDirBefore, szHomeDirAfter, strlen(szHomeDirBefore)) != 0) + { + Trace("ERROR: The set directory \"%s\" does not " + "compare to the built directory \"%s\".\n", + szHomeDirAfter, + szHomeDirBefore); + + if (!RemoveDirectoryW(szwPtr)) + { + Trace("Unexpected error: RemoveDirectoryW failed " + "with error code: %ld.\n", + GetLastError()); + } + free(szwPtr); + Fail(""); + } + + /* clean up */ + if (!RemoveDirectoryW(szwPtr)) + { + free(szwPtr); + Fail("Unexpected error: RemoveDirectoryW failed " + "with error code: %ld.\n", + GetLastError()); + } + + free(szwPtr); + PAL_Terminate(); + + return PASS; +} + + |