Codebase list massdns / c812a17c-e32f-4f7f-b697-2d4ef530de8f/main random.h
c812a17c-e32f-4f7f-b697-2d4ef530de8f/main

Tree @c812a17c-e32f-4f7f-b697-2d4ef530de8f/main (Download .tar.gz)

random.h @c812a17c-e32f-4f7f-b697-2d4ef530de8f/mainraw · history · blame

#ifndef MASSRESOLVER_RANDOM_H
#define MASSRESOLVER_RANDOM_H

#include <stdio.h>
#include <stdbool.h>

static FILE *randomness;

bool urandom_init()
{
    randomness = fopen("/dev/urandom", "r");
    return randomness != NULL;
}

void urandom_get(void *dst, size_t len)
{
    size_t read = 0;
    while(read < len)
    {
        read += fread(dst, len - read, 1, randomness);
    }
}

size_t urandom_size_t()
{
    size_t result;
    urandom_get(&result, sizeof(result));
    return result;
}

int urandom_close()
{
    if(!randomness)
    {
        return 0;
    }
    return fclose(randomness);
}

#endif //MASSRESOLVER_RANDOM_H