Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
z
Classes
Class List
Class Hierarchy
Class Members
All
:
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
w
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
Properties
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Related Functions
:
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
z
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
grpc
third_party
libuv
src
unix
random-getrandom.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
#ifdef __linux__
26
27
#include "
linux-syscalls.h
"
28
29
#define uv__random_getrandom_init() 0
30
31
#else
/* !__linux__ */
32
33
#include <stddef.h>
34
#include <dlfcn.h>
35
36
typedef
ssize_t
(*
uv__getrandom_cb
)(
void
*, size_t, unsigned);
37
38
static
uv__getrandom_cb
uv__getrandom
;
39
static
uv_once_t
once
=
UV_ONCE_INIT
;
40
41
static
void
uv__random_getrandom_init_once
(
void
) {
42
uv__getrandom
= (
uv__getrandom_cb
) dlsym(RTLD_DEFAULT,
"getrandom"
);
43
}
44
45
static
int
uv__random_getrandom_init
(
void
) {
46
uv_once
(&
once
,
uv__random_getrandom_init_once
);
47
48
if
(
uv__getrandom
== NULL)
49
return
UV_ENOSYS;
50
51
return
0;
52
}
53
54
#endif
/* !__linux__ */
55
56
int
uv__random_getrandom
(
void
*
buf
,
size_t
buflen) {
57
ssize_t
n
;
58
size_t
pos
;
59
int
rc;
60
61
rc =
uv__random_getrandom_init
();
62
if
(rc != 0)
63
return
rc;
64
65
for
(
pos
= 0;
pos
!= buflen;
pos
+=
n
) {
66
do
{
67
n
= buflen -
pos
;
68
69
/* Most getrandom() implementations promise that reads <= 256 bytes
70
* will always succeed and won't be interrupted by signals.
71
* It's therefore useful to split it up in smaller reads because
72
* one big read may, in theory, continuously fail with EINTR.
73
*/
74
if
(
n
> 256)
75
n
= 256;
76
77
n
=
uv__getrandom
((
char
*)
buf
+
pos
,
n
, 0);
78
}
while
(
n
== -1 && errno == EINTR);
79
80
if
(
n
== -1)
81
return
UV__ERR
(errno);
82
83
if
(
n
== 0)
84
return
UV_EIO;
85
}
86
87
return
0;
88
}
pos
int pos
Definition:
libuv/docs/code/tty-gravity/main.c:11
buf
voidpf void * buf
Definition:
bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
uv__random_getrandom_init
static int uv__random_getrandom_init(void)
Definition:
random-getrandom.c:45
ssize_t
intptr_t ssize_t
Definition:
win.h:27
uv__random_getrandom_init_once
static void uv__random_getrandom_init_once(void)
Definition:
random-getrandom.c:41
uv_once
UV_EXTERN void uv_once(uv_once_t *guard, void(*callback)(void))
Definition:
libuv/src/unix/thread.c:418
uv_once_t
pthread_once_t uv_once_t
Definition:
unix.h:133
UV__ERR
#define UV__ERR(x)
Definition:
errno.h:29
n
int n
Definition:
abseil-cpp/absl/container/btree_test.cc:1080
linux-syscalls.h
uv__random_getrandom
int uv__random_getrandom(void *buf, size_t buflen)
Definition:
random-getrandom.c:56
uv.h
internal.h
once
static uv_once_t once
Definition:
random-getrandom.c:39
UV_ONCE_INIT
#define UV_ONCE_INIT
Definition:
unix.h:131
uv__getrandom_cb
ssize_t(* uv__getrandom_cb)(void *, size_t, unsigned)
Definition:
random-getrandom.c:36
uv__getrandom
static uv__getrandom_cb uv__getrandom
Definition:
random-getrandom.c:38
grpc
Author(s):
autogenerated on Thu Mar 13 2025 03:00:59