| 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/include/fxcrt/fx_basic.h" | 7 #include "core/include/fxcrt/fx_basic.h" |
| 8 #include "core/include/fxcrt/fx_ext.h" | 8 #include "core/include/fxcrt/fx_ext.h" |
| 9 #include "extension.h" | 9 #include "extension.h" |
| 10 | 10 |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 | 69 |
| 70 FX_FLOAT FXSYS_tan(FX_FLOAT a) { | 70 FX_FLOAT FXSYS_tan(FX_FLOAT a) { |
| 71 return (FX_FLOAT)tan(a); | 71 return (FX_FLOAT)tan(a); |
| 72 } | 72 } |
| 73 FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x) { | 73 FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x) { |
| 74 return FXSYS_log(x) / FXSYS_log(b); | 74 return FXSYS_log(x) / FXSYS_log(b); |
| 75 } | 75 } |
| 76 FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, | 76 FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, |
| 77 int32_t iLength, | 77 int32_t iLength, |
| 78 int32_t* pUsedLen) { | 78 int32_t* pUsedLen) { |
| 79 FXSYS_assert(pcsStr != NULL); | 79 FXSYS_assert(pcsStr); |
| 80 if (iLength < 0) { | 80 if (iLength < 0) { |
| 81 iLength = (int32_t)FXSYS_strlen(pcsStr); | 81 iLength = (int32_t)FXSYS_strlen(pcsStr); |
| 82 } | 82 } |
| 83 CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength); | 83 CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength); |
| 84 return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen); | 84 return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen); |
| 85 } | 85 } |
| 86 FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, | 86 FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, |
| 87 int32_t iLength, | 87 int32_t iLength, |
| 88 int32_t* pUsedLen) { | 88 int32_t* pUsedLen) { |
| 89 FXSYS_assert(pwsStr != NULL); | 89 FXSYS_assert(pwsStr); |
| 90 if (iLength < 0) { | 90 if (iLength < 0) { |
| 91 iLength = (int32_t)FXSYS_wcslen(pwsStr); | 91 iLength = (int32_t)FXSYS_wcslen(pwsStr); |
| 92 } | 92 } |
| 93 if (iLength == 0) { | 93 if (iLength == 0) { |
| 94 return 0.0f; | 94 return 0.0f; |
| 95 } | 95 } |
| 96 int32_t iUsedLen = 0; | 96 int32_t iUsedLen = 0; |
| 97 FX_BOOL bNegtive = FALSE; | 97 FX_BOOL bNegtive = FALSE; |
| 98 switch (pwsStr[iUsedLen]) { | 98 switch (pwsStr[iUsedLen]) { |
| 99 case '-': | 99 case '-': |
| (...skipping 25 matching lines...) Expand all Loading... |
| 125 } | 125 } |
| 126 } | 126 } |
| 127 if (pUsedLen) { | 127 if (pUsedLen) { |
| 128 *pUsedLen = iUsedLen; | 128 *pUsedLen = iUsedLen; |
| 129 } | 129 } |
| 130 return bNegtive ? -fValue : fValue; | 130 return bNegtive ? -fValue : fValue; |
| 131 } | 131 } |
| 132 FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, | 132 FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, |
| 133 const FX_WCHAR* srcStr, | 133 const FX_WCHAR* srcStr, |
| 134 size_t count) { | 134 size_t count) { |
| 135 FXSYS_assert(dstStr != NULL && srcStr != NULL && count > 0); | 135 FXSYS_assert(dstStr && srcStr && count > 0); |
| 136 for (size_t i = 0; i < count; ++i) | 136 for (size_t i = 0; i < count; ++i) |
| 137 if ((dstStr[i] = srcStr[i]) == L'\0') { | 137 if ((dstStr[i] = srcStr[i]) == L'\0') { |
| 138 break; | 138 break; |
| 139 } | 139 } |
| 140 return dstStr; | 140 return dstStr; |
| 141 } | 141 } |
| 142 int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count) { | 142 int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count) { |
| 143 FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); | 143 FXSYS_assert(s1 && s2 && count > 0); |
| 144 FX_WCHAR wch1 = 0, wch2 = 0; | 144 FX_WCHAR wch1 = 0, wch2 = 0; |
| 145 while (count-- > 0) { | 145 while (count-- > 0) { |
| 146 wch1 = (FX_WCHAR)FXSYS_tolower(*s1++); | 146 wch1 = (FX_WCHAR)FXSYS_tolower(*s1++); |
| 147 wch2 = (FX_WCHAR)FXSYS_tolower(*s2++); | 147 wch2 = (FX_WCHAR)FXSYS_tolower(*s2++); |
| 148 if (wch1 != wch2) { | 148 if (wch1 != wch2) { |
| 149 break; | 149 break; |
| 150 } | 150 } |
| 151 } | 151 } |
| 152 return wch1 - wch2; | 152 return wch1 - wch2; |
| 153 } | 153 } |
| 154 int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count) { | 154 int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count) { |
| 155 FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); | 155 FXSYS_assert(s1 && s2 && count > 0); |
| 156 FX_CHAR ch1 = 0, ch2 = 0; | 156 FX_CHAR ch1 = 0, ch2 = 0; |
| 157 while (count-- > 0) { | 157 while (count-- > 0) { |
| 158 ch1 = (FX_CHAR)FXSYS_tolower(*s1++); | 158 ch1 = (FX_CHAR)FXSYS_tolower(*s1++); |
| 159 ch2 = (FX_CHAR)FXSYS_tolower(*s2++); | 159 ch2 = (FX_CHAR)FXSYS_tolower(*s2++); |
| 160 if (ch1 != ch2) { | 160 if (ch1 != ch2) { |
| 161 break; | 161 break; |
| 162 } | 162 } |
| 163 } | 163 } |
| 164 return ch1 - ch2; | 164 return ch1 - ch2; |
| 165 } | 165 } |
| 166 FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr, | 166 FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr, |
| 167 int32_t iLength, | 167 int32_t iLength, |
| 168 FX_BOOL bIgnoreCase) { | 168 FX_BOOL bIgnoreCase) { |
| 169 FXSYS_assert(pStr != NULL); | 169 FXSYS_assert(pStr); |
| 170 if (iLength < 0) { | 170 if (iLength < 0) { |
| 171 iLength = (int32_t)FXSYS_strlen(pStr); | 171 iLength = (int32_t)FXSYS_strlen(pStr); |
| 172 } | 172 } |
| 173 const FX_CHAR* pStrEnd = pStr + iLength; | 173 const FX_CHAR* pStrEnd = pStr + iLength; |
| 174 FX_DWORD dwHashCode = 0; | 174 FX_DWORD dwHashCode = 0; |
| 175 if (bIgnoreCase) { | 175 if (bIgnoreCase) { |
| 176 while (pStr < pStrEnd) { | 176 while (pStr < pStrEnd) { |
| 177 dwHashCode = 31 * dwHashCode + FXSYS_tolower(*pStr++); | 177 dwHashCode = 31 * dwHashCode + FXSYS_tolower(*pStr++); |
| 178 } | 178 } |
| 179 } else { | 179 } else { |
| 180 while (pStr < pStrEnd) { | 180 while (pStr < pStrEnd) { |
| 181 dwHashCode = 31 * dwHashCode + *pStr++; | 181 dwHashCode = 31 * dwHashCode + *pStr++; |
| 182 } | 182 } |
| 183 } | 183 } |
| 184 return dwHashCode; | 184 return dwHashCode; |
| 185 } | 185 } |
| 186 FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, | 186 FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, |
| 187 int32_t iLength, | 187 int32_t iLength, |
| 188 FX_BOOL bIgnoreCase) { | 188 FX_BOOL bIgnoreCase) { |
| 189 FXSYS_assert(pStr != NULL); | 189 FXSYS_assert(pStr); |
| 190 if (iLength < 0) { | 190 if (iLength < 0) { |
| 191 iLength = (int32_t)FXSYS_wcslen(pStr); | 191 iLength = (int32_t)FXSYS_wcslen(pStr); |
| 192 } | 192 } |
| 193 const FX_WCHAR* pStrEnd = pStr + iLength; | 193 const FX_WCHAR* pStrEnd = pStr + iLength; |
| 194 FX_DWORD dwHashCode = 0; | 194 FX_DWORD dwHashCode = 0; |
| 195 if (bIgnoreCase) { | 195 if (bIgnoreCase) { |
| 196 while (pStr < pStrEnd) { | 196 while (pStr < pStrEnd) { |
| 197 dwHashCode = 1313 * dwHashCode + FXSYS_tolower(*pStr++); | 197 dwHashCode = 1313 * dwHashCode + FXSYS_tolower(*pStr++); |
| 198 } | 198 } |
| 199 } else { | 199 } else { |
| 200 while (pStr < pStrEnd) { | 200 while (pStr < pStrEnd) { |
| 201 dwHashCode = 1313 * dwHashCode + *pStr++; | 201 dwHashCode = 1313 * dwHashCode + *pStr++; |
| 202 } | 202 } |
| 203 } | 203 } |
| 204 return dwHashCode; | 204 return dwHashCode; |
| 205 } | 205 } |
| 206 | 206 |
| 207 void* FX_Random_MT_Start(FX_DWORD dwSeed) { | 207 void* FX_Random_MT_Start(FX_DWORD dwSeed) { |
| 208 FX_LPMTRANDOMCONTEXT pContext = FX_Alloc(FX_MTRANDOMCONTEXT, 1); | 208 FX_LPMTRANDOMCONTEXT pContext = FX_Alloc(FX_MTRANDOMCONTEXT, 1); |
| 209 pContext->mt[0] = dwSeed; | 209 pContext->mt[0] = dwSeed; |
| 210 FX_DWORD& i = pContext->mti; | 210 FX_DWORD& i = pContext->mti; |
| 211 FX_DWORD* pBuf = pContext->mt; | 211 FX_DWORD* pBuf = pContext->mt; |
| 212 for (i = 1; i < MT_N; i++) { | 212 for (i = 1; i < MT_N; i++) { |
| 213 pBuf[i] = (1812433253UL * (pBuf[i - 1] ^ (pBuf[i - 1] >> 30)) + i); | 213 pBuf[i] = (1812433253UL * (pBuf[i - 1] ^ (pBuf[i - 1] >> 30)) + i); |
| 214 } | 214 } |
| 215 pContext->bHaveSeed = TRUE; | 215 pContext->bHaveSeed = TRUE; |
| 216 return pContext; | 216 return pContext; |
| 217 } | 217 } |
| 218 FX_DWORD FX_Random_MT_Generate(void* pContext) { | 218 FX_DWORD FX_Random_MT_Generate(void* pContext) { |
| 219 FXSYS_assert(pContext != NULL); | 219 FXSYS_assert(pContext); |
| 220 FX_LPMTRANDOMCONTEXT pMTC = (FX_LPMTRANDOMCONTEXT)pContext; | 220 FX_LPMTRANDOMCONTEXT pMTC = (FX_LPMTRANDOMCONTEXT)pContext; |
| 221 FX_DWORD v; | 221 FX_DWORD v; |
| 222 static FX_DWORD mag[2] = {0, MT_Matrix_A}; | 222 static FX_DWORD mag[2] = {0, MT_Matrix_A}; |
| 223 FX_DWORD& mti = pMTC->mti; | 223 FX_DWORD& mti = pMTC->mti; |
| 224 FX_DWORD* pBuf = pMTC->mt; | 224 FX_DWORD* pBuf = pMTC->mt; |
| 225 if ((int)mti < 0 || mti >= MT_N) { | 225 if ((int)mti < 0 || mti >= MT_N) { |
| 226 if (mti > MT_N && !pMTC->bHaveSeed) { | 226 if (mti > MT_N && !pMTC->bHaveSeed) { |
| 227 return 0; | 227 return 0; |
| 228 } | 228 } |
| 229 FX_DWORD kk; | 229 FX_DWORD kk; |
| (...skipping 10 matching lines...) Expand all Loading... |
| 240 mti = 0; | 240 mti = 0; |
| 241 } | 241 } |
| 242 v = pBuf[mti++]; | 242 v = pBuf[mti++]; |
| 243 v ^= (v >> 11); | 243 v ^= (v >> 11); |
| 244 v ^= (v << 7) & 0x9d2c5680UL; | 244 v ^= (v << 7) & 0x9d2c5680UL; |
| 245 v ^= (v << 15) & 0xefc60000UL; | 245 v ^= (v << 15) & 0xefc60000UL; |
| 246 v ^= (v >> 18); | 246 v ^= (v >> 18); |
| 247 return v; | 247 return v; |
| 248 } | 248 } |
| 249 void FX_Random_MT_Close(void* pContext) { | 249 void FX_Random_MT_Close(void* pContext) { |
| 250 FXSYS_assert(pContext != NULL); | 250 FXSYS_assert(pContext); |
| 251 FX_Free(pContext); | 251 FX_Free(pContext); |
| 252 } | 252 } |
| 253 void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount) { | 253 void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount) { |
| 254 FX_DWORD dwSeed; | 254 FX_DWORD dwSeed; |
| 255 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 255 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
| 256 if (!FX_GenerateCryptoRandom(&dwSeed, 1)) { | 256 if (!FX_GenerateCryptoRandom(&dwSeed, 1)) { |
| 257 FX_Random_GenerateBase(&dwSeed, 1); | 257 FX_Random_GenerateBase(&dwSeed, 1); |
| 258 } | 258 } |
| 259 #else | 259 #else |
| 260 FX_Random_GenerateBase(&dwSeed, 1); | 260 FX_Random_GenerateBase(&dwSeed, 1); |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 b = ((const uint8_t*)pGUID)[i]; | 334 b = ((const uint8_t*)pGUID)[i]; |
| 335 *pBuf++ = gs_FX_pHexChars[b >> 4]; | 335 *pBuf++ = gs_FX_pHexChars[b >> 4]; |
| 336 *pBuf++ = gs_FX_pHexChars[b & 0x0F]; | 336 *pBuf++ = gs_FX_pHexChars[b & 0x0F]; |
| 337 if (bSeparator && (i == 3 || i == 5 || i == 7 || i == 9)) { | 337 if (bSeparator && (i == 3 || i == 5 || i == 7 || i == 9)) { |
| 338 *pBuf++ = L'-'; | 338 *pBuf++ = L'-'; |
| 339 } | 339 } |
| 340 } | 340 } |
| 341 bsStr.ReleaseBuffer(bSeparator ? 36 : 32); | 341 bsStr.ReleaseBuffer(bSeparator ? 36 : 32); |
| 342 } | 342 } |
| 343 #endif // PDF_ENABLE_XFA | 343 #endif // PDF_ENABLE_XFA |
| OLD | NEW |