Browse Source

Merge pull request #891 from PixiEditor/fixes/linux-FromReleaseFile-NullReferenceException

Fixed NullReferenceException in LinuxOSInformation.FromRelaseFile()
Krzysztof Krysiński 4 months ago
parent
commit
51d146af18
1 changed files with 13 additions and 11 deletions
  1. 13 11
      src/PixiEditor.Linux/LinuxOperatingSystem.cs

+ 13 - 11
src/PixiEditor.Linux/LinuxOperatingSystem.cs

@@ -51,35 +51,37 @@ public sealed class LinuxOperatingSystem : IOperatingSystem
     {
         const string FilePath = "/etc/os-release";
         
-        private LinuxOSInformation(string? name, string? version, bool available)
+        private LinuxOSInformation(string? name, string? version)
         {
             Name = name;
             Version = version;
-            Available = available;
         }
 
         public static LinuxOSInformation FromReleaseFile()
         {
             if (!File.Exists(FilePath))
             {
-                return new LinuxOSInformation(null, null, false);
+                return new LinuxOSInformation(null, null);
             }
             
             // Parse /etc/os-release file (e.g. 'NAME="Ubuntu"')
-            var lines = File.ReadAllLines(FilePath).Select<string, (string Key, string Value)>(x =>
+            var lines = File.ReadAllLines(FilePath).Select<string, (string? Key, string Value)>(line =>
             {
-                var separatorIndex = x.IndexOf('=');
-                return (x[..separatorIndex], x[(separatorIndex + 1)..]);
+                var separatorIndex = line.IndexOf('=');
+                
+                return separatorIndex != -1 
+                    ? (line[..separatorIndex], line[(separatorIndex + 1)..])
+                    : (null, null);
             }).ToList();
             
-            var name = lines.FirstOrDefault(x => x.Key == "NAME").Value.Trim('"');
-            var version = lines.FirstOrDefault(x => x.Key == "VERSION").Value.Trim('"');
+            var name = GetKeyValue("NAME") ?? GetKeyValue("ID");
+            var version = GetKeyValue("VERSION");
             
-            return new LinuxOSInformation(name, version, true);
+            return new LinuxOSInformation(name, version);
+
+            string? GetKeyValue(string key) => lines.FirstOrDefault(x => x.Key?.ToUpper() == key).Value?.Trim('"');
         }
         
-        public bool Available { get; }
-        
         public string? Name { get; private set; }
         
         public string? Version { get; private set; }