The /dev/urandom used here (ANDIrand, Solaris) returns 30 bytes
on a request for 32 and provides the missing 2 bytes immediately
on a subsequent read, which is not an error as far as read(2) is
concerned. I.e. the device will deliver all requested data,
possibly in small chunks on subsequent reads, and it will not
block. The patch is needed to cope with this behaviour.
Howard Chu is correct in saying that continuing to read from an
exhausted device would cause the process to hang and there is
a break statement in the patch to prevent this.
Floris Jan Sicking