| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2004, 2006, 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2004, 2006, 2008, 2010 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 | 69 |
| 70 String TextCodecUTF16::decode(const char* bytes, size_t length, FlushBehavior fl
ush, bool, bool& sawError) | 70 String TextCodecUTF16::decode(const char* bytes, size_t length, FlushBehavior fl
ush, bool, bool& sawError) |
| 71 { | 71 { |
| 72 // For compatibility reasons, ignore flush from fetch EOF. | 72 // For compatibility reasons, ignore flush from fetch EOF. |
| 73 const bool reallyFlush = flush != DoNotFlush && flush != FetchEOF; | 73 const bool reallyFlush = flush != DoNotFlush && flush != FetchEOF; |
| 74 | 74 |
| 75 if (!length) { | 75 if (!length) { |
| 76 if (!reallyFlush || !m_haveBufferedByte) | 76 if (!reallyFlush || !m_haveBufferedByte) |
| 77 return String(); | 77 return String(); |
| 78 sawError = true; | 78 sawError = true; |
| 79 return String(&Unicode::replacementCharacter, 1); | 79 return String(&replacementCharacter, 1); |
| 80 } | 80 } |
| 81 | 81 |
| 82 // FIXME: This should generate an error if there is an unpaired surrogate. | 82 // FIXME: This should generate an error if there is an unpaired surrogate. |
| 83 | 83 |
| 84 const unsigned char* p = reinterpret_cast<const unsigned char*>(bytes); | 84 const unsigned char* p = reinterpret_cast<const unsigned char*>(bytes); |
| 85 size_t numBytes = length + m_haveBufferedByte; | 85 size_t numBytes = length + m_haveBufferedByte; |
| 86 size_t numCharsIn = numBytes / 2; | 86 size_t numCharsIn = numBytes / 2; |
| 87 size_t numCharsOut = ((numBytes & 1) && reallyFlush) ? numCharsIn + 1 : numC
harsIn; | 87 size_t numCharsOut = ((numBytes & 1) && reallyFlush) ? numCharsIn + 1 : numC
harsIn; |
| 88 | 88 |
| 89 StringBuffer<UChar> buffer(numCharsOut); | 89 StringBuffer<UChar> buffer(numCharsOut); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 113 p += 2; | 113 p += 2; |
| 114 *q++ = c; | 114 *q++ = c; |
| 115 } | 115 } |
| 116 } | 116 } |
| 117 | 117 |
| 118 if (numBytes & 1) { | 118 if (numBytes & 1) { |
| 119 ASSERT(!m_haveBufferedByte); | 119 ASSERT(!m_haveBufferedByte); |
| 120 | 120 |
| 121 if (reallyFlush) { | 121 if (reallyFlush) { |
| 122 sawError = true; | 122 sawError = true; |
| 123 *q++ = Unicode::replacementCharacter; | 123 *q++ = replacementCharacter; |
| 124 } else { | 124 } else { |
| 125 m_haveBufferedByte = true; | 125 m_haveBufferedByte = true; |
| 126 m_bufferedByte = p[0]; | 126 m_bufferedByte = p[0]; |
| 127 } | 127 } |
| 128 } | 128 } |
| 129 | 129 |
| 130 buffer.shrink(q - buffer.characters()); | 130 buffer.shrink(q - buffer.characters()); |
| 131 | 131 |
| 132 return String::adopt(buffer); | 132 return String::adopt(buffer); |
| 133 } | 133 } |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 for (size_t i = 0; i < length; ++i) { | 181 for (size_t i = 0; i < length; ++i) { |
| 182 bytes[i * 2] = 0; | 182 bytes[i * 2] = 0; |
| 183 bytes[i * 2 + 1] = characters[i]; | 183 bytes[i * 2 + 1] = characters[i]; |
| 184 } | 184 } |
| 185 } | 185 } |
| 186 | 186 |
| 187 return result; | 187 return result; |
| 188 } | 188 } |
| 189 | 189 |
| 190 } // namespace WTF | 190 } // namespace WTF |
| OLD | NEW |