From 54e4771f36b14d7b62c0f8e4a25aafd56e7fd5db Mon Sep 17 00:00:00 2001 From: Denny Sheirer Date: Sun, 6 Mar 2022 07:00:49 -0500 Subject: [PATCH] #1154 updates JMBE creator to work correctly with arm32 and aarch64 architectures. (#1155) Co-authored-by: Dennis Sheirer --- .../io/github/dsheirer/jmbe/JmbeCreator.java | 19 ++++-- .../java/io/github/dsheirer/util/OSType.java | 68 +++++++++++++------ 2 files changed, 59 insertions(+), 28 deletions(-) diff --git a/src/main/java/io/github/dsheirer/jmbe/JmbeCreator.java b/src/main/java/io/github/dsheirer/jmbe/JmbeCreator.java index fca4ffc4..eccfe6a1 100644 --- a/src/main/java/io/github/dsheirer/jmbe/JmbeCreator.java +++ b/src/main/java/io/github/dsheirer/jmbe/JmbeCreator.java @@ -282,18 +282,25 @@ public class JmbeCreator switch(osType) { - case LINUX_32: + case LINUX_AARCH_64: + return name.contains("linux") && name.contains("aarch64"); + case LINUX_ARM_32: + return name.contains("linux") && name.contains("arm32"); + case LINUX_X86_32: return name.contains("linux") && name.contains("_32"); - case LINUX_64: + case LINUX_X86_64: return name.contains("linux") && name.contains("_64"); - case OSX_64: + case OSX_AARCH_64: + return name.contains("osx") && name.contains("aarch64"); + case OSX_X86_64: return name.contains("osx") && name.contains("_64"); - case WINDOWS_32: + case WINDOWS_AARCH_64: + return name.contains("windows") && name.contains("aarch64"); + case WINDOWS_X86_32: return name.contains("windows") && name.contains("_32"); - case WINDOWS_64: + case WINDOWS_X86_64: return name.contains("windows") && name.contains("_64"); case UNKNOWN: - case OSX_32: default: return false; } diff --git a/src/main/java/io/github/dsheirer/util/OSType.java b/src/main/java/io/github/dsheirer/util/OSType.java index bb04ba3a..bf2bce16 100644 --- a/src/main/java/io/github/dsheirer/util/OSType.java +++ b/src/main/java/io/github/dsheirer/util/OSType.java @@ -1,6 +1,6 @@ /* * ***************************************************************************** - * Copyright (C) 2014-2020 Dennis Sheirer + * Copyright (C) 2014-2022 Dennis Sheirer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,16 +24,23 @@ import java.util.Locale; public enum OSType { - LINUX_32, - LINUX_64, - OSX_32, - OSX_64, - WINDOWS_32, - WINDOWS_64, + LINUX_X86_32, + LINUX_X86_64, + LINUX_ARM_32, + LINUX_AARCH_64, + + OSX_AARCH_64, + OSX_X86_64, + + WINDOWS_AARCH_64, + WINDOWS_X86_32, + WINDOWS_X86_64, + UNKNOWN; - public static EnumSet WINDOWS_TYPES = EnumSet.of(WINDOWS_32, WINDOWS_64); - public static EnumSet LINUX_TYPES = EnumSet.of(LINUX_32, LINUX_64, OSX_32, OSX_64); + public static EnumSet LINUX_TYPES = EnumSet.of(LINUX_X86_32, LINUX_X86_64, LINUX_ARM_32, LINUX_AARCH_64); + public static EnumSet OSX_TYPES = EnumSet.of(OSX_AARCH_64, OSX_X86_64); + public static EnumSet WINDOWS_TYPES = EnumSet.of(WINDOWS_AARCH_64, WINDOWS_X86_32, WINDOWS_X86_64); /** * Indicates if this enumeration entry is a Windows type @@ -51,6 +58,11 @@ public enum OSType return LINUX_TYPES.contains(this); } + public boolean isOsx() + { + return OSX_TYPES.contains(this); + } + /** * Detects the current host operating system and architecture */ @@ -61,37 +73,49 @@ public enum OSType if(os.contains("win")) { - if(arch.contains("64")) + if(arch.contains("x86") && arch.contains("64")) { - return OSType.WINDOWS_64; + return OSType.WINDOWS_X86_64; } - else + else if(arch.contains("x86") && arch.contains("32")) { - return OSType.WINDOWS_32; + return OSType.WINDOWS_X86_32; + } + else if(arch.contains("aarch") && arch.contains("64")) + { + return OSType.WINDOWS_AARCH_64; } } - if(os.contains("mac") || os.contains("darwin")) + if(os.contains("mac") || os.contains("darwin") || os.contains("osx")) { - if(arch.contains("64")) + if(arch.contains("x86") && arch.contains("64")) { - return OSType.OSX_64; + return OSType.OSX_X86_64; } - else + else if(arch.contains("aarch") && arch.contains("64")) { - return OSType.OSX_32; + return OSType.OSX_AARCH_64; } } if(os.contains("nux") || os.contains("nix") || os.contains("aix")) { - if(arch.contains("64")) + if(arch.contains("x86") && arch.contains("64")) { - return OSType.LINUX_64; + return OSType.LINUX_X86_64; } - else + else if(arch.contains("x86") && arch.contains("32")) { - return OSType.LINUX_32; + return OSType.LINUX_X86_32; + } + else if(arch.contains("aarch") && arch.contains("64")) + { + return OSType.LINUX_AARCH_64; + } + else if(arch.contains("arm")) + { + return OSType.LINUX_ARM_32; } }