2525
2626package jdk .internal .foreign ;
2727
28+ import jdk .internal .loader .NativeLibraries ;
2829import jdk .internal .loader .NativeLibrary ;
2930import jdk .internal .loader .RawNativeLibraries ;
3031import jdk .internal .util .OperatingSystem ;
@@ -66,7 +67,7 @@ private static SymbolLookup makeSystemLookup() {
6667 if (OperatingSystem .isWindows ()) {
6768 return makeWindowsLookup ();
6869 } else {
69- return libLookup ( libs -> libs . load ( jdkLibraryPath ( "syslookup" )) );
70+ return sysLookup ( );
7071 }
7172 } catch (Throwable ex ) {
7273 // This can happen in the event of a library loading failure - e.g. if one of the libraries the
@@ -84,13 +85,12 @@ private static SymbolLookup makeWindowsLookup() {
8485
8586 boolean useUCRT = Files .exists (ucrtbase );
8687 Path stdLib = useUCRT ? ucrtbase : msvcrt ;
87- SymbolLookup lookup = libLookup (libs -> libs .load (stdLib ));
88+ SymbolLookup lookup = stdLibLookup (libs -> libs .load (stdLib ));
8889
8990 if (useUCRT ) {
9091 // use a fallback lookup to look up inline functions from fallback lib
9192
92- SymbolLookup fallbackLibLookup =
93- libLookup (libs -> libs .load (jdkLibraryPath ("syslookup" )));
93+ SymbolLookup fallbackLibLookup = sysLookup ();
9494
9595 @ SuppressWarnings ("restricted" )
9696 MemorySegment funcs = fallbackLibLookup .findOrThrow ("funcs" )
@@ -110,8 +110,7 @@ private static SymbolLookup makeWindowsLookup() {
110110 return lookup ;
111111 }
112112
113- private static SymbolLookup libLookup (Function <RawNativeLibraries , NativeLibrary > loader ) {
114- NativeLibrary lib = loader .apply (RawNativeLibraries .newInstance (MethodHandles .lookup ()));
113+ private static SymbolLookup lookup (NativeLibrary lib ) {
115114 return name -> {
116115 Objects .requireNonNull (name );
117116 if (Utils .containsNullChars (name )) return Optional .empty ();
@@ -126,16 +125,17 @@ private static SymbolLookup libLookup(Function<RawNativeLibraries, NativeLibrary
126125 };
127126 }
128127
129- /*
130- * Returns the path of the given library name from JDK
131- */
132- private static Path jdkLibraryPath (String name ) {
133- Path javahome = Path .of (StaticProperty .javaHome ());
134- String lib = OperatingSystem .isWindows () ? "bin" : "lib" ;
135- String libname = System .mapLibraryName (name );
136- return javahome .resolve (lib ).resolve (libname );
128+ private static SymbolLookup stdLibLookup (Function <RawNativeLibraries , NativeLibrary > loader ) {
129+ NativeLibrary lib = loader .apply (RawNativeLibraries .newInstance (MethodHandles .lookup ()));
130+ return lookup (lib );
137131 }
138132
133+ @ SuppressWarnings ("restricted" )
134+ private static SymbolLookup sysLookup () {
135+ NativeLibraries libs = NativeLibraries .newInstance (null );
136+ NativeLibrary lib = libs .loadLibrary (SymbolLookup .class , "syslookup" );
137+ return lookup (lib );
138+ }
139139
140140 public static SystemLookup getInstance () {
141141 return INSTANCE ;
0 commit comments