summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/locale_convert.cc13
-rw-r--r--src/locale_convert.h4
-rw-r--r--src/raw_convert.cc7
-rw-r--r--src/raw_convert.h4
4 files changed, 28 insertions, 0 deletions
diff --git a/src/locale_convert.cc b/src/locale_convert.cc
index 46d5507f..915cac82 100644
--- a/src/locale_convert.cc
+++ b/src/locale_convert.cc
@@ -269,6 +269,19 @@ dcp::locale_convert (string x, int, bool)
}
template<>
+unsigned long long
+dcp::locale_convert (string x, int, bool)
+{
+ unsigned long long y = 0;
+#ifdef LIBDCP_WINDOWS
+ __mingw_sscanf (x.c_str(), "%llud", &y);
+#else
+ sscanf (x.c_str(), "%llud", &y);
+#endif
+ return y;
+}
+
+template<>
float
dcp::locale_convert (string x, int, bool)
{
diff --git a/src/locale_convert.h b/src/locale_convert.h
index d8d84711..aaf0dd6e 100644
--- a/src/locale_convert.h
+++ b/src/locale_convert.h
@@ -144,6 +144,10 @@ long long
locale_convert (std::string x, int, bool);
template <>
+unsigned long long
+locale_convert (std::string x, int, bool);
+
+template <>
float
locale_convert (std::string x, int, bool);
diff --git a/src/raw_convert.cc b/src/raw_convert.cc
index 7b4e6c6d..b4dcb5be 100644
--- a/src/raw_convert.cc
+++ b/src/raw_convert.cc
@@ -211,6 +211,13 @@ dcp::raw_convert (string v, int precision, bool fixed)
}
template <>
+unsigned long long
+dcp::raw_convert (string v, int precision, bool fixed)
+{
+ return locale_convert<unsigned long long> (make_local (v), precision, fixed);
+}
+
+template <>
int
dcp::raw_convert (char const * v, int precision, bool fixed)
{
diff --git a/src/raw_convert.h b/src/raw_convert.h
index c7b04823..fb3c7954 100644
--- a/src/raw_convert.h
+++ b/src/raw_convert.h
@@ -137,6 +137,10 @@ long long
raw_convert (std::string v, int, bool);
template <>
+unsigned long long
+raw_convert (std::string v, int, bool);
+
+template <>
int
raw_convert (char const * v, int, bool);