diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WTF/wtf/unicode/UTF8.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WTF/wtf/unicode/UTF8.cpp')
-rw-r--r-- | Source/WTF/wtf/unicode/UTF8.cpp | 42 |
1 files changed, 34 insertions, 8 deletions
diff --git a/Source/WTF/wtf/unicode/UTF8.cpp b/Source/WTF/wtf/unicode/UTF8.cpp index 1a12e1241..5407401e6 100644 --- a/Source/WTF/wtf/unicode/UTF8.cpp +++ b/Source/WTF/wtf/unicode/UTF8.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2007 Apple Inc. All rights reserved. + * Copyright (C) 2007, 2014 Apple Inc. All rights reserved. * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com> * * Redistribution and use in source and binary forms, with or without @@ -11,10 +11,10 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY + * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR @@ -28,7 +28,7 @@ #include "UTF8.h" #include "ASCIICType.h" -#include <wtf/StringHasher.h> +#include <wtf/Hasher.h> #include <wtf/unicode/CharacterNames.h> namespace WTF { @@ -420,10 +420,10 @@ unsigned calculateStringHashAndLengthFromUTF8MaskingTop8Bits(const char* data, c return stringHasher.hashWithTop8BitsMasked(); } -bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const char* bEnd) +bool equalUTF16WithUTF8(const UChar* a, const char* b, const char* bEnd) { while (b < bEnd) { - if (isASCII(*b)) { + if (isASCII(*a) || isASCII(*b)) { if (*a++ != *b++) return false; continue; @@ -435,7 +435,7 @@ bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const return false; if (!isLegalUTF8(reinterpret_cast<const unsigned char*>(b), utf8SequenceLength)) - return 0; + return false; UChar32 character = readUTF8Sequence(b, utf8SequenceLength); ASSERT(!isASCII(character)); @@ -455,7 +455,33 @@ bool equalUTF16WithUTF8(const UChar* a, const UChar* aEnd, const char* b, const return false; } - return a == aEnd; + return true; +} + +bool equalLatin1WithUTF8(const LChar* a, const char* b, const char* bEnd) +{ + while (b < bEnd) { + if (isASCII(*a) || isASCII(*b)) { + if (*a++ != *b++) + return false; + continue; + } + + if (b + 1 == bEnd) + return false; + + if ((b[0] & 0xE0) != 0xC0 || (b[1] & 0xC0) != 0x80) + return false; + + LChar character = ((b[0] & 0x1F) << 6) | (b[1] & 0x3F); + + b += 2; + + if (*a++ != character) + return false; + } + + return true; } } // namespace Unicode |