mgorny created this revision.
mgorny added reviewers: bkramer, bruno, rafael.
mgorny added a subscriber: cfe-commits.

Replace the string matching for /etc/debian_version with split
integer/string matching algorithm. When the file contains 'major.minor'
version number, parse the major version as integer and use a switch
clause to match it. Otherwise, attempt 'codename/sid' matching using
a StringSwitch.


https://reviews.llvm.org/D25696

Files:
  lib/Driver/ToolChains.cpp


Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -3897,17 +3897,31 @@
   File = D.getVFS().getBufferForFile("/etc/debian_version");
   if (File) {
     StringRef Data = File.get()->getBuffer();
-    if (Data[0] == '5')
-      return DebianLenny;
-    else if (Data.startswith("squeeze/sid") || Data[0] == '6')
-      return DebianSqueeze;
-    else if (Data.startswith("wheezy/sid") || Data[0] == '7')
-      return DebianWheezy;
-    else if (Data.startswith("jessie/sid") || Data[0] == '8')
-      return DebianJessie;
-    else if (Data.startswith("stretch/sid") || Data[0] == '9')
-      return DebianStretch;
-    return UnknownDistro;
+    // Contents: < major.minor > or < codename/sid >
+    int MajorVersion;
+    if (!Data.split('.').first.getAsInteger(10, MajorVersion)) {
+      switch (MajorVersion) {
+        case 5:
+          return DebianLenny;
+        case 6:
+          return DebianSqueeze;
+        case 7:
+          return DebianWheezy;
+        case 8:
+          return DebianJessie;
+        case 9:
+          return DebianStretch;
+        default:
+          return UnknownDistro;
+      }
+    } else {
+      return llvm::StringSwitch<Distro>(Data.split("\n").first)
+               .Case("squeeze/sid", DebianSqueeze)
+               .Case("wheezy/sid", DebianWheezy)
+               .Case("jessie/sid", DebianJessie)
+               .Case("stretch/sid", DebianStretch)
+               .Default(UnknownDistro);
+    }
   }
 
   if (D.getVFS().exists("/etc/SuSE-release"))


Index: lib/Driver/ToolChains.cpp
===================================================================
--- lib/Driver/ToolChains.cpp
+++ lib/Driver/ToolChains.cpp
@@ -3897,17 +3897,31 @@
   File = D.getVFS().getBufferForFile("/etc/debian_version");
   if (File) {
     StringRef Data = File.get()->getBuffer();
-    if (Data[0] == '5')
-      return DebianLenny;
-    else if (Data.startswith("squeeze/sid") || Data[0] == '6')
-      return DebianSqueeze;
-    else if (Data.startswith("wheezy/sid") || Data[0] == '7')
-      return DebianWheezy;
-    else if (Data.startswith("jessie/sid") || Data[0] == '8')
-      return DebianJessie;
-    else if (Data.startswith("stretch/sid") || Data[0] == '9')
-      return DebianStretch;
-    return UnknownDistro;
+    // Contents: < major.minor > or < codename/sid >
+    int MajorVersion;
+    if (!Data.split('.').first.getAsInteger(10, MajorVersion)) {
+      switch (MajorVersion) {
+        case 5:
+          return DebianLenny;
+        case 6:
+          return DebianSqueeze;
+        case 7:
+          return DebianWheezy;
+        case 8:
+          return DebianJessie;
+        case 9:
+          return DebianStretch;
+        default:
+          return UnknownDistro;
+      }
+    } else {
+      return llvm::StringSwitch<Distro>(Data.split("\n").first)
+               .Case("squeeze/sid", DebianSqueeze)
+               .Case("wheezy/sid", DebianWheezy)
+               .Case("jessie/sid", DebianJessie)
+               .Case("stretch/sid", DebianStretch)
+               .Default(UnknownDistro);
+    }
   }
 
   if (D.getVFS().exists("/etc/SuSE-release"))
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to