1d9306527SDavid du Colombier #include <u.h> 2d9306527SDavid du Colombier #include <libc.h> 3d9306527SDavid du Colombier 4d9306527SDavid du Colombier #define MASK 0x7fffffffL 5d9306527SDavid du Colombier 6d9306527SDavid du Colombier int nrand(int n)7d9306527SDavid du Colombiernrand(int n) 8d9306527SDavid du Colombier { 9d9306527SDavid du Colombier long slop, v; 10d9306527SDavid du Colombier 11d9306527SDavid du Colombier if(n < 0) 12d9306527SDavid du Colombier return n; 13*79a6d22eSDavid du Colombier if(n == 1) 14*79a6d22eSDavid du Colombier return 0; 15*79a6d22eSDavid du Colombier /* and if n == 0, you deserve what you get */ 16d9306527SDavid du Colombier slop = MASK % n; 17d9306527SDavid du Colombier do 18d9306527SDavid du Colombier v = lrand(); 19d9306527SDavid du Colombier while(v <= slop); 20d9306527SDavid du Colombier return v % n; 21d9306527SDavid du Colombier } 22