diff --git a/src/pipewire/impl-core.c b/src/pipewire/impl-core.c index a0b70cd86..0d46d4627 100644 --- a/src/pipewire/impl-core.c +++ b/src/pipewire/impl-core.c @@ -25,34 +25,12 @@ #include "config.h" #include -#include -#include #ifndef ENODATA #define ENODATA 9919 #endif -#if HAVE_SYS_RANDOM_H -#include -#endif -static ssize_t pw_getrandom(void *buf, size_t buflen, unsigned int flags) { - ssize_t bytes; - -#ifdef HAVE_GETRANDOM - bytes = getrandom(buf, buflen ,flags); - if (!(bytes == -1 && errno == ENOSYS)) - return bytes; -#endif - - int fd = open("/dev/urandom", O_CLOEXEC); - if (fd < 0) - return -1; - bytes = read(fd, buf, buflen); - close(fd); - return bytes; -} - -#include #include +#include #include "pipewire/impl.h" #include "pipewire/private.h" diff --git a/src/pipewire/utils.c b/src/pipewire/utils.c index aad3289c8..e69ea2147 100644 --- a/src/pipewire/utils.c +++ b/src/pipewire/utils.c @@ -22,6 +22,14 @@ * DEALINGS IN THE SOFTWARE. */ +#include "config.h" + +#include +#include +#include +#if HAVE_SYS_RANDOM_H +#include +#endif #include #include @@ -133,3 +141,30 @@ char *pw_strip(char *str, const char *whitespace) return str; } + +/** Fill a buffer with random data + * \param buf a buffer to fill + * \param buflen the number of bytes to fill + * \param flags optional flags + * \return the number of bytes filled + * + * Fill \a buf with \a buflen random bytes. + */ +SPA_EXPORT +ssize_t pw_getrandom(void *buf, size_t buflen, unsigned int flags) +{ + ssize_t bytes; + +#ifdef HAVE_GETRANDOM + bytes = getrandom(buf, buflen, flags); + if (!(bytes == -1 && errno == ENOSYS)) + return bytes; +#endif + + int fd = open("/dev/urandom", O_CLOEXEC); + if (fd < 0) + return -1; + bytes = read(fd, buf, buflen); + close(fd); + return bytes; +} diff --git a/src/pipewire/utils.h b/src/pipewire/utils.h index f8f1495f0..351216eb3 100644 --- a/src/pipewire/utils.h +++ b/src/pipewire/utils.h @@ -85,6 +85,7 @@ pw_strip(char *str, const char *whitespace); }) #endif +ssize_t pw_getrandom(void *buf, size_t buflen, unsigned int flags); /** * \} */