OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/fxcrt/include/fx_ext.h" | 7 #include "core/fxcrt/include/fx_ext.h" |
8 #include "xfa/fgas/crt/fgas_codepage.h" | 8 #include "xfa/fgas/crt/fgas_codepage.h" |
9 #include "xfa/fgas/crt/fgas_language.h" | 9 #include "xfa/fgas/crt/fgas_language.h" |
10 | 10 |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 {0xf637e157, 0x478}, {0xfc213f3a, 0x2717}, {0xff654d14, 0x3b5}, | 302 {0xf637e157, 0x478}, {0xfc213f3a, 0x2717}, {0xff654d14, 0x3b5}, |
303 }; | 303 }; |
304 uint16_t FX_GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength) { | 304 uint16_t FX_GetCodePageFromStringA(const FX_CHAR* pStr, int32_t iLength) { |
305 FXSYS_assert(pStr != NULL); | 305 FXSYS_assert(pStr != NULL); |
306 if (iLength < 0) { | 306 if (iLength < 0) { |
307 iLength = FXSYS_strlen(pStr); | 307 iLength = FXSYS_strlen(pStr); |
308 } | 308 } |
309 if (iLength == 0) { | 309 if (iLength == 0) { |
310 return 0xFFFF; | 310 return 0xFFFF; |
311 } | 311 } |
312 uint32_t uHash = FX_HashCode_String_GetA(pStr, iLength, TRUE); | 312 uint32_t uHash = FX_HashCode_GetA(CFX_ByteStringC(pStr, iLength), true); |
313 int32_t iStart = 0, iMid; | 313 int32_t iStart = 0; |
314 int32_t iEnd = sizeof(g_FXCPHashTable) / sizeof(FX_STR2CPHASH) - 1; | 314 int32_t iEnd = sizeof(g_FXCPHashTable) / sizeof(FX_STR2CPHASH) - 1; |
315 FXSYS_assert(iEnd >= 0); | 315 FXSYS_assert(iEnd >= 0); |
316 do { | 316 do { |
317 iMid = (iStart + iEnd) / 2; | 317 int32_t iMid = (iStart + iEnd) / 2; |
318 const FX_STR2CPHASH& cp = g_FXCPHashTable[iMid]; | 318 const FX_STR2CPHASH& cp = g_FXCPHashTable[iMid]; |
319 if (uHash == cp.uHash) { | 319 if (uHash == cp.uHash) { |
320 return (uint16_t)cp.uCodePage; | 320 return (uint16_t)cp.uCodePage; |
321 } else if (uHash < cp.uHash) { | 321 } else if (uHash < cp.uHash) { |
322 iEnd = iMid - 1; | 322 iEnd = iMid - 1; |
323 } else { | 323 } else { |
324 iStart = iMid + 1; | 324 iStart = iMid + 1; |
325 } | 325 } |
326 } while (iStart <= iEnd); | 326 } while (iStart <= iEnd); |
327 return 0xFFFF; | 327 return 0xFFFF; |
328 } | 328 } |
329 uint16_t FX_GetCodePageFormStringW(const FX_WCHAR* pStr, int32_t iLength) { | 329 uint16_t FX_GetCodePageFormStringW(const FX_WCHAR* pStr, int32_t iLength) { |
330 if (iLength < 0) { | 330 if (iLength < 0) { |
331 iLength = FXSYS_wcslen(pStr); | 331 iLength = FXSYS_wcslen(pStr); |
332 } | 332 } |
333 if (iLength == 0) { | 333 if (iLength == 0) { |
334 return 0xFFFF; | 334 return 0xFFFF; |
335 } | 335 } |
336 CFX_ByteString csStr; | 336 CFX_ByteString csStr; |
337 FX_CHAR* pBuf = csStr.GetBuffer(iLength + 1); | 337 FX_CHAR* pBuf = csStr.GetBuffer(iLength + 1); |
338 for (int32_t i = 0; i < iLength; ++i) { | 338 for (int32_t i = 0; i < iLength; ++i) { |
339 *pBuf++ = (FX_CHAR)*pStr++; | 339 *pBuf++ = (FX_CHAR)*pStr++; |
340 } | 340 } |
341 csStr.ReleaseBuffer(iLength); | 341 csStr.ReleaseBuffer(iLength); |
342 return FX_GetCodePageFromStringA(csStr.c_str(), iLength); | 342 return FX_GetCodePageFromStringA(csStr.c_str(), iLength); |
343 } | 343 } |
OLD | NEW |