master
1#include <errno.h>
2#include <unistd.h>
3#ifdef __wasilibc_use_wasip2
4#include <wasi/wasip2.h>
5#include <sysexits.h>
6
7int __wasilibc_random(void *buffer, size_t len) {
8
9 // Set up a WASI byte list to receive the results
10 wasip2_list_u8_t wasi_list;
11
12 // Get random bytes
13 random_get_random_bytes(len, &wasi_list);
14
15 // The spec for get-random-bytes specifies that wasi_list.len
16 // will be equal to len.
17 if (wasi_list.len != len)
18 _Exit(EX_OSERR);
19 else {
20 // Copy the result
21 memcpy(buffer, wasi_list.ptr, len);
22 }
23
24 // Free the WASI byte list
25 wasip2_list_u8_free(&wasi_list);
26
27 return 0;
28}
29#endif