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,16 +150,13 @@ version (linux)
} }
} }
version (X86_64) @nogc @system unittest
{ {
private unittest auto entropy = defaultAllocator.make!Entropy();
{ ubyte[blockSize] output;
auto entropy = defaultAllocator.make!Entropy(); output = entropy.random;
ubyte[blockSize] output;
output = entropy.random;
defaultAllocator.dispose(entropy); defaultAllocator.dispose(entropy);
}
} }
} }