summaryrefslogtreecommitdiff
path: root/random/random-glib.c
blob: b9ec178f124a3fb7a0549ce59da30561a2dede5d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

#include "random-glib.h"

static void
rng_seed (
  G_GNUC_UNUSED
  NiceRNG *rng, guint32 seed)
{
  g_random_set_seed (seed);
}

static void
rng_generate_bytes (
  G_GNUC_UNUSED
  NiceRNG *rng,
  guint len,
  gchar *buf)
{
  guint i;

  for (i = 0; i < len; i++)
    buf[i] = g_random_int_range (0, 256);
}

static guint
rng_generate_int (
  G_GNUC_UNUSED
  NiceRNG *rng,
  guint low,
  guint high)
{
  return g_random_int_range (low, high);
}

static void
rng_free (NiceRNG *rng)
{
  g_slice_free (NiceRNG, rng);
}

NiceRNG *
nice_rng_glib_new (void)
{
  NiceRNG *ret;

  ret = g_slice_new0 (NiceRNG);
  ret->seed = rng_seed;
  ret->generate_bytes = rng_generate_bytes;
  ret->generate_int = rng_generate_int;
  ret->free = rng_free;
  return ret;
}

NiceRNG *
nice_rng_glib_new_predictable (void)
{
  NiceRNG *rng;

  rng = nice_rng_glib_new ();
  rng->seed (rng, 0);
  return rng;
}