From 20a2ba6d74acf0e27ebdd4288857c7d56229bbc8 Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Fri, 15 Jan 2016 17:52:17 +0100 Subject: [PATCH] Add qstrntod as qstrtod overload, which takes a len parameter Add qstrntod as an overload for qstrtod, which takes a len parameter, so one can pass character arrays which are not null-terminated. Change-Id: I8c1c6c3627043c1d6ec6eb712efa3abc9e5e9e00 Reviewed-by: Marc Mutz Reviewed-by: Milian Wolff Reviewed-by: Giuseppe D'Angelo --- src/corelib/tools/qlocale_tools.cpp | 14 ++++++++++++-- src/corelib/tools/qlocale_tools_p.h | 1 + 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/corelib/tools/qlocale_tools.cpp b/src/corelib/tools/qlocale_tools.cpp index a6a699fa163..5fd2aa0c597 100644 --- a/src/corelib/tools/qlocale_tools.cpp +++ b/src/corelib/tools/qlocale_tools.cpp @@ -534,11 +534,21 @@ QString &exponentForm(QChar zero, QChar decimal, QChar exponential, } double qstrtod(const char *s00, const char **se, bool *ok) +{ + const int len = static_cast(strlen(s00)); + Q_ASSERT(len >= 0); + return qstrntod(s00, len, se, ok); +} + +/*! + \internal + + Converts the initial portion of the string pointed to by \a s00 to a double, using the 'C' locale. + */ +double qstrntod(const char *s00, int len, const char **se, bool *ok) { int processed = 0; bool nonNullOk = false; - int len = static_cast(strlen(s00)); - Q_ASSERT(len >= 0); double d = asciiToDouble(s00, len, nonNullOk, processed, TrailingJunkAllowed); if (se) *se = s00 + processed; diff --git a/src/corelib/tools/qlocale_tools_p.h b/src/corelib/tools/qlocale_tools_p.h index b09ab564bba..6133f67add1 100644 --- a/src/corelib/tools/qlocale_tools_p.h +++ b/src/corelib/tools/qlocale_tools_p.h @@ -115,6 +115,7 @@ inline bool isZero(double d) } Q_CORE_EXPORT double qstrtod(const char *s00, char const **se, bool *ok); +Q_CORE_EXPORT double qstrntod(const char *s00, int len, char const **se, bool *ok); qlonglong qstrtoll(const char *nptr, const char **endptr, int base, bool *ok); qulonglong qstrtoull(const char *nptr, const char **endptr, int base, bool *ok);