/* Get data as much as we can get into the buffer */
for (i = 0; i < sizeof(buf); i++) {
c = fgetc(fd);
- if (c == EOF) {
- if (!i)
- return;
+ if (c == EOF)
break;
- }
buf[i] = c;
}
pclose(fd);
- /* Add the buffer into random pool */
- silc_rng_add_noise(rng, buf, i);
- memset(buf, 0, sizeof(buf));
+ if (i != 0) {
+ /* Add the buffer into random pool */
+ silc_rng_add_noise(rng, buf, i);
+ memset(buf, 0, sizeof(buf));
+ }
#endif
}
if (rng->fd_devurandom == -1) {
rng->fd_devurandom = open("/dev/urandom", O_RDONLY);
- if (rng < 0)
+ if (rng->fd_devurandom < 0)
return silc_rng_get_byte(rng);
fcntl(rng->fd_devurandom, F_SETFL, O_NONBLOCK);
}
SilcUInt32 silc_rng_get_rn32(SilcRng rng)
{
unsigned char rn[4];
- SilcUInt16 num;
+ SilcUInt32 num;
rn[0] = silc_rng_get_byte(rng);
rn[1] = silc_rng_get_byte(rng);