FreeBSD support
[lcore.git] / lcorernd.pas
index b7a3bf21dd35a320b04e97fa611e84d9a4a655d6..aa3d253bd7deea3fc7bdb001fe313c390376b1e6 100644 (file)
@@ -285,6 +285,13 @@ begin
 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
@@ -317,6 +324,11 @@ begin
   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