diff options
author | Igor Sysoev <igor@sysoev.ru> | 2017-01-17 20:00:00 +0300 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2017-01-17 20:00:00 +0300 |
commit | 16cbf3c076a0aca6d47adaf3f719493674cf2363 (patch) | |
tree | e6530480020f62a2bdbf249988ec3e2a751d3927 /src/nxt_random.h | |
download | unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.gz unit-16cbf3c076a0aca6d47adaf3f719493674cf2363.tar.bz2 |
Initial version.
Diffstat (limited to 'src/nxt_random.h')
-rw-r--r-- | src/nxt_random.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/nxt_random.h b/src/nxt_random.h new file mode 100644 index 00000000..bfc4e3b3 --- /dev/null +++ b/src/nxt_random.h @@ -0,0 +1,47 @@ + +/* + * Copyright (C) Igor Sysoev + * Copyright (C) NGINX, Inc. + */ + +#ifndef _NXT_RANDOM_H_INCLUDED_ +#define _NXT_RANDOM_H_INCLUDED_ + + +#if (NXT_HAVE_ARC4RANDOM) + +/* + * arc4random() has been introduced in OpenBSD 2.1 and then was ported + * to FreeBSD 2.2.6, NetBSD 2.0, MacOSX and SmartOS. + * + * arc4random() automatically initializes itself in the first call and + * then reinitializes itself in the first call in every forked processes. + */ + +typedef void *nxt_random_t; + + +#define nxt_random_init(r) +#define nxt_random(r) arc4random() + +#else + +typedef struct { + uint8_t i; + uint8_t j; + uint8_t s[256]; + int32_t count; +} nxt_random_t; + + +void nxt_random_init(nxt_random_t *r); +uint32_t nxt_random(nxt_random_t *r); + +#if (NXT_LIB_UNIT_TEST) +nxt_int_t nxt_random_unit_test(nxt_thread_t *thr); +#endif + +#endif + + +#endif /* _NXT_RANDOM_H_INCLUDED_ */ |