uxgen.c 826 B

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