diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2012-02-01 17:37:02 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-02-02 11:10:04 +0100 |
commit | ec9833388f514ac8050cc945e494e448dae545ea (patch) | |
tree | 5b67954fe2a6bf620a42ec745ec795842598347e /src/corelib | |
parent | 307c03497301015c418d4bfe462b14ed9cdf2f1b (diff) |
Fix operator==(QLatin1String, QLatin1String) and friends for substrings
QLatin1String now has a constructor that takes explicit length, which
makes it possible to create a QLatin1String that isn't null-terminated.
Made the QLatin1String comparison operators work in that case.
Change-Id: I234ba851e67a6f5cfbb46fb6f0b22623ce40be28
Reviewed-by: Lars Knoll <lars.knoll@nokia.com>
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/tools/qstring.h | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h index 614ba714e2..129a53e227 100644 --- a/src/corelib/tools/qstring.h +++ b/src/corelib/tools/qstring.h @@ -972,17 +972,21 @@ inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, const QLatin1String &s { return (QString::fromAscii(s1, s1 ? int(strlen(s1)) : -1) >= s2); } inline bool operator==(const QLatin1String &s1, const QLatin1String &s2) -{ return (qstrcmp(s1.latin1(), s2.latin1()) == 0); } +{ return (s1.size() == s2.size() && !memcmp(s1.latin1(), s2.latin1(), s1.size())); } inline bool operator!=(const QLatin1String &s1, const QLatin1String &s2) -{ return (qstrcmp(s1.latin1(), s2.latin1()) != 0); } +{ return (s1.size() != s2.size() || memcmp(s1.latin1(), s2.latin1(), s1.size())); } inline bool operator<(const QLatin1String &s1, const QLatin1String &s2) -{ return (qstrcmp(s1.latin1(), s2.latin1()) < 0); } +{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size())); + return (r < 0) || (r == 0 && s1.size() < s2.size()); } inline bool operator<=(const QLatin1String &s1, const QLatin1String &s2) -{ return (qstrcmp(s1.latin1(), s2.latin1()) <= 0); } +{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size())); + return (r < 0) || (r == 0 && s1.size() <= s2.size()); } inline bool operator>(const QLatin1String &s1, const QLatin1String &s2) -{ return (qstrcmp(s1.latin1(), s2.latin1()) > 0); } +{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size())); + return (r > 0) || (r == 0 && s1.size() > s2.size()); } inline bool operator>=(const QLatin1String &s1, const QLatin1String &s2) -{ return (qstrcmp(s1.latin1(), s2.latin1()) >= 0); } +{ int r = memcmp(s1.latin1(), s2.latin1(), qMin(s1.size(), s2.size())); + return (r > 0) || (r == 0 && s1.size() >= s2.size()); } inline bool QString::operator==(const QByteArray &s) const |