• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *   Copyright (c) International Business Machines Corp., 2001-2004
3  *
4  *   This program is free software;  you can redistribute it and/or modify
5  *   it under the terms of the GNU General Public License as published by
6  *   the Free Software Foundation; either version 2 of the License, or
7  *   (at your option) any later version.
8  *
9  *   This program is distributed in the hope that it will be useful,
10  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
12  *   the GNU General Public License for more details.
13  *
14  *   You should have received a copy of the GNU General Public License
15  *   along with this program;  if not, write to the Free Software
16  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18 #ifndef _MTINT_H_
19 #define _MTINT_H_
20 
21 #include "config.h"
22 
23 #include <stdlib.h>
24 #include <sys/types.h>
25 #include <inttypes.h>
26 
27 /* A guess of how many random bytes (not bits) */
28 /* will be consumed per iteration */
29 /* This is multiplied by the iteration count */
30 /* to get the size of the array in init_random() */
31 #define AVG_ITR_RNDBTS 2
32 
33 /* Set a cap on the size of the array, note this */
34 /* is multiplied by AVG_ITR_RNDBTS */
35 #define MAX_RANDBUF_SIZE (10 * 1024)
36 
37 #define MIN_RANDBUF_SIZE 1024
38 
39 
40 typedef struct randdata {
41 	int size;
42 	uint8_t *mt; /* the array of random bits  */
43 	int mti; /* mti==N+1 means mt[N] is not initialized */
44 
45 	/* fallback random source, lrand48_r() */
46 #ifdef HAVE_LRAND48_R
47 	struct drand48_data data;
48 #endif
49 } randdata_t;
50 
51 uint32_t getrandom(randdata_t *rd, uint32_t mod);
52 uint64_t getllrandom(randdata_t *rd, uint64_t mod);
53 
54 /* pass in thread-local state, and est. number of "uses" */
55 /* pass in 0 for size if size is unknown/not important */
56 void init_random(randdata_t *state, uint32_t size);
57 void destroy_random(randdata_t *rd);
58 void randcleanup(void);
59 
60 #endif
61