diff --git a/src/share/native/common/jdk_util.h b/src/share/native/common/jdk_util.h index 8c15a4dcc353d2854a326451c6d99534bbee3625..d64e51e658d156b42b9ddd8ab35d3417e08894e9 100644 --- a/src/share/native/common/jdk_util.h +++ b/src/share/native/common/jdk_util.h @@ -28,6 +28,7 @@ #include "jni.h" #include "jvm.h" +#include "jdk_util_md.h" #ifdef __cplusplus extern "C" { diff --git a/src/solaris/native/common/jdk_util_md.h b/src/solaris/native/common/jdk_util_md.h new file mode 100644 index 0000000000000000000000000000000000000000..6361fe01eba4faa43c57cd6b55f3562fe51b5468 --- /dev/null +++ b/src/solaris/native/common/jdk_util_md.h @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + +// Currently, there are no unix specific functions defined. diff --git a/src/windows/bin/java_md.c b/src/windows/bin/java_md.c index 4353ec5a12f7ed6a98bd3fa529f8b2ee909bad30..dfa50ac8af8d63a84e418df0ee7b610bb95cbf5d 100644 --- a/src/windows/bin/java_md.c +++ b/src/windows/bin/java_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 1997, 2011, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -1212,22 +1212,11 @@ jclass FindBootStrapClass(JNIEnv *env, const char *classname) return findBootClass(env, classname); } -typedef BOOL (WINAPI *pfn_SetDllDirectory)(LPCTSTR); - void InitLauncher(boolean javaw) { INITCOMMONCONTROLSEX icx; - // Launcher links with kernel32 - HMODULE hKernel32 = GetModuleHandle(TEXT("kernel32.dll")); - pfn_SetDllDirectory fn = (pfn_SetDllDirectory) GetProcAddress(hKernel32, - "SetDllDirectory"); - if (fn != NULL) { - // Exclude CWD from Dll search path - fn(""); - } - /* * Required for javaw mode MessageBox output as well as for * HotSpot -XX:+ShowMessageBoxOnError in java mode, an empty diff --git a/src/windows/native/common/jdk_util_md.c b/src/windows/native/common/jdk_util_md.c index 05c2193df125ddab100742593d6a2ab2efa4ccaa..65d20f55b3b1bd3b8618f8bd3991673983afef44 100644 --- a/src/windows/native/common/jdk_util_md.c +++ b/src/windows/native/common/jdk_util_md.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2004, 2005, Oracle and/or its affiliates. All rights reserved. + * Copyright (c) 2004, 2011, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -38,3 +38,25 @@ int JDK_InitJvmHandle() { void* JDK_FindJvmEntry(const char* name) { return (void*) GetProcAddress(jvm_handle, name); } + +JNIEXPORT HMODULE JDK_LoadSystemLibrary(const char* name) { + HMODULE handle = NULL; + char path[MAX_PATH]; + int ret; + + if (GetSystemDirectory(path, sizeof(path)) != 0) { + strcat(path, "\\"); + strcat(path, name); + handle = LoadLibrary(path); + } + + if (handle == NULL) { + if (GetWindowsDirectory(path, sizeof(path)) != 0) { + strcat(path, "\\"); + strcat(path, name); + handle = LoadLibrary(path); + } + } + return handle; +} + diff --git a/src/windows/native/common/jdk_util_md.h b/src/windows/native/common/jdk_util_md.h new file mode 100644 index 0000000000000000000000000000000000000000..0bb9149354f9bf9a396a5537837a06ce3b5a8947 --- /dev/null +++ b/src/windows/native/common/jdk_util_md.h @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA + * or visit www.oracle.com if you need additional information or have any + * questions. + */ + + +#ifndef JDK_UTIL_MD_H +#define JDK_UTIL_MD_H + +#include "jni.h" + +#ifdef __cplusplus +extern "C" { +#endif + +JNIEXPORT HMODULE JDK_LoadSystemLibrary(const char* name); + +#ifdef __cplusplus +} /* extern "C" */ +#endif /* __cplusplus */ + +#endif /* JDK_UTIL_MD_H */ diff --git a/src/windows/native/sun/java2d/d3d/D3DPipelineManager.cpp b/src/windows/native/sun/java2d/d3d/D3DPipelineManager.cpp index a7da3f3b38c1d857447a0c0c83c6ba00496ff714..0f884e83b5dc8746ab726912d1781119bfece857 100644 --- a/src/windows/native/sun/java2d/d3d/D3DPipelineManager.cpp +++ b/src/windows/native/sun/java2d/d3d/D3DPipelineManager.cpp @@ -117,7 +117,7 @@ HRESULT D3DPipelineManager::InitD3D(void) { typedef IDirect3D9 * WINAPI FnDirect3DCreate9(UINT SDKVersion); - hLibD3D9 = ::LoadLibrary(TEXT("d3d9.dll")); + hLibD3D9 = JDK_LoadSystemLibrary("d3d9.dll"); if (hLibD3D9 == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, "InitD3D: no d3d9.dll"); return E_FAIL; diff --git a/src/windows/native/sun/java2d/opengl/OGLFuncs_md.h b/src/windows/native/sun/java2d/opengl/OGLFuncs_md.h index df300e93150db49ce106b94b9a14a0e9c85f7c8b..9852f8f8094c995c851a9bf1bc4f7bf6e564e084 100644 --- a/src/windows/native/sun/java2d/opengl/OGLFuncs_md.h +++ b/src/windows/native/sun/java2d/opengl/OGLFuncs_md.h @@ -60,7 +60,7 @@ typedef const char *(GLAPIENTRY *wglGetExtensionsStringARBType)(HDC hdc); #define OGL_LIB_IS_UNINITIALIZED() \ (OGL_LIB_HANDLE == 0) #define OGL_OPEN_LIB() \ - OGL_LIB_HANDLE = LoadLibrary(L"opengl32.dll") + OGL_LIB_HANDLE = JDK_LoadSystemLibrary("opengl32.dll") #define OGL_CLOSE_LIB() \ FreeLibrary(OGL_LIB_HANDLE) #define OGL_GET_PROC_ADDRESS(f) \ diff --git a/src/windows/native/sun/windows/DllUtil.cpp b/src/windows/native/sun/windows/DllUtil.cpp index 907f05dc5a97cf6f405a3b302e2de1648865a6b5..7c6d00af0bf427611d03fa9a6379480854e51f50 100644 --- a/src/windows/native/sun/windows/DllUtil.cpp +++ b/src/windows/native/sun/windows/DllUtil.cpp @@ -25,6 +25,7 @@ #include "DllUtil.h" +#include // Disable warning about using this in the initializer list. #pragma warning( disable : 4355) @@ -40,7 +41,7 @@ DllUtil::~DllUtil() HMODULE DllUtil::GetModule() { if (!module) { - module = ::LoadLibrary(name); + module = JDK_LoadSystemLibrary(name); } return module; } @@ -60,7 +61,7 @@ DwmAPI & DwmAPI::GetInstance() } DwmAPI::DwmAPI() : - DllUtil(_T("DWMAPI.DLL")), + DllUtil("DWMAPI.DLL"), DwmIsCompositionEnabledFunction((DllUtil*)this, "DwmIsCompositionEnabled"), DwmGetWindowAttributeFunction((DllUtil*)this, "DwmGetWindowAttribute") { diff --git a/src/windows/native/sun/windows/DllUtil.h b/src/windows/native/sun/windows/DllUtil.h index e2892fc01f4ce7dd80acaa6ef5fcc159e840e969..17ebae0de18b42383ab5654a7d1aa3e1621a958b 100644 --- a/src/windows/native/sun/windows/DllUtil.h +++ b/src/windows/native/sun/windows/DllUtil.h @@ -43,7 +43,7 @@ class DllUtil { FARPROC GetProcAddress(LPCSTR name); protected: - DllUtil(const TCHAR * name) : name(name), module(NULL) {} + DllUtil(const char * name) : name(name), module(NULL) {} virtual ~DllUtil(); HMODULE GetModule(); @@ -68,7 +68,7 @@ class DllUtil { }; private: - const TCHAR * const name; + const char * const name; HMODULE module; }; diff --git a/src/windows/native/sun/windows/ShellFolder2.cpp b/src/windows/native/sun/windows/ShellFolder2.cpp index 80c445d60458f050eab2668ae9b909dd040c010a..7a18213d8792a84ac821bc7036fa2858d85263ae 100644 --- a/src/windows/native/sun/windows/ShellFolder2.cpp +++ b/src/windows/native/sun/windows/ShellFolder2.cpp @@ -120,15 +120,15 @@ static BOOL initShellProcs() return TRUE; } // Load libraries - libShell32 = LoadLibrary(TEXT("shell32.dll")); + libShell32 = JDK_LoadSystemLibrary("shell32.dll"); if (libShell32 == NULL) { return FALSE; } - libUser32 = LoadLibrary(TEXT("user32.dll")); + libUser32 = JDK_LoadSystemLibrary("user32.dll"); if (libUser32 == NULL) { return FALSE; } - libComCtl32 = LoadLibrary(TEXT("comctl32.dll")); + libComCtl32 = JDK_LoadSystemLibrary("comctl32.dll"); if (libComCtl32 == NULL) { return FALSE; } @@ -1021,7 +1021,8 @@ JNIEXPORT jlong JNICALL Java_sun_awt_shell_Win32ShellFolder2_getIconResource (JNIEnv* env, jclass cls, jstring libName, jint iconID, jint cxDesired, jint cyDesired, jboolean useVGAColors) { - HINSTANCE libHandle = LoadLibrary(JNU_GetStringPlatformChars(env, libName, NULL)); + const char *pLibName = env->GetStringUTFChars(libName, NULL); + HINSTANCE libHandle = (HINSTANCE)JDK_LoadSystemLibrary(pLibName); if (libHandle != NULL) { UINT fuLoad = (useVGAColors && !IS_WINXP) ? LR_VGACOLOR : 0; return ptr_to_jlong(LoadImage(libHandle, MAKEINTRESOURCE(iconID), diff --git a/src/windows/native/sun/windows/ThemeReader.cpp b/src/windows/native/sun/windows/ThemeReader.cpp index ff683dcbf657e5094b7557ecaa0ac2397bf5f34b..be5ae611074eb9b4216d64aff83400f8e4d5150b 100644 --- a/src/windows/native/sun/windows/ThemeReader.cpp +++ b/src/windows/native/sun/windows/ThemeReader.cpp @@ -150,7 +150,7 @@ static PFNGETTHEMETRANSITIONDURATION GetThemeTransitionDuration = NULL; BOOL InitThemes() { static HMODULE hModThemes = NULL; - hModThemes = LoadLibrary(TEXT("UXTHEME.DLL")); + hModThemes = JDK_LoadSystemLibrary("UXTHEME.DLL"); DTRACE_PRINTLN1("InitThemes hModThemes = %x\n", hModThemes); if(hModThemes) { DTRACE_PRINTLN("Loaded UxTheme.dll\n"); diff --git a/src/windows/native/sun/windows/awt_Mlib.cpp b/src/windows/native/sun/windows/awt_Mlib.cpp index 03eda215a0e1cefe54722e79a2928a577ecbdce0..022ebd0419aa7ee065ddecaf37f1532d5e187a66 100644 --- a/src/windows/native/sun/windows/awt_Mlib.cpp +++ b/src/windows/native/sun/windows/awt_Mlib.cpp @@ -43,12 +43,13 @@ extern "C" mlibSysFnS_t tempSysFns; mlib_status ret = MLIB_SUCCESS; - /* Try to load library. Routine should find the library successfully - * because this library is already loaded to the process space by - * the System.loadLibrary() call. Here we just need to get handle to - * initialize the pointers to required mlib routines. + /* Try to receive handle for the library. Routine should find + * the library successfully because this library is already + * loaded to the process space by the System.loadLibrary() call. + * Here we just need to get handle to initialize the pointers to + * required mlib routines. */ - hDLL = ::LoadLibrary(TEXT("mlib_image.dll")); + hDLL = ::GetModuleHandle(TEXT("mlib_image.dll")); if (hDLL == NULL) { return MLIB_FAILURE; @@ -94,9 +95,6 @@ extern "C" i++; } - if (ret != MLIB_SUCCESS) { - ::FreeLibrary(hDLL); - } return ret; } diff --git a/src/windows/native/sun/windows/awt_TextArea.cpp b/src/windows/native/sun/windows/awt_TextArea.cpp index 350efdd91b17d78c1e62b87baad5eebf8990deef..16d36ad4480a2f29285531564df4e5111d6c4294 100644 --- a/src/windows/native/sun/windows/awt_TextArea.cpp +++ b/src/windows/native/sun/windows/awt_TextArea.cpp @@ -77,7 +77,7 @@ void AwtTextArea::Dispose() LPCTSTR AwtTextArea::GetClassName() { static BOOL richedLibraryLoaded = FALSE; if (!richedLibraryLoaded) { - ::LoadLibrary(TEXT("RICHED20.DLL")); + JDK_LoadSystemLibrary("RICHED20.DLL"); richedLibraryLoaded = TRUE; } return RICHEDIT_CLASS; diff --git a/src/windows/native/sun/windows/awt_TrayIcon.cpp b/src/windows/native/sun/windows/awt_TrayIcon.cpp index e43c8130405baee00b5252f423071b501a5a1aac..354dba91f94bc4cd4746612aea112d9cb64639dc 100644 --- a/src/windows/native/sun/windows/awt_TrayIcon.cpp +++ b/src/windows/native/sun/windows/awt_TrayIcon.cpp @@ -185,7 +185,7 @@ void AwtTrayIcon::InitNID(UINT uID) int shellVersion = 5; // WIN_2000 // MSDN: DllGetVersion should not be implicitly called, but rather // loaded using GetProcAddress - HMODULE hShell = LoadLibrary(TEXT("Shell32.dll")); + HMODULE hShell = JDK_LoadSystemLibrary("Shell32.dll"); if (hShell != NULL) { DLLGETVERSIONPROC proc = (DLLGETVERSIONPROC)GetProcAddress(hShell, "DllGetVersion"); if (proc != NULL) { diff --git a/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp b/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp index efe485230a7b78f0bebba34fc9fdf26eae77df78..7a7939a7026e7234cfa24e47530381a8c7616f82 100644 --- a/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp +++ b/src/windows/native/sun/windows/awt_Win32GraphicsEnv.cpp @@ -63,7 +63,7 @@ SetProcessDPIAwareProperty() bAlreadySet = TRUE; - HMODULE hLibUser32Dll = ::LoadLibrary(TEXT("user32.dll")); + HMODULE hLibUser32Dll = JDK_LoadSystemLibrary("user32.dll"); if (hLibUser32Dll != NULL) { SetProcessDPIAwareFunc *lpSetProcessDPIAware = diff --git a/src/windows/native/sun/windows/stdhdrs.h b/src/windows/native/sun/windows/stdhdrs.h index 68420470436177788cda57db0e8cf0483f7871ce..21aaaeb2b1824c066ed4f237aadbf8c5b11b3084 100644 --- a/src/windows/native/sun/windows/stdhdrs.h +++ b/src/windows/native/sun/windows/stdhdrs.h @@ -47,6 +47,7 @@ extern "C" { // standard Java headers #include #include +#include } // extern "C"