* Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
* Copyright 2004-2009 Novell, Inc (http://www.novell.com)
* Copyright 2001 Xamarin, Inc (http://www.novell.com)
+ * Licensed under the MIT license. See LICENSE file in the project root for full license information.
*/
/* exception will be thrown in managed code */
CryptReleaseContext (provider, 0);
*handle = 0;
- mono_error_set_generic_error (error, "System", "ExecutionEngineException", "Failed to gen random bytes (%d)", GetLastError ());
+ mono_error_set_execution_engine (error, "Failed to gen random bytes (%d)", GetLastError ());
return FALSE;
}
}
get_entropy_from_egd (const char *path, guchar *buffer, int buffer_size, MonoError *error)
{
struct sockaddr_un egd_addr;
- gint file;
+ gint socket_fd;
gint ret;
guint offset = 0;
int err = 0;
mono_error_init (error);
- file = socket (PF_UNIX, SOCK_STREAM, 0);
- if (file < 0) {
+ socket_fd = socket (PF_UNIX, SOCK_STREAM, 0);
+ if (socket_fd < 0) {
ret = -1;
err = errno;
} else {
egd_addr.sun_family = AF_UNIX;
strncpy (egd_addr.sun_path, path, sizeof (egd_addr.sun_path) - 1);
egd_addr.sun_path [sizeof (egd_addr.sun_path) - 1] = '\0';
- ret = connect (file, (struct sockaddr*) &egd_addr, sizeof (egd_addr));
+ ret = connect (socket_fd, (struct sockaddr*) &egd_addr, sizeof (egd_addr));
err = errno;
}
if (ret == -1) {
- if (file >= 0)
- close (file);
+ if (socket_fd >= 0)
+ close (socket_fd);
g_warning ("Entropy problem! Can't create or connect to egd socket %s", path);
- mono_error_set_generic_error (error, "System", "ExecutionEngineException", "Failed to open egd socket %s: %s", path, strerror (err));
+ mono_error_set_execution_engine (error, "Failed to open egd socket %s: %s", path, strerror (err));
return;
}
request [0] = 2;
request [1] = buffer_size < 255 ? buffer_size : 255;
while (count < 2) {
- int sent = write (file, request + count, 2 - count);
+ int sent = write (socket_fd, request + count, 2 - count);
err = errno;
if (sent >= 0) {
count += sent;
} else if (err == EINTR) {
continue;
} else {
- close (file);
+ close (socket_fd);
g_warning ("Send egd request failed %d", err);
- mono_error_set_generic_error (error, "System", "ExecutionEngineException", "Failed to send request to egd socket: %s", strerror (err));
+ mono_error_set_execution_engine (error, "Failed to send request to egd socket: %s", strerror (err));
return;
}
}
count = 0;
while (count != request [1]) {
int received;
- received = read (file, buffer + offset, request [1] - count);
+ received = read (socket_fd, buffer + offset, request [1] - count);
err = errno;
if (received > 0) {
count += received;
} else if (received < 0 && err == EINTR) {
continue;
} else {
- close (file);
+ close (socket_fd);
g_warning ("Receive egd request failed %d", err);
- mono_error_set_generic_error (error, "System", "ExecutionEngineException", "Failed to get response from egd socket: %s", strerror(err));
+ mono_error_set_execution_engine (error, "Failed to get response from egd socket: %s", strerror(err));
return;
}
}
buffer_size -= request [1];
}
- close (file);
+ close (socket_fd);
}
gboolean
continue;
g_warning("Entropy error! Error in read (%s).", strerror (errno));
/* exception will be thrown in managed code */
- mono_error_set_generic_error (error, "System", "ExecutionEngineException", "Entropy error! Error in read (%s).", strerror (errno));
+ mono_error_set_execution_engine (error, "Entropy error! Error in read (%s).", strerror (errno));
return FALSE;
}
count += err;