Use correct getrandom linux syscall on non-x86_64

This commit is contained in:
Nathan Sashihara 2018-02-19 07:32:49 -05:00
parent bd2b88f16e
commit 7ee4af9e79
2 changed files with 13 additions and 10 deletions

View File

@ -9,6 +9,10 @@
"targetType": "library", "targetType": "library",
"dependencies-linux": {
"mir-linux-kernel": "~>1.0.0",
},
"configurations": [ "configurations": [
{ {
"name": "library", "name": "library",

View File

@ -96,7 +96,8 @@ abstract class EntropySource
version (linux) version (linux)
{ {
extern (C) long syscall(long number, ...) nothrow @system @nogc; import core.stdc.config : c_long;
extern (C) c_long syscall(c_long number, ...) nothrow @system @nogc;
/** /**
* Uses getrandom system call. * Uses getrandom system call.
@ -137,7 +138,8 @@ version (linux)
do do
{ {
// int getrandom(void *buf, size_t buflen, unsigned int flags); // int getrandom(void *buf, size_t buflen, unsigned int flags);
auto length = syscall(318, output.ptr, output.length, 0); import mir.linux._asm.unistd : NR_getrandom;
auto length = syscall(NR_getrandom, output.ptr, output.length, 0);
Nullable!ubyte ret; Nullable!ubyte ret;
if (length >= 0) if (length >= 0)
@ -148,9 +150,7 @@ version (linux)
} }
} }
version (X86_64) @nogc @system unittest
{
private unittest
{ {
auto entropy = defaultAllocator.make!Entropy(); auto entropy = defaultAllocator.make!Entropy();
ubyte[blockSize] output; ubyte[blockSize] output;
@ -159,7 +159,6 @@ version (linux)
defaultAllocator.dispose(entropy); defaultAllocator.dispose(entropy);
} }
} }
}
/** /**
* Pseudorandom number generator. * Pseudorandom number generator.