]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Move parse_int to util
authorJoel Rosdahl <joel@rosdahl.net>
Sat, 7 Sep 2019 17:55:38 +0000 (19:55 +0200)
committerJoel Rosdahl <joel@rosdahl.net>
Sat, 5 Oct 2019 20:57:20 +0000 (22:57 +0200)
src/Config.cpp
src/util.cpp
src/util.hpp
unittest/test_util.cpp

index 36b98f0049238a4c9488f360fcefd12c5543aaf8..ee875b170ca09498a2994797c82d155c09684c10 100644 (file)
@@ -340,24 +340,6 @@ format_umask(uint32_t umask)
   }
 }
 
-int
-parse_int(const std::string& value)
-{
-  size_t end;
-  long result;
-  bool failed = false;
-  try {
-    result = std::stol(value, &end, 10);
-  } catch (std::exception&) {
-    failed = true;
-  }
-  if (failed || end != value.size() || result < std::numeric_limits<int>::min()
-      || result > std::numeric_limits<int>::max()) {
-    throw Error(fmt::format("invalid integer: \"{}\"", value));
-  }
-  return result;
-}
-
 unsigned
 parse_unsigned(const std::string& value)
 {
@@ -703,7 +685,7 @@ Config::set_item(const std::string& key,
     break;
 
   case ConfigItem::compression_level: {
-    auto level = parse_int(value);
+    auto level = util::parse_int(value);
     if (level < -128 || level > 127) {
       throw Error("compression level must be between -128 and 127");
     }
index 7948938bab5e4daac47ed44259b30e3faccaa2c5..f74fb1509da39f15d614b7b8d3281e68675e3f02 100644 (file)
@@ -1848,6 +1848,24 @@ get_level_1_files(const std::string& dir,
   get_cache_files_internal(dir, 1, progress_receiver, files);
 }
 
+int
+parse_int(const std::string& value)
+{
+  size_t end;
+  long result;
+  bool failed = false;
+  try {
+    result = std::stol(value, &end, 10);
+  } catch (std::exception&) {
+    failed = true;
+  }
+  if (failed || end != value.size() || result < std::numeric_limits<int>::min()
+      || result > std::numeric_limits<int>::max()) {
+    throw Error(fmt::format("invalid integer: \"{}\"", value));
+  }
+  return result;
+}
+
 std::string
 read_file(const std::string& path)
 {
index 597b18fd6ad3fa1c14b324586d9f134befc01dd4..decff6ce91e90d8630c06acb6c41dc89b93b97f3 100644 (file)
@@ -79,6 +79,11 @@ void get_level_1_files(const std::string& dir,
                        const ProgressReceiver& progress_receiver,
                        std::vector<std::shared_ptr<CacheFile>>& files);
 
+// Parse a string into an integer.
+//
+// Throws Error on error.
+int parse_int(const std::string& value);
+
 // Read file data as a string.
 //
 // Throws Error on error.
index 5beec601dd6d174f82b08563307a8c41ea22e9cf..89d505bca7e234ff1cdbeedcff5c978cab1945ad 100644 (file)
@@ -20,6 +20,8 @@
 
 #include <catch.hpp>
 
+using Catch::Equals;
+
 TEST_CASE("util::base_name")
 {
   CHECK(util::base_name("") == "");
@@ -153,6 +155,22 @@ TEST_CASE("util::get_level_1_files")
   }
 }
 
+TEST_CASE("util::parse_int")
+{
+  CHECK(util::parse_int("0") == 0);
+  CHECK(util::parse_int("2") == 2);
+  CHECK(util::parse_int("-17") == -17);
+  CHECK(util::parse_int("42") == 42);
+  CHECK(util::parse_int("0666") == 666);
+  CHECK(util::parse_int(" 777") == 777);
+
+  CHECK_THROWS_WITH(util::parse_int(""), Equals("invalid integer: \"\""));
+  CHECK_THROWS_WITH(util::parse_int("x"), Equals("invalid integer: \"x\""));
+  CHECK_THROWS_WITH(util::parse_int("0x"), Equals("invalid integer: \"0x\""));
+  CHECK_THROWS_WITH(util::parse_int("0x4"), Equals("invalid integer: \"0x4\""));
+  CHECK_THROWS_WITH(util::parse_int("0 "), Equals("invalid integer: \"0 \""));
+}
+
 TEST_CASE("util::read_file and util::write_file")
 {
   util::write_file("test", "foo\nbar\n");