[gmime: 7/8] Fixed test-streams to use /dev/urandom instead of rand()
- From: Jeffrey Stedfast <fejj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gmime: 7/8] Fixed test-streams to use /dev/urandom instead of rand()
- Date: Wed, 12 Apr 2017 19:34:05 +0000 (UTC)
commit a4a30495f406c2a66db6b73e1ea8bbea34f794c9
Author: Jeffrey Stedfast <fejj gnome org>
Date: Wed Apr 12 10:28:59 2017 -0400
Fixed test-streams to use /dev/urandom instead of rand()
tests/test-streams.c | 32 +++++++++++++++++++++++---------
1 files changed, 23 insertions(+), 9 deletions(-)
---
diff --git a/tests/test-streams.c b/tests/test-streams.c
index ebab59f..279a71d 100644
--- a/tests/test-streams.c
+++ b/tests/test-streams.c
@@ -469,21 +469,30 @@ test_streams (GDir *dir, const char *datadir, const char *filename)
static size_t
-gen_random_stream (GMimeStream *stream)
+gen_random_stream (int randfd, GMimeStream *stream)
{
size_t nwritten, buflen, total = 0, size, i;
+ unsigned char r;
char buf[4096];
ssize_t n;
+ do {
+ n = read (randfd, &r, 1);
+ } while (n == -1 && errno == EINTR);
+
/* read between 4k and 14k bytes */
- size = 4096 + (size_t) (10240.0 * (rand () / (RAND_MAX + 1.0)));
+ size = 4096 + (size_t) (10240.0 * (r / 256.0));
v(fprintf (stdout, "Generating %" G_GSIZE_FORMAT " bytes of random data... ", size));
v(fflush (stdout));
while (total < size) {
buflen = size - total > sizeof (buf) ? sizeof (buf) : size - total;
- for (i = 0; i < buflen; i++)
- buf[i] = (char) (255 * (rand () / (RAND_MAX + 1.0)));
+
+ nwritten = 0;
+ do {
+ if ((n = read (randfd, buf + nwritten, buflen - nwritten)) > 0)
+ nwritten += n;
+ } while (nwritten < buflen);
nwritten = 0;
do {
@@ -501,7 +510,7 @@ gen_random_stream (GMimeStream *stream)
g_mime_stream_reset (stream);
v(fputs ("done\n", stdout));
-
+
return size;
}
@@ -511,9 +520,10 @@ gen_test_data (const char *datadir, char **stream_name)
GMimeStream *istream, *ostream, *stream;
char input[256], output[256], *name, *p;
gint64 start, end, len, size;
- int fd, i;
+ int randfd, fd, i;
- srand (time (NULL));
+ if ((randfd = open ("/dev/urandom", O_RDONLY)) == -1)
+ return -1;
name = g_stpcpy (input, datadir);
*name++ = G_DIR_SEPARATOR;
@@ -529,8 +539,10 @@ gen_test_data (const char *datadir, char **stream_name)
*name++ = G_DIR_SEPARATOR;
strcpy (name, "streamXXXXXX");
- if ((fd = g_mkstemp (input)) == -1)
+ if ((fd = g_mkstemp (input)) == -1) {
+ close (randfd);
return -1;
+ }
*stream_name = g_strdup (name);
@@ -539,7 +551,7 @@ gen_test_data (const char *datadir, char **stream_name)
*p++ = '_';
istream = g_mime_stream_fs_new (fd);
- size = gen_random_stream (istream);
+ size = gen_random_stream (randfd, istream);
for (i = 0; i < 64; i++) {
retry:
@@ -564,6 +576,8 @@ gen_test_data (const char *datadir, char **stream_name)
g_object_unref (stream);
}
+ close (randfd);
+
return 0;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]