aboutsummaryrefslogtreecommitdiff
path: root/Minecraft.Server/Console/commands/CommandParsing.h
diff options
context:
space:
mode:
Diffstat (limited to 'Minecraft.Server/Console/commands/CommandParsing.h')
-rw-r--r--Minecraft.Server/Console/commands/CommandParsing.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/Minecraft.Server/Console/commands/CommandParsing.h b/Minecraft.Server/Console/commands/CommandParsing.h
new file mode 100644
index 00000000..edef68d0
--- /dev/null
+++ b/Minecraft.Server/Console/commands/CommandParsing.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <cerrno>
+#include <cstdlib>
+#include <limits>
+#include <string>
+
+namespace ServerRuntime
+{
+ namespace CommandParsing
+ {
+ inline bool TryParseInt(const std::string &text, int *outValue)
+ {
+ if (outValue == nullptr || text.empty())
+ {
+ return false;
+ }
+
+ char *end = nullptr;
+ errno = 0;
+ const long parsedValue = std::strtol(text.c_str(), &end, 10);
+ if (end == text.c_str() || *end != '\0')
+ {
+ return false;
+ }
+ if (errno == ERANGE)
+ {
+ return false;
+ }
+ if (parsedValue < (std::numeric_limits<int>::min)() || parsedValue > (std::numeric_limits<int>::max)())
+ {
+ return false;
+ }
+
+ *outValue = static_cast<int>(parsedValue);
+ return true;
+ }
+ }
+}