class: UnixOperatingSystem
changed: #randomBytesInto:
only if USE_GETRANDOM is defined
--- a/UnixOperatingSystem.st Sat Sep 05 12:09:45 2015 +0200
+++ b/UnixOperatingSystem.st Mon Sep 07 10:06:57 2015 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
"
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
@@ -9060,18 +9062,18 @@
randomBytesInto:bufferOrInteger
"If bufferOrInteger is a String or a ByteArray,
- fill a given buffer with random bytes from the RtlGenRandom function
- and answer the buffer.
+ fill a given buffer with random bytes from the RtlGenRandom function
+ and answer the buffer.
If bufferOrInteger is a SmallInteger,
- return this many bytes (max 4) as a SmallInteger.
+ return this many bytes (max 4) as a SmallInteger.
Return nil on error (may raise PrimitiveFailure, too).
NOTE: This is a private interface, please use RandomGenerator!!"
%{
-#ifdef LINUX
+#if defined(LINUX) && defined(USE_GETRANDOM)
# include <linux/random.h>
# if defined(GRND_RANDOM) && defined(GRND_NONBLOCK)
// getrandom(2) is upported starting with linux 3.17
@@ -9080,51 +9082,51 @@
char *buffer;
if (__isSmallInteger(bufferOrInteger) && (wanted = __smallIntegerVal(bufferOrInteger) <= 4)) {
- int buf = 0;
-
- do {
- cnt = getrandom(&buf + gotSoFar, wanted - gotSoFar, 0);
- if (cnt < 0) {
- if (errno != EINTR && errno != EAGAIN)
- goto error;
- } else {
- gotSoFar = gotSoFar + cnt;
- }
- } while (gotSoFar < wanted);
- RETURN(__mkSmallInteger(buf));
+ int buf = 0;
+
+ do {
+ cnt = getrandom(&buf + gotSoFar, wanted - gotSoFar, 0);
+ if (cnt < 0) {
+ if (errno != EINTR && errno != EAGAIN)
+ goto error;
+ } else {
+ gotSoFar = gotSoFar + cnt;
+ }
+ } while (gotSoFar < wanted);
+ RETURN(__mkSmallInteger(buf));
} else if (__isByteArray(bufferOrInteger)) {
- wanted = __byteArraySize(bufferOrInteger);
- buffer = __byteArrayVal(bufferOrInteger);
+ wanted = __byteArraySize(bufferOrInteger);
+ buffer = __byteArrayVal(bufferOrInteger);
} else if (__isString(bufferOrInteger)) {
- wanted = __stringSize(bufferOrInteger);
- buffer = __stringVal(bufferOrInteger);
+ wanted = __stringSize(bufferOrInteger);
+ buffer = __stringVal(bufferOrInteger);
} else
- goto error;
+ goto error;
do {
- cnt = getrandom(buffer + gotSoFar, wanted - gotSoFar, 0);
- if (cnt < 0) {
- if (errno != EINTR && errno != EAGAIN)
- goto error;
- buffer = __isByteArray(bufferOrInteger) ?
- __byteArrayVal(bufferOrInteger) : __stringVal(bufferOrInteger);
- } else {
- gotSoFar = gotSoFar + cnt;
- }
+ cnt = getrandom(buffer + gotSoFar, wanted - gotSoFar, 0);
+ if (cnt < 0) {
+ if (errno != EINTR && errno != EAGAIN)
+ goto error;
+ buffer = __isByteArray(bufferOrInteger) ?
+ __byteArrayVal(bufferOrInteger) : __stringVal(bufferOrInteger);
+ } else {
+ gotSoFar = gotSoFar + cnt;
+ }
} while (gotSoFar < wanted);
RETURN(bufferOrInteger);
-# endif // linux
-#endif // GRND_RANDOM
+# endif // GRND_RANDOM
+#endif
error: ;
%}.
^ self primitiveFailed.
"
- self randomBytesInto:2.
- self randomBytesInto:(ByteArray new:16).
- self randomBytesInto:(String new:16).
+ self randomBytesInto:2.
+ self randomBytesInto:(ByteArray new:16).
+ self randomBytesInto:(String new:16).
"
!
@@ -9514,7 +9516,7 @@
Codeset := #'utf8-mac'.
CodesetEncoder := nil.
OperatingSystem getCodesetEncoder
- OperatingSystem encodePath:'äöü'
+ OperatingSystem encodePath:'äöü'
"
"Modified: / 23-01-2013 / 10:00:11 / Jan Vrany <jan.vrany@fit.cvut.cz>"
@@ -13027,7 +13029,7 @@
domain:#'AF_INET' type:nil protocol:nil flags:nil
self getAddressInfo:'www.exept.de' serviceName:nil
domain:#'AF_INET6' type:nil protocol:nil flags:nil
- self getAddressInfo:'www.baden-württemberg.de' serviceName:nil
+ self getAddressInfo:'www.baden-württemberg.de' serviceName:nil
domain:#'AF_INET' type:#stream protocol:nil flags:nil
"
!