From 5e6dc37aed22bd596db6a0e9c9a0527fc2a8e5b5 Mon Sep 17 00:00:00 2001 From: Ac_K Date: Tue, 1 Dec 2020 22:26:00 +0100 Subject: common: Fix last warning in SystemInfo (#1757) * common: Fix last warning in SystemInfo * info to Info * fix MacOSSystemInfo file name by delete the file * MacOSSysteminfo to MacOSSystemInfo --- Ryujinx.Common/SystemInfo/MacOSSystemInfo.cs | 99 ++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Ryujinx.Common/SystemInfo/MacOSSystemInfo.cs (limited to 'Ryujinx.Common/SystemInfo/MacOSSystemInfo.cs') diff --git a/Ryujinx.Common/SystemInfo/MacOSSystemInfo.cs b/Ryujinx.Common/SystemInfo/MacOSSystemInfo.cs new file mode 100644 index 00000000..ec069ca4 --- /dev/null +++ b/Ryujinx.Common/SystemInfo/MacOSSystemInfo.cs @@ -0,0 +1,99 @@ +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; +using System.Text; +using Ryujinx.Common.Logging; + +namespace Ryujinx.Common.SystemInfo +{ + [SupportedOSPlatform("macos")] + internal class MacOSSystemInfo : SystemInfo + { + public override string CpuName { get; } + public override ulong RamSize { get; } + + [DllImport("libSystem.dylib", CharSet = CharSet.Ansi, SetLastError = true)] + private static extern int sysctlbyname(string name, IntPtr oldValue, ref ulong oldSize, IntPtr newValue, ulong newValueSize); + + private static int sysctlbyname(string name, IntPtr oldValue, ref ulong oldSize) + { + if (sysctlbyname(name, oldValue, ref oldSize, IntPtr.Zero, 0) == -1) + { + return Marshal.GetLastWin32Error(); + } + + return 0; + } + + private static int sysctlbyname(string name, ref T oldValue) + { + unsafe + { + ulong oldValueSize = (ulong)Unsafe.SizeOf(); + + return sysctlbyname(name, (IntPtr)Unsafe.AsPointer(ref oldValue), ref oldValueSize); + } + } + + private static int sysctlbyname(string name, out string oldValue) + { + oldValue = default; + + ulong strSize = 0; + + int res = sysctlbyname(name, IntPtr.Zero, ref strSize); + + if (res == 0) + { + byte[] rawData = new byte[strSize]; + + unsafe + { + fixed (byte* rawDataPtr = rawData) + { + res = sysctlbyname(name, (IntPtr)rawDataPtr, ref strSize); + } + + if (res == 0) + { + oldValue = Encoding.ASCII.GetString(rawData); + } + } + } + + return res; + } + + public MacOSSystemInfo() + { + ulong ramSize = 0; + + int res = sysctlbyname("hw.memsize", ref ramSize); + + if (res == 0) + { + RamSize = ramSize; + } + else + { + Logger.Error?.Print(LogClass.Application, $"Cannot get memory size, sysctlbyname error: {res}"); + + RamSize = 0; + } + + res = sysctlbyname("machdep.cpu.brand_string", out string cpuName); + + if (res == 0) + { + CpuName = cpuName; + } + else + { + Logger.Error?.Print(LogClass.Application, $"Cannot get CPU name, sysctlbyname error: {res}"); + + CpuName = "Unknown"; + } + } + } +} \ No newline at end of file -- cgit v1.2.3