* Patrik Torstensson (p@rxc.se)
* Sebastien Pouliot (sebastien@ximian.com)
*
- * (C) 2001 Ximian, Inc.
- * Copyright (C) 2004-2005 Novell, Inc (http://www.novell.com)
+ * Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
+ * Copyright 2004-2009 Novell, Inc (http://www.novell.com)
*/
#include <config.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
+#ifdef HAVE_UNISTD_H
#include <unistd.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
#include <mono/metadata/object.h>
#include <mono/metadata/rand.h>
return NULL;
get_entropy_from_server (socket_path, mono_array_addr (arry, guchar, 0), mono_array_length (arry));
return (gpointer) -1;
- }
- else {
+ } else {
/* Read until the buffer is filled. This may block if using NAME_DEV_RANDOM. */
gint count = 0;
gint err;
do {
err = read (file, buf + count, len - count);
+ if (err < 0) {
+ if (errno == EINTR)
+ continue;
+ break;
+ }
count += err;
- } while (err >= 0 && count < len);
+ } while (count < len);
if (err < 0) {
g_warning("Entropy error! Error in read (%s).", strerror (errno));