This is an automated email from the ASF dual-hosted git repository.

desruisseaux pushed a commit to branch geoapi-4.0
in repository https://gitbox.apache.org/repos/asf/sis.git

commit 8d49b3b4458f2036232586727c33962c43865303
Author: Martin Desruisseaux <[email protected]>
AuthorDate: Thu Feb 5 12:05:43 2026 +0100

    Fix GDAL support on MacOS by using `System.mapLibraryName(String)`.
    Opportunistic documentation fixes and simplification.
---
 .../main/org/apache/sis/storage/gsf/panama/LibraryLoader.java  |  3 +--
 .../main/org/apache/sis/storage/gdal/GDAL.java                 |  2 +-
 .../main/org/apache/sis/storage/panama/LibraryLoader.java      |  3 +--
 .../main/org/apache/sis/storage/panama/NativeFunctions.java    | 10 ++++++----
 4 files changed, 9 insertions(+), 9 deletions(-)

diff --git 
a/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/panama/LibraryLoader.java
 
b/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/panama/LibraryLoader.java
index 1ed6263ae5..118cc8dc67 100644
--- 
a/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/panama/LibraryLoader.java
+++ 
b/incubator/src/org.apache.sis.storage.gsf/main/org/apache/sis/storage/gsf/panama/LibraryLoader.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.storage.gsf.panama;
 
-import java.io.File;
 import java.nio.file.Path;
 import java.util.Optional;
 import java.util.logging.Level;
@@ -87,7 +86,7 @@ public final class LibraryLoader {
     @SuppressWarnings("restricted")
     public GSF global() {
         status = LibraryStatus.CANNOT_LOAD_LIBRARY;
-        String filename = (File.separatorChar == '\\') ? "gsf.dll" : 
"libgsf.so";
+        String filename = System.mapLibraryName("gsf");
         try {
             symbols = SymbolLookup.libraryLookup(filename, Arena.global());
             GSF instance = new GSF(this);
diff --git 
a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDAL.java
 
b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDAL.java
index b75ad43237..7a29722ce4 100644
--- 
a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDAL.java
+++ 
b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/gdal/GDAL.java
@@ -284,7 +284,7 @@ final class GDAL extends NativeFunctions {
 
     /**
      * Pointers to native methods for the <abbr>OGR</abbr> part of 
<abbr>GDAL</abbr>.
-     * Stores in a separated object for avoiding to load those symbols before 
needed.
+     * Stored in a separated object for avoiding to load those symbols before 
needed.
      *
      * @see #ogr()
      */
diff --git 
a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/LibraryLoader.java
 
b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/LibraryLoader.java
index bac359f3f1..423e1b93d4 100644
--- 
a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/LibraryLoader.java
+++ 
b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/LibraryLoader.java
@@ -16,7 +16,6 @@
  */
 package org.apache.sis.storage.panama;
 
-import java.io.File;
 import java.nio.file.Path;
 import java.util.Optional;
 import java.util.NoSuchElementException;
@@ -132,7 +131,7 @@ public final class LibraryLoader<F extends NativeFunctions> 
{
     public F global(final String library) {
         final var c = creator;
         creator     = null;
-        filename    = (File.separatorChar == '\\') ? (library + ".dll") : 
("lib" + library + ".so");
+        filename    = System.mapLibraryName(library);
         status      = LibraryStatus.LIBRARY_NOT_FOUND;      // Default value 
if an exception occurs below.
         F instance  = null;
 create: try {
diff --git 
a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/NativeFunctions.java
 
b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/NativeFunctions.java
index 27d5a72dd8..35bd86ab54 100644
--- 
a/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/NativeFunctions.java
+++ 
b/optional/src/org.apache.sis.storage.gdal/main/org/apache/sis/storage/panama/NativeFunctions.java
@@ -91,11 +91,11 @@ public abstract class NativeFunctions implements Runnable, 
Callable<Object> {
      * @param  function   name of the C/C++ <abbr>GDAL</abbr> function to 
invoke.
      * @param  signature  type of arguments and return type.
      * @return method handler for the <abbr>GDAL</abbr> function.
-     * @throws IllegalArgumentException if the given function has not been 
found.
+     * @throws NoSuchElementException if the given function has not been found.
      */
     @SuppressWarnings("restricted")
     public final MethodHandle lookup(final String function, final 
FunctionDescriptor signature) {
-        return symbols.find(function).map((method) -> 
linker.downcallHandle(method, signature)).orElseThrow();
+        return linker.downcallHandle(symbols.find(function).orElseThrow(), 
signature);
     }
 
     /**
@@ -107,9 +107,11 @@ public abstract class NativeFunctions implements Runnable, 
Callable<Object> {
      * @param  arg       the argument.
      * @return whether the return value, or empty if the method was not found 
or returned {@code null}.
      */
+    @SuppressWarnings("restricted")
     protected final Optional<String> invokeGetString(final String function, 
final String arg) {
         return symbols.find(function).map((method) -> {
-            MethodHandle handle = lookup(function, 
FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS));
+            var acceptPointerReturnPointer = 
FunctionDescriptor.of(ValueLayout.ADDRESS, ValueLayout.ADDRESS);
+            MethodHandle handle = linker.downcallHandle(method, 
acceptPointerReturnPointer);
             MemorySegment result;
             try (Arena local = Arena.ofConfined()) {
                 result = (MemorySegment) 
handle.invokeExact(local.allocateFrom(arg));
@@ -217,7 +219,7 @@ public abstract class NativeFunctions implements Runnable, 
Callable<Object> {
      * because it assumes that no checked exception should be thrown.
      *
      * @param  exception  the exception thrown by {@code 
MethodHandler.invokeExact(…)}.
-     * @return the exception to throw by the caller.
+     * @return the exception to be thrown by the caller.
      */
     public static RuntimeException propagate(final Throwable exception) {
         switch (exception) {

Reply via email to