- silc_rng_xor(rng, (ptime.tms_utime + ptime.tms_stime), 9);
- silc_rng_xor(rng, (ptime.tms_stime + ptime.tms_cutime), 10);
- silc_rng_xor(rng, (ptime.tms_utime + ptime.tms_stime), 11);
- silc_rng_xor(rng, (ptime.tms_cutime ^ ptime.tms_stime), 12);
- silc_rng_xor(rng, (ptime.tms_cutime ^ ptime.tms_cstime), 13);
- silc_rng_xor(rng, (ptime.tms_utime ^ ptime.tms_stime), 14);
- silc_rng_xor(rng, (ptime.tms_stime ^ ptime.tms_cutime), 15);
- silc_rng_xor(rng, (ptime.tms_cutime + ptime.tms_stime), 16);
- silc_rng_xor(rng, (ptime.tms_stime << 8), 17);
- silc_rng_xor(rng, clock() << 4, 18);
- silc_rng_xor(rng, getpgid(getpid() << 8), 19);
- silc_rng_xor(rng, getpgrp(), 20);
- silc_rng_xor(rng, getsid(getpid() << 16), 21);
- silc_rng_xor(rng, times(&ptime), 22);
- silc_rng_xor(rng, ptime.tms_utime, 23);
- silc_rng_xor(rng, getpgrp(), 24);
+ silc_rng_xor(rng, (ptime.tms_utime + ptime.tms_stime), pos++);
+ silc_rng_xor(rng, (ptime.tms_stime + ptime.tms_cutime), pos++);
+ silc_rng_xor(rng, (ptime.tms_utime + ptime.tms_stime), pos++);
+ silc_rng_xor(rng, (ptime.tms_cutime ^ ptime.tms_stime), pos++);
+ silc_rng_xor(rng, (ptime.tms_cutime ^ ptime.tms_cstime), pos++);
+ silc_rng_xor(rng, (ptime.tms_utime ^ ptime.tms_stime), pos++);
+ silc_rng_xor(rng, (ptime.tms_stime ^ ptime.tms_cutime), pos++);
+ silc_rng_xor(rng, (ptime.tms_cutime + ptime.tms_stime), pos++);
+ silc_rng_xor(rng, (ptime.tms_stime << 8), pos++);
+#endif
+ silc_rng_xor(rng, clock() << 4, pos++);
+#ifndef SILC_WIN32
+#ifdef HAVE_GETPGID
+ silc_rng_xor(rng, getpgid(getpid()) << 8, pos++);
+#endif
+#ifdef HAVE_GETPGRP
+ silc_rng_xor(rng, getpgrp(), pos++);
+#endif
+#ifdef HAVE_SETSID
+ silc_rng_xor(rng, getsid(getpid()) << 16, pos++);
+#endif
+ silc_rng_xor(rng, times(&ptime), pos++);
+ silc_rng_xor(rng, ptime.tms_utime, pos++);
+#ifdef HAVE_GETPGRP
+ silc_rng_xor(rng, getpgrp(), pos++);
+#endif
+#endif
+#ifdef HAVE_GETRUSAGE
+ getrusage(RUSAGE_SELF, &r);
+ silc_rng_xor(rng, (r.ru_utime.tv_sec + r.ru_utime.tv_usec), pos++);
+ silc_rng_xor(rng, (r.ru_utime.tv_sec ^ r.ru_utime.tv_usec), pos++);
+ silc_rng_xor(rng, (r.ru_stime.tv_sec + r.ru_stime.tv_usec), pos++);
+ silc_rng_xor(rng, (r.ru_stime.tv_sec ^ r.ru_stime.tv_usec), pos++);
+ silc_rng_xor(rng, (r.ru_maxrss + r.ru_ixrss), pos++);
+ silc_rng_xor(rng, (r.ru_maxrss ^ r.ru_ixrss), pos++);
+ silc_rng_xor(rng, (r.ru_idrss + r.ru_idrss), pos++);
+ silc_rng_xor(rng, (r.ru_idrss ^ r.ru_idrss), pos++);
+ silc_rng_xor(rng, (r.ru_idrss << 16), pos++);
+ silc_rng_xor(rng, (r.ru_minflt + r.ru_majflt), pos++);
+ silc_rng_xor(rng, (r.ru_minflt ^ r.ru_majflt), pos++);
+ silc_rng_xor(rng, (r.ru_nswap + r.ru_oublock + r.ru_inblock), pos++);
+ silc_rng_xor(rng, (r.ru_nswap << 8), pos++);
+ silc_rng_xor(rng, (r.ru_inblock + r.ru_oublock), pos++);
+ silc_rng_xor(rng, (r.ru_inblock ^ r.ru_oublock), pos++);
+ silc_rng_xor(rng, (r.ru_msgsnd ^ r.ru_msgrcv), pos++);
+ silc_rng_xor(rng, (r.ru_nsignals + r.ru_msgsnd + r.ru_msgrcv), pos++);
+ silc_rng_xor(rng, (r.ru_nsignals << 16), pos++);
+ silc_rng_xor(rng, (r.ru_nvcsw + r.ru_nivcsw), pos++);
+ silc_rng_xor(rng, (r.ru_nvcsw ^ r.ru_nivcsw), pos++);
+#endif
+
+#ifdef SILC_RNG_DEBUG
+ SILC_LOG_HEXDUMP(("pool"), rng->pool, sizeof(rng->pool));
+#endif