MCPcopy Create free account
hub / github.com/boostorg/filesystem / fill_random_getrandom

Function fill_random_getrandom

src/unique_path.cpp:174–204  ·  view source on GitHub ↗

Fills buffer with cryptographically random data obtained from getrandom()

Source from the content-addressed store, hash-verified

172
173//! Fills buffer with cryptographically random data obtained from getrandom()
174int fill_random_getrandom(void* buf, std::size_t len)
175{
176 std::size_t bytes_read = 0u;
177 while (bytes_read < len)
178 {
179#if defined(BOOST_FILESYSTEM_HAS_GETRANDOM)
180 ssize_t n = ::getrandom(buf, len - bytes_read, 0u);
181#else
182 ssize_t n = ::syscall(SYS_getrandom, buf, len - bytes_read, 0u);
183#endif
184 if (BOOST_UNLIKELY(n < 0))
185 {
186 const int err = errno;
187 if (err == EINTR)
188 continue;
189
190 if (err == ENOSYS && bytes_read == 0u)
191 {
192 filesystem::detail::atomic_store_relaxed(fill_random, &fill_random_dev_random);
193 return fill_random_dev_random(buf, len);
194 }
195
196 return err;
197 }
198
199 bytes_read += n;
200 buf = static_cast< char* >(buf) + n;
201 }
202
203 return 0;
204}
205
206#endif // defined(BOOST_FILESYSTEM_HAS_GETRANDOM) || defined(BOOST_FILESYSTEM_HAS_GETRANDOM_SYSCALL)
207

Callers

nothing calls this directly

Calls 2

atomic_store_relaxedFunction · 0.85
fill_random_dev_randomFunction · 0.85

Tested by

no test coverage detected