1 /* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
4 #include <internal/tls.h>
12 PTHREADDATA ThreadData
= GetThreadData();
14 ThreadData
->tnext
= ThreadData
->tnext
* 0x5deece66dLL
+ 2531011;
15 return (int)((ThreadData
->tnext
>> 16) & RAND_MAX
);
22 srand(unsigned int seed
)
24 PTHREADDATA ThreadData
= GetThreadData();
26 ThreadData
->tnext
= (ULONGLONG
)seed
;
29 /*********************************************************************
32 int CDECL
rand_s(unsigned int *pval
)
34 BOOLEAN (WINAPI
*pSystemFunction036
)(PVOID
, ULONG
); // RtlGenRandom
35 HINSTANCE hadvapi32
= LoadLibraryA("advapi32.dll");
36 pSystemFunction036
= (void*)GetProcAddress(hadvapi32
, "SystemFunction036");
38 if (!pval
|| (pSystemFunction036
&& !pSystemFunction036(pval
, sizeof(*pval
))))
40 _invalid_parameter(NULL
,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__
),__LINE__
, 0);
45 if(hadvapi32
) FreeLibrary(hadvapi32
);