diff options
Diffstat (limited to 'randgen_unix.c')
| -rw-r--r-- | randgen_unix.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/randgen_unix.c b/randgen_unix.c new file mode 100644 index 0000000..f7d12bb --- /dev/null +++ b/randgen_unix.c @@ -0,0 +1,42 @@ +#include "randgen.h" + +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <assert.h> + +struct randgen *randgen_open(const char *device) +{ + const char *filename = "/dev/urandom"; + FILE *fp; + + if (device) + filename = device; + + if ((fp = fopen(filename, "r")) == NULL) + { + fprintf(stderr, "failed to open random generator (%s): %s\n", filename, strerror(errno)); + return NULL; + } + + return (struct randgen *) fp; +} + +int randgen_close(struct randgen *randgen) +{ + assert(randgen != NULL); + fclose((FILE *) randgen); + return 0; +} + +int randgen_generate(struct randgen *randgen, void *buf, size_t size) +{ + assert(randgen != NULL); + assert(buf != NULL); + assert(size > 0); + + if (fread(buf, 1, size, (FILE *) randgen) != size) + return -1; + + return 0; +} |
