class: UnixOperatingSystem
authorStefan Vogel <sv@exept.de>
Mon, 07 Sep 2015 10:06:57 +0200
changeset 18736 b8bebf3a4665
parent 18735 681996ef7e51
child 18738 66e019ad4d30
child 18741 48d1b0bee8a0
class: UnixOperatingSystem changed: #randomBytesInto: only if USE_GETRANDOM is defined
UnixOperatingSystem.st
--- 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
     "
 !