Rizin
unix-like reverse engineering framework and cli tools
random-getentropy.c
Go to the documentation of this file.
1
/* Copyright libuv contributors. All rights reserved.
2
*
3
* Permission is hereby granted, free of charge, to any person obtaining a copy
4
* of this software and associated documentation files (the "Software"), to
5
* deal in the Software without restriction, including without limitation the
6
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7
* sell copies of the Software, and to permit persons to whom the Software is
8
* furnished to do so, subject to the following conditions:
9
*
10
* The above copyright notice and this permission notice shall be included in
11
* all copies or substantial portions of the Software.
12
*
13
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
19
* IN THE SOFTWARE.
20
*/
21
22
#include "
uv.h
"
23
#include "
internal.h
"
24
25
#include <stddef.h>
26
#include <dlfcn.h>
27
28
typedef
int
(*
uv__getentropy_cb
)(
void
*,
size_t
);
29
30
static
uv__getentropy_cb
uv__getentropy
;
31
static
uv_once_t
once
=
UV_ONCE_INIT
;
32
33
34
static
void
uv__random_getentropy_init
(
void
) {
35
uv__getentropy
= (
uv__getentropy_cb
) dlsym(RTLD_DEFAULT,
"getentropy"
);
36
}
37
38
39
int
uv__random_getentropy
(
void
*
buf
,
size_t
buflen
) {
40
size_t
pos
;
41
size_t
stride;
42
43
uv_once
(&
once
,
uv__random_getentropy_init
);
44
45
if
(
uv__getentropy
==
NULL
)
46
return
UV_ENOSYS;
47
48
/* getentropy() returns an error for requests > 256 bytes. */
49
for
(
pos
= 0, stride = 256;
pos
+ stride <
buflen
;
pos
+= stride)
50
if
(
uv__getentropy
((
char
*)
buf
+
pos
, stride))
51
return
UV__ERR
(errno);
52
53
if
(
uv__getentropy
((
char
*)
buf
+
pos
,
buflen
-
pos
))
54
return
UV__ERR
(errno);
55
56
return
0;
57
}
NULL
#define NULL
Definition:
cris-opc.c:27
UV__ERR
#define UV__ERR(x)
Definition:
errno.h:29
buf
voidpf void * buf
Definition:
ioapi.h:138
uv__getentropy_cb
int(* uv__getentropy_cb)(void *, size_t)
Definition:
random-getentropy.c:28
uv__getentropy
static uv__getentropy_cb uv__getentropy
Definition:
random-getentropy.c:30
uv__random_getentropy_init
static void uv__random_getentropy_init(void)
Definition:
random-getentropy.c:34
once
static uv_once_t once
Definition:
random-getentropy.c:31
uv__random_getentropy
int uv__random_getentropy(void *buf, size_t buflen)
Definition:
random-getentropy.c:39
int
static int
Definition:
sfsocketcall.h:114
size_t
int size_t
Definition:
sftypes.h:40
pos
int pos
Definition:
main.c:11
internal.h
buflen
ut64 buflen
Definition:
core.c:76
uv_once_t
pthread_once_t uv_once_t
Definition:
unix.h:135
UV_ONCE_INIT
#define UV_ONCE_INIT
Definition:
unix.h:133
uv.h
uv_once
UV_EXTERN void uv_once(uv_once_t *guard, void(*callback)(void))
Definition:
thread.c:419
subprojects
libuv-v1.40.0
src
unix
random-getentropy.c
Generated by
1.9.1