aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/qpdf/QUtil.hh55
-rw-r--r--libqpdf/QUtil.cc46
2 files changed, 51 insertions, 50 deletions
diff --git a/include/qpdf/QUtil.hh b/include/qpdf/QUtil.hh
index 32aeae1f..41b89da4 100644
--- a/include/qpdf/QUtil.hh
+++ b/include/qpdf/QUtil.hh
@@ -25,6 +25,7 @@
#include <qpdf/DLL.h>
#include <qpdf/PointerHolder.hh>
#include <qpdf/Types.h>
+#include <cstring>
#include <functional>
#include <list>
#include <memory>
@@ -489,16 +490,16 @@ namespace QUtil
// classes without using ctype, which we avoid because of locale
// considerations.
QPDF_DLL
- bool is_hex_digit(char);
+ inline bool is_hex_digit(char);
QPDF_DLL
- bool is_space(char);
+ inline bool is_space(char);
QPDF_DLL
- bool is_digit(char);
+ inline bool is_digit(char);
QPDF_DLL
- bool is_number(char const*);
+ inline bool is_number(char const*);
// This method parses the numeric range syntax used by the qpdf
// command-line tool. May throw std::runtime_error.
@@ -526,4 +527,50 @@ namespace QUtil
#endif // QPDF_NO_WCHAR_T
}; // namespace QUtil
+inline bool
+QUtil::is_hex_digit(char ch)
+{
+ return (ch && (strchr("0123456789abcdefABCDEF", ch) != nullptr));
+}
+
+inline bool
+QUtil::is_space(char ch)
+{
+ return (ch && (strchr(" \f\n\r\t\v", ch) != nullptr));
+}
+
+inline bool
+QUtil::is_digit(char ch)
+{
+ return ((ch >= '0') && (ch <= '9'));
+}
+
+inline bool
+QUtil::is_number(char const* p)
+{
+ // ^[\+\-]?(\.\d*|\d+(\.\d*)?)$
+ if (!*p) {
+ return false;
+ }
+ if ((*p == '-') || (*p == '+')) {
+ ++p;
+ }
+ bool found_dot = false;
+ bool found_digit = false;
+ for (; *p; ++p) {
+ if (*p == '.') {
+ if (found_dot) {
+ // only one dot
+ return false;
+ }
+ found_dot = true;
+ } else if (QUtil::is_digit(*p)) {
+ found_digit = true;
+ } else {
+ return false;
+ }
+ }
+ return found_digit;
+}
+
#endif // QUTIL_HH
diff --git a/libqpdf/QUtil.cc b/libqpdf/QUtil.cc
index 4e58aaf7..d565ece0 100644
--- a/libqpdf/QUtil.cc
+++ b/libqpdf/QUtil.cc
@@ -1207,52 +1207,6 @@ QUtil::random()
return result;
}
-bool
-QUtil::is_hex_digit(char ch)
-{
- return (ch && (strchr("0123456789abcdefABCDEF", ch) != nullptr));
-}
-
-bool
-QUtil::is_space(char ch)
-{
- return (ch && (strchr(" \f\n\r\t\v", ch) != nullptr));
-}
-
-bool
-QUtil::is_digit(char ch)
-{
- return ((ch >= '0') && (ch <= '9'));
-}
-
-bool
-QUtil::is_number(char const* p)
-{
- // ^[\+\-]?(\.\d*|\d+(\.\d*)?)$
- if (!*p) {
- return false;
- }
- if ((*p == '-') || (*p == '+')) {
- ++p;
- }
- bool found_dot = false;
- bool found_digit = false;
- for (; *p; ++p) {
- if (*p == '.') {
- if (found_dot) {
- // only one dot
- return false;
- }
- found_dot = true;
- } else if (QUtil::is_digit(*p)) {
- found_digit = true;
- } else {
- return false;
- }
- }
- return found_digit;
-}
-
void
QUtil::read_file_into_memory(
char const* filename, std::shared_ptr<char>& file_buf, size_t& size)