summaryrefslogtreecommitdiffstats
path: root/src/tool/args.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/tool/args.cc')
-rw-r--r--src/tool/args.cc27
1 files changed, 27 insertions, 0 deletions
diff --git a/src/tool/args.cc b/src/tool/args.cc
index a164476..9ec18a3 100644
--- a/src/tool/args.cc
+++ b/src/tool/args.cc
@@ -15,7 +15,9 @@
#include <string>
#include <vector>
+#include <limits.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include "internal.h"
@@ -75,3 +77,28 @@ void PrintUsage(const struct argument *templates) {
fprintf(stderr, "%s\t%s\n", templ->name, templ->description);
}
}
+
+bool GetUnsigned(unsigned *out, const std::string &arg_name,
+ unsigned default_value,
+ const std::map<std::string, std::string> &args) {
+ const auto &it = args.find(arg_name);
+ if (it == args.end()) {
+ *out = default_value;
+ return true;
+ }
+
+ const std::string &value = it->second;
+ if (value.empty()) {
+ return false;
+ }
+
+ char *endptr;
+ unsigned long int num = strtoul(value.c_str(), &endptr, 10);
+ if (*endptr ||
+ num > UINT_MAX) {
+ return false;
+ }
+
+ *out = num;
+ return true;
+}