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 "../../include/fxcrt/fx_ext.h" | 7 #include "../../include/fxcrt/fx_ext.h" |
8 #include "extension.h" | 8 #include "extension.h" |
9 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 9 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
10 #include <wincrypt.h> | 10 #include <wincrypt.h> |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 FX_BOOL FX_File_Flush(FX_HFILE hFile) | 73 FX_BOOL FX_File_Flush(FX_HFILE hFile) |
74 { | 74 { |
75 FXSYS_assert(hFile != NULL); | 75 FXSYS_assert(hFile != NULL); |
76 return ((IFXCRT_FileAccess*)hFile)->Flush(); | 76 return ((IFXCRT_FileAccess*)hFile)->Flush(); |
77 } | 77 } |
78 FX_BOOL FX_File_Truncate(FX_HFILE hFile, FX_FILESIZE szFile) | 78 FX_BOOL FX_File_Truncate(FX_HFILE hFile, FX_FILESIZE szFile) |
79 { | 79 { |
80 FXSYS_assert(hFile != NULL); | 80 FXSYS_assert(hFile != NULL); |
81 return ((IFXCRT_FileAccess*)hFile)->Truncate(szFile); | 81 return ((IFXCRT_FileAccess*)hFile)->Truncate(szFile); |
82 } | 82 } |
83 IFX_FileStream* FX_CreateFileStream(FX_LPCSTR filename, FX_DWORD dwModes) | 83 IFX_FileStream* FX_CreateFileStream(const FX_CHAR* filename, FX_DWORD dwModes) |
84 { | 84 { |
85 IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create(); | 85 IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create(); |
86 if (!pFA) { | 86 if (!pFA) { |
87 return NULL; | 87 return NULL; |
88 } | 88 } |
89 if (!pFA->Open(filename, dwModes)) { | 89 if (!pFA->Open(filename, dwModes)) { |
90 pFA->Release(); | 90 pFA->Release(); |
91 return NULL; | 91 return NULL; |
92 } | 92 } |
93 return new CFX_CRTFileStream(pFA); | 93 return new CFX_CRTFileStream(pFA); |
94 } | 94 } |
95 IFX_FileStream* FX_CreateFileStream(FX_LPCWSTR filename, FX_DWORD dwModes) | 95 IFX_FileStream* FX_CreateFileStream(const FX_WCHAR* filename, FX_DWORD dwModes) |
96 { | 96 { |
97 IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create(); | 97 IFXCRT_FileAccess* pFA = FXCRT_FileAccess_Create(); |
98 if (!pFA) { | 98 if (!pFA) { |
99 return NULL; | 99 return NULL; |
100 } | 100 } |
101 if (!pFA->Open(filename, dwModes)) { | 101 if (!pFA->Open(filename, dwModes)) { |
102 pFA->Release(); | 102 pFA->Release(); |
103 return NULL; | 103 return NULL; |
104 } | 104 } |
105 return new CFX_CRTFileStream(pFA); | 105 return new CFX_CRTFileStream(pFA); |
106 } | 106 } |
107 IFX_FileWrite* FX_CreateFileWrite(FX_LPCSTR filename) | 107 IFX_FileWrite* FX_CreateFileWrite(const FX_CHAR* filename) |
108 { | 108 { |
109 return FX_CreateFileStream(filename, FX_FILEMODE_Truncate); | 109 return FX_CreateFileStream(filename, FX_FILEMODE_Truncate); |
110 } | 110 } |
111 IFX_FileWrite* FX_CreateFileWrite(FX_LPCWSTR filename) | 111 IFX_FileWrite* FX_CreateFileWrite(const FX_WCHAR* filename) |
112 { | 112 { |
113 return FX_CreateFileStream(filename, FX_FILEMODE_Truncate); | 113 return FX_CreateFileStream(filename, FX_FILEMODE_Truncate); |
114 } | 114 } |
115 IFX_FileRead* FX_CreateFileRead(FX_LPCSTR filename) | 115 IFX_FileRead* FX_CreateFileRead(const FX_CHAR* filename) |
116 { | 116 { |
117 return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly); | 117 return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly); |
118 } | 118 } |
119 IFX_FileRead* FX_CreateFileRead(FX_LPCWSTR filename) | 119 IFX_FileRead* FX_CreateFileRead(const FX_WCHAR* filename) |
120 { | 120 { |
121 return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly); | 121 return FX_CreateFileStream(filename, FX_FILEMODE_ReadOnly); |
122 } | 122 } |
123 IFX_MemoryStream* FX_CreateMemoryStream(FX_LPBYTE pBuffer, size_t dwSize, FX_BOO
L bTakeOver) | 123 IFX_MemoryStream* FX_CreateMemoryStream(uint8_t* pBuffer, size_t dwSize, FX_BOOL
bTakeOver) |
124 { | 124 { |
125 return new CFX_MemoryStream(pBuffer, dwSize, bTakeOver); | 125 return new CFX_MemoryStream(pBuffer, dwSize, bTakeOver); |
126 } | 126 } |
127 IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive) | 127 IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive) |
128 { | 128 { |
129 return new CFX_MemoryStream(bConsecutive); | 129 return new CFX_MemoryStream(bConsecutive); |
130 } | 130 } |
131 #ifdef __cplusplus | 131 #ifdef __cplusplus |
132 extern "C" { | 132 extern "C" { |
133 #endif | 133 #endif |
134 FX_FLOAT FXSYS_tan(FX_FLOAT a) | 134 FX_FLOAT FXSYS_tan(FX_FLOAT a) |
135 { | 135 { |
136 return (FX_FLOAT)tan(a); | 136 return (FX_FLOAT)tan(a); |
137 } | 137 } |
138 FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x) | 138 FX_FLOAT FXSYS_logb(FX_FLOAT b, FX_FLOAT x) |
139 { | 139 { |
140 return FXSYS_log(x) / FXSYS_log(b); | 140 return FXSYS_log(x) / FXSYS_log(b); |
141 } | 141 } |
142 FX_FLOAT FXSYS_strtof(FX_LPCSTR pcsStr, int32_t iLength, int32_t *pUsedLen) | 142 FX_FLOAT FXSYS_strtof(const FX_CHAR* pcsStr, int32_t iLength, int32_t *pUsedLen) |
143 { | 143 { |
144 FXSYS_assert(pcsStr != NULL); | 144 FXSYS_assert(pcsStr != NULL); |
145 if (iLength < 0) { | 145 if (iLength < 0) { |
146 iLength = (int32_t)FXSYS_strlen(pcsStr); | 146 iLength = (int32_t)FXSYS_strlen(pcsStr); |
147 } | 147 } |
148 CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength); | 148 CFX_WideString ws = CFX_WideString::FromLocal(pcsStr, iLength); |
149 return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen); | 149 return FXSYS_wcstof(ws.c_str(), iLength, pUsedLen); |
150 } | 150 } |
151 FX_FLOAT FXSYS_wcstof(FX_LPCWSTR pwsStr, int32_t iLength, int32_t *pUsedLen) | 151 FX_FLOAT FXSYS_wcstof(const FX_WCHAR* pwsStr, int32_t iLength, int32_t *pUsedLen
) |
152 { | 152 { |
153 FXSYS_assert(pwsStr != NULL); | 153 FXSYS_assert(pwsStr != NULL); |
154 if (iLength < 0) { | 154 if (iLength < 0) { |
155 iLength = (int32_t)FXSYS_wcslen(pwsStr); | 155 iLength = (int32_t)FXSYS_wcslen(pwsStr); |
156 } | 156 } |
157 if (iLength == 0) { | 157 if (iLength == 0) { |
158 return 0.0f; | 158 return 0.0f; |
159 } | 159 } |
160 int32_t iUsedLen = 0; | 160 int32_t iUsedLen = 0; |
161 FX_BOOL bNegtive = FALSE; | 161 FX_BOOL bNegtive = FALSE; |
(...skipping 24 matching lines...) Expand all Loading... |
186 } else { | 186 } else { |
187 break; | 187 break; |
188 } | 188 } |
189 } | 189 } |
190 } | 190 } |
191 if (pUsedLen) { | 191 if (pUsedLen) { |
192 *pUsedLen = iUsedLen; | 192 *pUsedLen = iUsedLen; |
193 } | 193 } |
194 return bNegtive ? -fValue : fValue; | 194 return bNegtive ? -fValue : fValue; |
195 } | 195 } |
196 FX_LPWSTR FXSYS_wcsncpy(FX_LPWSTR dstStr, FX_LPCWSTR srcStr, size_t count) | 196 FX_WCHAR* FXSYS_wcsncpy(FX_WCHAR* dstStr, const FX_WCHAR* srcStr, size_t count) |
197 { | 197 { |
198 FXSYS_assert(dstStr != NULL && srcStr != NULL && count > 0); | 198 FXSYS_assert(dstStr != NULL && srcStr != NULL && count > 0); |
199 for (size_t i = 0; i < count; ++i) | 199 for (size_t i = 0; i < count; ++i) |
200 if ((dstStr[i] = srcStr[i]) == L'\0') { | 200 if ((dstStr[i] = srcStr[i]) == L'\0') { |
201 break; | 201 break; |
202 } | 202 } |
203 return dstStr; | 203 return dstStr; |
204 } | 204 } |
205 int32_t FXSYS_wcsnicmp(FX_LPCWSTR s1, FX_LPCWSTR s2, size_t count) | 205 int32_t FXSYS_wcsnicmp(const FX_WCHAR* s1, const FX_WCHAR* s2, size_t count) |
206 { | 206 { |
207 FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); | 207 FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); |
208 FX_WCHAR wch1 = 0, wch2 = 0; | 208 FX_WCHAR wch1 = 0, wch2 = 0; |
209 while (count-- > 0) { | 209 while (count-- > 0) { |
210 wch1 = (FX_WCHAR)FXSYS_tolower(*s1++); | 210 wch1 = (FX_WCHAR)FXSYS_tolower(*s1++); |
211 wch2 = (FX_WCHAR)FXSYS_tolower(*s2++); | 211 wch2 = (FX_WCHAR)FXSYS_tolower(*s2++); |
212 if (wch1 != wch2) { | 212 if (wch1 != wch2) { |
213 break; | 213 break; |
214 } | 214 } |
215 } | 215 } |
216 return wch1 - wch2; | 216 return wch1 - wch2; |
217 } | 217 } |
218 int32_t FXSYS_strnicmp(FX_LPCSTR s1, FX_LPCSTR s2, size_t count) | 218 int32_t FXSYS_strnicmp(const FX_CHAR* s1, const FX_CHAR* s2, size_t count) |
219 { | 219 { |
220 FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); | 220 FXSYS_assert(s1 != NULL && s2 != NULL && count > 0); |
221 FX_CHAR ch1 = 0, ch2 = 0; | 221 FX_CHAR ch1 = 0, ch2 = 0; |
222 while (count-- > 0) { | 222 while (count-- > 0) { |
223 ch1 = (FX_CHAR)FXSYS_tolower(*s1++); | 223 ch1 = (FX_CHAR)FXSYS_tolower(*s1++); |
224 ch2 = (FX_CHAR)FXSYS_tolower(*s2++); | 224 ch2 = (FX_CHAR)FXSYS_tolower(*s2++); |
225 if (ch1 != ch2) { | 225 if (ch1 != ch2) { |
226 break; | 226 break; |
227 } | 227 } |
228 } | 228 } |
229 return ch1 - ch2; | 229 return ch1 - ch2; |
230 } | 230 } |
231 FX_DWORD FX_HashCode_String_GetA(FX_LPCSTR pStr, int32_t iLength, FX_BOOL bIgnor
eCase) | 231 FX_DWORD FX_HashCode_String_GetA(const FX_CHAR* pStr, int32_t iLength, FX_BOOL b
IgnoreCase) |
232 { | 232 { |
233 FXSYS_assert(pStr != NULL); | 233 FXSYS_assert(pStr != NULL); |
234 if (iLength < 0) { | 234 if (iLength < 0) { |
235 iLength = (int32_t)FXSYS_strlen(pStr); | 235 iLength = (int32_t)FXSYS_strlen(pStr); |
236 } | 236 } |
237 FX_LPCSTR pStrEnd = pStr + iLength; | 237 const FX_CHAR* pStrEnd = pStr + iLength; |
238 FX_DWORD dwHashCode = 0; | 238 FX_DWORD dwHashCode = 0; |
239 if (bIgnoreCase) { | 239 if (bIgnoreCase) { |
240 while (pStr < pStrEnd) { | 240 while (pStr < pStrEnd) { |
241 dwHashCode = 31 * dwHashCode + FXSYS_tolower(*pStr++); | 241 dwHashCode = 31 * dwHashCode + FXSYS_tolower(*pStr++); |
242 } | 242 } |
243 } else { | 243 } else { |
244 while (pStr < pStrEnd) { | 244 while (pStr < pStrEnd) { |
245 dwHashCode = 31 * dwHashCode + *pStr ++; | 245 dwHashCode = 31 * dwHashCode + *pStr ++; |
246 } | 246 } |
247 } | 247 } |
248 return dwHashCode; | 248 return dwHashCode; |
249 } | 249 } |
250 FX_DWORD FX_HashCode_String_GetW(FX_LPCWSTR pStr, int32_t iLength, FX_BOOL bIgno
reCase) | 250 FX_DWORD FX_HashCode_String_GetW(const FX_WCHAR* pStr, int32_t iLength, FX_BOOL
bIgnoreCase) |
251 { | 251 { |
252 FXSYS_assert(pStr != NULL); | 252 FXSYS_assert(pStr != NULL); |
253 if (iLength < 0) { | 253 if (iLength < 0) { |
254 iLength = (int32_t)FXSYS_wcslen(pStr); | 254 iLength = (int32_t)FXSYS_wcslen(pStr); |
255 } | 255 } |
256 FX_LPCWSTR pStrEnd = pStr + iLength; | 256 const FX_WCHAR* pStrEnd = pStr + iLength; |
257 FX_DWORD dwHashCode = 0; | 257 FX_DWORD dwHashCode = 0; |
258 if (bIgnoreCase) { | 258 if (bIgnoreCase) { |
259 while (pStr < pStrEnd) { | 259 while (pStr < pStrEnd) { |
260 dwHashCode = 1313 * dwHashCode + FXSYS_tolower(*pStr++); | 260 dwHashCode = 1313 * dwHashCode + FXSYS_tolower(*pStr++); |
261 } | 261 } |
262 } else { | 262 } else { |
263 while (pStr < pStrEnd) { | 263 while (pStr < pStrEnd) { |
264 dwHashCode = 1313 * dwHashCode + *pStr ++; | 264 dwHashCode = 1313 * dwHashCode + *pStr ++; |
265 } | 265 } |
266 } | 266 } |
267 return dwHashCode; | 267 return dwHashCode; |
268 } | 268 } |
269 #ifdef __cplusplus | 269 #ifdef __cplusplus |
270 } | 270 } |
271 #endif | 271 #endif |
272 #ifdef __cplusplus | 272 #ifdef __cplusplus |
273 extern "C" { | 273 extern "C" { |
274 #endif | 274 #endif |
275 FX_LPVOID FX_Random_MT_Start(FX_DWORD dwSeed) | 275 void* FX_Random_MT_Start(FX_DWORD dwSeed) |
276 { | 276 { |
277 FX_LPMTRANDOMCONTEXT pContext = FX_Alloc(FX_MTRANDOMCONTEXT, 1); | 277 FX_LPMTRANDOMCONTEXT pContext = FX_Alloc(FX_MTRANDOMCONTEXT, 1); |
278 pContext->mt[0] = dwSeed; | 278 pContext->mt[0] = dwSeed; |
279 FX_DWORD &i = pContext->mti; | 279 FX_DWORD &i = pContext->mti; |
280 FX_LPDWORD pBuf = pContext->mt; | 280 FX_DWORD* pBuf = pContext->mt; |
281 for (i = 1; i < MT_N; i ++) { | 281 for (i = 1; i < MT_N; i ++) { |
282 pBuf[i] = (1812433253UL * (pBuf[i - 1] ^ (pBuf[i - 1] >> 30)) + i); | 282 pBuf[i] = (1812433253UL * (pBuf[i - 1] ^ (pBuf[i - 1] >> 30)) + i); |
283 } | 283 } |
284 pContext->bHaveSeed = TRUE; | 284 pContext->bHaveSeed = TRUE; |
285 return pContext; | 285 return pContext; |
286 } | 286 } |
287 FX_DWORD FX_Random_MT_Generate(FX_LPVOID pContext) | 287 FX_DWORD FX_Random_MT_Generate(void* pContext) |
288 { | 288 { |
289 FXSYS_assert(pContext != NULL); | 289 FXSYS_assert(pContext != NULL); |
290 FX_LPMTRANDOMCONTEXT pMTC = (FX_LPMTRANDOMCONTEXT)pContext; | 290 FX_LPMTRANDOMCONTEXT pMTC = (FX_LPMTRANDOMCONTEXT)pContext; |
291 FX_DWORD v; | 291 FX_DWORD v; |
292 static FX_DWORD mag[2] = {0, MT_Matrix_A}; | 292 static FX_DWORD mag[2] = {0, MT_Matrix_A}; |
293 FX_DWORD &mti = pMTC->mti; | 293 FX_DWORD &mti = pMTC->mti; |
294 FX_LPDWORD pBuf = pMTC->mt; | 294 FX_DWORD* pBuf = pMTC->mt; |
295 if ((int)mti < 0 || mti >= MT_N) { | 295 if ((int)mti < 0 || mti >= MT_N) { |
296 if (mti > MT_N && !pMTC->bHaveSeed) { | 296 if (mti > MT_N && !pMTC->bHaveSeed) { |
297 return 0; | 297 return 0; |
298 } | 298 } |
299 FX_DWORD kk; | 299 FX_DWORD kk; |
300 for (kk = 0; kk < MT_N - MT_M; kk ++) { | 300 for (kk = 0; kk < MT_N - MT_M; kk ++) { |
301 v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask); | 301 v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask); |
302 pBuf[kk] = pBuf[kk + MT_M] ^ (v >> 1) ^ mag[v & 1]; | 302 pBuf[kk] = pBuf[kk + MT_M] ^ (v >> 1) ^ mag[v & 1]; |
303 } | 303 } |
304 for (; kk < MT_N - 1; kk ++) { | 304 for (; kk < MT_N - 1; kk ++) { |
305 v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask); | 305 v = (pBuf[kk] & MT_Upper_Mask) | (pBuf[kk + 1] & MT_Lower_Mask); |
306 pBuf[kk] = pBuf[kk + (MT_M - MT_N)] ^ (v >> 1) ^ mag[v & 1]; | 306 pBuf[kk] = pBuf[kk + (MT_M - MT_N)] ^ (v >> 1) ^ mag[v & 1]; |
307 } | 307 } |
308 v = (pBuf[MT_N - 1] & MT_Upper_Mask) | (pBuf[0] & MT_Lower_Mask); | 308 v = (pBuf[MT_N - 1] & MT_Upper_Mask) | (pBuf[0] & MT_Lower_Mask); |
309 pBuf[MT_N - 1] = pBuf[MT_M - 1] ^ (v >> 1) ^ mag[v & 1]; | 309 pBuf[MT_N - 1] = pBuf[MT_M - 1] ^ (v >> 1) ^ mag[v & 1]; |
310 mti = 0; | 310 mti = 0; |
311 } | 311 } |
312 v = pBuf[mti ++]; | 312 v = pBuf[mti ++]; |
313 v ^= (v >> 11); | 313 v ^= (v >> 11); |
314 v ^= (v << 7) & 0x9d2c5680UL; | 314 v ^= (v << 7) & 0x9d2c5680UL; |
315 v ^= (v << 15) & 0xefc60000UL; | 315 v ^= (v << 15) & 0xefc60000UL; |
316 v ^= (v >> 18); | 316 v ^= (v >> 18); |
317 return v; | 317 return v; |
318 } | 318 } |
319 void FX_Random_MT_Close(FX_LPVOID pContext) | 319 void FX_Random_MT_Close(void* pContext) |
320 { | 320 { |
321 FXSYS_assert(pContext != NULL); | 321 FXSYS_assert(pContext != NULL); |
322 FX_Free(pContext); | 322 FX_Free(pContext); |
323 } | 323 } |
324 void FX_Random_GenerateMT(FX_LPDWORD pBuffer, int32_t iCount) | 324 void FX_Random_GenerateMT(FX_DWORD* pBuffer, int32_t iCount) |
325 { | 325 { |
326 FX_DWORD dwSeed; | 326 FX_DWORD dwSeed; |
327 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 327 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
328 if (!FX_GenerateCryptoRandom(&dwSeed, 1)) { | 328 if (!FX_GenerateCryptoRandom(&dwSeed, 1)) { |
329 FX_Random_GenerateBase(&dwSeed, 1); | 329 FX_Random_GenerateBase(&dwSeed, 1); |
330 } | 330 } |
331 #else | 331 #else |
332 FX_Random_GenerateBase(&dwSeed, 1); | 332 FX_Random_GenerateBase(&dwSeed, 1); |
333 #endif | 333 #endif |
334 FX_LPVOID pContext = FX_Random_MT_Start(dwSeed); | 334 void* pContext = FX_Random_MT_Start(dwSeed); |
335 while (iCount -- > 0) { | 335 while (iCount -- > 0) { |
336 *pBuffer ++ = FX_Random_MT_Generate(pContext); | 336 *pBuffer ++ = FX_Random_MT_Generate(pContext); |
337 } | 337 } |
338 FX_Random_MT_Close(pContext); | 338 FX_Random_MT_Close(pContext); |
339 } | 339 } |
340 void FX_Random_GenerateBase(FX_LPDWORD pBuffer, int32_t iCount) | 340 void FX_Random_GenerateBase(FX_DWORD* pBuffer, int32_t iCount) |
341 { | 341 { |
342 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 342 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
343 SYSTEMTIME st1, st2; | 343 SYSTEMTIME st1, st2; |
344 ::GetSystemTime(&st1); | 344 ::GetSystemTime(&st1); |
345 do { | 345 do { |
346 ::GetSystemTime(&st2); | 346 ::GetSystemTime(&st2); |
347 } while (FXSYS_memcmp32(&st1, &st2, sizeof(SYSTEMTIME)) == 0); | 347 } while (FXSYS_memcmp32(&st1, &st2, sizeof(SYSTEMTIME)) == 0); |
348 FX_DWORD dwHash1 = FX_HashCode_String_GetA((FX_LPCSTR)&st1, sizeof(st1), TRU
E); | 348 FX_DWORD dwHash1 = FX_HashCode_String_GetA((const FX_CHAR*)&st1, sizeof(st1)
, TRUE); |
349 FX_DWORD dwHash2 = FX_HashCode_String_GetA((FX_LPCSTR)&st2, sizeof(st2), TRU
E); | 349 FX_DWORD dwHash2 = FX_HashCode_String_GetA((const FX_CHAR*)&st2, sizeof(st2)
, TRUE); |
350 ::srand((dwHash1 << 16) | (FX_DWORD)dwHash2); | 350 ::srand((dwHash1 << 16) | (FX_DWORD)dwHash2); |
351 #else | 351 #else |
352 time_t tmLast = time(NULL), tmCur; | 352 time_t tmLast = time(NULL), tmCur; |
353 while ((tmCur = time(NULL)) == tmLast); | 353 while ((tmCur = time(NULL)) == tmLast); |
354 ::srand((tmCur << 16) | (tmLast & 0xFFFF)); | 354 ::srand((tmCur << 16) | (tmLast & 0xFFFF)); |
355 #endif | 355 #endif |
356 while (iCount -- > 0) { | 356 while (iCount -- > 0) { |
357 *pBuffer ++ = (FX_DWORD)((::rand() << 16) | (::rand() & 0xFFFF)); | 357 *pBuffer ++ = (FX_DWORD)((::rand() << 16) | (::rand() & 0xFFFF)); |
358 } | 358 } |
359 } | 359 } |
360 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 360 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
361 FX_BOOL FX_GenerateCryptoRandom(FX_LPDWORD pBuffer, int32_t iCount) | 361 FX_BOOL FX_GenerateCryptoRandom(FX_DWORD* pBuffer, int32_t iCount) |
362 { | 362 { |
363 HCRYPTPROV hCP = NULL; | 363 HCRYPTPROV hCP = NULL; |
364 if (!::CryptAcquireContext(&hCP, NULL, NULL, PROV_RSA_FULL, 0) || hCP == NUL
L) { | 364 if (!::CryptAcquireContext(&hCP, NULL, NULL, PROV_RSA_FULL, 0) || hCP == NUL
L) { |
365 return FALSE; | 365 return FALSE; |
366 } | 366 } |
367 ::CryptGenRandom(hCP, iCount * sizeof(FX_DWORD), (FX_LPBYTE)pBuffer); | 367 ::CryptGenRandom(hCP, iCount * sizeof(FX_DWORD), (uint8_t*)pBuffer); |
368 ::CryptReleaseContext(hCP, 0); | 368 ::CryptReleaseContext(hCP, 0); |
369 return TRUE; | 369 return TRUE; |
370 } | 370 } |
371 #endif | 371 #endif |
372 void FX_Random_GenerateCrypto(FX_LPDWORD pBuffer, int32_t iCount) | 372 void FX_Random_GenerateCrypto(FX_DWORD* pBuffer, int32_t iCount) |
373 { | 373 { |
374 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ | 374 #if _FXM_PLATFORM_ == _FXM_PLATFORM_WINDOWS_ |
375 FX_GenerateCryptoRandom(pBuffer, iCount); | 375 FX_GenerateCryptoRandom(pBuffer, iCount); |
376 #else | 376 #else |
377 FX_Random_GenerateBase(pBuffer, iCount); | 377 FX_Random_GenerateBase(pBuffer, iCount); |
378 #endif | 378 #endif |
379 } | 379 } |
380 #ifdef __cplusplus | 380 #ifdef __cplusplus |
381 } | 381 } |
382 #endif | 382 #endif |
OLD | NEW |