summaryrefslogtreecommitdiff
path: root/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c
diff options
context:
space:
mode:
authorJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
committerJiyoung Yun <jy910.yun@samsung.com>2016-11-23 19:09:09 +0900
commit4b4aad7217d3292650e77eec2cf4c198ea9c3b4b (patch)
tree98110734c91668dfdbb126fcc0e15ddbd93738ca /src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c
parentfa45f57ed55137c75ac870356a1b8f76c84b229c (diff)
downloadcoreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.gz
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.tar.bz2
coreclr-4b4aad7217d3292650e77eec2cf4c198ea9c3b4b.zip
Imported Upstream version 1.1.0upstream/1.1.0
Diffstat (limited to 'src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c')
-rw-r--r--src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c111
1 files changed, 111 insertions, 0 deletions
diff --git a/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c
new file mode 100644
index 0000000000..f0b76c615f
--- /dev/null
+++ b/src/pal/tests/palsuite/filemapping_memmgt/GetProcAddress/test1/test1.c
@@ -0,0 +1,111 @@
+// 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: test1.c (filemapping_memmgt\getprocaddress\test1)
+**
+** Purpose: Positive test the GetProcAddress API.
+** The first test calls GetProcAddress to retrieve the
+** address of SimpleFunction inside testlib by its name,
+** then calls the function and checks that it worked.
+**
+**
+**===========================================================================*/
+#include <palsuite.h>
+
+typedef int (__stdcall *SIMPLEFUNCTION)(int);
+
+/* SHLEXT is defined only for Unix variants */
+#if defined(SHLEXT)
+#define lpModuleName "testlib"SHLEXT
+#else
+#define lpModuleName "testlib.dll"
+#endif
+
+int __cdecl main(int argc, char *argv[])
+{
+ int err;
+ HMODULE hModule;
+ SIMPLEFUNCTION procAddressByName;
+
+#if WIN32
+ const char *FunctionName = "_SimpleFunction@4";
+#else
+ const char *FunctionName = "SimpleFunction";
+#endif
+
+ /* Initialize the PAL environment. */
+ if(0 != PAL_Initialize(argc, argv))
+ {
+ return FAIL;
+ }
+
+
+ /* load a module */
+ hModule = LoadLibrary(lpModuleName);
+ if(!hModule)
+ {
+ Fail("Unexpected error: "
+ "LoadLibrary(%s) failed.\n",
+ lpModuleName);
+ }
+
+ /*
+ * Test 1
+ *
+ * Get the address of a function
+ */
+ procAddressByName = (SIMPLEFUNCTION) GetProcAddress(hModule,FunctionName);
+ if(!procAddressByName)
+ {
+ Trace("ERROR: Unable to get address of SimpleFunction by its name. "
+ "GetProcAddress returned NULL with error %d\n",
+ GetLastError());
+
+ /* Cleanup */
+ err = FreeLibrary(hModule);
+ if(0 == err)
+ {
+ Fail("Unexpected error: Failed to FreeLibrary %s\n",
+ lpModuleName);
+ }
+ Fail("");
+ }
+
+ /* Call the function to see that it really worked */
+ /* Simple function adds 1 to the argument passed */
+ if( 2 != ((procAddressByName)(1)))
+ {
+ Trace("ERROR: Problem calling the function by its address.\n");
+
+ /* Cleanup */
+ err = FreeLibrary(hModule);
+ if(0 == err)
+ {
+ Fail("Unexpected error: Failed to FreeLibrary %s\n",
+ lpModuleName);
+ }
+ Fail("");
+ }
+
+ /* Cleanup */
+ err = FreeLibrary(hModule);
+ if(0 == err)
+ {
+ Fail("Unexpected error: Failed to FreeLibrary %s\n",
+ lpModuleName);
+ }
+
+ PAL_Terminate();
+ return PASS;
+}
+
+
+
+
+
+
+
+