]> asedeno.scripts.mit.edu Git - PuTTY.git/blob - unix/uxgen.c
first pass
[PuTTY.git] / unix / uxgen.c
1 /*
2  * uxgen.c: Unix implementation of get_heavy_noise() from cmdgen.c.
3  */
4
5 #include <stdio.h>
6 #include <errno.h>
7
8 #include <fcntl.h>
9 #include <unistd.h>
10
11 #include "putty.h"
12
13 char *get_random_data(int len, const char *device)
14 {
15     char *buf = snewn(len, char);
16     int fd;
17     int ngot, ret;
18
19     if (!device)
20         device = "/dev/random";
21
22     fd = open(device, O_RDONLY);
23     if (fd < 0) {
24         sfree(buf);
25         fprintf(stderr, "puttygen: %s: open: %s\n",
26                 device, strerror(errno));
27         return NULL;
28     }
29
30     ngot = 0;
31     while (ngot < len) {
32         ret = read(fd, buf+ngot, len-ngot);
33         if (ret < 0) {
34             close(fd);
35             sfree(buf);
36             fprintf(stderr, "puttygen: %s: read: %s\n",
37                     device, strerror(errno));
38             return NULL;
39         }
40         ngot += ret;
41     }
42
43     close(fd);
44
45     return buf;
46 }