RandomDevice.cpp 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "RandomDevice.h"
  2. #include "Limits.h"
  3. #include <AK/StdLibExtras.h>
  4. RandomDevice::RandomDevice()
  5. : CharacterDevice(1, 8)
  6. {
  7. }
  8. RandomDevice::~RandomDevice()
  9. {
  10. }
  11. // Simple rand() and srand() borrowed from the POSIX standard:
  12. static unsigned long next = 1;
  13. #define MY_RAND_MAX 32767
  14. static int myrand()
  15. {
  16. next = next * 1103515245 + 12345;
  17. return((unsigned)(next/((MY_RAND_MAX + 1) * 2)) % (MY_RAND_MAX + 1));
  18. }
  19. #if 0
  20. static void mysrand(unsigned seed)
  21. {
  22. next = seed;
  23. }
  24. #endif
  25. bool RandomDevice::has_data_available_for_reading(Process&) const
  26. {
  27. return true;
  28. }
  29. ssize_t RandomDevice::read(byte* buffer, size_t bufferSize)
  30. {
  31. const int range = 'z' - 'a';
  32. ssize_t nread = min(bufferSize, GoodBufferSize);
  33. for (ssize_t i = 0; i < nread; ++i) {
  34. dword r = myrand() % range;
  35. buffer[i] = 'a' + r;
  36. }
  37. return nread;
  38. }
  39. ssize_t RandomDevice::write(const byte*, size_t bufferSize)
  40. {
  41. // FIXME: Use input for entropy? I guess that could be a neat feature?
  42. return min(GoodBufferSize, bufferSize);
  43. }