private static String libraryName() { switch (Platform.getNativePlatform().getOS()) { case WINDOWS: return "libsodium"; default: return "sodium"; } }
private Platform(OS os) { this.os = os; this.cpu = determineCPU(); String libpattern; switch (os) { case WINDOWS: libpattern = ".*\\.dll$"; break; case DARWIN: libpattern = "lib.*\\.(dylib|jnilib)$"; break; default: libpattern = "lib.*\\.so.*$"; break; } libPattern = Pattern.compile(libpattern); this.addressSize = calculateAddressSize(cpu); this.longSize = os == OS.WINDOWS ? 32 : addressSize; }
private static Platform determinePlatform() { String providerName = System.getProperty("jnr.ffi.provider"); try { Class c = Class.forName(providerName + "$Platform"); return (Platform) c.newInstance(); } catch (ClassNotFoundException ex) { return determinePlatform(determineOS()); } catch (IllegalAccessException ex) { throw new ExceptionInInitializerError(ex); } catch (InstantiationException ex) { throw new ExceptionInInitializerError(ex); } }
private String locateLibrary(String libraryName) { if (new File(libraryName).isAbsolute()) { return libraryName; } return Platform.getNativePlatform().locateLibrary(libraryName, searchPaths); }
private static NativeType[] buildNativeTypeAliases() { Platform platform = Platform.getNativePlatform(); Package pkg = NativeRuntime.class.getPackage(); String cpu = platform.getCPU().toString(); String os = platform.getOS().toString(); EnumSet<TypeAlias> typeAliases = EnumSet.allOf(TypeAlias.class); NativeType[] aliases = {}; Class cls; try { cls = Class.forName(pkg.getName() + ".platform." + cpu + "." + os + ".TypeAliases"); Field aliasesField = cls.getField("ALIASES"); Map aliasMap = Map.class.cast(aliasesField.get(cls)); aliases = new NativeType[typeAliases.size()]; for (TypeAlias t : typeAliases) { aliases[t.ordinal()] = (NativeType) aliasMap.get(t); if (aliases[t.ordinal()] == null) { aliases[t.ordinal()] = NativeType.VOID; } } } catch (ClassNotFoundException cne) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + cne); } catch (NoSuchFieldException nsfe) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + nsfe); } catch (IllegalAccessException iae) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + iae); } return aliases; }
disassembler.setMode(Platform.getNativePlatform().getCPU() == Platform.CPU.I386 ? X86Disassembler.Mode.I386 : X86Disassembler.Mode.X86_64); disassembler.setSyntax(X86Disassembler.Syntax.INTEL);
/** * Creates a new instance of <tt>SockAddrUnix</tt> * * @return An instance of <tt>SockAddrUnix</tt> */ static SockAddrUnix create() { return Platform.getNativePlatform().isBSD() ? new BSDSockAddrUnix() : new DefaultSockAddrUnix(); }
private static Class<? extends LibC> libraryInterface() { switch (NATIVE_PLATFORM.getOS()) { case LINUX: return LinuxLibC.class; case AIX: return AixLibC.class; case SOLARIS: return SolarisLibC.class; case WINDOWS: return WindowsLibC.class; default: return UnixLibC.class; } }
private static CPU determineCPU() { String archString = System.getProperty("os.arch"); if (equalsIgnoreCase("x86", archString) || equalsIgnoreCase("i386", archString) || equalsIgnoreCase("i86pc", archString)) { return CPU.I386; } else if (equalsIgnoreCase("x86_64", archString) || equalsIgnoreCase("amd64", archString)) { return CPU.X86_64; } else if (equalsIgnoreCase("ppc", archString) || equalsIgnoreCase("powerpc", archString)) { return CPU.PPC; } else if (equalsIgnoreCase("ppc64", archString) || equalsIgnoreCase("powerpc64", archString)) { return CPU.PPC64; } else if (equalsIgnoreCase("s390", archString) || equalsIgnoreCase("s390x", archString)) { return CPU.S390X; } // Try to find by lookup up in the CPU list for (CPU cpu : CPU.values()) { if (equalsIgnoreCase(cpu.name(), archString)) { return cpu; } } return CPU.UNKNOWN; }
private static NativeType[] buildNativeTypeAliases() { Platform platform = Platform.getNativePlatform(); Package pkg = NativeRuntime.class.getPackage(); String cpu = platform.getCPU().toString(); String os = platform.getOS().toString(); EnumSet<TypeAlias> typeAliases = EnumSet.allOf(TypeAlias.class); NativeType[] aliases = {}; Class cls; try { cls = Class.forName(pkg.getName() + ".platform." + cpu + "." + os + ".TypeAliases"); Field aliasesField = cls.getField("ALIASES"); Map aliasMap = Map.class.cast(aliasesField.get(cls)); aliases = new NativeType[typeAliases.size()]; for (TypeAlias t : typeAliases) { aliases[t.ordinal()] = (NativeType) aliasMap.get(t); if (aliases[t.ordinal()] == null) { aliases[t.ordinal()] = NativeType.VOID; } } } catch (ClassNotFoundException cne) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + cne); } catch (NoSuchFieldException nsfe) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + nsfe); } catch (IllegalAccessException iae) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + iae); } return aliases; }
disassembler.setMode(Platform.getNativePlatform().getCPU() == Platform.CPU.I386 ? X86Disassembler.Mode.I386 : X86Disassembler.Mode.X86_64); disassembler.setSyntax(X86Disassembler.Syntax.INTEL);
private String locateLibrary(String libraryName) { if (new File(libraryName).isAbsolute()) { return libraryName; } return Platform.getNativePlatform().locateLibrary(libraryName, searchPaths); }
@Override public AbstractSelector openSelector() throws IOException { return Platform.getNativePlatform().isBSD() ? new KQSelector(this) : new PollSelector(this); }
private static String[] libraries() { switch (NATIVE_PLATFORM.getOS()) { case LINUX: return new String[] {STANDARD_C_LIBRARY_NAME}; case SOLARIS: return new String[] { "socket", "nsl", STANDARD_C_LIBRARY_NAME}; case FREEBSD: case NETBSD: return new String[] {STANDARD_C_LIBRARY_NAME}; case AIX: return jnr.ffi.Runtime.getSystemRuntime().addressSize() == 4 ? new String[] { "libc.a(shr.o)" } : new String[] { "libc.a(shr_64.o)" }; case WINDOWS: return new String[] { "msvcrt", "kernel32" }; default: return new String[] {STANDARD_C_LIBRARY_NAME}; } }
private static CPU determineCPU() { String archString = System.getProperty("os.arch"); if (equalsIgnoreCase("x86", archString) || equalsIgnoreCase("i386", archString) || equalsIgnoreCase("i86pc", archString)) { return CPU.I386; } else if (equalsIgnoreCase("x86_64", archString) || equalsIgnoreCase("amd64", archString)) { return CPU.X86_64; } else if (equalsIgnoreCase("ppc", archString) || equalsIgnoreCase("powerpc", archString)) { return CPU.PPC; } else if (equalsIgnoreCase("ppc64", archString) || equalsIgnoreCase("powerpc64", archString)) { if ("little".equals(System.getProperty("sun.cpu.endian"))) { return CPU.PPC64LE; } return CPU.PPC64; } else if (equalsIgnoreCase("ppc64le", archString) || equalsIgnoreCase("powerpc64le", archString)) { return CPU.PPC64LE; } else if (equalsIgnoreCase("s390", archString) || equalsIgnoreCase("s390x", archString)) { return CPU.S390X; } // Try to find by lookup up in the CPU list for (CPU cpu : CPU.values()) { if (equalsIgnoreCase(cpu.name(), archString)) { return cpu; } } return CPU.UNKNOWN; }
private static String libraryName() { switch (Platform.getNativePlatform().getOS()) { case WINDOWS: return "libsodium"; default: return "sodium"; } }
private static NativeType[] buildNativeTypeAliases() { Platform platform = Platform.getNativePlatform(); Package pkg = NativeRuntime.class.getPackage(); String cpu = platform.getCPU().toString(); String os = platform.getOS().toString(); EnumSet<TypeAlias> typeAliases = EnumSet.allOf(TypeAlias.class); NativeType[] aliases = {}; Class cls; try { cls = Class.forName(pkg.getName() + ".platform." + cpu + "." + os + ".TypeAliases"); Field aliasesField = cls.getField("ALIASES"); Map aliasMap = Map.class.cast(aliasesField.get(cls)); aliases = new NativeType[typeAliases.size()]; for (TypeAlias t : typeAliases) { aliases[t.ordinal()] = (NativeType) aliasMap.get(t); if (aliases[t.ordinal()] == null) { aliases[t.ordinal()] = NativeType.VOID; } } } catch (ClassNotFoundException cne) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + cne); } catch (NoSuchFieldException nsfe) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + nsfe); } catch (IllegalAccessException iae) { Logger.getLogger(NativeRuntime.class.getName()).log(Level.SEVERE, "failed to load type aliases: " + iae); } return aliases; }
disassembler.setMode(Platform.getNativePlatform().getCPU() == Platform.CPU.I386 ? X86Disassembler.Mode.I386 : X86Disassembler.Mode.X86_64); disassembler.setSyntax(X86Disassembler.Syntax.INTEL);
private String locateLibrary(String libraryName) { if (new File(libraryName).isAbsolute()) { return libraryName; } return Platform.getNativePlatform().locateLibrary(libraryName, searchPaths); }
static NativeServerSocketChannel serverSocket(int port) { int fd = libc.socket(LibC.AF_INET, LibC.SOCK_STREAM, 0); System.out.println("fd=" + fd); SockAddr addr; if (Platform.getNativePlatform().isBSD()) { BSDSockAddrIN sin = new BSDSockAddrIN(); sin.sin_family.set((byte) LibC.AF_INET); sin.sin_port.set(htons((short) port)); addr = sin; } else { SockAddrIN sin = new SockAddrIN(); sin.sin_family.set(htons((short) LibC.AF_INET)); sin.sin_port.set(htons((short) port)); addr = sin; } System.out.println("sizeof addr=" + Struct.size(addr)); if (libc.bind(fd, addr, Struct.size(addr)) < 0) { System.err.println("bind failed: " + libc.strerror(LastError.getLastError(runtime))); System.exit(1); } if (libc.listen(fd, 5) < 0) { System.err.println("listen failed: " + libc.strerror(LastError.getLastError(runtime))); System.exit(1); } System.out.println("bind+listen succeeded"); return new NativeServerSocketChannel(fd); }