end;\r
\r
\r
+{$ifdef bsd}\r
+function arc4random: cardinal; cdecl; external 'c' name 'arc4random';\r
+procedure arc4random_buf(buf: Pointer; nbytes: SizeUInt); cdecl; external 'c' name 'arc4random_buf';\r
+function arc4random_uniform(upper_bound: cardinal): cardinal; cdecl; external 'c' name 'arc4random_uniform';\r
+{$endif}\r
+\r
+\r
{$ifdef linux}\r
{$ifdef i386}\r
const sys_getrandom = 355;\r
a := do_syscall(sys_getrandom,tsysparam(@l.devrnd),sizeof(l.devrnd),0);\r
{$endif}\r
\r
+ {$ifdef bsd}\r
+ a := sizeof(l.devrnd);\r
+ arc4random_buf(@l.devrnd, a);\r
+ {$endif}\r
+\r
if (a < sizeof(l.devrnd)) then begin\r
{if syscall misses or fails, fall back to /dev/urandom}\r
assignfile(f,'/dev/urandom');\r