Add a fallback definition for __NR_getrandom for x86 linux
[openssl.git] / crypto / rand / rand_egd.c
index 657a3bc5aa5821a9c178c6cb61bc95c0c9cc1584..bac8d609c4ecaa3098f2a51c4d8f572dd69d1bb7 100644 (file)
@@ -1,7 +1,7 @@
 /*
- * Copyright 2000-2017 The OpenSSL Project Authors. All Rights Reserved.
+ * Copyright 2000-2018 The OpenSSL Project Authors. All Rights Reserved.
  *
- * Licensed under the OpenSSL license (the "License").  You may not use
+ * Licensed under the Apache License 2.0 (the "License").  You may not use
  * this file except in compliance with the License.  You can obtain a copy
  * in the file LICENSE in the source distribution or at
  * https://www.openssl.org/source/license.html
@@ -28,18 +28,17 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes)
 
 int RAND_egd(const char *path)
 {
-    return (-1);
+    return -1;
 }
 
 int RAND_egd_bytes(const char *path, int bytes)
 {
-    return (-1);
+    return -1;
 }
 
 # else
 
-#  include <openssl/opensslconf.h>
-#  include OPENSSL_UNISTD
+#  include <unistd.h>
 #  include <stddef.h>
 #  include <sys/types.h>
 #  include <sys/socket.h>
@@ -72,12 +71,13 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes)
     memset(&addr, 0, sizeof(addr));
     addr.sun_family = AF_UNIX;
     if (strlen(path) >= sizeof(addr.sun_path))
-        return (-1);
+        return -1;
     strcpy(addr.sun_path, path);
     i = offsetof(struct sockaddr_un, sun_path) + strlen(path);
     fd = socket(AF_UNIX, SOCK_STREAM, 0);
     if (fd == -1 || (fp = fdopen(fd, "r+")) == NULL)
-        return (-1);
+        return -1;
+    setbuf(fp, NULL);
 
     /* Try to connect */
     for ( ; ; ) {
@@ -128,7 +128,7 @@ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes)
         goto err;
     ret = numbytes;
     if (mybuffer)
-        RAND_seed(tempbuf, i);
+        RAND_add(tempbuf, i, i);
 
  err:
     if (fp != NULL)
@@ -150,7 +150,7 @@ int RAND_egd_bytes(const char *path, int bytes)
 
 int RAND_egd(const char *path)
 {
-    return (RAND_egd_bytes(path, 255));
+    return RAND_egd_bytes(path, 255);
 }
 
 # endif