+#define URANDOM "/dev/urandom"
+
+int get_urandom(Tcl_Interp *ip, Byte *buffer, int l) {
+ static FILE *urandom;
+
+ int r, esave;
+
+ if (!urandom) {
+ urandom= fopen(URANDOM,"rb");
+ if (!urandom) return posixerr(ip,errno,"open " URANDOM);
+ }
+ r= fread(buffer,1,l,urandom);
+ if (r==l) return 0;
+
+ esave= errno;
+ fclose(urandom); urandom=0;
+
+ if (ferror(urandom)) {
+ return posixerr(ip,errno,"read " URANDOM);
+ } else {
+ assert(feof(urandom));
+ return staticerr(ip, URANDOM " gave eof!");
+ }
+}
+