浏览代码

Fix getrandom for system with libc not including errno or systems

not supporting ENOSYS in the first place.

Fixes GH-347
Nils Maier 10 年之前
父节点
当前提交
ee63dff225
共有 1 个文件被更改,包括 11 次插入1 次删除
  1. 11 1
      src/SimpleRandomizer.cc

+ 11 - 1
src/SimpleRandomizer.cc

@@ -46,6 +46,8 @@
 #include "fmt.h"
 
 #ifdef HAVE_GETRANDOM_INTERFACE
+#  include <errno.h>
+#  include <linux/errno.h>
 #  include "getrandom_linux.h"
 #endif
 
@@ -95,7 +97,15 @@ void SimpleRandomizer::getRandomBytes(unsigned char* buf, size_t len)
   static bool have_random_support = true;
   if (have_random_support) {
     auto rv = getrandom_linux(buf, len);
-    if (rv != -1 || errno != ENOSYS) {
+    if (rv != -1
+#ifdef ENOSYS
+        /* If the system does not know ENOSYS at this point, just leave the
+         * check out. If the call failed, we'll not take this branch at all
+         * and disable support below.
+         */
+        || errno != ENOSYS
+#endif
+        ) {
       if (rv < -1) {
         A2_LOG_ERROR(fmt("Failed to produce randomness: %d", errno));
       }