From 75bb23257afa4e14a24086e2765cf5227bad6160 Mon Sep 17 00:00:00 2001 From: Vitalii Ishchenko Date: Tue, 6 Feb 2024 13:18:47 +0000 Subject: [PATCH] handle UnsatisfiedLinkError in LinuxPOSIX constructor, resolves #187 --- src/main/java/jnr/posix/LinuxPOSIX.java | 40 +++++++++++++++---------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/src/main/java/jnr/posix/LinuxPOSIX.java b/src/main/java/jnr/posix/LinuxPOSIX.java index a11d6ba..3077fb1 100644 --- a/src/main/java/jnr/posix/LinuxPOSIX.java +++ b/src/main/java/jnr/posix/LinuxPOSIX.java @@ -22,16 +22,26 @@ final class LinuxPOSIX extends BaseNativePOSIX implements Linux { LinuxPOSIX(LibCProvider libcProvider, POSIXHandler handler) { super(libcProvider, handler); + statVersion = getStatVersion(); + if (statVersion == -1) { + use_fxstat64 = false; + use_lxstat64 = false; + use_xstat64 = false; + } + } + private int getStatVersion() { if (Platform.IS_32_BIT || "sparcv9".equals(Platform.ARCH) || Platform.ARCH.contains("mips64")) { - statVersion = 3; + return 3; } else { FileStat stat = allocateStat(); - - if (((LinuxLibC) libc()).__xstat64(0, "/dev/null", stat) < 0) { - statVersion = 1; - } else { - statVersion = 0; + try { + if (((LinuxLibC) libc()).__xstat64(0, "/dev/null", stat) < 0) { + return 1; + } + return 0; + } catch (UnsatisfiedLinkError ex) { + return -1; } } } @@ -44,16 +54,16 @@ public FileStat allocateStat() { if ("aarch64".equals(Platform.ARCH)) { return new LinuxFileStatAARCH64(this); } else if ("sparcv9".equals(Platform.ARCH)) { - return new LinuxFileStatSPARCV9(this); - } else if ("loongarch64".equals(Platform.ARCH)) { - return new LinuxFileStatLOONGARCH64(this); - } else { - if (Platform.ARCH.contains("mips64")) { - return new LinuxFileStatMIPS64(this); - } + return new LinuxFileStatSPARCV9(this); + } else if ("loongarch64".equals(Platform.ARCH)) { + return new LinuxFileStatLOONGARCH64(this); + } else { + if (Platform.ARCH.contains("mips64")) { + return new LinuxFileStatMIPS64(this); + } return new LinuxFileStat64(this); - } - } + } + } } public MsgHdr allocateMsgHdr() {